Author: spetreolle Date: Mon Apr 9 18:32:53 2007 New Revision: 26298
URL: http://svn.reactos.org/svn/reactos?rev=26298&view=rev Log: make french accents display correctly, patch by Pierre Schweitzer see issue #1919
Modified: trunk/reactos/dll/keyboard/kbdfr/kbdfr.c
Modified: trunk/reactos/dll/keyboard/kbdfr/kbdfr.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/keyboard/kbdfr/kbdfr.c?... ============================================================================== --- trunk/reactos/dll/keyboard/kbdfr/kbdfr.c (original) +++ trunk/reactos/dll/keyboard/kbdfr/kbdfr.c Mon Apr 9 18:32:53 2007 @@ -3,6 +3,7 @@ * Copyright (C) 2003 ReactOS * License: LGPL, see: LGPL.txt * autor: Jean-Michel Gay 2003 + * Pierre Schweitzer 2007 * */
@@ -30,6 +31,11 @@ #define KNUMP 0x800 /* Number-pad */ #define KNUMS 0xc00 /* Special + number pad */ #define KMEXT 0x300 /* Multi + ext */ + +/** + * FIXME : - VK_DIVIDE produces ! instead of / + * - VK_SNAPSHOT produces * + */
ROSDATA USHORT scancode_to_vk[] = { /* Numbers Row */ @@ -106,22 +112,44 @@ };
ROSDATA VSC_VK extcode0_to_vk[] = { - // FIXME:m qu'est ce que c'est ? - // What is this? -#if 0 - { 'G', '$' }, - { 'H', '&' }, - //{ 'I', '!' }, - { 'K', '%' }, - { 'M', ''' }, - { 'O', '#' }, - { 'P', '(' }, - { 'Q', '"' }, - { 'R', '-' }, - { '_', '_' }, - { '[', '[' }, - { ']', ']' }, -#endif + { 0x10, VK_MEDIA_PREV_TRACK | KEXT }, + { 0x19, VK_MEDIA_NEXT_TRACK | KEXT }, + { 0x1D, VK_RCONTROL | KEXT }, + { 0x20, VK_VOLUME_MUTE | KEXT }, + { 0x21, VK_LAUNCH_APP2 | KEXT }, + { 0x22, VK_MEDIA_PLAY_PAUSE | KEXT }, + { 0x24, VK_MEDIA_STOP | KEXT }, + { 0x2E, VK_VOLUME_DOWN | KEXT }, + { 0x30, VK_VOLUME_UP | KEXT }, + { 0x32, VK_BROWSER_HOME | KEXT }, + { 0x35, VK_DIVIDE | KEXT }, + { 0x37, VK_SNAPSHOT | KEXT }, + { 0x38, VK_RMENU | KEXT }, + { 0x47, VK_HOME | KEXT }, + { 0x48, VK_UP | KEXT }, + { 0x49, VK_PRIOR | KEXT }, + { 0x4B, VK_LEFT | KEXT }, + { 0x4D, VK_RIGHT | KEXT }, + { 0x4F, VK_END | KEXT }, + { 0x50, VK_DOWN | KEXT }, + { 0x51, VK_NEXT | KEXT }, + { 0x52, VK_INSERT | KEXT }, + { 0x53, VK_DELETE | KEXT }, + { 0x5B, VK_LWIN | KEXT }, + { 0x5C, VK_RWIN | KEXT }, + { 0x5D, VK_APPS | KEXT }, + { 0x5F, VK_SLEEP | KEXT }, + { 0x65, VK_BROWSER_SEARCH | KEXT }, + { 0x66, VK_BROWSER_FAVORITES | KEXT }, + { 0x67, VK_BROWSER_REFRESH | KEXT }, + { 0x68, VK_BROWSER_STOP | KEXT }, + { 0x69, VK_BROWSER_FORWARD | KEXT }, + { 0x6A, VK_BROWSER_BACK | KEXT }, + { 0x6B, VK_LAUNCH_APP1 | KEXT }, + { 0x6C, VK_LAUNCH_MAIL | KEXT }, + { 0x6D, VK_LAUNCH_MEDIA_SELECT | KEXT }, + { 0x1C, VK_RETURN | KEXT }, + { 0x46, VK_CANCEL | KEXT }, { 0, 0 }, };
@@ -151,35 +179,22 @@ /* Normal vs Shifted */ /* The numbers */ { '1', NOCAPS, {'&', '1'} }, - //{ '2', NOCAPS, {'é', '2'} }, - /* Ctrl-2 generates NUL */ - //{ '3', NOCAPS, {'"', '3'} }, - //{ '4', NOCAPS, {''', '4'} }, - //{ '5', NOCAPS, {'(', '5'} }, - //{ '6', NOCAPS, {'-', '6'} }, - /* Ctrl-6 generates RS */ - //{ '7', NOCAPS, {'è', '7'} }, - //{ '8', NOCAPS, {'_', '8'} }, - //{ '9', NOCAPS, {'ç', '9'} }, - //{ '0', NOCAPS, {'à', '0'} }, - /* Specials */ /* Ctrl-_ generates US */ - //{ VK_OEM_1 ,NOCAPS, {'$', '£'} }, - { VK_OEM_5 ,NOCAPS, {'*','µ'} }, - { VK_OEM_3 ,NOCAPS, {'ù', '%'} }, + { VK_OEM_5 ,NOCAPS, {'*',0xb5} }, /* */ + { VK_OEM_3 ,NOCAPS, {0xf9, '%'} }, /* ù */ { VK_OEM_COMMA ,NOCAPS, {',', '?'} }, { VK_OEM_PERIOD ,NOCAPS, {';', '.'} }, { VK_OEM_2 ,NOCAPS, {':', '/'} }, - { VK_OEM_8 ,NOCAPS, {'!', '§'} }, + { VK_OEM_8 ,NOCAPS, {'!', 0xa7} }, /* § */ /* Keys that do not have shift states */ - { VK_TAB ,NOCAPS, {'\t','\t'} }, - { VK_ADD ,NOCAPS, {'+', '+'} }, - { VK_SUBTRACT,NOCAPS, {'-', '-'} }, - { VK_MULTIPLY,NOCAPS, {'*', '*'} }, - { VK_DIVIDE ,NOCAPS, {'/', '/'} }, - { VK_ESCAPE ,NOCAPS, {'\x1b','\x1b'} }, - { VK_SPACE ,NOCAPS, {' ', ' '} }, + { VK_TAB ,NOCAPS, {'\t','\t'} }, + { VK_ADD ,NOCAPS, {'+', '+'} }, + { VK_SUBTRACT ,NOCAPS, {'-', '-'} }, + { VK_MULTIPLY ,NOCAPS, {'*', '*'} }, + { VK_DIVIDE ,NOCAPS, {'/', '/'} }, + { VK_ESCAPE ,NOCAPS, {'\x1b','\x1b'} }, + { VK_SPACE ,NOCAPS, {' ', ' '} }, { 0, 0 } };
@@ -216,26 +231,26 @@ /* Legacy (telnet-style) ascii escapes */ { VK_OEM_102, 0, {'<', '>', 0x1c /* FS */} }, { VK_OEM_6, 0, {WCH_DEAD, WCH_DEAD, WCH_NONE} }, - { VK_EMPTY, 0, {'^', '¨', WCH_NONE} }, //OEM 6 DEAD - { VK_OEM_7, 0, {'²','|', 0x1c /* FS */} }, + { VK_EMPTY, 0, {'^', 0xa8, WCH_NONE} }, //OEM 6 DEAD ¨ + { VK_OEM_7, 0, {0xb2,0xb3, 0x1c /* FS */} }, /* ², ³ */ { VK_RETURN, 0, {'\r', '\r', '\n'} }, { 0,0 } };
ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = { /* Normal, shifted, control, Alt+Gr */ - { '2' , 1, {'é', '2', WCH_NONE, WCH_DEAD} }, - { VK_EMPTY, 0, {WCH_NONE, WCH_NONE, WCH_NONE, '~'} }, - { '3' , 0, {'"', '3', WCH_NONE, '#'} }, - { '4' , 0, {''', '4', WCH_NONE, '{'} }, - { '7' , 1, {'è', '7', WCH_NONE, WCH_DEAD} }, - { VK_EMPTY, 0, {WCH_NONE, WCH_NONE, WCH_NONE, '`'} }, - { '9' , 1, {'ç', '9', WCH_NONE, '^'} }, - { '0' , 1, {'à', '0', WCH_NONE, '@'} }, - { VK_OEM_PLUS,0, {'=', '+', WCH_NONE, '}'} }, - { 'E' , 1, {'e', 'E', 0x05, '' /* euro */} }, - { VK_OEM_1, 0, {'$', '£', WCH_NONE, '¤'} }, - { VK_OEM_4, 0, {')', '°', WCH_NONE, ']'} }, + { '2' , CAPS, {0xe9, '2', WCH_NONE, WCH_DEAD} }, + { VK_EMPTY, NOCAPS, {WCH_NONE, WCH_NONE, WCH_NONE, '~'} }, + { '3' , NOCAPS, {'"', '3', WCH_NONE, '#'} }, + { '4' , NOCAPS, {''', '4', WCH_NONE, '{'} }, + { '7' , CAPS, {0xe8, '7', WCH_NONE, WCH_DEAD} }, + { VK_EMPTY, NOCAPS, {WCH_NONE, WCH_NONE, WCH_NONE, '`'} }, + { '9' , CAPS, {0xe7, '9', WCH_NONE, '^'} }, /* ç */ + { '0' , CAPS, {0xe0, '0', WCH_NONE, '@'} }, /* à */ + { VK_OEM_PLUS,NOCAPS, {'=', '+', WCH_NONE, '}'} }, + { 'E' , CAPS, {'e', 'E', 0x05, 0x20ac } }, /* */ + { VK_OEM_1, NOCAPS, {0x24, 0xa3, WCH_NONE, 0xa4} }, /* $, £, ¤ */ + { VK_OEM_4, NOCAPS, {')', 0xb0, WCH_NONE, ']'} }, /* ° */ { 0, 0 } };
@@ -282,27 +297,61 @@ #define DEADTRANS(ch, accent, comp, flags) MAKELONG(ch, accent), comp, flags ROSDATA DEADKEY deadkey[] = { - { DEADTRANS(0x0061, 0x00A8, 0x00E4, 0x0000) }, - { DEADTRANS(0x0065, 0x00A8, 0x00EB, 0x0000) }, - { DEADTRANS(0x0069, 0x00A8, 0x00EF, 0x0000) }, - { DEADTRANS(0x006F, 0x00A8, 0x00F6, 0x0000) }, - { DEADTRANS(0x0075, 0x00A8, 0x00FC, 0x0000) }, - { DEADTRANS(0x0020, 0x00A8, 0x00A8, 0x0000) }, - { DEADTRANS(0x0061, 0x005E, 0x00E2, 0x0000) }, - { DEADTRANS(0x005E, 0x0065, 0x00EA, 0x0000) }, - { DEADTRANS(0x0069, 0x005E, 0x00EE, 0x0000) }, - { DEADTRANS(0x006F, 0x005E, 0x00F4, 0x0000) }, - { DEADTRANS(0x0075, 0x005E, 0x00FB, 0x0000) }, - { DEADTRANS(0x0020, 0x005E, 0x005E, 0x0000) }, - { DEADTRANS(0x0061, 0x0060, 0x00E0, 0x0000) }, - { DEADTRANS(0x0065, 0x0060, 0x00E8, 0x0000) }, - { DEADTRANS(0x0069, 0x0060, 0x00EC, 0x0000) }, - { DEADTRANS(0x006F, 0x0060, 0x00F2, 0x0000) }, - { DEADTRANS(0x0075, 0x0060, 0x00F9, 0x0000) }, - { DEADTRANS(0x0020, 0x0060, 0x0060, 0x0000) }, - { DEADTRANS(0x006E, 0x007E, 0x00F1, 0x0000) }, - { DEADTRANS(0x0020, 0x007E, 0x007E, 0x0000) }, - { 0, 0, 0} + //*´* + { DEADTRANS(L'a', 0xb4, 0xe1, 0x00) }, // á + { DEADTRANS(L'A', 0xb4, 0xc1, 0x00) }, // Á + { DEADTRANS(L'e', 0xb4, 0xe9, 0x00) }, // é + { DEADTRANS(L'E', 0xb4, 0xc9, 0x00) }, // É + { DEADTRANS(L'i', 0xb4, 0xeD, 0x00) }, // í + { DEADTRANS(L'I', 0xb4, 0xcD, 0x00) }, // Í + { DEADTRANS(L'o', 0xb4, 0xf3, 0x00) }, // ó + { DEADTRANS(L'O', 0xb4, 0xd3, 0x00) }, // Ó + { DEADTRANS(L'u', 0xb4, 0xfa, 0x00) }, // ú + { DEADTRANS(L'U', 0xb4, 0xda, 0x00) }, // Ú + { DEADTRANS(L'y', 0xb4, 0xfd, 0x00) }, // ý + { DEADTRANS(L'Y', 0xb4, 0xdd, 0x00) }, // Ý + //*`* + { DEADTRANS(L'a', 0x60, 0xe0, 0x00) }, // à + { DEADTRANS(L'A', 0x60, 0xc0, 0x00) }, // À + { DEADTRANS(L'e', 0x60, 0xe8, 0x00) }, // è + { DEADTRANS(L'E', 0x60, 0xc8, 0x00) }, // È + { DEADTRANS(L'i', 0x60, 0xec, 0x00) }, // ì + { DEADTRANS(L'I', 0x60, 0xcc, 0x00) }, // Ì + { DEADTRANS(L'o', 0x60, 0xf2, 0x00) }, // ò + { DEADTRANS(L'O', 0x60, 0xd2, 0x00) }, // Ò + { DEADTRANS(L'u', 0x60, 0xf9, 0x00) }, // ù + { DEADTRANS(L'U', 0x60, 0xd9, 0x00) }, // Ù + //*^* + { DEADTRANS(L'a', 0x5e, 0xe2, 0x00) }, // â + { DEADTRANS(L'A', 0x5e, 0xd2, 0x00) }, // Â + { DEADTRANS(L'e', 0x5e, 0xea, 0x00) }, // ê + { DEADTRANS(L'E', 0x5e, 0xca, 0x00) }, // Ê + { DEADTRANS(L'i', 0x5e, 0xee, 0x00) }, // î + { DEADTRANS(L'I', 0x5e, 0xce, 0x00) }, // Î + { DEADTRANS(L'o', 0x5e, 0xf4, 0x00) }, // ô + { DEADTRANS(L'O', 0x5e, 0xd4, 0x00) }, // Ô + { DEADTRANS(L'u', 0x5e, 0xfb, 0x00) }, // û + { DEADTRANS(L'U', 0x5e, 0xdb, 0x00) }, // Û + //*¨* + { DEADTRANS(L'a', 0xa8, 0xe4, 0x00) }, // ä + { DEADTRANS(L'A', 0xa8, 0xc4, 0x00) }, // Ä + { DEADTRANS(L'e', 0xa8, 0xeb, 0x00) }, // ë + { DEADTRANS(L'E', 0xa8, 0xcb, 0x00) }, // Ë + { DEADTRANS(L'i', 0xa8, 0xef, 0x00) }, // ï + { DEADTRANS(L'I', 0xa8, 0xcf, 0x00) }, // Ï + { DEADTRANS(L'o', 0xa8, 0xf6, 0x00) }, // ö + { DEADTRANS(L'O', 0xa8, 0xd6, 0x00) }, // Ö + { DEADTRANS(L'u', 0xa8, 0xfc, 0x00) }, // ü + { DEADTRANS(L'U', 0xa8, 0xdc, 0x00) }, // Ü + { DEADTRANS(L'y', 0xa8, 0xff, 0x00) }, // ÿ + //*~* + { DEADTRANS(L'a', 0x7e, 0xe3, 0x00) }, // ã + { DEADTRANS(L'A', 0x7e, 0xc3, 0x00) }, // Ã + { DEADTRANS(L'n', 0x7e, 0xf1, 0x00) }, // ñ + { DEADTRANS(L'N', 0x7e, 0xd1, 0x00) }, // Ñ + { DEADTRANS(L'o', 0x7e, 0xf5, 0x00) }, // õ + { DEADTRANS(L'O', 0x7e, 0xd5, 0x00) }, // Õ + { 0, 0, 0} };
@@ -412,7 +461,7 @@
MAKELONG(0,1), /* Version 1.0 */
- /* Ligatures -- English doesn't have any */ + /* Ligatures -- French doesn't have any */ 0, 0, NULL