Ticket #9744: Keymap.cpp.patch

File Keymap.cpp.patch, 52.1 KB (added by greekboy, 11 years ago)
  • haiku/src/bin/keymap/Keymap.cpp

    old new  
    11/*
    2  * Copyright 2004-2012, Haiku, Inc. All Rights Reserved.
     2 * Copyright 2004-2013, Haiku, Inc. All Rights Reserved.
    33 * Distributed under the terms of the MIT License.
    44 *
    55 * Authors:
    66 *      Jérôme Duval
    77 *      Axel Dörfler, axeld@pinc-software.de.
    8  *      John Scipione, jscipione@gmail.com
     8 *      John Scipione, jscipione@gmail.com.
     9 *      Hristos Maretsikos, chrisgrelec@sch.gr.
    910 */
    1011
    1112
    const char keyPattern[] = "Key[[:space:]  
    7273
    7374const char acutePattern[] = "Acute[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
    7475    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     76const char acutesmoothPattern[] = "AcuteSmooth[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     77    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     78const char acuteroughPattern[] = "AcuteRough[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     79    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     80const char acutediaeresisPattern[] = "AcuteDiaeresis[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     81    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     82const char acutesubscriptPattern[] = "AcuteSubscript[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     83    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     84const char acutesmoothsubscriptPattern[] = "AcuteSmoothSubscript[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     85    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     86const char acuteroughsubscriptPattern[] = "AcuteRoughSubscript[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     87    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
    7588const char gravePattern[] = "Grave[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
    7689    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     90const char gravesmoothPattern[] = "GraveSmooth[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     91    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     92const char graveroughPattern[] = "GraveRough[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     93    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     94const char gravediaeresisPattern[] = "GraveDiaeresis[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     95    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     96const char gravesubscriptPattern[] = "GraveSubscript[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     97    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     98const char gravesmoothsubscriptPattern[] = "GraveSmoothSubscript[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     99    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     100const char graveroughsubscriptPattern[] = "GraveRoughSubscript[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     101    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     102const char smoothPattern[] = "Smooth[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     103    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     104const char smoothcircumflexPattern[] = "SmoothCircumflex[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     105    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     106const char smoothsubscriptPattern[] = "SmoothSubscript[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     107    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     108const char smoothcircumflexsubscriptPattern[] = "SmoothCircumflexSubscript[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     109    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     110const char roughPattern[] = "Rough[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     111    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     112const char roughcircumflexPattern[] = "RoughCircumflex[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     113    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     114const char roughsubscriptPattern[] = "RoughSubscript[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     115    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     116const char roughcircumflexsubscriptPattern[] = "RoughCircumflexSubscript[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     117    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
    77118const char circumflexPattern[] = "Circumflex[[:space:]]+\\([[:alnum:]]"
    78119    "+\\|'.*'\\)[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     120const char circumflexdiaeresisPattern[] = "CircumflexDiaeresis[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     121    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     122const char circumflexsubscriptPattern[] = "CircumflexSubscript[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     123    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
    79124const char diaeresisPattern[] = "Diaeresis[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
    80125    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     126const char diaeresisaccentPattern[] = "DiaeresisAccent[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     127    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
    81128const char tildePattern[] = "Tilde[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
    82129    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     130const char accentPattern[] = "Accent[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     131    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     132const char macronPattern[] = "Macron[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     133    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     134const char brevePattern[] = "Breve[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     135    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
     136const char subscriptPattern[] = "Subscript[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)"
     137    "[[:space:]]+=[[:space:]]+\\([[:alnum:]]+\\|'.*'\\)[[:space:]]+";
    83138const char acutetabPattern[] = "AcuteTab[[:space:]]+="
    84139    "[[:space:]]+\\([[:alnum:]-]*\\)"
    85140    "[[:space:]]*\\([[:alnum:]-]*\\)"
    const char acutetabPattern[] = "AcuteTab  
    90145    "[[:space:]]*\\([[:alnum:]-]*\\)"
    91146    "[[:space:]]*\\([[:alnum:]-]*\\)"
    92147    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     148const char acutesmoothtabPattern[] = "AcuteSmoothTab[[:space:]]+="
     149    "[[:space:]]+\\([[:alnum:]-]*\\)"
     150    "[[:space:]]*\\([[:alnum:]-]*\\)"
     151    "[[:space:]]*\\([[:alnum:]-]*\\)"
     152    "[[:space:]]*\\([[:alnum:]-]*\\)"
     153    "[[:space:]]*\\([[:alnum:]-]*\\)"
     154    "[[:space:]]*\\([[:alnum:]-]*\\)"
     155    "[[:space:]]*\\([[:alnum:]-]*\\)"
     156    "[[:space:]]*\\([[:alnum:]-]*\\)"
     157    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     158const char acuteroughtabPattern[] = "AcuteRoughTab[[:space:]]+="
     159    "[[:space:]]+\\([[:alnum:]-]*\\)"
     160    "[[:space:]]*\\([[:alnum:]-]*\\)"
     161    "[[:space:]]*\\([[:alnum:]-]*\\)"
     162    "[[:space:]]*\\([[:alnum:]-]*\\)"
     163    "[[:space:]]*\\([[:alnum:]-]*\\)"
     164    "[[:space:]]*\\([[:alnum:]-]*\\)"
     165    "[[:space:]]*\\([[:alnum:]-]*\\)"
     166    "[[:space:]]*\\([[:alnum:]-]*\\)"
     167    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     168const char acutediaeresistabPattern[] = "AcuteDiaeresisTab[[:space:]]+="
     169    "[[:space:]]+\\([[:alnum:]-]*\\)"
     170    "[[:space:]]*\\([[:alnum:]-]*\\)"
     171    "[[:space:]]*\\([[:alnum:]-]*\\)"
     172    "[[:space:]]*\\([[:alnum:]-]*\\)"
     173    "[[:space:]]*\\([[:alnum:]-]*\\)"
     174    "[[:space:]]*\\([[:alnum:]-]*\\)"
     175    "[[:space:]]*\\([[:alnum:]-]*\\)"
     176    "[[:space:]]*\\([[:alnum:]-]*\\)"
     177    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     178const char acutesubscripttabPattern[] = "AcuteSubscriptTab[[:space:]]+="
     179    "[[:space:]]+\\([[:alnum:]-]*\\)"
     180    "[[:space:]]*\\([[:alnum:]-]*\\)"
     181    "[[:space:]]*\\([[:alnum:]-]*\\)"
     182    "[[:space:]]*\\([[:alnum:]-]*\\)"
     183    "[[:space:]]*\\([[:alnum:]-]*\\)"
     184    "[[:space:]]*\\([[:alnum:]-]*\\)"
     185    "[[:space:]]*\\([[:alnum:]-]*\\)"
     186    "[[:space:]]*\\([[:alnum:]-]*\\)"
     187    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     188const char acutesmoothsubscripttabPattern[] = "AcuteSmoothSubscriptTab[[:space:]]+="
     189    "[[:space:]]+\\([[:alnum:]-]*\\)"
     190    "[[:space:]]*\\([[:alnum:]-]*\\)"
     191    "[[:space:]]*\\([[:alnum:]-]*\\)"
     192    "[[:space:]]*\\([[:alnum:]-]*\\)"
     193    "[[:space:]]*\\([[:alnum:]-]*\\)"
     194    "[[:space:]]*\\([[:alnum:]-]*\\)"
     195    "[[:space:]]*\\([[:alnum:]-]*\\)"
     196    "[[:space:]]*\\([[:alnum:]-]*\\)"
     197    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     198const char acuteroughsubscripttabPattern[] = "AcuteRoughSubscriptTab[[:space:]]+="
     199    "[[:space:]]+\\([[:alnum:]-]*\\)"
     200    "[[:space:]]*\\([[:alnum:]-]*\\)"
     201    "[[:space:]]*\\([[:alnum:]-]*\\)"
     202    "[[:space:]]*\\([[:alnum:]-]*\\)"
     203    "[[:space:]]*\\([[:alnum:]-]*\\)"
     204    "[[:space:]]*\\([[:alnum:]-]*\\)"
     205    "[[:space:]]*\\([[:alnum:]-]*\\)"
     206    "[[:space:]]*\\([[:alnum:]-]*\\)"
     207    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
    93208const char gravetabPattern[] = "GraveTab[[:space:]]+="
    94209    "[[:space:]]+\\([[:alnum:]-]*\\)"
    95210    "[[:space:]]*\\([[:alnum:]-]*\\)"
    const char gravetabPattern[] = "GraveTab  
    100215    "[[:space:]]*\\([[:alnum:]-]*\\)"
    101216    "[[:space:]]*\\([[:alnum:]-]*\\)"
    102217    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     218const char gravesmoothtabPattern[] = "GraveSmoothTab[[:space:]]+="
     219    "[[:space:]]+\\([[:alnum:]-]*\\)"
     220    "[[:space:]]*\\([[:alnum:]-]*\\)"
     221    "[[:space:]]*\\([[:alnum:]-]*\\)"
     222    "[[:space:]]*\\([[:alnum:]-]*\\)"
     223    "[[:space:]]*\\([[:alnum:]-]*\\)"
     224    "[[:space:]]*\\([[:alnum:]-]*\\)"
     225    "[[:space:]]*\\([[:alnum:]-]*\\)"
     226    "[[:space:]]*\\([[:alnum:]-]*\\)"
     227    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     228const char graveroughtabPattern[] = "GraveRoughTab[[:space:]]+="
     229    "[[:space:]]+\\([[:alnum:]-]*\\)"
     230    "[[:space:]]*\\([[:alnum:]-]*\\)"
     231    "[[:space:]]*\\([[:alnum:]-]*\\)"
     232    "[[:space:]]*\\([[:alnum:]-]*\\)"
     233    "[[:space:]]*\\([[:alnum:]-]*\\)"
     234    "[[:space:]]*\\([[:alnum:]-]*\\)"
     235    "[[:space:]]*\\([[:alnum:]-]*\\)"
     236    "[[:space:]]*\\([[:alnum:]-]*\\)"
     237    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     238const char gravediaeresistabPattern[] = "GraveDiaeresisTab[[:space:]]+="
     239    "[[:space:]]+\\([[:alnum:]-]*\\)"
     240    "[[:space:]]*\\([[:alnum:]-]*\\)"
     241    "[[:space:]]*\\([[:alnum:]-]*\\)"
     242    "[[:space:]]*\\([[:alnum:]-]*\\)"
     243    "[[:space:]]*\\([[:alnum:]-]*\\)"
     244    "[[:space:]]*\\([[:alnum:]-]*\\)"
     245    "[[:space:]]*\\([[:alnum:]-]*\\)"
     246    "[[:space:]]*\\([[:alnum:]-]*\\)"
     247    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     248const char gravesubscripttabPattern[] = "GraveSubscriptTab[[:space:]]+="
     249    "[[:space:]]+\\([[:alnum:]-]*\\)"
     250    "[[:space:]]*\\([[:alnum:]-]*\\)"
     251    "[[:space:]]*\\([[:alnum:]-]*\\)"
     252    "[[:space:]]*\\([[:alnum:]-]*\\)"
     253    "[[:space:]]*\\([[:alnum:]-]*\\)"
     254    "[[:space:]]*\\([[:alnum:]-]*\\)"
     255    "[[:space:]]*\\([[:alnum:]-]*\\)"
     256    "[[:space:]]*\\([[:alnum:]-]*\\)"
     257    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     258const char gravesmoothsubscripttabPattern[] = "GraveSmoothSubscriptTab[[:space:]]+="
     259    "[[:space:]]+\\([[:alnum:]-]*\\)"
     260    "[[:space:]]*\\([[:alnum:]-]*\\)"
     261    "[[:space:]]*\\([[:alnum:]-]*\\)"
     262    "[[:space:]]*\\([[:alnum:]-]*\\)"
     263    "[[:space:]]*\\([[:alnum:]-]*\\)"
     264    "[[:space:]]*\\([[:alnum:]-]*\\)"
     265    "[[:space:]]*\\([[:alnum:]-]*\\)"
     266    "[[:space:]]*\\([[:alnum:]-]*\\)"
     267    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     268const char graveroughsubscripttabPattern[] = "GraveRoughSubscriptTab[[:space:]]+="
     269    "[[:space:]]+\\([[:alnum:]-]*\\)"
     270    "[[:space:]]*\\([[:alnum:]-]*\\)"
     271    "[[:space:]]*\\([[:alnum:]-]*\\)"
     272    "[[:space:]]*\\([[:alnum:]-]*\\)"
     273    "[[:space:]]*\\([[:alnum:]-]*\\)"
     274    "[[:space:]]*\\([[:alnum:]-]*\\)"
     275    "[[:space:]]*\\([[:alnum:]-]*\\)"
     276    "[[:space:]]*\\([[:alnum:]-]*\\)"
     277    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     278const char smoothtabPattern[] = "SmoothTab[[:space:]]+="
     279    "[[:space:]]+\\([[:alnum:]-]*\\)"
     280    "[[:space:]]*\\([[:alnum:]-]*\\)"
     281    "[[:space:]]*\\([[:alnum:]-]*\\)"
     282    "[[:space:]]*\\([[:alnum:]-]*\\)"
     283    "[[:space:]]*\\([[:alnum:]-]*\\)"
     284    "[[:space:]]*\\([[:alnum:]-]*\\)"
     285    "[[:space:]]*\\([[:alnum:]-]*\\)"
     286    "[[:space:]]*\\([[:alnum:]-]*\\)"
     287    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     288const char smoothcircumflextabPattern[] = "SmoothCircumflexTab[[:space:]]+="
     289    "[[:space:]]+\\([[:alnum:]-]*\\)"
     290    "[[:space:]]*\\([[:alnum:]-]*\\)"
     291    "[[:space:]]*\\([[:alnum:]-]*\\)"
     292    "[[:space:]]*\\([[:alnum:]-]*\\)"
     293    "[[:space:]]*\\([[:alnum:]-]*\\)"
     294    "[[:space:]]*\\([[:alnum:]-]*\\)"
     295    "[[:space:]]*\\([[:alnum:]-]*\\)"
     296    "[[:space:]]*\\([[:alnum:]-]*\\)"
     297    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     298const char smoothsubscripttabPattern[] = "SmoothSubscriptTab[[:space:]]+="
     299    "[[:space:]]+\\([[:alnum:]-]*\\)"
     300    "[[:space:]]*\\([[:alnum:]-]*\\)"
     301    "[[:space:]]*\\([[:alnum:]-]*\\)"
     302    "[[:space:]]*\\([[:alnum:]-]*\\)"
     303    "[[:space:]]*\\([[:alnum:]-]*\\)"
     304    "[[:space:]]*\\([[:alnum:]-]*\\)"
     305    "[[:space:]]*\\([[:alnum:]-]*\\)"
     306    "[[:space:]]*\\([[:alnum:]-]*\\)"
     307    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     308const char smoothcircumflexsubscripttabPattern[] = "SmoothCircumflexSubscriptTab[[:space:]]+="
     309    "[[:space:]]+\\([[:alnum:]-]*\\)"
     310    "[[:space:]]*\\([[:alnum:]-]*\\)"
     311    "[[:space:]]*\\([[:alnum:]-]*\\)"
     312    "[[:space:]]*\\([[:alnum:]-]*\\)"
     313    "[[:space:]]*\\([[:alnum:]-]*\\)"
     314    "[[:space:]]*\\([[:alnum:]-]*\\)"
     315    "[[:space:]]*\\([[:alnum:]-]*\\)"
     316    "[[:space:]]*\\([[:alnum:]-]*\\)"
     317    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     318const char roughtabPattern[] = "RoughTab[[:space:]]+="
     319    "[[:space:]]+\\([[:alnum:]-]*\\)"
     320    "[[:space:]]*\\([[:alnum:]-]*\\)"
     321    "[[:space:]]*\\([[:alnum:]-]*\\)"
     322    "[[:space:]]*\\([[:alnum:]-]*\\)"
     323    "[[:space:]]*\\([[:alnum:]-]*\\)"
     324    "[[:space:]]*\\([[:alnum:]-]*\\)"
     325    "[[:space:]]*\\([[:alnum:]-]*\\)"
     326    "[[:space:]]*\\([[:alnum:]-]*\\)"
     327    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     328const char roughcircumflextabPattern[] = "RoughCircumflexTab[[:space:]]+="
     329    "[[:space:]]+\\([[:alnum:]-]*\\)"
     330    "[[:space:]]*\\([[:alnum:]-]*\\)"
     331    "[[:space:]]*\\([[:alnum:]-]*\\)"
     332    "[[:space:]]*\\([[:alnum:]-]*\\)"
     333    "[[:space:]]*\\([[:alnum:]-]*\\)"
     334    "[[:space:]]*\\([[:alnum:]-]*\\)"
     335    "[[:space:]]*\\([[:alnum:]-]*\\)"
     336    "[[:space:]]*\\([[:alnum:]-]*\\)"
     337    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     338const char roughsubscripttabPattern[] = "RoughSubscriptTab[[:space:]]+="
     339    "[[:space:]]+\\([[:alnum:]-]*\\)"
     340    "[[:space:]]*\\([[:alnum:]-]*\\)"
     341    "[[:space:]]*\\([[:alnum:]-]*\\)"
     342    "[[:space:]]*\\([[:alnum:]-]*\\)"
     343    "[[:space:]]*\\([[:alnum:]-]*\\)"
     344    "[[:space:]]*\\([[:alnum:]-]*\\)"
     345    "[[:space:]]*\\([[:alnum:]-]*\\)"
     346    "[[:space:]]*\\([[:alnum:]-]*\\)"
     347    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     348const char roughcircumflexsubscripttabPattern[] = "RoughCircumflexSubscriptTab[[:space:]]+="
     349    "[[:space:]]+\\([[:alnum:]-]*\\)"
     350    "[[:space:]]*\\([[:alnum:]-]*\\)"
     351    "[[:space:]]*\\([[:alnum:]-]*\\)"
     352    "[[:space:]]*\\([[:alnum:]-]*\\)"
     353    "[[:space:]]*\\([[:alnum:]-]*\\)"
     354    "[[:space:]]*\\([[:alnum:]-]*\\)"
     355    "[[:space:]]*\\([[:alnum:]-]*\\)"
     356    "[[:space:]]*\\([[:alnum:]-]*\\)"
     357    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
    103358const char circumflextabPattern[] = "CircumflexTab[[:space:]]+="
    104359    "[[:space:]]+\\([[:alnum:]-]*\\)"
    105360    "[[:space:]]*\\([[:alnum:]-]*\\)"
    const char circumflextabPattern[] = "Cir  
    110365    "[[:space:]]*\\([[:alnum:]-]*\\)"
    111366    "[[:space:]]*\\([[:alnum:]-]*\\)"
    112367    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     368const char circumflexdiaeresistabPattern[] = "CircumflexDiaeresisTab[[:space:]]+="
     369    "[[:space:]]+\\([[:alnum:]-]*\\)"
     370    "[[:space:]]*\\([[:alnum:]-]*\\)"
     371    "[[:space:]]*\\([[:alnum:]-]*\\)"
     372    "[[:space:]]*\\([[:alnum:]-]*\\)"
     373    "[[:space:]]*\\([[:alnum:]-]*\\)"
     374    "[[:space:]]*\\([[:alnum:]-]*\\)"
     375    "[[:space:]]*\\([[:alnum:]-]*\\)"
     376    "[[:space:]]*\\([[:alnum:]-]*\\)"
     377    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     378const char circumflexsubscripttabPattern[] = "CircumflexSubscriptTab[[:space:]]+="
     379    "[[:space:]]+\\([[:alnum:]-]*\\)"
     380    "[[:space:]]*\\([[:alnum:]-]*\\)"
     381    "[[:space:]]*\\([[:alnum:]-]*\\)"
     382    "[[:space:]]*\\([[:alnum:]-]*\\)"
     383    "[[:space:]]*\\([[:alnum:]-]*\\)"
     384    "[[:space:]]*\\([[:alnum:]-]*\\)"
     385    "[[:space:]]*\\([[:alnum:]-]*\\)"
     386    "[[:space:]]*\\([[:alnum:]-]*\\)"
     387    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
    113388const char diaeresistabPattern[] = "DiaeresisTab[[:space:]]+="
    114389    "[[:space:]]+\\([[:alnum:]-]*\\)"
    115390    "[[:space:]]*\\([[:alnum:]-]*\\)"
    const char diaeresistabPattern[] = "Diae  
    120395    "[[:space:]]*\\([[:alnum:]-]*\\)"
    121396    "[[:space:]]*\\([[:alnum:]-]*\\)"
    122397    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     398const char diaeresisaccenttabPattern[] = "DiaeresisAccentTab[[:space:]]+="
     399    "[[:space:]]+\\([[:alnum:]-]*\\)"
     400    "[[:space:]]*\\([[:alnum:]-]*\\)"
     401    "[[:space:]]*\\([[:alnum:]-]*\\)"
     402    "[[:space:]]*\\([[:alnum:]-]*\\)"
     403    "[[:space:]]*\\([[:alnum:]-]*\\)"
     404    "[[:space:]]*\\([[:alnum:]-]*\\)"
     405    "[[:space:]]*\\([[:alnum:]-]*\\)"
     406    "[[:space:]]*\\([[:alnum:]-]*\\)"
     407    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
    123408const char tildetabPattern[] = "TildeTab[[:space:]]+="
    124409    "[[:space:]]+\\([[:alnum:]-]*\\)"
    125410    "[[:space:]]*\\([[:alnum:]-]*\\)"
    const char tildetabPattern[] = "TildeTab  
    130415    "[[:space:]]*\\([[:alnum:]-]*\\)"
    131416    "[[:space:]]*\\([[:alnum:]-]*\\)"
    132417    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     418const char accenttabPattern[] = "AccentTab[[:space:]]+="
     419    "[[:space:]]+\\([[:alnum:]-]*\\)"
     420    "[[:space:]]*\\([[:alnum:]-]*\\)"
     421    "[[:space:]]*\\([[:alnum:]-]*\\)"
     422    "[[:space:]]*\\([[:alnum:]-]*\\)"
     423    "[[:space:]]*\\([[:alnum:]-]*\\)"
     424    "[[:space:]]*\\([[:alnum:]-]*\\)"
     425    "[[:space:]]*\\([[:alnum:]-]*\\)"
     426    "[[:space:]]*\\([[:alnum:]-]*\\)"
     427    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     428const char macrontabPattern[] = "MacronTab[[:space:]]+="
     429    "[[:space:]]+\\([[:alnum:]-]*\\)"
     430    "[[:space:]]*\\([[:alnum:]-]*\\)"
     431    "[[:space:]]*\\([[:alnum:]-]*\\)"
     432    "[[:space:]]*\\([[:alnum:]-]*\\)"
     433    "[[:space:]]*\\([[:alnum:]-]*\\)"
     434    "[[:space:]]*\\([[:alnum:]-]*\\)"
     435    "[[:space:]]*\\([[:alnum:]-]*\\)"
     436    "[[:space:]]*\\([[:alnum:]-]*\\)"
     437    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     438const char brevetabPattern[] = "BreveTab[[:space:]]+="
     439    "[[:space:]]+\\([[:alnum:]-]*\\)"
     440    "[[:space:]]*\\([[:alnum:]-]*\\)"
     441    "[[:space:]]*\\([[:alnum:]-]*\\)"
     442    "[[:space:]]*\\([[:alnum:]-]*\\)"
     443    "[[:space:]]*\\([[:alnum:]-]*\\)"
     444    "[[:space:]]*\\([[:alnum:]-]*\\)"
     445    "[[:space:]]*\\([[:alnum:]-]*\\)"
     446    "[[:space:]]*\\([[:alnum:]-]*\\)"
     447    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
     448const char subscripttabPattern[] = "SubscriptTab[[:space:]]+="
     449    "[[:space:]]+\\([[:alnum:]-]*\\)"
     450    "[[:space:]]*\\([[:alnum:]-]*\\)"
     451    "[[:space:]]*\\([[:alnum:]-]*\\)"
     452    "[[:space:]]*\\([[:alnum:]-]*\\)"
     453    "[[:space:]]*\\([[:alnum:]-]*\\)"
     454    "[[:space:]]*\\([[:alnum:]-]*\\)"
     455    "[[:space:]]*\\([[:alnum:]-]*\\)"
     456    "[[:space:]]*\\([[:alnum:]-]*\\)"
     457    "[[:space:]]*\\([[:alnum:]-]*\\)[[:space:]]*" ;
    133458
    134459
    135460// re_pattern_buffer buffers
    struct re_pattern_buffer menuBuf;  
    149474struct re_pattern_buffer locksettingsBuf;
    150475struct re_pattern_buffer keyBuf;
    151476struct re_pattern_buffer acuteBuf;
     477struct re_pattern_buffer acutesmoothBuf;
     478struct re_pattern_buffer acuteroughBuf;
     479struct re_pattern_buffer acutediaeresisBuf;
     480struct re_pattern_buffer acutesubscriptBuf;
     481struct re_pattern_buffer acutesmoothsubscriptBuf;
     482struct re_pattern_buffer acuteroughsubscriptBuf;
    152483struct re_pattern_buffer graveBuf;
     484struct re_pattern_buffer gravesmoothBuf;
     485struct re_pattern_buffer graveroughBuf;
     486struct re_pattern_buffer gravediaeresisBuf;
     487struct re_pattern_buffer gravesubscriptBuf;
     488struct re_pattern_buffer gravesmoothsubscriptBuf;
     489struct re_pattern_buffer graveroughsubscriptBuf;
     490struct re_pattern_buffer smoothBuf;
     491struct re_pattern_buffer smoothcircumflexBuf;
     492struct re_pattern_buffer smoothsubscriptBuf;
     493struct re_pattern_buffer smoothcircumflexsubscriptBuf;
     494struct re_pattern_buffer roughBuf;
     495struct re_pattern_buffer roughcircumflexBuf;
     496struct re_pattern_buffer roughsubscriptBuf;
     497struct re_pattern_buffer roughcircumflexsubscriptBuf;
    153498struct re_pattern_buffer circumflexBuf;
     499struct re_pattern_buffer circumflexdiaeresisBuf;
     500struct re_pattern_buffer circumflexsubscriptBuf;
    154501struct re_pattern_buffer diaeresisBuf;
     502struct re_pattern_buffer diaeresisaccentBuf;
    155503struct re_pattern_buffer tildeBuf;
     504struct re_pattern_buffer accentBuf;
     505struct re_pattern_buffer macronBuf;
     506struct re_pattern_buffer breveBuf;
     507struct re_pattern_buffer subscriptBuf;
    156508struct re_pattern_buffer acutetabBuf;
     509struct re_pattern_buffer acutesmoothtabBuf;
     510struct re_pattern_buffer acuteroughtabBuf;
     511struct re_pattern_buffer acutediaeresistabBuf;
     512struct re_pattern_buffer acutesubscripttabBuf;
     513struct re_pattern_buffer acutesmoothsubscripttabBuf;
     514struct re_pattern_buffer acuteroughsubscripttabBuf;
    157515struct re_pattern_buffer gravetabBuf;
     516struct re_pattern_buffer gravesmoothtabBuf;
     517struct re_pattern_buffer graveroughtabBuf;
     518struct re_pattern_buffer gravediaeresistabBuf;
     519struct re_pattern_buffer gravesubscripttabBuf;
     520struct re_pattern_buffer gravesmoothsubscripttabBuf;
     521struct re_pattern_buffer graveroughsubscripttabBuf;
     522struct re_pattern_buffer smoothtabBuf;
     523struct re_pattern_buffer smoothcircumflextabBuf;
     524struct re_pattern_buffer smoothsubscripttabBuf;
     525struct re_pattern_buffer smoothcircumflexsubscripttabBuf;
     526struct re_pattern_buffer roughtabBuf;
     527struct re_pattern_buffer roughcircumflextabBuf;
     528struct re_pattern_buffer roughsubscripttabBuf;
     529struct re_pattern_buffer roughcircumflexsubscripttabBuf;
    158530struct re_pattern_buffer circumflextabBuf;
     531struct re_pattern_buffer circumflexdiaeresistabBuf;
     532struct re_pattern_buffer circumflexsubscripttabBuf;
    159533struct re_pattern_buffer diaeresistabBuf;
     534struct re_pattern_buffer diaeresisaccenttabBuf;
    160535struct re_pattern_buffer tildetabBuf;
     536struct re_pattern_buffer accenttabBuf;
     537struct re_pattern_buffer macrontabBuf;
     538struct re_pattern_buffer brevetabBuf;
     539struct re_pattern_buffer subscripttabBuf;
    161540
    162541
    163542void
    Keymap::LoadSource(FILE* file)  
    292671    error = re_compile_pattern(acutePattern, strlen(acutePattern), &acuteBuf);
    293672    if (error)
    294673        fputs(error, stderr);
     674    error = re_compile_pattern(acutesmoothPattern, strlen(acutesmoothPattern),
     675        &acutesmoothBuf);
     676    if (error)
     677        fputs(error, stderr);
     678    error = re_compile_pattern(acuteroughPattern, strlen(acuteroughPattern),
     679        &acuteroughBuf);
     680    if (error)
     681        fputs(error, stderr);
     682    error = re_compile_pattern(acutediaeresisPattern, strlen(acutediaeresisPattern),
     683        &acutediaeresisBuf);
     684    if (error)
     685        fputs(error, stderr);
     686    error = re_compile_pattern(acutesubscriptPattern, strlen(acutesubscriptPattern),
     687        &acutesubscriptBuf);
     688    if (error)
     689        fputs(error, stderr);
     690    error = re_compile_pattern(acutesmoothsubscriptPattern, strlen(acutesmoothsubscriptPattern),
     691        &acutesmoothsubscriptBuf);
     692    if (error)
     693        fputs(error, stderr);
     694    error = re_compile_pattern(acuteroughsubscriptPattern, strlen(acuteroughsubscriptPattern),
     695        &acuteroughsubscriptBuf);
     696    if (error)
     697        fputs(error, stderr);
    295698    error = re_compile_pattern(gravePattern, strlen(gravePattern), &graveBuf);
    296699    if (error)
    297700        fputs(error, stderr);
     701    error = re_compile_pattern(gravesmoothPattern, strlen(gravesmoothPattern),
     702        &gravesmoothBuf);
     703    if (error)
     704        fputs(error, stderr);
     705    error = re_compile_pattern(graveroughPattern, strlen(graveroughPattern),
     706        &graveroughBuf);
     707    if (error)
     708        fputs(error, stderr);
     709    error = re_compile_pattern(gravediaeresisPattern, strlen(gravediaeresisPattern),
     710        &gravediaeresisBuf);
     711    if (error)
     712        fputs(error, stderr);
     713    error = re_compile_pattern(gravesubscriptPattern, strlen(gravesubscriptPattern),
     714        &gravesubscriptBuf);
     715    if (error)
     716        fputs(error, stderr);
     717    error = re_compile_pattern(gravesmoothsubscriptPattern, strlen(gravesmoothsubscriptPattern),
     718        &gravesmoothsubscriptBuf);
     719    if (error)
     720        fputs(error, stderr);
     721    error = re_compile_pattern(graveroughsubscriptPattern, strlen(graveroughsubscriptPattern),
     722        &graveroughsubscriptBuf);
     723    if (error)
     724        fputs(error, stderr);
     725    error = re_compile_pattern(smoothPattern, strlen(smoothPattern),
     726        &smoothBuf);
     727    if (error)
     728        fputs(error, stderr);
     729    error = re_compile_pattern(smoothcircumflexPattern,
     730        strlen(smoothcircumflexPattern), &smoothcircumflexBuf);
     731    if (error)
     732        fputs(error, stderr);
     733    error = re_compile_pattern(smoothsubscriptPattern, strlen(smoothsubscriptPattern),
     734        &smoothsubscriptBuf);
     735    if (error)
     736        fputs(error, stderr);
     737    error = re_compile_pattern(smoothcircumflexsubscriptPattern, strlen(smoothcircumflexsubscriptPattern),
     738        &smoothcircumflexsubscriptBuf);
     739    if (error)
     740        fputs(error, stderr);
     741    error = re_compile_pattern(roughPattern, strlen(roughPattern), &roughBuf);
     742    if (error)
     743        fputs(error, stderr);
     744    error = re_compile_pattern(roughcircumflexPattern,
     745        strlen(roughcircumflexPattern), &roughcircumflexBuf);
     746    if (error)
     747        fputs(error, stderr);
     748    error = re_compile_pattern(roughsubscriptPattern, strlen(roughsubscriptPattern),
     749        &roughsubscriptBuf);
     750    if (error)
     751        fputs(error, stderr);
     752    error = re_compile_pattern(roughcircumflexsubscriptPattern, strlen(roughcircumflexsubscriptPattern),
     753        &roughcircumflexsubscriptBuf);
     754    if (error)
     755        fputs(error, stderr);
    298756    error = re_compile_pattern(circumflexPattern, strlen(circumflexPattern),
    299757        &circumflexBuf);
    300758    if (error)
    301759        fputs(error, stderr);
     760    error = re_compile_pattern(circumflexdiaeresisPattern, strlen(circumflexdiaeresisPattern),
     761        &circumflexdiaeresisBuf);
     762    if (error)
     763        fputs(error, stderr);
     764    error = re_compile_pattern(circumflexsubscriptPattern, strlen(circumflexsubscriptPattern),
     765        &circumflexsubscriptBuf);
     766    if (error)
     767        fputs(error, stderr);
    302768    error = re_compile_pattern(diaeresisPattern, strlen(diaeresisPattern),
    303769        &diaeresisBuf);
    304770    if (error)
    305771        fputs(error, stderr);
     772    error = re_compile_pattern(diaeresisaccentPattern, strlen(diaeresisaccentPattern),
     773        &diaeresisaccentBuf);
     774    if (error)
     775        fputs(error, stderr);
    306776    error = re_compile_pattern(tildePattern, strlen(tildePattern), &tildeBuf);
    307777    if (error)
    308778        fputs(error, stderr);
     779    error = re_compile_pattern(accentPattern, strlen(accentPattern),
     780        &accentBuf);
     781    if (error)
     782        fputs(error, stderr);
     783    error = re_compile_pattern(macronPattern, strlen(macronPattern),
     784        &macronBuf);
     785    if (error)
     786        fputs(error, stderr);
     787    error = re_compile_pattern(brevePattern, strlen(brevePattern), &breveBuf);
     788    if (error)
     789        fputs(error, stderr);
     790    error = re_compile_pattern(subscriptPattern, strlen(subscriptPattern),
     791        &subscriptBuf);
     792    if (error)
     793        fputs(error, stderr);
    309794    error = re_compile_pattern(acutetabPattern, strlen(acutetabPattern),
    310795        &acutetabBuf);
    311796    if (error)
    312797        fputs(error, stderr);
     798    error = re_compile_pattern(acutesmoothtabPattern,
     799        strlen(acutesmoothtabPattern), &acutesmoothtabBuf);
     800    if (error)
     801        fputs(error, stderr);
     802    error = re_compile_pattern(acuteroughtabPattern,
     803        strlen(acuteroughtabPattern), &acuteroughtabBuf);
     804    if (error)
     805        fputs(error, stderr);
     806    error = re_compile_pattern(acutediaeresistabPattern, strlen(acutediaeresistabPattern),
     807        &acutediaeresistabBuf);
     808    if (error)
     809        fputs(error, stderr);
     810    error = re_compile_pattern(acutesubscripttabPattern, strlen(acutesubscripttabPattern),
     811        &acutesubscripttabBuf);
     812    if (error)
     813        fputs(error, stderr);
     814    error = re_compile_pattern(acutesmoothsubscripttabPattern, strlen(acutesmoothsubscripttabPattern),
     815        &acutesmoothsubscripttabBuf);
     816    if (error)
     817        fputs(error, stderr);
     818    error = re_compile_pattern(acuteroughsubscripttabPattern, strlen(acuteroughsubscripttabPattern),
     819        &acuteroughsubscripttabBuf);
     820    if (error)
     821        fputs(error, stderr);
    313822    error = re_compile_pattern(gravetabPattern, strlen(gravetabPattern),
    314823        &gravetabBuf);
    315824    if (error)
    316825        fputs(error, stderr);
     826    error = re_compile_pattern(gravesmoothtabPattern,
     827        strlen(gravesmoothtabPattern), &gravesmoothtabBuf);
     828    if (error)
     829        fputs(error, stderr);
     830    error = re_compile_pattern(graveroughtabPattern,
     831        strlen(graveroughtabPattern), &graveroughtabBuf);
     832    if (error)
     833        fputs(error, stderr);
     834    error = re_compile_pattern(gravediaeresistabPattern, strlen(gravediaeresistabPattern),
     835        &gravediaeresistabBuf);
     836    if (error)
     837        fputs(error, stderr);
     838    error = re_compile_pattern(gravesubscripttabPattern, strlen(gravesubscripttabPattern),
     839        &gravesubscripttabBuf);
     840    if (error)
     841        fputs(error, stderr);
     842    error = re_compile_pattern(gravesmoothsubscripttabPattern, strlen(gravesmoothsubscripttabPattern),
     843        &gravesmoothsubscripttabBuf);
     844    if (error)
     845        fputs(error, stderr);
     846    error = re_compile_pattern(graveroughsubscripttabPattern, strlen(graveroughsubscripttabPattern),
     847        &graveroughsubscripttabBuf);
     848    if (error)
     849        fputs(error, stderr);
     850    error = re_compile_pattern(smoothtabPattern, strlen(smoothtabPattern),
     851        &smoothtabBuf);
     852    if (error)
     853        fputs(error, stderr);
     854    error = re_compile_pattern(smoothcircumflextabPattern,
     855        strlen(smoothcircumflextabPattern), &smoothcircumflextabBuf);
     856    if (error)
     857        fputs(error, stderr);
     858    error = re_compile_pattern(smoothsubscripttabPattern, strlen(smoothsubscripttabPattern),
     859        &smoothsubscripttabBuf);
     860    if (error)
     861        fputs(error, stderr);
     862    error = re_compile_pattern(smoothcircumflexsubscripttabPattern, strlen(smoothcircumflexsubscripttabPattern),
     863        &smoothcircumflexsubscripttabBuf);
     864    if (error)
     865        fputs(error, stderr);
     866    error = re_compile_pattern(roughtabPattern, strlen(roughtabPattern),
     867        &roughtabBuf);
     868    if (error)
     869        fputs(error, stderr);
     870    error = re_compile_pattern(roughcircumflextabPattern,
     871        strlen(roughcircumflextabPattern), &roughcircumflextabBuf);
     872    if (error)
     873        fputs(error, stderr);
     874    error = re_compile_pattern(roughsubscripttabPattern, strlen(roughsubscripttabPattern),
     875        &roughsubscripttabBuf);
     876    if (error)
     877        fputs(error, stderr);
     878    error = re_compile_pattern(roughcircumflexsubscripttabPattern, strlen(roughcircumflexsubscripttabPattern),
     879        &roughcircumflexsubscripttabBuf);
     880    if (error)
     881        fputs(error, stderr);
    317882    error = re_compile_pattern(circumflextabPattern,
    318883        strlen(circumflextabPattern), &circumflextabBuf);
    319884    if (error)
    320885        fputs(error, stderr);
     886    error = re_compile_pattern(circumflexdiaeresistabPattern, strlen(circumflexdiaeresistabPattern),
     887        &circumflexdiaeresistabBuf);
     888    if (error)
     889        fputs(error, stderr);
     890    error = re_compile_pattern(circumflexsubscripttabPattern, strlen(circumflexsubscripttabPattern),
     891        &circumflexsubscripttabBuf);
     892    if (error)
     893        fputs(error, stderr);
    321894    error = re_compile_pattern(diaeresistabPattern,
    322895        strlen(diaeresistabPattern), &diaeresistabBuf);
    323896    if (error)
    324897        fputs(error, stderr);
     898    error = re_compile_pattern(diaeresisaccenttabPattern, strlen(diaeresisaccenttabPattern),
     899        &diaeresisaccenttabBuf);
     900    if (error)
     901        fputs(error, stderr);
    325902    error = re_compile_pattern(tildetabPattern, strlen(tildetabPattern),
    326903        &tildetabBuf);
    327904    if (error)
    328905        fputs(error, stderr);
     906    error = re_compile_pattern(accenttabPattern, strlen(accenttabPattern),
     907        &accenttabBuf);
     908    if (error)
     909        fputs(error, stderr);
     910    error = re_compile_pattern(macrontabPattern, strlen(macrontabPattern),
     911        &macrontabBuf);
     912    if (error)
     913        fputs(error, stderr);
     914    error = re_compile_pattern(brevetabPattern, strlen(brevetabPattern),
     915        &brevetabBuf);
     916    if (error)
     917        fputs(error, stderr);
     918    error = re_compile_pattern(subscripttabPattern, strlen(subscripttabPattern),
     919        &subscripttabBuf);
     920    if (error)
     921        fputs(error, stderr);
    329922
    330923    // Read file
    331924
    Keymap::LoadSource(FILE* file)  
    334927    fCharsSize = CHARS_TABLE_MAXSIZE;
    335928    int offset = 0;
    336929    int acuteOffset = 0;
     930    int acutesmoothOffset = 0;
     931    int acuteroughOffset = 0;
     932    int acutediaeresisOffset = 0;
     933    int acutesubscriptOffset = 0;
     934    int acutesmoothsubscriptOffset = 0;
     935    int acuteroughsubscriptOffset = 0;
    337936    int graveOffset = 0;
     937    int gravesmoothOffset = 0;
     938    int graveroughOffset = 0;
     939    int gravediaeresisOffset = 0;
     940    int gravesubscriptOffset = 0;
     941    int gravesmoothsubscriptOffset = 0;
     942    int graveroughsubscriptOffset = 0;
     943    int smoothOffset = 0;
     944    int smoothcircumflexOffset = 0;
     945    int smoothsubscriptOffset = 0;
     946    int smoothcircumflexsubscriptOffset = 0;
     947    int roughOffset = 0;
     948    int roughcircumflexOffset = 0;
     949    int roughsubscriptOffset = 0;
     950    int roughcircumflexsubscriptOffset = 0;
    338951    int circumflexOffset = 0;
     952    int circumflexdiaeresisOffset = 0;
     953    int circumflexsubscriptOffset = 0;
    339954    int diaeresisOffset = 0;
     955    int diaeresisaccentOffset = 0;
    340956    int tildeOffset = 0;
     957    int accentOffset = 0;
     958    int macronOffset = 0;
     959    int breveOffset = 0;
     960    int subscriptOffset = 0;
    341961
    342962    int32* maps[] = {
    343963        fKeys.normal_map,
    Keymap::LoadSource(FILE* file)  
    4381058                fKeys.acute_dead_key[acuteOffset++] = offset;
    4391059                _ComputeChars(buffer, regs, i, offset);
    4401060            }
     1061        } else if (re_search(&acutesmoothBuf, buffer, length, 0, length, &regs) >= 0) {
     1062            for (int i = 1; i <= 2; i++) {
     1063                fKeys.acutesmooth_dead_key[acutesmoothOffset++] = offset;
     1064                _ComputeChars(buffer, regs, i, offset);
     1065            }
     1066        } else if (re_search(&acuteroughBuf, buffer, length, 0, length, &regs) >= 0) {
     1067            for (int i = 1; i <= 2; i++) {
     1068                fKeys.acuterough_dead_key[acuteroughOffset++] = offset;
     1069                _ComputeChars(buffer, regs, i, offset);
     1070            }
     1071        } else if (re_search(&acutediaeresisBuf, buffer, length, 0, length, &regs) >= 0) {
     1072            for (int i = 1; i <= 2; i++) {
     1073                fKeys.acutediaeresis_dead_key[acutediaeresisOffset++] = offset;
     1074                _ComputeChars(buffer, regs, i, offset);
     1075            }
     1076        } else if (re_search(&acutesubscriptBuf, buffer, length, 0, length, &regs) >= 0) {
     1077            for (int i = 1; i <= 2; i++) {
     1078                fKeys.acutesubscript_dead_key[acutesubscriptOffset++] = offset;
     1079                _ComputeChars(buffer, regs, i, offset);
     1080            }
     1081        } else if (re_search(&acutesmoothsubscriptBuf, buffer, length, 0, length, &regs) >= 0) {
     1082            for (int i = 1; i <= 2; i++) {
     1083                fKeys.acutesmoothsubscript_dead_key[acutesmoothsubscriptOffset++] = offset;
     1084                _ComputeChars(buffer, regs, i, offset);
     1085            }
     1086        } else if (re_search(&acuteroughsubscriptBuf, buffer, length, 0, length, &regs) >= 0) {
     1087            for (int i = 1; i <= 2; i++) {
     1088                fKeys.acuteroughsubscript_dead_key[acuteroughsubscriptOffset++] = offset;
     1089                _ComputeChars(buffer, regs, i, offset);
     1090            }
    4411091        } else if (re_search(&graveBuf, buffer, length, 0, length, &regs)
    4421092                >= 0) {
    4431093            for (int i = 1; i <= 2; i++) {
    4441094                fKeys.grave_dead_key[graveOffset++] = offset;
    4451095                _ComputeChars(buffer, regs, i, offset);
    4461096            }
     1097        } else if (re_search(&gravesmoothBuf, buffer, length, 0, length, &regs) >= 0) {
     1098            for (int i = 1; i <= 2; i++) {
     1099                fKeys.gravesmooth_dead_key[gravesmoothOffset++] = offset;
     1100                _ComputeChars(buffer, regs, i, offset);
     1101            }
     1102        } else if (re_search(&graveroughBuf, buffer, length, 0, length, &regs) >= 0) {
     1103            for (int i = 1; i <= 2; i++) {
     1104                fKeys.graverough_dead_key[graveroughOffset++] = offset;
     1105                _ComputeChars(buffer, regs, i, offset);
     1106            }
     1107        } else if (re_search(&gravediaeresisBuf, buffer, length, 0, length, &regs) >= 0) {
     1108            for (int i = 1; i <= 2; i++) {
     1109                fKeys.gravediaeresis_dead_key[gravediaeresisOffset++] = offset;
     1110                _ComputeChars(buffer, regs, i, offset);
     1111            }
     1112        } else if (re_search(&gravesubscriptBuf, buffer, length, 0, length, &regs) >= 0) {
     1113            for (int i = 1; i <= 2; i++) {
     1114                fKeys.gravesubscript_dead_key[gravesubscriptOffset++] = offset;
     1115                _ComputeChars(buffer, regs, i, offset);
     1116            }
     1117        } else if (re_search(&gravesmoothsubscriptBuf, buffer, length, 0, length, &regs) >= 0) {
     1118            for (int i = 1; i <= 2; i++) {
     1119                fKeys.gravesmoothsubscript_dead_key[gravesmoothsubscriptOffset++] = offset;
     1120                _ComputeChars(buffer, regs, i, offset);
     1121            }
     1122        } else if (re_search(&graveroughsubscriptBuf, buffer, length, 0, length, &regs) >= 0) {
     1123            for (int i = 1; i <= 2; i++) {
     1124                fKeys.graveroughsubscript_dead_key[graveroughsubscriptOffset++] = offset;
     1125                _ComputeChars(buffer, regs, i, offset);
     1126            }
     1127        } else if (re_search(&smoothBuf, buffer, length, 0, length, &regs) >= 0) {
     1128            for (int i = 1; i <= 2; i++) {
     1129                fKeys.smooth_dead_key[smoothOffset++] = offset;
     1130                _ComputeChars(buffer, regs, i, offset);
     1131            }
     1132        } else if (re_search(&smoothcircumflexBuf, buffer, length, 0, length, &regs) >= 0) {
     1133            for (int i = 1; i <= 2; i++) {
     1134                fKeys.smoothcircumflex_dead_key[smoothcircumflexOffset++] = offset;
     1135                _ComputeChars(buffer, regs, i, offset);
     1136            }
     1137        } else if (re_search(&smoothsubscriptBuf, buffer, length, 0, length, &regs) >= 0) {
     1138            for (int i = 1; i <= 2; i++) {
     1139                fKeys.smoothsubscript_dead_key[smoothsubscriptOffset++] = offset;
     1140                _ComputeChars(buffer, regs, i, offset);
     1141            }
     1142        } else if (re_search(&smoothcircumflexsubscriptBuf, buffer, length, 0, length, &regs) >= 0) {
     1143            for (int i = 1; i <= 2; i++) {
     1144                fKeys.smoothcircumflexsubscript_dead_key[smoothcircumflexsubscriptOffset++] = offset;
     1145                _ComputeChars(buffer, regs, i, offset);
     1146            }
     1147        } else if (re_search(&roughBuf, buffer, length, 0, length, &regs) >= 0) {
     1148            for (int i = 1; i <= 2; i++) {
     1149                fKeys.rough_dead_key[roughOffset++] = offset;
     1150                _ComputeChars(buffer, regs, i, offset);
     1151            }
     1152        } else if (re_search(&roughcircumflexBuf, buffer, length, 0, length, &regs) >= 0) {
     1153            for (int i = 1; i <= 2; i++) {
     1154                fKeys.roughcircumflex_dead_key[roughcircumflexOffset++] = offset;
     1155                _ComputeChars(buffer, regs, i, offset);
     1156            }
     1157        } else if (re_search(&roughsubscriptBuf, buffer, length, 0, length, &regs) >= 0) {
     1158            for (int i = 1; i <= 2; i++) {
     1159                fKeys.roughsubscript_dead_key[roughsubscriptOffset++] = offset;
     1160                _ComputeChars(buffer, regs, i, offset);
     1161            }
     1162        } else if (re_search(&roughcircumflexsubscriptBuf, buffer, length, 0, length, &regs) >= 0) {
     1163            for (int i = 1; i <= 2; i++) {
     1164                fKeys.roughcircumflexsubscript_dead_key[roughcircumflexsubscriptOffset++] = offset;
     1165                _ComputeChars(buffer, regs, i, offset);
     1166            }
    4471167        } else if (re_search(&circumflexBuf, buffer, length, 0, length, &regs)
    4481168                >= 0) {
    4491169            for (int i = 1; i <= 2; i++) {
    4501170                fKeys.circumflex_dead_key[circumflexOffset++] = offset;
    4511171                _ComputeChars(buffer, regs, i, offset);
    4521172            }
     1173        } else if (re_search(&circumflexdiaeresisBuf, buffer, length, 0, length, &regs) >= 0) {
     1174            for (int i = 1; i <= 2; i++) {
     1175                fKeys.circumflexdiaeresis_dead_key[circumflexdiaeresisOffset++] = offset;
     1176                _ComputeChars(buffer, regs, i, offset);
     1177            }
     1178        } else if (re_search(&circumflexsubscriptBuf, buffer, length, 0, length, &regs) >= 0) {
     1179            for (int i = 1; i <= 2; i++) {
     1180                fKeys.circumflexsubscript_dead_key[circumflexsubscriptOffset++] = offset;
     1181                _ComputeChars(buffer, regs, i, offset);
     1182            }
    4531183        } else if (re_search(&diaeresisBuf, buffer, length, 0, length, &regs)
    4541184                >= 0) {
    4551185            for (int i = 1; i <= 2; i++) {
    4561186                fKeys.dieresis_dead_key[diaeresisOffset++] = offset;
    4571187                _ComputeChars(buffer, regs, i, offset);
    4581188            }
     1189        } else if (re_search(&diaeresisaccentBuf, buffer, length, 0, length, &regs) >= 0) {
     1190            for (int i = 1; i <= 2; i++) {
     1191                fKeys.diaeresisaccent_dead_key[diaeresisaccentOffset++] = offset;
     1192                _ComputeChars(buffer, regs, i, offset);
     1193            }
    4591194        } else if (re_search(&tildeBuf, buffer, length, 0, length, &regs) >= 0) {
    4601195            for (int i = 1; i <= 2; i++) {
    4611196                fKeys.tilde_dead_key[tildeOffset++] = offset;
    4621197                _ComputeChars(buffer, regs, i, offset);
    4631198            }
     1199        } else if (re_search(&accentBuf, buffer, length, 0, length, &regs) >= 0) {
     1200            for (int i = 1; i <= 2; i++) {
     1201                fKeys.accent_dead_key[accentOffset++] = offset;
     1202                _ComputeChars(buffer, regs, i, offset);
     1203            }
     1204        } else if (re_search(&macronBuf, buffer, length, 0, length, &regs) >= 0) {
     1205            for (int i = 1; i <= 2; i++) {
     1206                fKeys.macron_dead_key[macronOffset++] = offset;
     1207                _ComputeChars(buffer, regs, i, offset);
     1208            }
     1209        } else if (re_search(&breveBuf, buffer, length, 0, length, &regs) >= 0) {
     1210            for (int i = 1; i <= 2; i++) {
     1211                fKeys.breve_dead_key[breveOffset++] = offset;
     1212                _ComputeChars(buffer, regs, i, offset);
     1213            }
     1214        } else if (re_search(&subscriptBuf, buffer, length, 0, length, &regs) >= 0) {
     1215            for (int i = 1; i <= 2; i++) {
     1216                fKeys.subscript_dead_key[subscriptOffset++] = offset;
     1217                _ComputeChars(buffer, regs, i, offset);
     1218            }
    4641219        } else if (re_search(&acutetabBuf, buffer, length, 0, length, &regs)
    4651220                >= 0) {
    4661221            _ComputeTables(buffer, regs, fKeys.acute_tables);
     1222        } else if (re_search(&acutesmoothtabBuf, buffer, length, 0, length, &regs)
     1223                >= 0) {
     1224            _ComputeTables(buffer, regs, fKeys.acutesmooth_tables);
     1225        } else if (re_search(&acuteroughtabBuf, buffer, length, 0, length, &regs)
     1226                >= 0) {
     1227            _ComputeTables(buffer, regs, fKeys.acuterough_tables);
     1228        } else if (re_search(&acutediaeresistabBuf, buffer, length, 0, length, &regs)
     1229                >= 0) {
     1230            _ComputeTables(buffer, regs, fKeys.acutediaeresis_tables);
     1231        } else if (re_search(&acutesubscripttabBuf, buffer, length, 0, length, &regs)
     1232                >= 0) {
     1233            _ComputeTables(buffer, regs, fKeys.acutesubscript_tables);
     1234        } else if (re_search(&acutesmoothsubscripttabBuf, buffer, length, 0, length, &regs)
     1235                >= 0) {
     1236            _ComputeTables(buffer, regs, fKeys.acutesmoothsubscript_tables);
     1237        } else if (re_search(&acuteroughsubscripttabBuf, buffer, length, 0, length, &regs)
     1238                >= 0) {
     1239            _ComputeTables(buffer, regs, fKeys.acuteroughsubscript_tables);
    4671240        } else if (re_search(&gravetabBuf, buffer, length, 0, length, &regs)
    4681241                >= 0) {
    4691242            _ComputeTables(buffer, regs, fKeys.grave_tables);
     1243        } else if (re_search(&gravesmoothtabBuf, buffer, length, 0, length, &regs)
     1244                >= 0) {
     1245            _ComputeTables(buffer, regs, fKeys.gravesmooth_tables);
     1246        } else if (re_search(&graveroughtabBuf, buffer, length, 0, length, &regs)
     1247                >= 0) {
     1248            _ComputeTables(buffer, regs, fKeys.graverough_tables);
     1249        } else if (re_search(&gravediaeresistabBuf, buffer, length, 0, length, &regs)
     1250                >= 0) {
     1251            _ComputeTables(buffer, regs, fKeys.gravediaeresis_tables);
     1252        } else if (re_search(&gravesubscripttabBuf, buffer, length, 0, length, &regs)
     1253                >= 0) {
     1254            _ComputeTables(buffer, regs, fKeys.gravesubscript_tables);
     1255        } else if (re_search(&gravesmoothsubscripttabBuf, buffer, length, 0, length, &regs)
     1256                >= 0) {
     1257            _ComputeTables(buffer, regs, fKeys.gravesmoothsubscript_tables);
     1258        } else if (re_search(&graveroughsubscripttabBuf, buffer, length, 0, length, &regs)
     1259                >= 0) {
     1260            _ComputeTables(buffer, regs, fKeys.graveroughsubscript_tables);
     1261        } else if (re_search(&smoothtabBuf, buffer, length, 0, length, &regs)
     1262                >= 0) {
     1263            _ComputeTables(buffer, regs, fKeys.smooth_tables);
     1264        } else if (re_search(&smoothcircumflextabBuf, buffer, length, 0, length, &regs)
     1265                >= 0) {
     1266            _ComputeTables(buffer, regs, fKeys.smoothcircumflex_tables);
     1267        } else if (re_search(&smoothsubscripttabBuf, buffer, length, 0, length, &regs)
     1268                >= 0) {
     1269            _ComputeTables(buffer, regs, fKeys.smoothsubscript_tables);
     1270        } else if (re_search(&smoothcircumflexsubscripttabBuf, buffer, length, 0, length, &regs)
     1271                >= 0) {
     1272            _ComputeTables(buffer, regs, fKeys.smoothcircumflexsubscript_tables);
     1273        } else if (re_search(&roughtabBuf, buffer, length, 0, length, &regs)
     1274                >= 0) {
     1275            _ComputeTables(buffer, regs, fKeys.rough_tables);
     1276        } else if (re_search(&roughcircumflextabBuf, buffer, length, 0, length, &regs)
     1277                >= 0) {
     1278            _ComputeTables(buffer, regs, fKeys.roughcircumflex_tables);
     1279        } else if (re_search(&roughsubscripttabBuf, buffer, length, 0, length, &regs)
     1280                >= 0) {
     1281            _ComputeTables(buffer, regs, fKeys.roughsubscript_tables);
     1282        } else if (re_search(&roughcircumflexsubscripttabBuf, buffer, length, 0, length, &regs)
     1283                >= 0) {
     1284            _ComputeTables(buffer, regs, fKeys.roughcircumflexsubscript_tables);
    4701285        } else if (re_search(&circumflextabBuf, buffer, length, 0, length, &regs)
    4711286                >= 0) {
    4721287            _ComputeTables(buffer, regs, fKeys.circumflex_tables);
     1288        } else if (re_search(&circumflexdiaeresistabBuf, buffer, length, 0, length, &regs)
     1289                >= 0) {
     1290            _ComputeTables(buffer, regs, fKeys.circumflexdiaeresis_tables);
     1291        } else if (re_search(&circumflexsubscripttabBuf, buffer, length, 0, length, &regs)
     1292                >= 0) {
     1293            _ComputeTables(buffer, regs, fKeys.circumflexsubscript_tables);
    4731294        } else if (re_search(&diaeresistabBuf, buffer, length, 0, length, &regs)
    4741295                >= 0) {
    4751296            _ComputeTables(buffer, regs, fKeys.dieresis_tables);
     1297        } else if (re_search(&diaeresisaccenttabBuf, buffer, length, 0, length, &regs)
     1298                >= 0) {
     1299            _ComputeTables(buffer, regs, fKeys.diaeresisaccent_tables);
    4761300        } else if (re_search(&tildetabBuf, buffer, length, 0, length, &regs)
    4771301                >= 0) {
    4781302            _ComputeTables(buffer, regs, fKeys.tilde_tables);
     1303        } else if (re_search(&accenttabBuf, buffer, length, 0, length, &regs)
     1304                >= 0) {
     1305            _ComputeTables(buffer, regs, fKeys.accent_tables);
     1306        } else if (re_search(&macrontabBuf, buffer, length, 0, length, &regs)
     1307                >= 0) {
     1308            _ComputeTables(buffer, regs, fKeys.macron_tables);
     1309        } else if (re_search(&brevetabBuf, buffer, length, 0, length, &regs)
     1310                >= 0) {
     1311            _ComputeTables(buffer, regs, fKeys.breve_tables);
     1312        } else if (re_search(&subscripttabBuf, buffer, length, 0, length, &regs)
     1313                >= 0) {
     1314            _ComputeTables(buffer, regs, fKeys.subscript_tables);
    4791315        }
    4801316    }
    4811317
    Keymap::SaveAsCppHeader(const char* file  
    6711507
    6721508    // dead keys
    6731509    dump_keys(file, "acute_dead_key", fKeys.acute_dead_key);
     1510    dump_keys(file, "acutesmooth_dead_key", fKeys.acutesmooth_dead_key);
     1511    dump_keys(file, "acuterough_dead_key", fKeys.acuterough_dead_key);
     1512    dump_keys(file, "acutediaeresis_dead_key", fKeys.acutediaeresis_dead_key);
     1513    dump_keys(file, "acutesubscript_dead_key", fKeys.acutesubscript_dead_key);
     1514    dump_keys(file, "acutesmoothsubscript_dead_key",fKeys.acutesmoothsubscript_dead_key);
     1515    dump_keys(file, "acuteroughsubscript_dead_key",fKeys.acuteroughsubscript_dead_key);
    6741516    dump_keys(file, "grave_dead_key", fKeys.grave_dead_key);
     1517    dump_keys(file, "gravesmooth_dead_key", fKeys.gravesmooth_dead_key);
     1518    dump_keys(file, "graverough_dead_key", fKeys.graverough_dead_key);
     1519    dump_keys(file, "gravediaeresis_dead_key", fKeys.gravediaeresis_dead_key);
     1520    dump_keys(file, "gravesubscript_dead_key", fKeys.gravesubscript_dead_key);
     1521    dump_keys(file, "gravesmoothsubscript_dead_key",fKeys.gravesmoothsubscript_dead_key);
     1522    dump_keys(file, "graveroughsubscript_dead_key",fKeys.graveroughsubscript_dead_key);
     1523    dump_keys(file, "smooth_dead_key", fKeys.smooth_dead_key);
     1524    dump_keys(file, "smoothcircumflex_dead_key", fKeys.smoothcircumflex_dead_key);
     1525    dump_keys(file, "smoothsubscript_dead_key",fKeys.smoothsubscript_dead_key);
     1526    dump_keys(file, "smoothcircumflexsubscript_dead_key",fKeys.smoothcircumflexsubscript_dead_key);
     1527    dump_keys(file, "rough_dead_key", fKeys.rough_dead_key);
     1528    dump_keys(file, "roughcircumflex_dead_key", fKeys.roughcircumflex_dead_key);
     1529    dump_keys(file, "roughsubscript_dead_key",fKeys.roughsubscript_dead_key);
     1530    dump_keys(file, "roughcircumflexsubscript_dead_key",fKeys.roughcircumflexsubscript_dead_key);
    6751531    dump_keys(file, "circumflex_dead_key", fKeys.circumflex_dead_key);
     1532    dump_keys(file, "circumflexdiaeresis_dead_key", fKeys.circumflexdiaeresis_dead_key);
     1533    dump_keys(file, "circumflexsubscript_dead_key",fKeys.circumflexsubscript_dead_key);
    6761534    dump_keys(file, "dieresis_dead_key", fKeys.dieresis_dead_key);
     1535    dump_keys(file, "diaeresisaccent_dead_key", fKeys.diaeresisaccent_dead_key);
    6771536    dump_keys(file, "tilde_dead_key", fKeys.tilde_dead_key);
     1537    dump_keys(file, "accent_dead_key", fKeys.accent_dead_key);
     1538    dump_keys(file, "macron_dead_key", fKeys.macron_dead_key);
     1539    dump_keys(file, "breve_dead_key", fKeys.breve_dead_key);
     1540    dump_keys(file, "subscript_dead_key", fKeys.subscript_dead_key);
    6781541
    6791542    // dead key tables
    6801543    fprintf(file, "\tacute_tables:0x%" B_PRIx32 ",\n", fKeys.acute_tables);
     1544    fprintf(file, "\tacutesmooth_tables:0x%" B_PRIx32 ",\n", fKeys.acutesmooth_tables);
     1545    fprintf(file, "\tacuterough_tables:0x%" B_PRIx32 ",\n", fKeys.acuterough_tables);
     1546    fprintf(file, "\tacutediaeresis_tables:0x%" B_PRIx32 ",\n", fKeys.acutediaeresis_tables);
     1547    fprintf(file, "\tacutesubscript_tables:0x%" B_PRIx32 ",\n", fKeys.acutesubscript_tables);
     1548    fprintf(file, "\tacutesmoothsubscript_tables:0x%" B_PRIx32 ",\n", fKeys.acutesmoothsubscript_tables);
     1549    fprintf(file, "\tacuteroughsubscript_tables:0x%" B_PRIx32 ",\n", fKeys.acuteroughsubscript_tables);
    6811550    fprintf(file, "\tgrave_tables:0x%" B_PRIx32 ",\n", fKeys.grave_tables);
     1551    fprintf(file, "\tgravesmooth_tables:0x%" B_PRIx32 ",\n", fKeys.gravesmooth_tables);
     1552    fprintf(file, "\tgraverough_tables:0x%" B_PRIx32 ",\n", fKeys.graverough_tables);
     1553    fprintf(file, "\tgravediaeresis_tables:0x%" B_PRIx32 ",\n", fKeys.gravediaeresis_tables);
     1554    fprintf(file, "\tgravesubscript_tables:0x%" B_PRIx32 ",\n", fKeys.gravesubscript_tables);
     1555    fprintf(file, "\tgravesmoothsubscript_tables:0x%" B_PRIx32 ",\n", fKeys.gravesmoothsubscript_tables);
     1556    fprintf(file, "\tgraveroughsubscript_tables:0x%" B_PRIx32 ",\n", fKeys.graveroughsubscript_tables);
     1557    fprintf(file, "\tsmooth_tables:0x%" B_PRIx32 ",\n", fKeys.smooth_tables);
     1558    fprintf(file, "\tsmoothcircumflex_tables:0x%" B_PRIx32 ",\n", fKeys.smoothcircumflex_tables);
     1559    fprintf(file, "\tsmoothsubscript_tables:0x%" B_PRIx32 ",\n", fKeys.smoothsubscript_tables);
     1560    fprintf(file, "\tsmoothcircumflexsubscript_tables:0x%" B_PRIx32 ",\n", fKeys.smoothcircumflexsubscript_tables);
     1561    fprintf(file, "\trough_tables:0x%" B_PRIx32 ",\n", fKeys.rough_tables);
     1562    fprintf(file, "\troughcircumflex_tables:0x%" B_PRIx32 ",\n", fKeys.roughcircumflex_tables);
     1563    fprintf(file, "\troughsubscript_tables:0x%" B_PRIx32 ",\n", fKeys.roughsubscript_tables);
     1564    fprintf(file, "\troughcircumflexsubscript_tables:0x%" B_PRIx32 ",\n", fKeys.roughcircumflexsubscript_tables);
    6821565    fprintf(file, "\tcircumflex_tables:0x%" B_PRIx32 ",\n",
    6831566        fKeys.circumflex_tables);
     1567    fprintf(file, "\tcircumflexdiaeresis_tables:0x%" B_PRIx32 ",\n", fKeys.circumflexdiaeresis_tables);
     1568    fprintf(file, "\tcircumflexsubscript_tables:0x%" B_PRIx32 ",\n", fKeys.circumflexsubscript_tables);
    6841569    fprintf(file, "\tdieresis_tables:0x%" B_PRIx32 ",\n",
    6851570        fKeys.dieresis_tables);
     1571    fprintf(file, "\tdiaeresisaccent_tables:0x%" B_PRIx32 ",\n", fKeys.diaeresisaccent_tables);
    6861572    fprintf(file, "\ttilde_tables:0x%" B_PRIx32 ",\n", fKeys.tilde_tables);
     1573    fprintf(file, "\taccent_tables:0x%" B_PRIx32 ",\n", fKeys.accent_tables);
     1574    fprintf(file, "\tmacron_tables:0x%" B_PRIx32 ",\n", fKeys.macron_tables);
     1575    fprintf(file, "\tbreve_tables:0x%" B_PRIx32 ",\n", fKeys.breve_tables);
     1576    fprintf(file, "\tsubscript_tables:0x%" B_PRIx32 ",\n", fKeys.subscript_tables);
    6871577
    6881578    fputs("};\n\n", file);
    6891579
    Keymap::_SaveSourceText(FILE* file)  
    9871877
    9881878    int32* deadOffsets[] = {
    9891879        fKeys.acute_dead_key,
     1880        fKeys.acutesmooth_dead_key,
     1881        fKeys.acuterough_dead_key,
     1882        fKeys.acutediaeresis_dead_key,
     1883        fKeys.acutesubscript_dead_key,
     1884        fKeys.acutesmoothsubscript_dead_key,
     1885        fKeys.acuteroughsubscript_dead_key,
    9901886        fKeys.grave_dead_key,
     1887        fKeys.gravesmooth_dead_key,
     1888        fKeys.graverough_dead_key,
     1889        fKeys.gravediaeresis_dead_key,
     1890        fKeys.gravesubscript_dead_key,
     1891        fKeys.gravesmoothsubscript_dead_key,
     1892        fKeys.graveroughsubscript_dead_key,
     1893        fKeys.smooth_dead_key,
     1894        fKeys.smoothcircumflex_dead_key,
     1895        fKeys.smoothsubscript_dead_key,
     1896        fKeys.smoothcircumflexsubscript_dead_key,
     1897        fKeys.rough_dead_key,
     1898        fKeys.roughcircumflex_dead_key,
     1899        fKeys.roughsubscript_dead_key,
     1900        fKeys.roughcircumflexsubscript_dead_key,
    9911901        fKeys.circumflex_dead_key,
     1902        fKeys.circumflexdiaeresis_dead_key,
     1903        fKeys.circumflexsubscript_dead_key,
    9921904        fKeys.dieresis_dead_key,
    993         fKeys.tilde_dead_key
     1905        fKeys.diaeresisaccent_dead_key,
     1906        fKeys.tilde_dead_key,
     1907        fKeys.accent_dead_key,
     1908        fKeys.macron_dead_key,
     1909        fKeys.breve_dead_key,
     1910        fKeys.subscript_dead_key
    9941911    };
    9951912
    996     char labels[][12] = {
     1913    char labels[][27] = {
    9971914        "Acute",
     1915        "AcuteSmooth",
     1916        "AcuteRough",
     1917        "AcuteDiaeresis",
     1918        "AcuteSubscript",
     1919        "AcuteSmoothSubscript",
     1920        "AcuteRoughSubscript",
    9981921        "Grave",
     1922        "GraveSmooth",
     1923        "GraveRough",
     1924        "GraveDiaeresis",
     1925        "GraveSubscript",
     1926        "GraveSmoothSubscript",
     1927        "GraveRoughSubscript",
     1928        "Smooth",
     1929        "SmoothCircumflex",
     1930        "SmoothSubscript",
     1931        "SmoothCircumflexSubscript",
     1932        "Rough",
     1933        "RoughCircumflex",
     1934        "RoughSubscript",
     1935        "RoughCircumflexSubscript",
    9991936        "Circumflex",
     1937        "CircumflexDiaeresis",
     1938        "CircumflexSubscript",
    10001939        "Diaeresis",
    1001         "Tilde"
     1940        "DiaeresisAccent",
     1941        "Tilde",
     1942        "Accent",
     1943        "Macron",
     1944        "Breve",
     1945        "Subscript"
    10021946    };
    10031947
    10041948    uint32 deadTables[] = {
    10051949        fKeys.acute_tables,
     1950        fKeys.acutesmooth_tables,
     1951        fKeys.acuterough_tables,
     1952        fKeys.acutediaeresis_tables,
     1953        fKeys.acutesubscript_tables,
     1954        fKeys.acutesmoothsubscript_tables,
     1955        fKeys.acuteroughsubscript_tables,
    10061956        fKeys.grave_tables,
     1957        fKeys.gravesmooth_tables,
     1958        fKeys.graverough_tables,
     1959        fKeys.gravediaeresis_tables,
     1960        fKeys.gravesubscript_tables,
     1961        fKeys.gravesmoothsubscript_tables,
     1962        fKeys.graveroughsubscript_tables,
     1963        fKeys.smooth_tables,
     1964        fKeys.smoothcircumflex_tables,
     1965        fKeys.smoothsubscript_tables,
     1966        fKeys.smoothcircumflexsubscript_tables,
     1967        fKeys.rough_tables,
     1968        fKeys.roughcircumflex_tables,
     1969        fKeys.roughsubscript_tables,
     1970        fKeys.roughcircumflexsubscript_tables,
    10071971        fKeys.circumflex_tables,
     1972        fKeys.circumflexdiaeresis_tables,
     1973        fKeys.circumflexsubscript_tables,
    10081974        fKeys.dieresis_tables,
    1009         fKeys.tilde_tables
     1975        fKeys.diaeresisaccent_tables,
     1976        fKeys.tilde_tables,
     1977        fKeys.accent_tables,
     1978        fKeys.macron_tables,
     1979        fKeys.breve_tables,
     1980        fKeys.subscript_tables
    10101981    };
    10111982
    1012     for (int i = 0; i < 5; i++) {
    1013         for (int deadIndex = 0; deadIndex < 32; deadIndex++) {
    1014             char deadKey[32];
    1015             char secondKey[32];
    1016             if (!GetKey(fChars, deadOffsets[i][deadIndex++], deadKey, 32))
     1983    for (int i = 0; i < 32; i++) {
     1984        for (int deadIndex = 0; deadIndex < 38; deadIndex++) {
     1985            char deadKey[38];
     1986            char secondKey[38];
     1987            if (!GetKey(fChars, deadOffsets[i][deadIndex++], deadKey, 38))
    10171988                break;
    10181989
    1019             GetKey(fChars, deadOffsets[i][deadIndex], secondKey, 32);
     1990            GetKey(fChars, deadOffsets[i][deadIndex], secondKey, 38);
    10201991            fprintf(file, "%s %-9s = %-9s\n", labels[i], deadKey, secondKey);
    10211992        }
    10221993