Import dataset into test/data/
authorDaniel Stone <daniel@fooishbar.org>
Thu, 12 Jul 2012 13:42:31 +0000 (14:42 +0100)
committerDaniel Stone <daniel@fooishbar.org>
Thu, 12 Jul 2012 13:48:49 +0000 (14:48 +0100)
Use a self-contained dataset instead of relying on a globally-installed
set.  Data taken from xkeyboard-config 2.5.1.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
52 files changed:
test/common.c
test/data/compat/accessx [new file with mode: 0644]
test/data/compat/basic [new file with mode: 0644]
test/data/compat/caps [new file with mode: 0644]
test/data/compat/complete [new file with mode: 0644]
test/data/compat/default [new file with mode: 0644]
test/data/compat/iso9995 [new file with mode: 0644]
test/data/compat/ledcaps [new file with mode: 0644]
test/data/compat/lednum [new file with mode: 0644]
test/data/compat/ledscroll [new file with mode: 0644]
test/data/compat/level5 [new file with mode: 0644]
test/data/compat/misc [new file with mode: 0644]
test/data/compat/mousekeys [new file with mode: 0644]
test/data/compat/pc [new file with mode: 0644]
test/data/compat/xfree86 [new file with mode: 0644]
test/data/keycodes/aliases [new file with mode: 0644]
test/data/keycodes/evdev [new file with mode: 0644]
test/data/keymaps/basic.xkb
test/data/keymaps/default.xkb
test/data/rules/evdev [new file with mode: 0644]
test/data/symbols/altwin [new file with mode: 0644]
test/data/symbols/ca [new file with mode: 0644]
test/data/symbols/capslock [new file with mode: 0644]
test/data/symbols/compose [new file with mode: 0644]
test/data/symbols/ctrl [new file with mode: 0644]
test/data/symbols/de [new file with mode: 0644]
test/data/symbols/eurosign [new file with mode: 0644]
test/data/symbols/group [new file with mode: 0644]
test/data/symbols/il [new file with mode: 0644]
test/data/symbols/in [new file with mode: 0644]
test/data/symbols/inet [new file with mode: 0644]
test/data/symbols/keypad [new file with mode: 0644]
test/data/symbols/kpdl [new file with mode: 0644]
test/data/symbols/latin [new file with mode: 0644]
test/data/symbols/level3 [new file with mode: 0644]
test/data/symbols/level5 [new file with mode: 0644]
test/data/symbols/nbsp [new file with mode: 0644]
test/data/symbols/pc [new file with mode: 0644]
test/data/symbols/ru [new file with mode: 0644]
test/data/symbols/shift [new file with mode: 0644]
test/data/symbols/srvr_ctrl [new file with mode: 0644]
test/data/symbols/terminate [new file with mode: 0644]
test/data/symbols/us [new file with mode: 0644]
test/data/types/basic [new file with mode: 0644]
test/data/types/complete [new file with mode: 0644]
test/data/types/extra [new file with mode: 0644]
test/data/types/iso9995 [new file with mode: 0644]
test/data/types/level5 [new file with mode: 0644]
test/data/types/mousekeys [new file with mode: 0644]
test/data/types/numpad [new file with mode: 0644]
test/data/types/pc [new file with mode: 0644]
test/rulescomp.c

index 3938dcd..dbb0cfe 100644 (file)
@@ -46,7 +46,8 @@ test_get_path(const char *path_rel)
     const char *srcdir = getenv("srcdir");
 
     snprintf(path, PATH_MAX - 1,
-             "%s/test/data/%s", srcdir ? srcdir : ".", path_rel);
+             "%s/test/data/%s", srcdir ? srcdir : ".",
+             path_rel ? path_rel : "");
 
     return path;
 }
@@ -93,7 +94,14 @@ test_read_file(const char *path_rel)
 struct xkb_context *
 test_get_context(void)
 {
-    return xkb_context_new(0);
+    struct xkb_context *ctx = xkb_context_new(XKB_CONTEXT_NO_DEFAULT_INCLUDES);
+
+    if (!ctx)
+        return NULL;
+
+    xkb_context_include_path_append(ctx, test_get_path(""));
+
+    return ctx;
 }
 
 struct xkb_keymap *
diff --git a/test/data/compat/accessx b/test/data/compat/accessx
new file mode 100644 (file)
index 0000000..0ed34ce
--- /dev/null
@@ -0,0 +1,52 @@
+default partial xkb_compatibility "basic" {
+    interpret AccessX_Enable { 
+       action= LockControls(controls=AccessXKeys); 
+    };
+};
+
+partial xkb_compatibility "full" {
+
+    interpret AccessX_Enable {
+       action= LockControls(controls=AccessXKeys); 
+    };
+
+    interpret AccessX_Feedback_Enable { 
+       action= LockControls(controls=AccessXFeedback); 
+    };
+
+    interpret RepeatKeys_Enable {
+       action= LockControls(controls=RepeatKeys);
+    };
+
+    interpret SlowKeys_Enable {
+       action= LockControls(controls=SlowKeys);
+    };
+
+    interpret BounceKeys_Enable {
+       action= LockControls(controls=BounceKeys);
+    };
+
+    interpret StickyKeys_Enable {
+       action= LockControls(controls=StickyKeys);
+    };
+
+    interpret MouseKeys_Enable {
+       action= LockControls(controls=MouseKeys);
+    };
+
+    interpret MouseKeys_Accel_Enable {
+       action= LockControls(controls=MouseKeysAccel);
+    };
+
+    interpret Overlay1_Enable {
+       action= LockControls(controls=Overlay1);
+    };
+
+    interpret Overlay2_Enable {
+       action= LockControls(controls=Overlay2);
+    };
+
+    interpret AudibleBell_Enable {
+       action= LockControls(controls=AudibleBell);
+    };
+};
diff --git a/test/data/compat/basic b/test/data/compat/basic
new file mode 100644 (file)
index 0000000..393c324
--- /dev/null
@@ -0,0 +1,48 @@
+// Minimal set of symbol interpretations to provide 
+// reasonable default behavior (Num lock, shift and 
+// caps lock and mode switch) and set up the 
+// automatic updating of common keyboard LEDs.
+
+default xkb_compatibility "basic"  {
+    virtual_modifiers NumLock,AltGr;
+
+    interpret.repeat= False;
+    setMods.clearLocks= True;
+    latchMods.clearLocks= True;
+    latchMods.latchToLock= True;
+
+    interpret Shift_Lock+AnyOf(Shift+Lock) {
+       action= LockMods(modifiers=Shift);
+    };
+
+    interpret Any+Lock {
+       action= LockMods(modifiers=Lock);
+    };
+
+    interpret Num_Lock+Any {
+       virtualModifier= NumLock;
+       action= LockMods(modifiers=NumLock);
+    };
+
+    interpret Mode_switch {
+       useModMapMods= level1;
+       virtualModifier= AltGr;
+       action= SetGroup(group=+1);
+    };
+
+    interpret Any + Any {
+       action= SetMods(modifiers=modMapMods);
+    };
+
+    group 2 = AltGr;
+    group 3 = AltGr;
+    group 4 = AltGr;
+
+    include "ledcaps"
+    include "lednum"
+    indicator "Shift Lock" {
+       !allowExplicit;
+       whichModState= Locked;
+       modifiers= Shift;
+    };
+};
diff --git a/test/data/compat/caps b/test/data/compat/caps
new file mode 100644 (file)
index 0000000..d787ab6
--- /dev/null
@@ -0,0 +1,12 @@
+partial xkb_compatibility "caps_lock"  {
+    // Keysym Caps_Lock locks Lock modifier.
+    // With this, the keysym Caps_Lock can be used without binding the whole
+    // key to a real modifier.
+       // This is essential when you don't want to use caps lock on the first
+       // level.
+       // This should not have any compatibility issues when used together with
+       // other layouts which don't utilize this capability.
+    interpret Caps_Lock {
+        action = LockMods(modifiers = Lock);
+    };
+};
diff --git a/test/data/compat/complete b/test/data/compat/complete
new file mode 100644 (file)
index 0000000..d33c4db
--- /dev/null
@@ -0,0 +1,10 @@
+default xkb_compatibility "complete"  {
+    include "basic"
+    augment "iso9995"
+    augment "mousekeys"
+    augment "accessx(full)"
+    augment "misc"
+    augment "xfree86"
+    augment "level5"
+    augment "caps(caps_lock)"
+};
diff --git a/test/data/compat/default b/test/data/compat/default
new file mode 100644 (file)
index 0000000..4c4461f
--- /dev/null
@@ -0,0 +1,12 @@
+default xkb_compatibility "default"  {
+    include "basic"
+    augment "mousekeys"
+    augment "accessx(basic)"
+    augment "misc"
+    augment "iso9995"
+    augment "level5"
+// ??should be changed/renamed/removed
+//    augment "xfree86"
+    augment "japan"
+    augment "caps(caps_lock)"
+};
diff --git a/test/data/compat/iso9995 b/test/data/compat/iso9995
new file mode 100644 (file)
index 0000000..eee104d
--- /dev/null
@@ -0,0 +1,80 @@
+// Fairly complete set of symbol interpretations 
+// to provide reasonable default behavior
+
+default partial xkb_compatibility "default"  {
+    virtual_modifiers LevelThree,AltGr;
+
+    interpret.repeat= False;
+    setMods.clearLocks= True;
+    latchMods.clearLocks= True;
+    latchMods.latchToLock= True;
+
+    interpret ISO_Lock+Any {
+       action= ISOLock(affect= all,modifiers=modMapMods);
+    };
+
+    interpret ISO_Level2_Latch+Shift {
+       useModMapMods= level1;
+       action= LatchMods(modifiers=Shift);
+    };
+
+    interpret ISO_Level3_Shift+Any {
+       useModMapMods= level1;
+       virtualModifier= LevelThree;
+       action= SetMods(modifiers=LevelThree);
+    };
+
+    interpret ISO_Level3_Shift {
+       action= SetMods(modifiers=LevelThree);
+    };
+
+    interpret ISO_Level3_Latch+Any {
+       useModMapMods= level1;
+       virtualModifier= LevelThree;
+       action= LatchMods(modifiers=LevelThree);
+    };
+
+    interpret ISO_Level3_Latch {
+       action= LatchMods(modifiers=LevelThree);
+    };
+
+    interpret ISO_Level3_Lock+Any {
+       useModMapMods= level1;
+       virtualModifier= LevelThree;
+       action= LockMods(modifiers=LevelThree);
+    };
+
+    interpret ISO_Level3_Lock {
+       action= LockMods(modifiers=LevelThree);
+    };
+
+    interpret ISO_Group_Latch {
+       useModMapMods= level1;
+       virtualModifier= AltGr;
+       action= LatchGroup(group=2);
+    };
+
+    interpret ISO_Next_Group {
+       useModMapMods= level1;
+       virtualModifier= AltGr;
+       action= LockGroup(group=+1);
+    };
+
+    interpret ISO_Prev_Group {
+       useModMapMods= level1;
+       virtualModifier= AltGr;
+       action= LockGroup(group=-1);
+    };
+    interpret ISO_First_Group {
+       action= LockGroup(group=1);
+    };
+
+    interpret ISO_Last_Group {
+       action= LockGroup(group=2);
+    };
+
+    indicator "Group 2" {
+       !allowExplicit;
+       groups= All-Group1;
+    };
+};
diff --git a/test/data/compat/ledcaps b/test/data/compat/ledcaps
new file mode 100644 (file)
index 0000000..fc3084e
--- /dev/null
@@ -0,0 +1,23 @@
+// Use Caps Lock LED to show either Caps Lock, Group, or Shift Lock state
+
+default partial xkb_compatibility "caps_lock"   {
+   indicator "Caps Lock" {
+       !allowExplicit;
+       whichModState= Locked;
+       modifiers= Lock;
+   };
+};
+
+partial xkb_compatibility "group_lock"   {
+   indicator "Caps Lock" {
+       modifiers= None;
+       groups=All-group1;
+   };
+};
+
+partial xkb_compatibility "shift_lock"   {
+   indicator "Caps Lock" {
+       whichModState= Locked;
+       modifiers= Shift;
+   };
+};
diff --git a/test/data/compat/lednum b/test/data/compat/lednum
new file mode 100644 (file)
index 0000000..24a60a5
--- /dev/null
@@ -0,0 +1,23 @@
+// Use Num Lock LED to show either Num Lock, Group, or Shift Lock state
+
+default partial xkb_compatibility "num_lock"   {
+    indicator "Num Lock" {
+       !allowExplicit;
+       whichModState= Locked;
+       modifiers= NumLock;
+   };
+};
+
+partial xkb_compatibility "group_lock"   {
+   indicator "Num Lock" {
+       modifiers= None;
+       groups=All-group1;
+   };
+};
+
+partial xkb_compatibility "shift_lock"   {
+   indicator "Num Lock" {
+       whichModState= Locked;
+       modifiers= Shift;
+   };
+};
diff --git a/test/data/compat/ledscroll b/test/data/compat/ledscroll
new file mode 100644 (file)
index 0000000..ca5a82c
--- /dev/null
@@ -0,0 +1,23 @@
+// Use Scroll Lock LED to show either Scroll Lock, Group, or Shift Lock state
+
+default partial xkb_compatibility "scroll_lock"   {
+   indicator "Scroll Lock" {
+       allowExplicit;
+       whichModState= Locked;
+       modifiers= ScrollLock;
+   };
+};
+
+partial xkb_compatibility "group_lock"   {
+   indicator "Scroll Lock" {
+       modifiers= None;
+       groups=All-group1;
+   };
+};
+
+partial xkb_compatibility "shift_lock"   {
+   indicator "Scroll Lock" {
+       whichModState= Locked;
+       modifiers= Shift;
+   };
+};
diff --git a/test/data/compat/level5 b/test/data/compat/level5
new file mode 100644 (file)
index 0000000..8d28051
--- /dev/null
@@ -0,0 +1,51 @@
+// Fairly complete set of symbol interpretations 
+// to provide reasonable default behavior
+
+default partial xkb_compatibility "default"  {
+    virtual_modifiers LevelFive;
+
+    interpret.repeat= False;
+    setMods.clearLocks= True;
+    latchMods.clearLocks= True;
+    latchMods.latchToLock= True;
+
+    interpret ISO_Level5_Shift+Any {
+       useModMapMods= level1;
+       virtualModifier= LevelFive;
+       action= SetMods(modifiers=LevelFive);
+    };
+
+    interpret ISO_Level5_Shift {
+       action= SetMods(modifiers=LevelFive);
+    };
+
+    interpret ISO_Level5_Latch+Any {
+       virtualModifier= LevelFive;
+       action= LatchMods(modifiers=LevelFive);
+    };
+
+    interpret ISO_Level5_Latch {
+       action= LatchMods(modifiers=LevelFive);
+    };
+
+    interpret ISO_Level5_Lock+Any {
+       virtualModifier= LevelFive;
+       action= LockMods(modifiers=LevelFive);
+    };
+
+    interpret ISO_Level5_Lock {
+       action= LockMods(modifiers=LevelFive);
+    };
+};
+partial xkb_compatibility "level5_lock"  {
+       // This defines a Level5-Lock using the NumLock real modifier in order to
+       // create arbitrary level-behaviour, which would not be possible with the
+       // virtual modifier.
+       // See also: types/level5 : EIGHT_LEVEL_LEVEL_FIVE_LOCK
+       // See also: symbols/level5(lock)
+    virtual_modifiers NumLock;
+    
+    interpret ISO_Level5_Lock {
+        action = LockMods(modifiers = NumLock);
+    };
+};
diff --git a/test/data/compat/misc b/test/data/compat/misc
new file mode 100644 (file)
index 0000000..cfe9a39
--- /dev/null
@@ -0,0 +1,122 @@
+default partial xkb_compatibility "misc"  {
+
+    virtual_modifiers  Alt,Meta,Super,Hyper,ScrollLock;
+
+    // Interpretations for some other useful keys
+
+    interpret Terminate_Server {
+        action = Terminate();
+    };
+
+    setMods.clearLocks= True;
+
+    // Sets the "Alt" virtual modifier
+
+    interpret Alt_L+Any     {
+        //useModMapMods= level1;
+       virtualModifier= Alt;
+       action = SetMods(modifiers=modMapMods);
+    };
+
+    interpret Alt_L    {
+       action = SetMods(modifiers=Alt);
+    };
+
+    interpret Alt_R+Any     {
+        //useModMapMods= level1;
+       virtualModifier= Alt;
+       action = SetMods(modifiers=modMapMods);
+    };
+
+    interpret Alt_R    {
+       action = SetMods(modifiers=Alt);
+    };
+
+    // Sets the "Meta" virtual modifier
+
+    interpret Meta_L+Any     {
+//        useModMapMods= level1;
+       virtualModifier= Meta;
+       action = SetMods(modifiers=modMapMods);
+    };
+
+    interpret Meta_L   {
+       action = SetMods(modifiers=Meta);
+    };
+
+    interpret Meta_R+Any     {
+        //useModMapMods= level1;
+       virtualModifier= Meta;
+       action = SetMods(modifiers=modMapMods);
+    };
+
+    interpret Meta_R   {
+       action = SetMods(modifiers=Meta);
+    };
+
+    // Sets the "Super" virtual modifier
+
+    interpret Super_L+Any     {
+//        useModMapMods= level1;
+       virtualModifier= Super;
+       action = SetMods(modifiers=modMapMods);
+    };
+
+    interpret Super_L  {
+       action = SetMods(modifiers=Super);
+    };
+
+    interpret Super_R+Any     {
+        //useModMapMods= level1;
+       virtualModifier= Super;
+       action = SetMods(modifiers=modMapMods);
+    };
+
+    interpret Super_R  {
+       action = SetMods(modifiers=Super);
+    };
+
+    // Sets the "Hyper" virtual modifier
+
+    interpret Hyper_L+Any     {
+//        useModMapMods= level1;
+       virtualModifier= Hyper;
+       action = SetMods(modifiers=modMapMods);
+    };
+
+    interpret Hyper_L  {
+       action = SetMods(modifiers=Hyper);
+    };
+
+    interpret Hyper_R+Any     {
+        //useModMapMods= level1;
+       virtualModifier= Hyper;
+       action = SetMods(modifiers=modMapMods);
+    };
+
+    interpret Hyper_R  {
+       action = SetMods(modifiers=Hyper);
+    };
+
+    // Sets the "ScrollLock" virtual modifier and
+    // makes it actually lock when pressed.  Sets
+    // up a map for the scroll lock indicator.
+    interpret Scroll_Lock+Any  {
+       virtualModifier= ScrollLock;
+       action = LockMods(modifiers=modMapMods);
+    };
+
+    include "ledscroll"
+       
+    include "misc(assign_shift_left_action)"
+};
+
+partial xkb_compatibility "assign_shift_left_action"  {
+    // Because of the irrevertable modifier mapping in symbols/pc <LFSH> is 
+    // getting bound to the Lock modifier when using 
+    // symbols/shift(both_capslock), creating unwanted behaviour. 
+    // This is a quirk, to circumvent the problem.
+    interpret Shift_L {
+        action = SetMods(modifiers = Shift);
+    };
+};
diff --git a/test/data/compat/mousekeys b/test/data/compat/mousekeys
new file mode 100644 (file)
index 0000000..f60c756
--- /dev/null
@@ -0,0 +1,202 @@
+// Interpretations for arrow keys and a bunch of other 
+// common keysyms which make it possible to bind "mouse" 
+// keys using xmodmap and activate or deactivate them 
+// from the keyboard.
+
+default partial xkb_compatibility "mousekeys" {
+
+    // Keypad actions.
+    //
+    interpret.repeat= True;
+
+    interpret KP_1 { 
+       action = MovePtr(x=-1,y= +1); 
+    };
+    interpret KP_End { 
+       action = MovePtr(x=-1,y= +1); 
+    };
+
+    interpret KP_2 { 
+       action = MovePtr(x=+0,y= +1); 
+    };
+    interpret KP_Down { 
+       action = MovePtr(x=+0,y= +1); 
+    };
+
+    interpret KP_3 { 
+       action = MovePtr(x=+1,y=+1); 
+    };
+    interpret KP_Next { 
+       action = MovePtr(x=+1,y=+1); 
+    };
+
+    interpret KP_4 { 
+       action = MovePtr(x=-1,y=+0); 
+    };
+    interpret KP_Left { 
+       action = MovePtr(x=-1,y=+0); 
+    };
+
+    interpret KP_6 { 
+       action = MovePtr(x=+1,y=+0); 
+    };
+    interpret KP_Right { 
+       action = MovePtr(x=+1,y=+0); 
+    };
+
+    interpret KP_7 { 
+       action = MovePtr(x=-1,y=-1); 
+    };
+    interpret KP_Home { 
+       action = MovePtr(x=-1,y=-1); 
+    };
+
+    interpret KP_8 { 
+       action = MovePtr(x=+0,y=-1); 
+    };
+    interpret KP_Up { 
+       action = MovePtr(x=+0,y=-1); 
+    };
+
+    interpret KP_9 { 
+       action = MovePtr(x=+1,y=-1); 
+    };
+    interpret KP_Prior { 
+       action = MovePtr(x=+1,y=-1); 
+    };
+
+    interpret KP_5 { 
+       action = PointerButton(button=default); 
+    };
+    interpret KP_Begin { 
+       action = PointerButton(button=default); 
+    };
+
+    interpret KP_F2 { 
+       action = SetPtrDflt(affect=defaultButton,button=1); 
+    };
+    interpret KP_Divide { 
+       action = SetPtrDflt(affect=defaultButton,button=1); 
+    };
+
+    interpret KP_F3 { 
+       action = SetPtrDflt(affect=defaultButton,button=2); 
+    };
+    interpret KP_Multiply { 
+       action = SetPtrDflt(affect=defaultButton,button=2); 
+    };
+
+    interpret KP_F4 { 
+       action = SetPtrDflt(affect=defaultButton,button=3); 
+    };
+    interpret KP_Subtract { 
+       action = SetPtrDflt(affect=defaultButton,button=3); 
+    };
+
+    interpret KP_Separator { 
+       action = PointerButton(button=default,count=2); 
+    };
+    interpret KP_Add { 
+       action = PointerButton(button=default,count=2);
+    };
+
+    interpret KP_0 { 
+       action = LockPointerButton(button=default,affect=lock); 
+    };
+    interpret KP_Insert { 
+       action = LockPointerButton(button=default,affect=lock); 
+    };
+
+    interpret KP_Decimal { 
+       action = LockPointerButton(button=default,affect=unlock); 
+    };
+    interpret KP_Delete { 
+       action = LockPointerButton(button=default,affect=unlock); 
+    };
+
+    // Additional mappings for Solaris keypad compatibility
+    interpret F25 { // aka KP_Divide
+       action = SetPtrDflt(affect=defaultButton,button=1); 
+    };
+    interpret F26 { // aka KP_Multiply
+       action = SetPtrDflt(affect=defaultButton,button=2); 
+    };
+    interpret F27 { // aka KP_Home
+       action = MovePtr(x=-1,y=-1); 
+    };
+    interpret F29 { // aka KP_Prior
+       action = MovePtr(x=+1,y=-1); 
+    };
+    interpret F31 { // aka KP_Begin
+       action = PointerButton(button=default); 
+    };
+    interpret F33 { // aka KP_End
+       action = MovePtr(x=-1,y= +1); 
+    };
+    interpret F35 { // aka KP_Next
+       action = MovePtr(x=+1,y=+1); 
+    };
+
+    interpret.repeat= False;
+
+
+    // New Keysym Actions.
+    //
+    interpret Pointer_Button_Dflt {
+       action= PointerButton(button=default);
+    };
+    interpret Pointer_Button1 {
+       action= PointerButton(button=1);
+    };
+    interpret Pointer_Button2 {
+       action= PointerButton(button=2);
+    };
+    interpret Pointer_Button3 {
+       action= PointerButton(button=3);
+    };
+    interpret Pointer_DblClick_Dflt {
+       action= PointerButton(button=default,count=2);
+    };
+    interpret Pointer_DblClick1 {
+       action= PointerButton(button=1,count=2);
+    };
+    interpret Pointer_DblClick2 {
+       action= PointerButton(button=2,count=2);
+    };
+    interpret Pointer_DblClick3 {
+       action= PointerButton(button=3,count=2);
+    };
+    interpret Pointer_Drag_Dflt        {
+       action= LockPointerButton(button=default);
+    };
+    interpret Pointer_Drag1 {
+       action= LockPointerButton(button=1);
+    };
+    interpret Pointer_Drag2 {
+       action= LockPointerButton(button=2);
+    };
+    interpret Pointer_Drag3 {
+       action= LockPointerButton(button=3);
+    };
+
+    interpret Pointer_EnableKeys {
+       action= LockControls(controls=MouseKeys);
+    };
+    interpret Pointer_Accelerate {
+       action= LockControls(controls=MouseKeysAccel);
+    };
+    interpret Pointer_DfltBtnNext {
+       action= SetPtrDflt(affect=defaultButton,button= +1);
+    };
+    interpret Pointer_DfltBtnPrev {
+       action= SetPtrDflt(affect=defaultButton,button= -1);
+    };
+
+
+    // Allow an indicator for MouseKeys.
+    indicator "Mouse Keys" {
+//     !allowExplicit;
+       indicatorDrivesKeyboard;
+       controls= MouseKeys;
+    };
+};
diff --git a/test/data/compat/pc b/test/data/compat/pc
new file mode 100644 (file)
index 0000000..e970795
--- /dev/null
@@ -0,0 +1,17 @@
+default partial xkb_compatibility "pc"  {
+
+    // Sets the "Alt" virtual modifier
+
+    virtual_modifiers  Alt;
+
+    setMods.clearLocks= True;
+    interpret Alt_L+Any     { 
+       virtualModifier= Alt;
+       action = SetMods(modifiers=modMapMods);
+    };
+
+    interpret Alt_R+Any        {
+       virtualModifier= Alt;
+       action = SetMods(modifiers=modMapMods);
+    };
+};
diff --git a/test/data/compat/xfree86 b/test/data/compat/xfree86
new file mode 100644 (file)
index 0000000..52e661d
--- /dev/null
@@ -0,0 +1,66 @@
+//  XFree86 special keysyms
+
+default partial xkb_compatibility "basic"  {
+
+    interpret.repeat= True;
+
+    interpret  XF86_Switch_VT_1 {
+        action = SwitchScreen(Screen=1, !SameServer);
+    };
+    interpret  XF86_Switch_VT_2 {
+        action = SwitchScreen(Screen=2, !SameServer);
+    };
+    interpret  XF86_Switch_VT_3 {
+        action = SwitchScreen(Screen=3, !SameServer);
+    };
+    interpret  XF86_Switch_VT_4 {
+        action = SwitchScreen(Screen=4, !SameServer);
+    };
+    interpret  XF86_Switch_VT_5 {
+        action = SwitchScreen(Screen=5, !SameServer);
+    };
+    interpret  XF86_Switch_VT_6 {
+        action = SwitchScreen(Screen=6, !SameServer);
+    };
+    interpret  XF86_Switch_VT_7 {
+        action = SwitchScreen(Screen=7, !SameServer);
+    };
+    interpret  XF86_Switch_VT_8 {
+        action = SwitchScreen(Screen=8, !SameServer);
+    };
+    interpret  XF86_Switch_VT_9 {
+        action = SwitchScreen(Screen=9, !SameServer);
+    };
+    interpret  XF86_Switch_VT_10 {
+        action = SwitchScreen(Screen=10, !SameServer);
+    };
+    interpret  XF86_Switch_VT_11 {
+        action = SwitchScreen(Screen=11, !SameServer);
+    };
+    interpret  XF86_Switch_VT_12 {
+        action = SwitchScreen(Screen=12, !SameServer);
+    };
+
+    interpret XF86LogGrabInfo {
+        action = Private(type=0x86, data="PrGrbs");
+    };
+    interpret XF86LogWindowTree {
+        action = Private(type=0x86, data="PrWins");
+    };
+
+    interpret XF86_Next_VMode {
+        action = Private(type=0x86, data="+VMode");
+    };
+    interpret XF86_Prev_VMode {
+        action = Private(type=0x86, data="-VMode");
+    };
+};
+
+partial xkb_compatibility "grab_break" {
+    interpret XF86_Ungrab {
+        action = Private(type=0x86, data="Ungrab");
+    };
+    interpret XF86_ClearGrab {
+        action = Private(type=0x86, data="ClsGrb");
+    };
+};
diff --git a/test/data/keycodes/aliases b/test/data/keycodes/aliases
new file mode 100644 (file)
index 0000000..f398772
--- /dev/null
@@ -0,0 +1,99 @@
+
+// keycode aliases for phonetic keyboard maps
+
+default
+xkb_keycodes "qwerty" {
+
+   alias <LatQ> = <AD01>;
+   alias <LatW> = <AD02>;
+   alias <LatE> = <AD03>;
+   alias <LatR> = <AD04>;
+   alias <LatT> = <AD05>;
+   alias <LatY> = <AD06>;
+   alias <LatU> = <AD07>;
+   alias <LatI> = <AD08>;
+   alias <LatO> = <AD09>;
+   alias <LatP> = <AD10>;
+
+   alias <LatA> = <AC01>;
+   alias <LatS> = <AC02>;
+   alias <LatD> = <AC03>;
+   alias <LatF> = <AC04>;
+   alias <LatG> = <AC05>;
+   alias <LatH> = <AC06>;
+   alias <LatJ> = <AC07>;
+   alias <LatK> = <AC08>;
+   alias <LatL> = <AC09>;
+
+   alias <LatZ> = <AB01>;
+   alias <LatX> = <AB02>;
+   alias <LatC> = <AB03>;
+   alias <LatV> = <AB04>;
+   alias <LatB> = <AB05>;
+   alias <LatN> = <AB06>;
+   alias <LatM> = <AB07>;
+};
+
+xkb_keycodes "azerty" {
+
+   alias <LatA> = <AD01>;
+   alias <LatZ> = <AD02>;
+   alias <LatE> = <AD03>;
+   alias <LatR> = <AD04>;
+   alias <LatT> = <AD05>;
+   alias <LatY> = <AD06>;
+   alias <LatU> = <AD07>;
+   alias <LatI> = <AD08>;
+   alias <LatO> = <AD09>;
+   alias <LatP> = <AD10>;
+
+   alias <LatQ> = <AC01>;
+   alias <LatS> = <AC02>;
+   alias <LatD> = <AC03>;
+   alias <LatF> = <AC04>;
+   alias <LatG> = <AC05>;
+   alias <LatH> = <AC06>;
+   alias <LatJ> = <AC07>;
+   alias <LatK> = <AC08>;
+   alias <LatL> = <AC09>;
+   alias <LatM> = <AC10>;
+
+   alias <LatW> = <AB01>;
+   alias <LatX> = <AB02>;
+   alias <LatC> = <AB03>;
+   alias <LatV> = <AB04>;
+   alias <LatB> = <AB05>;
+   alias <LatN> = <AB06>;
+};
+
+xkb_keycodes "qwertz" {
+
+   alias <LatQ> = <AD01>;
+   alias <LatW> = <AD02>;
+   alias <LatE> = <AD03>;
+   alias <LatR> = <AD04>;
+   alias <LatT> = <AD05>;
+   alias <LatZ> = <AD06>;
+   alias <LatU> = <AD07>;
+   alias <LatI> = <AD08>;
+   alias <LatO> = <AD09>;
+   alias <LatP> = <AD10>;
+
+   alias <LatA> = <AC01>;
+   alias <LatS> = <AC02>;
+   alias <LatD> = <AC03>;
+   alias <LatF> = <AC04>;
+   alias <LatG> = <AC05>;
+   alias <LatH> = <AC06>;
+   alias <LatJ> = <AC07>;
+   alias <LatK> = <AC08>;
+   alias <LatL> = <AC09>;
+
+   alias <LatY> = <AB01>;
+   alias <LatX> = <AB02>;
+   alias <LatC> = <AB03>;
+   alias <LatV> = <AB04>;
+   alias <LatB> = <AB05>;
+   alias <LatN> = <AB06>;
+   alias <LatM> = <AB07>;
+};
diff --git a/test/data/keycodes/evdev b/test/data/keycodes/evdev
new file mode 100644 (file)
index 0000000..624ac68
--- /dev/null
@@ -0,0 +1,314 @@
+// translation from evdev scancodes to something resembling xfree86 keycodes.
+
+default xkb_keycodes "evdev" {
+       minimum = 8;
+       maximum = 255;
+
+        # Added for pc105 compatibility
+        <LSGT> = 94;
+
+       <TLDE> = 49;
+       <AE01> = 10;
+       <AE02> = 11;
+       <AE03> = 12;
+       <AE04> = 13;
+       <AE05> = 14;
+       <AE06> = 15;
+       <AE07> = 16;
+       <AE08> = 17;
+       <AE09> = 18;
+       <AE10> = 19;
+       <AE11> = 20;
+       <AE12> = 21;
+       <BKSP> = 22;
+
+       <TAB> = 23;
+       <AD01> = 24;
+       <AD02> = 25;
+       <AD03> = 26;
+       <AD04> = 27;
+       <AD05> = 28;
+       <AD06> = 29;
+       <AD07> = 30;
+       <AD08> = 31;
+       <AD09> = 32;
+       <AD10> = 33;
+       <AD11> = 34;
+       <AD12> = 35;
+       <BKSL> = 51;
+       alias <AC12> = <BKSL>;
+       <RTRN> = 36;
+
+       <CAPS> = 66;
+       <AC01> = 38;
+       <AC02> = 39;
+       <AC03> = 40;
+       <AC04> = 41;
+       <AC05> = 42;
+       <AC06> = 43;
+       <AC07> = 44;
+       <AC08> = 45;
+       <AC09> = 46;
+       <AC10> = 47;
+       <AC11> = 48;
+
+       <LFSH> = 50;
+       <AB01> = 52;
+       <AB02> = 53;
+       <AB03> = 54;
+       <AB04> = 55;
+       <AB05> = 56;
+       <AB06> = 57;
+       <AB07> = 58;
+       <AB08> = 59;
+       <AB09> = 60;
+       <AB10> = 61;
+       <RTSH> = 62;
+
+       <LALT> = 64;
+       <LCTL> = 37;
+       <SPCE> = 65;
+       <RCTL> = 105;
+       <RALT> = 108;
+       // Microsoft keyboard extra keys
+       <LWIN> = 133;
+       <RWIN> = 134;
+       <COMP> = 135;
+       alias <MENU> = <COMP>;
+
+       <ESC> = 9;
+       <FK01> = 67;
+       <FK02> = 68;
+       <FK03> = 69;
+       <FK04> = 70;
+       <FK05> = 71;
+       <FK06> = 72;
+       <FK07> = 73;
+       <FK08> = 74;
+       <FK09> = 75;
+       <FK10> = 76;
+       <FK11> = 95;
+       <FK12> = 96;
+
+       <PRSC> = 107;
+       // <SYRQ> = 107;
+       <SCLK> = 78;
+       <PAUS> = 127;
+       // <BRK> = 419;
+
+       <INS> = 118;
+       <HOME> = 110;
+       <PGUP> = 112;
+       <DELE> = 119;
+       <END> = 115;
+       <PGDN> = 117;
+
+       <UP> = 111;
+       <LEFT> = 113;
+       <DOWN> = 116;
+       <RGHT> = 114;
+
+       <NMLK> = 77;
+       <KPDV> = 106;
+       <KPMU> = 63;
+       <KPSU> = 82;
+
+       <KP7> = 79;
+       <KP8> = 80;
+       <KP9> = 81;
+       <KPAD> = 86;
+
+       <KP4> = 83;
+       <KP5> = 84;
+       <KP6> = 85;
+
+       <KP1> = 87;
+       <KP2> = 88;
+       <KP3> = 89;
+       <KPEN> = 104;
+
+       <KP0> = 90;
+       <KPDL> = 91;
+       <KPEQ> = 125;
+
+       <FK13> = 191;
+       <FK14> = 192;
+       <FK15> = 193;
+       <FK16> = 194;
+       <FK17> = 195;
+       <FK18> = 196;
+       <FK19> = 197;
+       <FK20> = 198;
+       <FK21> = 199;
+       <FK22> = 200;
+       <FK23> = 201;
+       <FK24> = 202;
+
+       // Keys that are generated on Japanese keyboards
+
+       //<HZTG> =  93; // Hankaku/Zenkakau toggle - not actually used
+       alias <HZTG> = <TLDE>;
+       <HKTG> = 101;   // Hiragana/Katakana toggle
+       <AB11> = 97;    // backslash/underscore
+       <HENK> = 100;   // Henkan
+       <MUHE> = 102;   // Muhenkan
+       <AE13> = 132;   // Yen
+       <KATA> =  98;   // Katakana
+       <HIRA> =  99;   // Hiragana
+       <JPCM> = 103;   // KPJPComma
+       //<RO>   =  97; // Romaji
+
+       // Keys that are generated on Korean keyboards
+
+       <HNGL> = 130;   // Hangul Latin toggle
+       <HJCV> = 131;   // Hangul to Hanja conversion
+
+       // Solaris compatibility
+
+       alias <LMTA> = <LWIN>;
+       alias <RMTA> = <RWIN>;
+       <MUTE> = 121;
+       <VOL-> = 122;
+       <VOL+> = 123;
+       <POWR> = 124;
+       <STOP> = 136;
+       <AGAI> = 137;
+       <PROP> = 138;
+       <UNDO> = 139;
+       <FRNT> = 140;
+       <COPY> = 141;
+       <OPEN> = 142;
+       <PAST> = 143;
+       <FIND> = 144;
+       <CUT>  = 145;
+       <HELP> = 146;
+
+       // Extended keys that may be generated on "Internet" keyboards.
+       // evdev has standardize names for these.
+
+       <LNFD> = 109;   // #define KEY_LINEFEED            101
+       <I120> = 120;   // #define KEY_MACRO               112
+       <I126> = 126;   // #define KEY_KPPLUSMINUS         118
+       <I128> = 128;   // #define KEY_SCALE               120
+       <I129> = 129;   // #define KEY_KPCOMMA             121
+       <I147> = 147;   // #define KEY_MENU                139
+       <I148> = 148;   // #define KEY_CALC                140
+       <I149> = 149;   // #define KEY_SETUP               141
+       <I150> = 150;   // #define KEY_SLEEP               142
+       <I151> = 151;   // #define KEY_WAKEUP              143
+       <I152> = 152;   // #define KEY_FILE                144
+       <I153> = 153;   // #define KEY_SENDFILE            145
+       <I154> = 154;   // #define KEY_DELETEFILE          146
+       <I155> = 155;   // #define KEY_XFER                147
+       <I156> = 156;   // #define KEY_PROG1               148
+       <I157> = 157;   // #define KEY_PROG2               149
+       <I158> = 158;   // #define KEY_WWW                 150
+       <I159> = 159;   // #define KEY_MSDOS               151
+       <I160> = 160;   // #define KEY_COFFEE              152
+       <I161> = 161;   // #define KEY_DIRECTION           153
+       <I162> = 162;   // #define KEY_CYCLEWINDOWS        154
+       <I163> = 163;   // #define KEY_MAIL                155
+       <I164> = 164;   // #define KEY_BOOKMARKS           156
+       <I165> = 165;   // #define KEY_COMPUTER            157
+       <I166> = 166;   // #define KEY_BACK                158
+       <I167> = 167;   // #define KEY_FORWARD             159
+       <I168> = 168;   // #define KEY_CLOSECD             160
+       <I169> = 169;   // #define KEY_EJECTCD             161
+       <I170> = 170;   // #define KEY_EJECTCLOSECD        162
+       <I171> = 171;   // #define KEY_NEXTSONG            163
+       <I172> = 172;   // #define KEY_PLAYPAUSE           164
+       <I173> = 173;   // #define KEY_PREVIOUSSONG        165
+       <I174> = 174;   // #define KEY_STOPCD              166
+       <I175> = 175;   // #define KEY_RECORD              167
+       <I176> = 176;   // #define KEY_REWIND              168
+       <I177> = 177;   // #define KEY_PHONE               169
+       <I178> = 178;   // #define KEY_ISO                 170
+       <I179> = 179;   // #define KEY_CONFIG              171
+       <I180> = 180;   // #define KEY_HOMEPAGE            172
+       <I181> = 181;   // #define KEY_REFRESH             173
+       <I182> = 182;   // #define KEY_EXIT                174
+       <I183> = 183;   // #define KEY_MOVE                175
+       <I184> = 184;   // #define KEY_EDIT                176
+       <I185> = 185;   // #define KEY_SCROLLUP            177
+       <I186> = 186;   // #define KEY_SCROLLDOWN          178
+       <I187> = 187;   // #define KEY_KPLEFTPAREN         179
+       <I188> = 188;   // #define KEY_KPRIGHTPAREN        180
+       <I189> = 189;   // #define KEY_NEW                 181
+       <I190> = 190;   // #define KEY_REDO                182
+       <I208> = 208;   // #define KEY_PLAYCD              200
+       <I209> = 209;   // #define KEY_PAUSECD             201
+       <I210> = 210;   // #define KEY_PROG3               202
+       <I211> = 211;   // #define KEY_PROG4               203 conflicts with AB11
+       <I212> = 212;   // #define KEY_DASHBOARD           204
+       <I213> = 213;   // #define KEY_SUSPEND             205
+       <I214> = 214;   // #define KEY_CLOSE               206
+       <I215> = 215;   // #define KEY_PLAY                207
+       <I216> = 216;   // #define KEY_FASTFORWARD         208
+       <I217> = 217;   // #define KEY_BASSBOOST           209
+       <I218> = 218;   // #define KEY_PRINT               210
+       <I219> = 219;   // #define KEY_HP                  211
+       <I220> = 220;   // #define KEY_CAMERA              212
+       <I221> = 221;   // #define KEY_SOUND               213
+       <I222> = 222;   // #define KEY_QUESTION            214
+       <I223> = 223;   // #define KEY_EMAIL               215
+       <I224> = 224;   // #define KEY_CHAT                216
+       <I225> = 225;   // #define KEY_SEARCH              217
+       <I226> = 226;   // #define KEY_CONNECT             218
+       <I227> = 227;   // #define KEY_FINANCE             219
+       <I228> = 228;   // #define KEY_SPORT               220
+       <I229> = 229;   // #define KEY_SHOP                221
+       <I230> = 230;   // #define KEY_ALTERASE            222
+       <I231> = 231;   // #define KEY_CANCEL              223
+       <I232> = 232;   // #define KEY_BRIGHTNESSDOWN      224
+       <I233> = 233;   // #define KEY_BRIGHTNESSUP        225
+       <I234> = 234;   // #define KEY_MEDIA               226
+       <I235> = 235;   // #define KEY_SWITCHVIDEOMODE     227
+       <I236> = 236;   // #define KEY_KBDILLUMTOGGLE      228
+       <I237> = 237;   // #define KEY_KBDILLUMDOWN        229
+       <I238> = 238;   // #define KEY_KBDILLUMUP          230
+       <I239> = 239;   // #define KEY_SEND                231
+       <I240> = 240;   // #define KEY_REPLY               232
+       <I241> = 241;   // #define KEY_FORWARDMAIL         233
+       <I242> = 242;   // #define KEY_SAVE                234
+       <I243> = 243;   // #define KEY_DOCUMENTS           235
+       <I244> = 244;   // #define KEY_BATTERY             236
+       <I245> = 245;   // #define KEY_BLUETOOTH           237
+       <I246> = 246;   // #define KEY_WLAN                238
+       <I247> = 247;   // #define KEY_UWB                 239
+       <I248> = 248;   // #define KEY_UNKNOWN             240
+       <I249> = 249;   // #define KEY_VIDEO_NEXT          241
+       <I250> = 250;   // #define KEY_VIDEO_PREV          242
+       <I251> = 251;   // #define KEY_BRIGHTNESS_CYCLE    243
+       <I252> = 252;   // #define KEY_BRIGHTNESS_ZERO     244
+       <I253> = 253;   // #define KEY_DISPLAY_OFF         245
+
+       // Fake keycodes for virtual keys
+       <LVL3> =   92;
+       <MDSW> =   203;
+       <ALT>  =   204;
+       <META> =   205;
+       <SUPR> =   206;
+       <HYPR> =   207;
+
+       indicator 1  = "Caps Lock";
+       indicator 2  = "Num Lock";
+       indicator 3  = "Scroll Lock";
+       indicator 4  = "Compose";
+       indicator 5  = "Kana";
+       indicator 6  = "Sleep";
+       indicator 7  = "Suspend";
+       indicator 8  = "Mute";
+       indicator 9  = "Misc";
+       indicator 10 = "Mail";
+       indicator 11 = "Charging";
+
+       alias <ALGR> = <RALT>;
+
+       // For Brazilian ABNT2
+       alias <KPPT> = <I129>;
+};
+
+// PC98
+xkb_keycodes "pc98" {
+    include "evdev(evdev)"
+};
index 4b06836..654aed6 100644 (file)
@@ -1,5 +1,5 @@
 xkb_keymap {
-    xkb_keycodes  { include "xfree86+aliases(qwerty)" };
+    xkb_keycodes  { include "evdev+aliases(qwerty)" };
     xkb_types     { include "complete" };
     xkb_compat    { include "complete" };
     xkb_symbols   { include "pc+us" };
index 6606fc1..c40ceb9 100644 (file)
@@ -1,5 +1,5 @@
 xkb_keymap {
-    xkb_keycodes  { include "xfree86+aliases(qwerty)" };
+    xkb_keycodes  { include "evdev+aliases(qwerty)" };
     xkb_types     { include "complete" };
     xkb_compat    { include "complete" };
     xkb_symbols   { include "pc+us" };
@@ -7,7 +7,7 @@ xkb_keymap {
 };
 
 default xkb_keymap {
-    xkb_keycodes  { include "xfree86+aliases(qwertz)" };
+    xkb_keycodes  { include "evdev+aliases(qwertz)" };
     xkb_types     { include "complete" };
     xkb_compat    { include "complete" };
     xkb_symbols   { include "pc+de" };
diff --git a/test/data/rules/evdev b/test/data/rules/evdev
new file mode 100644 (file)
index 0000000..874dce2
--- /dev/null
@@ -0,0 +1,1098 @@
+// DO NOT EDIT THIS FILE - IT WAS AUTOGENERATED BY merge.sh FROM rules/*.part
+//
+//  Rules for resolving XKB components for use with XFree86
+//  Copyright 1996 by Joseph Moss
+//
+//  2002 Modifier: Ivan Pascal      The XFree86 Project
+//
+
+// If you want non-latin layouts implicitly include the en_US layout
+// uncomment lines below
+//! $nonlatin = am ara ben bd bg bt by cs deva ge gh gr guj guru il \
+//              in ir iku jp kan kh kr la lao lk mk mm mn mv mal ori pk \
+//              ru scc sy syr tel th tj tam ua uz
+
+// PC models
+! $pcmodels = pc101 pc102 pc104 pc105
+
+// Microsoft models (using MS geometry)
+! $msmodels = microsoft microsoft4000 microsoft7000 microsoftpro microsoftprousb microsoftprose
+
+// Nokia devices and keyboards
+! $nokiamodels = nokiasu8w nokiarx44 nokiarx51
+
+// PC geometries - they have special geometry but symbols are mostly pc105
+! $pcgeometries = latitude
+
+// TypeMatrix geometries
+! $tmgeometries = tm2020 tm2030PS2 tm2030USB tm2030USB-102 tm2030USB-106
+
+// Layouts that provide further specializations for the OLPC
+! $olpclayouts = af am ara br ca es et fr it kh kz in mn np ru th tr us 
+
+! $macbooks = macbook78 macbook79
+! $maclaptop = ibook powerbook macbook78 macbook79
+! $applealu = applealu_ansi applealu_iso applealu_jis
+! $macs = macintosh macintosh_old ibook powerbook macbook78 macbook79
+
+! $macvendorlayouts = ch de dk fi fr gb is it latam nl no pt se us
+
+! $azerty = be fr
+! $qwertz = al cz de hr hu ro si sk 
+
+! $inetkbds = acer_c300 acer_ferrari4k acer_laptop \
+              airkey \
+              apple armada azonaRF2300 \
+              benqx brother \
+              btc5113rf btc9000 btc9000a btc9001ah btc5090 btc9019u \
+              cherryblue cherrybluea cherryblueb \
+              cherrycyboard cherrycmexpert \
+              chicony chicony0108 chicony0420 chicony9885 \
+              compalfl90 \
+              compaqeak8 compaqik7 compaqik13 compaqik18 \
+              creativedw7000 \
+              cymotionlinux \
+              dell dellm65 inspiron dellusbmm \
+              emachines ennyah_dkb1008 evdev \
+              genius geniuscomfy2 \
+              gyration honeywell_euroboard \
+              hp250x hp5xx hp500fa hpdv5 \
+              hpi6 hpxe3gc hpxe3gf hpxe4xxx hpxt1000 hpzt11xx htcdream \
+              ibm_spacesaver ipaq inspiron intel \
+              logiaccess logicda logicink \
+              logiex110 logiclx300 \
+              logiinkse logiinkseusb logiitc logiik \
+              logitech_base itouch logiultrax \
+              logitech_g15 \
+              logidinovo logidinovoedge \
+              microsoft4000 microsoft7000 microsoftinet microsoftprousb microsoftprooem microsoftprose \
+              microsoftoffice microsoftmult \
+              mx1998 mx2500 mx2750 \
+              oretec \
+              pc105 \
+              presario propeller \
+              qtronix \
+              rapidaccess rapidaccess2 thinkpad60 \
+              samsung4500 samsung4510 \
+              silvercrest \
+              sk1300 sk2500 sk6200 sk7100 \
+              sven sven303 symplon \
+              toshiba_s3000 trust trustda \
+              unitekkb1925 yahoo
+
+// all layouts with 3rd and 4th groups
+! $threelevellayouts = al az \
+              be br bt \
+              ca ch cs cz \
+              de dk \
+              ee es \
+              fi fo fr \
+              gb gr \
+              hu \
+              ie ir is it \
+              latam \
+              lk lt \
+              mn mt \
+              nl no \
+              pl pt \
+              ro \
+              se sk \
+              tr \
+              us \
+              vn \
+              za
+
+! $evdevkbds = ibm_spacesaver
+
+! $thinkpads = thinkpad thinkpad60 thinkpadz60
+
+! $sun_t6_custom = ara be br ca ch cz de dk \
+                   ee es fi fr gb gr it kr \
+                   lt lv nl no pl pt ro ru \
+                   se sk tr tw ua
+
+! $htcdreamlayouts = us it de
+
+! $dvoraklayouts = br ca de ee es fr gb no pl se us
+
+! model                =       keycodes
+  pc98         =       evdev(pc98)
+  applealu_jis =       evdev+macintosh(jisevdev)
+  *            =       evdev
+
+! layout[1]    =       keycodes
+  $azerty       =       +aliases(azerty)
+  $qwertz       =       +aliases(qwertz)
+  *             =       +aliases(qwerty)
+
+! layout       =       keycodes
+  $azerty       =       +aliases(azerty)
+  $qwertz       =       +aliases(qwertz)
+  *             =       +aliases(qwerty)
+
+! option       =       keycodes
+  apple:badmap         =       +macintosh(badmap)
+  apple:goodmap                =       +macintosh(goodmap)
+
+! model                layout  =       geometry
+  thinkpad     us              =       thinkpad(us)
+
+! model                =       geometry
+  microsoftelite       =       microsoft(elite)
+ $msmodels     =       microsoft(natural)
+  dell101      =       dell(dell101)
+  dellm65      =       dell(dellm65)
+  latitude     =       dell(latitude)
+  flexpro      =       keytronic(FlexPro)
+  hp6000       =       hp(omnibook)
+  hpmini110    =       hp(mini110)
+  hpdv5                =       hp(dv5)
+  omnikey101   =       northgate(omnikey101)
+  sanwaskbkg3  =       sanwa(sanwaskbkg3)
+ $pcmodels     =       pc(%m)
+ $pcgeometries =       pc(%m)
+  everex       =       everex(STEPnote)
+  thinkpad     =       thinkpad(intl)
+  thinkpad60   =       thinkpad(60)
+  thinkpadz60  =       thinkpad(60)
+ $tmgeometries =       typematrix(%m)
+  winbook      =       winbook(XP5)
+  pc98         =       nec(pc98)
+ $applealu     =       macintosh(%m)
+ $macbooks      =       macintosh(%m)
+ $macs         =       macintosh(macintosh)
+  hhk          =       hhk(basic)
+  kinesis      =       kinesis(model100)
+ $nokiamodels  =       nokia(%m)
+  *            =       pc(pc104)
+
+! model                layout          variant         =       symbols
+  *            ben             basic           =       pc+in(ben)
+  *            ben             probhat         =       pc+in(ben_probhat)
+  *            dev             basic           =       pc+in(deva)
+  *            dvorak          $dvoraklayouts          =       pc+%v(dvorak)
+  *            dvorak          basic           =       pc+us(dvorak)
+  *            dvorak          pl_basic                =       pc+pl(dvorak)
+  *            dvorak          pl              =       pc+pl(dvorak_quotes)
+  *            dvorak          pl_altquotes            =       pc+pl(dvorak_altquotes)
+  *            dzdwi           basic           =       pc+bt(basic)
+  *            fi              basic           =       pc+fi(classic)
+  *            ge              azerty_tskapo           =       pc+fr(geo)
+  *            guj             basic           =       pc+in(guj)
+  *            gur             basic           =       pc+in(guru)
+  *            ie              laptop          =       pc+ie(basic)
+  *            ie              CloGaelachLaptop                =       pc+ie(CloGaelach)
+  *            in              urd             =       pc+in(urd-phonetic)
+  *            iu              basic           =       pc+ca(ike)
+  *            lo              basic           =       pc+la(basic)
+  *            kan             basic           =       pc+in(kan)
+  *            mal             basic           =       pc+in(mal)
+  *            mal             mlplusnum               =       pc+in(mal)
+  *            ogham           basic           =       pc+ie(ogam)
+  *            ogham           laptop          =       pc+ie(ogam)
+  *            ogham           is434           =       pc+ie(ogam_is434)
+  *            ogham           is434laptop             =       pc+ie(ogam_is434)
+  *            ori             basic           =       pc+in(ori)
+  *            ro              de              =       pc+ro(winkeys)
+  *            ro              us              =       pc+ro(std)
+  *            ro              academic                =       pc+ro(std)
+  *            ro              std_comma               =       pc+ro(std)
+  *            ro              comma           =       pc+ro(basic)
+  *            ru              os              =       pc+ru(os_legacy)
+  *            pk              urd             =       pc+pk(urd-phonetic)
+  *            sapmi           basic           =       pc+no(smi)
+  *            sapmi           nodeadkeys              =       pc+no(smi_nodeadkeys)
+  *            sapmi           sefi            =       pc+fi(smi)
+  *            sin             phonetic-static         =       pc+in(sin_phonetic)
+  *            syr             basic           =       pc+sy(syc)
+  *            syr             phonetic                =       pc+sy(syc_phonetic)
+  *            tam             INSCRIPT                =       pc+in(tam)
+  *            tam             UNI             =       pc+in(tam_unicode)
+  *            tam             NUMERAL-KEYBOARD                =       pc+in(tam_keyboard_with_numerals)
+  *            tam             TAB             =       pc+in(tam_TAB)
+  *            tam             TSCII           =       pc+in(tam_TSCII)
+  *            tel             basic           =       pc+in(tel)
+  *            yu              basic           =       pc+srp(latin)
+  *            yu              unicode         =       pc+srp(latinunicode)
+  *            yu              yz              =       pc+srp(latinyz)
+  *            yu              unicodeyz               =       pc+srp(latinunicodeyz)
+  classmate    us              intl            =       pc+us(classmate-intl)
+  classmate    us              alt-intl        =       pc+us(classmate-alt-intl)
+  classmate    us              altgr-intl      =       pc+us(classmate-altgr-intl)
+  nokiarx51    cz              qwerty          =       nokia_vndr/rx-51(cz_qwerty)
+
+! model                layout                          =       symbols
+  *            ar                      =       pc+ara
+  *            ben                     =       pc+in(ben)
+  *            bs                      =       pc+ba
+  *            cs                      =       pc+rs
+  *            cz_qwerty                       =       pc+cz(qwerty)
+  *            dev                     =       pc+in(deva)
+  *            dvorak                  =       pc+us(dvorak)
+  *            dzdwi                   =       pc+bt
+  *            el                      =       pc+gr
+  *            en_US                   =       pc+latin
+  *            guj                     =       pc+in(guj)
+  *            gur                     =       pc+in(guru)
+  *            iu                      =       pc+ca(ike)
+  *            lo                      =       pc+la
+  *            kan                     =       pc+in(kan)
+  *            mi                      =       pc+mao
+  *            ml                      =       pc+in(mal)
+  *            ogham                   =       pc+ie(ogam)
+  *            ori                     =       pc+ie(ori)
+  *            sapmi                   =       pc+no(smi)
+  *            sr                      =       pc+srp
+  *            syr                     =       pc+sy(syc)
+  *            tel                     =       pc+in(tel)
+  *            tml                     =       pc+in(tam)
+  *            yu                      =       pc+srp
+  *            fr-latin9                       =       pc+fr(latin9)
+  *            us_intl                 =       pc+us(alt-intl)
+  *            ben(basic)                      =       pc+in(ben)
+  *            ben(probhat)                    =       pc+in(ben_probhat)
+  *            dev(basic)                      =       pc+in(deva)
+  *            dvorak($dvoraklayouts)                  =       pc+%v(dvorak)
+  *            dvorak(basic)                   =       pc+us(dvorak)
+  *            dvorak(pl_basic)                        =       pc+pl(dvorak)
+  *            dvorak(pl)                      =       pc+pl(dvorak_quotes)
+  *            dvorak(pl_altquotes)                    =       pc+pl(dvorak_altquotes)
+  *            dzdwi(basic)                    =       pc+bt(basic)
+  *            fi(basic)                       =       pc+fi(classic)
+  *            ge(azerty_tskapo)                       =       pc+fr(geo)
+  *            guj(basic)                      =       pc+in(guj)
+  *            gur(basic)                      =       pc+in(guru)
+  *            ie(laptop)                      =       pc+ie(basic)
+  *            ie(CloGaelachLaptop)                    =       pc+ie(CloGaelach)
+  *            in(urd)                 =       pc+in(urd-phonetic)
+  *            iu(basic)                       =       pc+ca(ike)
+  *            lo(basic)                       =       pc+la(basic)
+  *            kan(basic)                      =       pc+in(kan)
+  *            mal(basic)                      =       pc+in(mal)
+  *            mal(mlplusnum)                  =       pc+in(mal)
+  *            ogham(basic)                    =       pc+ie(ogam)
+  *            ogham(laptop)                   =       pc+ie(ogam)
+  *            ogham(is434)                    =       pc+ie(ogam_is434)
+  *            ogham(is434laptop)                      =       pc+ie(ogam_is434)
+  *            ori(basic)                      =       pc+in(ori)
+  *            ro(de)                  =       pc+ro(winkeys)
+  *            ro(us)                  =       pc+ro(std)
+  *            ro(academic)                    =       pc+ro(std)
+  *            ro(std_comma)                   =       pc+ro(std)
+  *            ro(comma)                       =       pc+ro(basic)
+  *            ru(os)                  =       pc+ru(os_legacy)
+  *            pk(urd)                 =       pc+pk(urd-phonetic)
+  *            sapmi(basic)                    =       pc+no(smi)
+  *            sapmi(nodeadkeys)                       =       pc+no(smi_nodeadkeys)
+  *            sapmi(sefi)                     =       pc+fi(smi)
+  *            sin(phonetic-static)                    =       pc+in(sin_phonetic)
+  *            syr(basic)                      =       pc+sy(syc)
+  *            syr(phonetic)                   =       pc+sy(syc_phonetic)
+  *            tam(INSCRIPT)                   =       pc+in(tam)
+  *            tam(UNI)                        =       pc+in(tam_unicode)
+  *            tam(NUMERAL-KEYBOARD)                   =       pc+in(tam_keyboard_with_numerals)
+  *            tam(TAB)                        =       pc+in(tam_TAB)
+  *            tam(TSCII)                      =       pc+in(tam_TSCII)
+  *            tel(basic)                      =       pc+in(tel)
+  *            yu(basic)                       =       pc+srp(latin)
+  *            yu(unicode)                     =       pc+srp(latinunicode)
+  *            yu(yz)                  =       pc+srp(latinyz)
+  *            yu(unicodeyz)                   =       pc+srp(latinunicodeyz)
+  ataritt      $nonlatin               =       xfree68_vndr/ataritt(us)+%l%(v):2
+  ataritt      *                       =       xfree68_vndr/ataritt(us)+%l%(v)
+  amiga                $nonlatin               =       xfree68_vndr/amiga(usa1)+%l%(v):2
+  amiga                *                       =       xfree68_vndr/amiga(usa1)+%l%(v)
+  classmate    us                      =       pc+%l(classmate)
+  empty         *                       =       empty(basic)
+  *             empty                   =       empty(basic)
+  sun4         $nonlatin               =       latin+sun_vndr/us(type4)+%l%(v):2
+  sun4         *                       =       latin+sun_vndr/us(type4)+%l%(v)
+  sun5         $nonlatin               =       latin+sun_vndr/us(type5)+%l%(v):2
+  sun5         *                       =       latin+sun_vndr/us(type5)+%l%(v)
+  sun6         us                      =       pc+sun_vndr/us(type6)
+  sun6         en_US                   =       pc+sun_vndr/us(type6)+iso9995-3(basic)
+  sun6         $sun_t6_custom          =       pc+sun_vndr/us(type6)+sun_vndr/%l%(v)
+  sun6         *                       =       pc+sun_vndr/us(type6)+%l%(v)
+  sun6euro     us                      =       pc+sun_vndr/us(type6)
+  sun6euro     en_US                   =       pc+sun_vndr/us(type6)+iso9995-3(basic)
+  sun6euro     $sun_t6_custom          =       pc+sun_vndr/us(type6)+sun_vndr/%l%(v)
+  sun6euro     *                       =       pc+sun_vndr/us(type6)+%l%(v)
+  pc98         nec_vndr/jp             =       nec_vndr/jp(pc98)
+  macintosh_old        us                      =       macintosh_vndr/us(oldmac)
+  macintosh_old        en_US                   =       macintosh_vndr/us(oldmac)
+  macintosh_old        $macvendorlayouts       =       macintosh_vndr/us(oldmac)+macintosh_vndr/%l%(v)
+  macintosh_old        $nonlatin               =       macintosh_vndr/us(oldmac)+%l%(v):2
+  macintosh_old        *                       =       macintosh_vndr/us(oldmac)+%l%(v)
+  applealu_jis jp                      =       macintosh_vndr/apple(alukbd)+macintosh_vndr/jp(usmac)+macintosh_vndr/jp(mac):2
+  applealu_jis *                       =       macintosh_vndr/apple(alukbd)+%l%(v)+macintosh_vndr/jp(mac):2
+ $applealu     $macvendorlayouts       =       macintosh_vndr/apple(alukbd)+macintosh_vndr/%l%(v)
+ $applealu     *                       =       macintosh_vndr/apple(alukbd)+%l%(v)
+ $macs         en_US                   =       pc+macintosh_vndr/us(extended)
+ $macs         $macvendorlayouts       =       pc+macintosh_vndr/%l%(v)
+  nokiarx44    *                       =       nokia_vndr/rx-44(%l)
+  nokiarx51    cz(qwerty)              =       nokia_vndr/rx-51(common)+nokia_vndr/rx-51(cz_qwerty)
+  nokiarx51    *                       =       nokia_vndr/rx-51(common)+nokia_vndr/rx-51(%l%_v)
+  nokiasu8w    *                       =       nokia_vndr/su-8w(%l)
+  olpc         $olpclayouts            =       olpc+%l%(m)
+  olpc         *                       =       olpc+%l%(v)
+ $thinkpads    br                      =       pc+br(thinkpad)
+  htcdream     $htcdreamlayouts        =       %l(htcdream)
+  *            $nonlatin               =       pc+us+%l%(v):2
+  *            *                       =       pc+%l%(v)
+
+! model                layout[1]                       =       symbols
+  *            ar                      =       pc+ara%(v[1])
+  *            ben                     =       pc+in(ben)
+  *            bs                      =       pc+ba%(v[1])
+  *            cs                      =       pc+rs%(v[1])
+  *            cz_qwerty                       =       pc+cz(qwerty)
+  *            dev                     =       pc+in(deva)
+  *            dvorak                  =       pc+us(dvorak)
+  *            dzdwi                   =       pc+bt%(v[1])
+  *            el                      =       pc+gr%(v[1])
+  *            en_US                   =       pc+latin%(v[1])
+  *            guj                     =       pc+in(guj)
+  *            gur                     =       pc+in(guru)
+  *            iu                      =       pc+ca(ike)
+  *            lo                      =       pc+la%(v[1])
+  *            kan                     =       pc+in(kan)
+  *            mi                      =       pc+mao%(v[1])
+  *            ml                      =       pc+in(mal)
+  *            ogham                   =       pc+ie(ogam)
+  *            ori                     =       pc+ie(ori)
+  *            sapmi                   =       pc+no(smi)
+  *            sr                      =       pc+srp%(v[1])
+  *            syr                     =       pc+sy(syc)
+  *            tel                     =       pc+in(tel)
+  *            tml                     =       pc+in(tam)
+  *            yu                      =       pc+srp%(v[1])
+  *            fr-latin9                       =       pc+fr(latin9)
+  *            us_intl                 =       pc+us(alt-intl)
+  *            ben(basic)                      =       pc+in(ben)
+  *            ben(probhat)                    =       pc+in(ben_probhat)
+  *            dev(basic)                      =       pc+in(deva)
+  *            dvorak($dvoraklayouts)                  =       pc+%v(dvorak)
+  *            dvorak(basic)                   =       pc+us(dvorak)
+  *            dvorak(pl_basic)                        =       pc+pl(dvorak)
+  *            dvorak(pl)                      =       pc+pl(dvorak_quotes)
+  *            dvorak(pl_altquotes)                    =       pc+pl(dvorak_altquotes)
+  *            dzdwi(basic)                    =       pc+bt(basic)
+  *            fi(basic)                       =       pc+fi(classic)
+  *            ge(azerty_tskapo)                       =       pc+fr(geo)
+  *            guj(basic)                      =       pc+in(guj)
+  *            gur(basic)                      =       pc+in(guru)
+  *            ie(laptop)                      =       pc+ie(basic)
+  *            ie(CloGaelachLaptop)                    =       pc+ie(CloGaelach)
+  *            in(urd)                 =       pc+in(urd-phonetic)
+  *            iu(basic)                       =       pc+ca(ike)
+  *            lo(basic)                       =       pc+la(basic)
+  *            kan(basic)                      =       pc+in(kan)
+  *            mal(basic)                      =       pc+in(mal)
+  *            mal(mlplusnum)                  =       pc+in(mal)
+  *            ogham(basic)                    =       pc+ie(ogam)
+  *            ogham(laptop)                   =       pc+ie(ogam)
+  *            ogham(is434)                    =       pc+ie(ogam_is434)
+  *            ogham(is434laptop)                      =       pc+ie(ogam_is434)
+  *            ori(basic)                      =       pc+in(ori)
+  *            ro(de)                  =       pc+ro(winkeys)
+  *            ro(us)                  =       pc+ro(std)
+  *            ro(academic)                    =       pc+ro(std)
+  *            ro(std_comma)                   =       pc+ro(std)
+  *            ro(comma)                       =       pc+ro(basic)
+  *            ru(os)                  =       pc+ru(os_legacy)
+  *            pk(urd)                 =       pc+pk(urd-phonetic)
+  *            sapmi(basic)                    =       pc+no(smi)
+  *            sapmi(nodeadkeys)                       =       pc+no(smi_nodeadkeys)
+  *            sapmi(sefi)                     =       pc+fi(smi)
+  *            sin(phonetic-static)                    =       pc+in(sin_phonetic)
+  *            syr(basic)                      =       pc+sy(syc)
+  *            syr(phonetic)                   =       pc+sy(syc_phonetic)
+  *            tam(INSCRIPT)                   =       pc+in(tam)
+  *            tam(UNI)                        =       pc+in(tam_unicode)
+  *            tam(NUMERAL-KEYBOARD)                   =       pc+in(tam_keyboard_with_numerals)
+  *            tam(TAB)                        =       pc+in(tam_TAB)
+  *            tam(TSCII)                      =       pc+in(tam_TSCII)
+  *            tel(basic)                      =       pc+in(tel)
+  *            yu(basic)                       =       pc+srp(latin)
+  *            yu(unicode)                     =       pc+srp(latinunicode)
+  *            yu(yz)                  =       pc+srp(latinyz)
+  *            yu(unicodeyz)                   =       pc+srp(latinunicodeyz)
+  ataritt      *                       =       xfree68_vndr/ataritt(us)+%l[1]%(v[1])
+  amiga                *                       =       xfree68_vndr/amiga(usa1)+%l[1]%(v[1])
+  sun4         *                       =       latin+sun_vndr/us(type4)+%l[1]%(v[1])
+  sun5         *                       =       latin+sun_vndr/us(type5)+%l[1]%(v[1])
+  macintosh_old        us                      =       macintosh_vndr/us(oldmac)
+  macintosh_old        $macvendorlayouts       =       macintosh_vndr/us(oldmac)+macintosh_vndr/%l[1]%(v[1])
+  macintosh_old        *                       =       macintosh_vndr/us(oldmac)+%l[1]%(v[1])
+  applealu_jis us                      =       macintosh_vndr/apple(alukbd)+macintosh_vndr/jp(usmac)
+ $applealu     $macvendorlayouts       =       macintosh_vndr/apple(alukbd)+macintosh_vndr/%l[1]%(v[1])
+ $applealu     *                       =       macintosh_vndr/apple(alukbd)+%l[1]%(v[1])
+ $macs         $macvendorlayouts       =       pc+macintosh_vndr/%l[1]%(v[1])
+  nokiarx51    cz(qwerty)              =       nokia_vndr/rx-51(common)+nokia_vndr/rx-51(cz_qwerty)
+  nokiarx51    *                       =       nokia_vndr/rx-51(common)+nokia_vndr/rx-51(%l[1]%_v[1])
+ $thinkpads    br                      =       pc+%l[1](thinkpad)
+  *            *                       =       pc+%l[1]%(v[1])
+
+! model                layout[1]       variant[1]      =       symbols
+  *            ben             basic           =       pc+in(ben)
+  *            ben             probhat         =       pc+in(ben_probhat)
+  *            dev             basic           =       pc+in(deva)
+  *            dvorak          $dvoraklayouts          =       pc+%v(dvorak)
+  *            dvorak          basic           =       pc+us(dvorak)
+  *            dvorak          pl_basic                =       pc+pl(dvorak)
+  *            dvorak          pl              =       pc+pl(dvorak_quotes)
+  *            dvorak          pl_altquotes            =       pc+pl(dvorak_altquotes)
+  *            dzdwi           basic           =       pc+bt(basic)
+  *            fi              basic           =       pc+fi(classic)
+  *            ge              azerty_tskapo           =       pc+fr(geo)
+  *            guj             basic           =       pc+in(guj)
+  *            gur             basic           =       pc+in(guru)
+  *            ie              laptop          =       pc+ie(basic)
+  *            ie              CloGaelachLaptop                =       pc+ie(CloGaelach)
+  *            in              urd             =       pc+in(urd-phonetic)
+  *            iu              basic           =       pc+ca(ike)
+  *            lo              basic           =       pc+la(basic)
+  *            kan             basic           =       pc+in(kan)
+  *            mal             basic           =       pc+in(mal)
+  *            mal             mlplusnum               =       pc+in(mal)
+  *            ogham           basic           =       pc+ie(ogam)
+  *            ogham           laptop          =       pc+ie(ogam)
+  *            ogham           is434           =       pc+ie(ogam_is434)
+  *            ogham           is434laptop             =       pc+ie(ogam_is434)
+  *            ori             basic           =       pc+in(ori)
+  *            ro              de              =       pc+ro(winkeys)
+  *            ro              us              =       pc+ro(std)
+  *            ro              academic                =       pc+ro(std)
+  *            ro              std_comma               =       pc+ro(std)
+  *            ro              comma           =       pc+ro(basic)
+  *            ru              os              =       pc+ru(os_legacy)
+  *            pk              urd             =       pc+pk(urd-phonetic)
+  *            sapmi           basic           =       pc+no(smi)
+  *            sapmi           nodeadkeys              =       pc+no(smi_nodeadkeys)
+  *            sapmi           sefi            =       pc+fi(smi)
+  *            sin             phonetic-static         =       pc+in(sin_phonetic)
+  *            syr             basic           =       pc+sy(syc)
+  *            syr             phonetic                =       pc+sy(syc_phonetic)
+  *            tam             INSCRIPT                =       pc+in(tam)
+  *            tam             UNI             =       pc+in(tam_unicode)
+  *            tam             NUMERAL-KEYBOARD                =       pc+in(tam_keyboard_with_numerals)
+  *            tam             TAB             =       pc+in(tam_TAB)
+  *            tam             TSCII           =       pc+in(tam_TSCII)
+  *            tel             basic           =       pc+in(tel)
+  *            yu              basic           =       pc+srp(latin)
+  *            yu              unicode         =       pc+srp(latinunicode)
+  *            yu              yz              =       pc+srp(latinyz)
+  *            yu              unicodeyz               =       pc+srp(latinunicodeyz)
+
+! model                layout[2]       =       symbols
+  *            ar              =       +ara%(v[2]):2
+  *            ben             =       +in(ben):2
+  *            bs              =       +ba%(v[2]):2
+  *            cs              =       +rs%(v[2]):2
+  *            cz_qwerty               =       +cz(qwerty):2
+  *            dev             =       +in(deva):2
+  *            dvorak          =       +us(dvorak):2
+  *            dzdwi           =       +bt%(v[2]):2
+  *            el              =       +gr%(v[2]):2
+  *            en_US           =       +latin%(v[2]):2
+  *            guj             =       +in(guj):2
+  *            gur             =       +in(guru):2
+  *            iu              =       +ca(ike):2
+  *            lo              =       +la%(v[2]):2
+  *            kan             =       +in(kan):2
+  *            mi              =       +mao%(v[2]):2
+  *            ml              =       +in(mal):2
+  *            ogham           =       +ie(ogam):2
+  *            ori             =       +ie(ori):2
+  *            sapmi           =       +no(smi):2
+  *            sr              =       +srp%(v[2]):2
+  *            syr             =       +sy(syc):2
+  *            tel             =       +in(tel):2
+  *            tml             =       +in(tam):2
+  *            yu              =       +srp%(v[2]):2
+  *            fr-latin9               =       +fr(latin9):2
+  *            us_intl         =       +us(alt-intl):2
+  *            ben(basic)      =       +in(ben):2
+  *            ben(probhat)    =       +in(ben_probhat):2
+  *            dev(basic)      =       +in(deva):2
+  *            dvorak($dvoraklayouts)  =       +%v(dvorak):2
+  *            dvorak(basic)   =       +us(dvorak):2
+  *            dvorak(pl_basic)        =       +pl(dvorak):2
+  *            dvorak(pl)      =       +pl(dvorak_quotes):2
+  *            dvorak(pl_altquotes)    =       +pl(dvorak_altquotes):2
+  *            dzdwi(basic)    =       +bt(basic):2
+  *            fi(basic)       =       +fi(classic):2
+  *            ge(azerty_tskapo)       =       +fr(geo):2
+  *            guj(basic)      =       +in(guj):2
+  *            gur(basic)      =       +in(guru):2
+  *            ie(laptop)      =       +ie(basic):2
+  *            ie(CloGaelachLaptop)    =       +ie(CloGaelach):2
+  *            in(urd) =       +in(urd-phonetic):2
+  *            iu(basic)       =       +ca(ike):2
+  *            lo(basic)       =       +la(basic):2
+  *            kan(basic)      =       +in(kan):2
+  *            mal(basic)      =       +in(mal):2
+  *            mal(mlplusnum)  =       +in(mal):2
+  *            ogham(basic)    =       +ie(ogam):2
+  *            ogham(laptop)   =       +ie(ogam):2
+  *            ogham(is434)    =       +ie(ogam_is434):2
+  *            ogham(is434laptop)      =       +ie(ogam_is434):2
+  *            ori(basic)      =       +in(ori):2
+  *            ro(de)  =       +ro(winkeys):2
+  *            ro(us)  =       +ro(std):2
+  *            ro(academic)    =       +ro(std):2
+  *            ro(std_comma)   =       +ro(std):2
+  *            ro(comma)       =       +ro(basic):2
+  *            ru(os)  =       +ru(os_legacy):2
+  *            pk(urd) =       +pk(urd-phonetic):2
+  *            sapmi(basic)    =       +no(smi):2
+  *            sapmi(nodeadkeys)       =       +no(smi_nodeadkeys):2
+  *            sapmi(sefi)     =       +fi(smi):2
+  *            sin(phonetic-static)    =       +in(sin_phonetic):2
+  *            syr(basic)      =       +sy(syc):2
+  *            syr(phonetic)   =       +sy(syc_phonetic):2
+  *            tam(INSCRIPT)   =       +in(tam):2
+  *            tam(UNI)        =       +in(tam_unicode):2
+  *            tam(NUMERAL-KEYBOARD)   =       +in(tam_keyboard_with_numerals):2
+  *            tam(TAB)        =       +in(tam_TAB):2
+  *            tam(TSCII)      =       +in(tam_TSCII):2
+  *            tel(basic)      =       +in(tel):2
+  *            yu(basic)       =       +srp(latin):2
+  *            yu(unicode)     =       +srp(latinunicode):2
+  *            yu(yz)  =       +srp(latinyz):2
+  *            yu(unicodeyz)   =       +srp(latinunicodeyz):2
+  nokiarx51    cz(qwerty)      =       +nokia_vndr/rx-51(cz_qwerty):2
+  nokiarx51    *               =       +nokia_vndr/rx-51(%l[2]%_v[2]):2
+  *            *               =       +%l[2]%(v[2]):2
+
+! model                layout[3]       =       symbols
+  *            ar              =       +ara%(v[3]):3
+  *            ben             =       +in(ben):3
+  *            bs              =       +ba%(v[3]):3
+  *            cs              =       +rs%(v[3]):3
+  *            cz_qwerty               =       +cz(qwerty):3
+  *            dev             =       +in(deva):3
+  *            dvorak          =       +us(dvorak):3
+  *            dzdwi           =       +bt%(v[3]):3
+  *            el              =       +gr%(v[3]):3
+  *            en_US           =       +latin%(v[3]):3
+  *            guj             =       +in(guj):3
+  *            gur             =       +in(guru):3
+  *            iu              =       +ca(ike):3
+  *            lo              =       +la%(v[3]):3
+  *            kan             =       +in(kan):3
+  *            mi              =       +mao%(v[3]):3
+  *            ml              =       +in(mal):3
+  *            ogham           =       +ie(ogam):3
+  *            ori             =       +ie(ori):3
+  *            sapmi           =       +no(smi):3
+  *            sr              =       +srp%(v[3]):3
+  *            syr             =       +sy(syc):3
+  *            tel             =       +in(tel):3
+  *            tml             =       +in(tam):3
+  *            yu              =       +srp%(v[3]):3
+  *            fr-latin9               =       +fr(latin9):3
+  *            us_intl         =       +us(alt-intl):3
+  *            ben(basic)      =       +in(ben):3
+  *            ben(probhat)    =       +in(ben_probhat):3
+  *            dev(basic)      =       +in(deva):3
+  *            dvorak($dvoraklayouts)  =       +%v(dvorak):3
+  *            dvorak(basic)   =       +us(dvorak):3
+  *            dvorak(pl_basic)        =       +pl(dvorak):3
+  *            dvorak(pl)      =       +pl(dvorak_quotes):3
+  *            dvorak(pl_altquotes)    =       +pl(dvorak_altquotes):3
+  *            dzdwi(basic)    =       +bt(basic):3
+  *            fi(basic)       =       +fi(classic):3
+  *            ge(azerty_tskapo)       =       +fr(geo):3
+  *            guj(basic)      =       +in(guj):3
+  *            gur(basic)      =       +in(guru):3
+  *            ie(laptop)      =       +ie(basic):3
+  *            ie(CloGaelachLaptop)    =       +ie(CloGaelach):3
+  *            in(urd) =       +in(urd-phonetic):3
+  *            iu(basic)       =       +ca(ike):3
+  *            lo(basic)       =       +la(basic):3
+  *            kan(basic)      =       +in(kan):3
+  *            mal(basic)      =       +in(mal):3
+  *            mal(mlplusnum)  =       +in(mal):3
+  *            ogham(basic)    =       +ie(ogam):3
+  *            ogham(laptop)   =       +ie(ogam):3
+  *            ogham(is434)    =       +ie(ogam_is434):3
+  *            ogham(is434laptop)      =       +ie(ogam_is434):3
+  *            ori(basic)      =       +in(ori):3
+  *            ro(de)  =       +ro(winkeys):3
+  *            ro(us)  =       +ro(std):3
+  *            ro(academic)    =       +ro(std):3
+  *            ro(std_comma)   =       +ro(std):3
+  *            ro(comma)       =       +ro(basic):3
+  *            ru(os)  =       +ru(os_legacy):3
+  *            pk(urd) =       +pk(urd-phonetic):3
+  *            sapmi(basic)    =       +no(smi):3
+  *            sapmi(nodeadkeys)       =       +no(smi_nodeadkeys):3
+  *            sapmi(sefi)     =       +fi(smi):3
+  *            sin(phonetic-static)    =       +in(sin_phonetic):3
+  *            syr(basic)      =       +sy(syc):3
+  *            syr(phonetic)   =       +sy(syc_phonetic):3
+  *            tam(INSCRIPT)   =       +in(tam):3
+  *            tam(UNI)        =       +in(tam_unicode):3
+  *            tam(NUMERAL-KEYBOARD)   =       +in(tam_keyboard_with_numerals):3
+  *            tam(TAB)        =       +in(tam_TAB):3
+  *            tam(TSCII)      =       +in(tam_TSCII):3
+  *            tel(basic)      =       +in(tel):3
+  *            yu(basic)       =       +srp(latin):3
+  *            yu(unicode)     =       +srp(latinunicode):3
+  *            yu(yz)  =       +srp(latinyz):3
+  *            yu(unicodeyz)   =       +srp(latinunicodeyz):3
+  nokiarx51    cz(qwerty)      =       +nokia_vndr/rx-51(cz_qwerty):3
+  nokiarx51    *               =       +nokia_vndr/rx-51(%l[3]%_v[3]):3
+  *            *               =       +%l[3]%(v[3]):3
+
+! model                layout[4]       =       symbols
+  *            ar              =       +ara%(v[4]):4
+  *            ben             =       +in(ben):4
+  *            bs              =       +ba%(v[4]):4
+  *            cs              =       +rs%(v[4]):4
+  *            cz_qwerty               =       +cz(qwerty):4
+  *            dev             =       +in(deva):4
+  *            dvorak          =       +us(dvorak):4
+  *            dzdwi           =       +bt%(v[4]):4
+  *            el              =       +gr%(v[4]):4
+  *            en_US           =       +latin%(v[4]):4
+  *            guj             =       +in(guj):4
+  *            gur             =       +in(guru):4
+  *            iu              =       +ca(ike):4
+  *            lo              =       +la%(v[4]):4
+  *            kan             =       +in(kan):4
+  *            mi              =       +mao%(v[4]):4
+  *            ml              =       +in(mal):4
+  *            ogham           =       +ie(ogam):4
+  *            ori             =       +ie(ori):4
+  *            sapmi           =       +no(smi):4
+  *            sr              =       +srp%(v[4]):4
+  *            syr             =       +sy(syc):4
+  *            tel             =       +in(tel):4
+  *            tml             =       +in(tam):4
+  *            yu              =       +srp%(v[4]):4
+  *            fr-latin9               =       +fr(latin9):4
+  *            us_intl         =       +us(alt-intl):4
+  *            ben(basic)      =       +in(ben):4
+  *            ben(probhat)    =       +in(ben_probhat):4
+  *            dev(basic)      =       +in(deva):4
+  *            dvorak($dvoraklayouts)  =       +%v(dvorak):4
+  *            dvorak(basic)   =       +us(dvorak):4
+  *            dvorak(pl_basic)        =       +pl(dvorak):4
+  *            dvorak(pl)      =       +pl(dvorak_quotes):4
+  *            dvorak(pl_altquotes)    =       +pl(dvorak_altquotes):4
+  *            dzdwi(basic)    =       +bt(basic):4
+  *            fi(basic)       =       +fi(classic):4
+  *            ge(azerty_tskapo)       =       +fr(geo):4
+  *            guj(basic)      =       +in(guj):4
+  *            gur(basic)      =       +in(guru):4
+  *            ie(laptop)      =       +ie(basic):4
+  *            ie(CloGaelachLaptop)    =       +ie(CloGaelach):4
+  *            in(urd) =       +in(urd-phonetic):4
+  *            iu(basic)       =       +ca(ike):4
+  *            lo(basic)       =       +la(basic):4
+  *            kan(basic)      =       +in(kan):4
+  *            mal(basic)      =       +in(mal):4
+  *            mal(mlplusnum)  =       +in(mal):4
+  *            ogham(basic)    =       +ie(ogam):4
+  *            ogham(laptop)   =       +ie(ogam):4
+  *            ogham(is434)    =       +ie(ogam_is434):4
+  *            ogham(is434laptop)      =       +ie(ogam_is434):4
+  *            ori(basic)      =       +in(ori):4
+  *            ro(de)  =       +ro(winkeys):4
+  *            ro(us)  =       +ro(std):4
+  *            ro(academic)    =       +ro(std):4
+  *            ro(std_comma)   =       +ro(std):4
+  *            ro(comma)       =       +ro(basic):4
+  *            ru(os)  =       +ru(os_legacy):4
+  *            pk(urd) =       +pk(urd-phonetic):4
+  *            sapmi(basic)    =       +no(smi):4
+  *            sapmi(nodeadkeys)       =       +no(smi_nodeadkeys):4
+  *            sapmi(sefi)     =       +fi(smi):4
+  *            sin(phonetic-static)    =       +in(sin_phonetic):4
+  *            syr(basic)      =       +sy(syc):4
+  *            syr(phonetic)   =       +sy(syc_phonetic):4
+  *            tam(INSCRIPT)   =       +in(tam):4
+  *            tam(UNI)        =       +in(tam_unicode):4
+  *            tam(NUMERAL-KEYBOARD)   =       +in(tam_keyboard_with_numerals):4
+  *            tam(TAB)        =       +in(tam_TAB):4
+  *            tam(TSCII)      =       +in(tam_TSCII):4
+  *            tel(basic)      =       +in(tel):4
+  *            yu(basic)       =       +srp(latin):4
+  *            yu(unicode)     =       +srp(latinunicode):4
+  *            yu(yz)  =       +srp(latinyz):4
+  *            yu(unicodeyz)   =       +srp(latinunicodeyz):4
+  nokiarx51    cz(qwerty)      =       +nokia_vndr/rx-51(cz_qwerty):4
+  nokiarx51    *               =       +nokia_vndr/rx-51(%l[4]%_v[4]):4
+  *            *               =       +%l[4]%(v[4]):4
+
+! model                layout[2]       variant[2]      =       symbols
+  *            ben             basic   =       +in(ben):2
+  *            ben             probhat =       +in(ben_probhat):2
+  *            dev             basic   =       +in(deva):2
+  *            dvorak          $dvoraklayouts  =       +%v(dvorak):2
+  *            dvorak          basic   =       +us(dvorak):2
+  *            dvorak          pl_basic        =       +pl(dvorak):2
+  *            dvorak          pl      =       +pl(dvorak_quotes):2
+  *            dvorak          pl_altquotes    =       +pl(dvorak_altquotes):2
+  *            dzdwi           basic   =       +bt(basic):2
+  *            fi              basic   =       +fi(classic):2
+  *            ge              azerty_tskapo   =       +fr(geo):2
+  *            guj             basic   =       +in(guj):2
+  *            gur             basic   =       +in(guru):2
+  *            ie              laptop  =       +ie(basic):2
+  *            ie              CloGaelachLaptop        =       +ie(CloGaelach):2
+  *            in              urd     =       +in(urd-phonetic):2
+  *            iu              basic   =       +ca(ike):2
+  *            lo              basic   =       +la(basic):2
+  *            kan             basic   =       +in(kan):2
+  *            mal             basic   =       +in(mal):2
+  *            mal             mlplusnum       =       +in(mal):2
+  *            ogham           basic   =       +ie(ogam):2
+  *            ogham           laptop  =       +ie(ogam):2
+  *            ogham           is434   =       +ie(ogam_is434):2
+  *            ogham           is434laptop     =       +ie(ogam_is434):2
+  *            ori             basic   =       +in(ori):2
+  *            ro              de      =       +ro(winkeys):2
+  *            ro              us      =       +ro(std):2
+  *            ro              academic        =       +ro(std):2
+  *            ro              std_comma       =       +ro(std):2
+  *            ro              comma   =       +ro(basic):2
+  *            ru              os      =       +ru(os_legacy):2
+  *            pk              urd     =       +pk(urd-phonetic):2
+  *            sapmi           basic   =       +no(smi):2
+  *            sapmi           nodeadkeys      =       +no(smi_nodeadkeys):2
+  *            sapmi           sefi    =       +fi(smi):2
+  *            sin             phonetic-static =       +in(sin_phonetic):2
+  *            syr             basic   =       +sy(syc):2
+  *            syr             phonetic        =       +sy(syc_phonetic):2
+  *            tam             INSCRIPT        =       +in(tam):2
+  *            tam             UNI     =       +in(tam_unicode):2
+  *            tam             NUMERAL-KEYBOARD        =       +in(tam_keyboard_with_numerals):2
+  *            tam             TAB     =       +in(tam_TAB):2
+  *            tam             TSCII   =       +in(tam_TSCII):2
+  *            tel             basic   =       +in(tel):2
+  *            yu              basic   =       +srp(latin):2
+  *            yu              unicode =       +srp(latinunicode):2
+  *            yu              yz      =       +srp(latinyz):2
+  *            yu              unicodeyz       =       +srp(latinunicodeyz):2
+
+! model                layout[3]       variant[3]      =       symbols
+  *            ben             basic   =       +in(ben):3
+  *            ben             probhat =       +in(ben_probhat):3
+  *            dev             basic   =       +in(deva):3
+  *            dvorak          $dvoraklayouts  =       +%v(dvorak):3
+  *            dvorak          basic   =       +us(dvorak):3
+  *            dvorak          pl_basic        =       +pl(dvorak):3
+  *            dvorak          pl      =       +pl(dvorak_quotes):3
+  *            dvorak          pl_altquotes    =       +pl(dvorak_altquotes):3
+  *            dzdwi           basic   =       +bt(basic):3
+  *            fi              basic   =       +fi(classic):3
+  *            ge              azerty_tskapo   =       +fr(geo):3
+  *            guj             basic   =       +in(guj):3
+  *            gur             basic   =       +in(guru):3
+  *            ie              laptop  =       +ie(basic):3
+  *            ie              CloGaelachLaptop        =       +ie(CloGaelach):3
+  *            in              urd     =       +in(urd-phonetic):3
+  *            iu              basic   =       +ca(ike):3
+  *            lo              basic   =       +la(basic):3
+  *            kan             basic   =       +in(kan):3
+  *            mal             basic   =       +in(mal):3
+  *            mal             mlplusnum       =       +in(mal):3
+  *            ogham           basic   =       +ie(ogam):3
+  *            ogham           laptop  =       +ie(ogam):3
+  *            ogham           is434   =       +ie(ogam_is434):3
+  *            ogham           is434laptop     =       +ie(ogam_is434):3
+  *            ori             basic   =       +in(ori):3
+  *            ro              de      =       +ro(winkeys):3
+  *            ro              us      =       +ro(std):3
+  *            ro              academic        =       +ro(std):3
+  *            ro              std_comma       =       +ro(std):3
+  *            ro              comma   =       +ro(basic):3
+  *            ru              os      =       +ru(os_legacy):3
+  *            pk              urd     =       +pk(urd-phonetic):3
+  *            sapmi           basic   =       +no(smi):3
+  *            sapmi           nodeadkeys      =       +no(smi_nodeadkeys):3
+  *            sapmi           sefi    =       +fi(smi):3
+  *            sin             phonetic-static =       +in(sin_phonetic):3
+  *            syr             basic   =       +sy(syc):3
+  *            syr             phonetic        =       +sy(syc_phonetic):3
+  *            tam             INSCRIPT        =       +in(tam):3
+  *            tam             UNI     =       +in(tam_unicode):3
+  *            tam             NUMERAL-KEYBOARD        =       +in(tam_keyboard_with_numerals):3
+  *            tam             TAB     =       +in(tam_TAB):3
+  *            tam             TSCII   =       +in(tam_TSCII):3
+  *            tel             basic   =       +in(tel):3
+  *            yu              basic   =       +srp(latin):3
+  *            yu              unicode =       +srp(latinunicode):3
+  *            yu              yz      =       +srp(latinyz):3
+  *            yu              unicodeyz       =       +srp(latinunicodeyz):3
+
+! model                layout[4]       variant[4]      =       symbols
+  *            ben             basic   =       +in(ben):4
+  *            ben             probhat =       +in(ben_probhat):4
+  *            dev             basic   =       +in(deva):4
+  *            dvorak          $dvoraklayouts  =       +%v(dvorak):4
+  *            dvorak          basic   =       +us(dvorak):4
+  *            dvorak          pl_basic        =       +pl(dvorak):4
+  *            dvorak          pl      =       +pl(dvorak_quotes):4
+  *            dvorak          pl_altquotes    =       +pl(dvorak_altquotes):4
+  *            dzdwi           basic   =       +bt(basic):4
+  *            fi              basic   =       +fi(classic):4
+  *            ge              azerty_tskapo   =       +fr(geo):4
+  *            guj             basic   =       +in(guj):4
+  *            gur             basic   =       +in(guru):4
+  *            ie              laptop  =       +ie(basic):4
+  *            ie              CloGaelachLaptop        =       +ie(CloGaelach):4
+  *            in              urd     =       +in(urd-phonetic):4
+  *            iu              basic   =       +ca(ike):4
+  *            lo              basic   =       +la(basic):4
+  *            kan             basic   =       +in(kan):4
+  *            mal             basic   =       +in(mal):4
+  *            mal             mlplusnum       =       +in(mal):4
+  *            ogham           basic   =       +ie(ogam):4
+  *            ogham           laptop  =       +ie(ogam):4
+  *            ogham           is434   =       +ie(ogam_is434):4
+  *            ogham           is434laptop     =       +ie(ogam_is434):4
+  *            ori             basic   =       +in(ori):4
+  *            ro              de      =       +ro(winkeys):4
+  *            ro              us      =       +ro(std):4
+  *            ro              academic        =       +ro(std):4
+  *            ro              std_comma       =       +ro(std):4
+  *            ro              comma   =       +ro(basic):4
+  *            ru              os      =       +ru(os_legacy):4
+  *            pk              urd     =       +pk(urd-phonetic):4
+  *            sapmi           basic   =       +no(smi):4
+  *            sapmi           nodeadkeys      =       +no(smi_nodeadkeys):4
+  *            sapmi           sefi    =       +fi(smi):4
+  *            sin             phonetic-static =       +in(sin_phonetic):4
+  *            syr             basic   =       +sy(syc):4
+  *            syr             phonetic        =       +sy(syc_phonetic):4
+  *            tam             INSCRIPT        =       +in(tam):4
+  *            tam             UNI     =       +in(tam_unicode):4
+  *            tam             NUMERAL-KEYBOARD        =       +in(tam_keyboard_with_numerals):4
+  *            tam             TAB     =       +in(tam_TAB):4
+  *            tam             TSCII   =       +in(tam_TSCII):4
+  *            tel             basic   =       +in(tel):4
+  *            yu              basic   =       +srp(latin):4
+  *            yu              unicode =       +srp(latinunicode):4
+  *            yu              yz      =       +srp(latinyz):4
+  *            yu              unicodeyz       =       +srp(latinunicodeyz):4
+
+! model                =       symbols
+  $evdevkbds    =   +inet(evdev)+inet(%m)
+  applealu_jis  =   +inet(evdev)+macintosh_vndr/jp(alujiskeys)
+  *             =   +inet(evdev)
+
+! layout       variant         =       compat
+  de           neo                     =       +caps(caps_lock)+misc(assign_shift_left_action)+level5(level5_lock)
+
+! layout[1]    variant[1]      =       compat
+  de           neo                     =       +caps(caps_lock)+misc(assign_shift_left_action)+level5(level5_lock)
+
+! layout[2]    variant[2]      =       compat
+  de           neo                     =       +caps(caps_lock):2+misc(assign_shift_left_action):2+level5(level5_lock):2
+
+! layout[3]    variant[3]      =       compat
+  de           neo                     =       +caps(caps_lock):3+misc(assign_shift_left_action):3+level5(level5_lock):3
+
+! layout[4]    variant[4]      =       compat
+  de           neo                     =       +caps(caps_lock):4+misc(assign_shift_left_action):4+level5(level5_lock):4
+
+! model                layout          =       compat
+  pc98         nec_vndr/jp     =       pc98(basic)
+  *            jp              =       complete+japan
+  olpc         *               =       olpc
+  *            *               =       complete
+
+! model                layout[1]       =       compat
+  *            *               =       complete
+
+! model                =       types
+  $macs                =       complete+numpad(mac)
+  $applealu    =       complete+numpad(mac)
+  $nokiamodels =       complete+nokia
+  *            =       complete
+
+! layout       option  =       symbols
+  $threelevellayouts   grp:alts_toggle = +level3(ralt_switch_for_alts_toggle)
+  *                    misc:typo       = +typo(base)
+
+! layout[1]    option  =       symbols
+  $threelevellayouts   grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):1
+  *                    misc:typo       = +typo(base):1
+
+! layout[2]    option  =       symbols
+  $threelevellayouts   grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):2
+  *                    misc:typo       = +typo(base):2
+
+! layout[3]    option  =       symbols
+  $threelevellayouts   grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):3
+  *                    misc:typo       = +typo(base):3
+
+! layout[4]    option  =       symbols
+  $threelevellayouts   grp:alts_toggle = +level3(ralt_switch_for_alts_toggle):4
+  *                    misc:typo       = +typo(base):4
+
+! option       =       symbols
+  grp:shift_toggle     =       +group(shifts_toggle)
+  altwin:menu          =       +altwin(menu)
+  altwin:meta_alt      =       +altwin(meta_alt)
+  altwin:ctrl_win      =       +altwin(ctrl_win)
+  altwin:ctrl_alt_win  =       +altwin(ctrl_alt_win)
+  altwin:meta_win      =       +altwin(meta_win)
+  altwin:left_meta_win =       +altwin(left_meta_win)
+  altwin:hyper_win     =       +altwin(hyper_win)
+  altwin:alt_super_win =       +altwin(alt_super_win)
+  altwin:swap_lalt_lwin        =       +altwin(swap_lalt_lwin)
+  grp:switch           =       +group(switch)
+  grp:lswitch          =       +group(lswitch)
+  grp:win_switch       =       +group(win_switch)
+  grp:lwin_switch      =       +group(lwin_switch)
+  grp:rwin_switch      =       +group(rwin_switch)
+  grp:toggle           =       +group(toggle)
+  grp:shifts_toggle    =       +group(shifts_toggle)
+  grp:ctrls_toggle     =       +group(ctrls_toggle)
+  grp:alts_toggle      =       +group(alts_toggle)
+  grp:caps_toggle      =       +capslock(grouplock)
+  grp:caps_switch       =       +capslock(groupshift)
+  grp:shift_caps_toggle        =       +group(shift_caps_toggle)
+  grp:shift_caps_switch        =       +group(shift_caps_switch)
+  grp:win_menu_switch  =       +group(win_menu_switch)
+  grp:alt_caps_toggle   =       +group(alt_caps_toggle)
+  grp:alt_space_toggle =       +group(alt_space_toggle)
+  grp:menu_toggle      =       +group(menu_toggle)
+  grp:lwin_toggle      =       +group(lwin_toggle)
+  grp:rwin_toggle      =       +group(rwin_toggle)
+  grp:lshift_toggle    =       +group(lshift_toggle)
+  grp:rshift_toggle    =       +group(rshift_toggle)
+  grp:rctrl_switch     =       +group(rctrl_switch)
+  grp:lctrl_toggle     =       +group(lctrl_toggle)
+  grp:rctrl_toggle     =       +group(rctrl_toggle)
+  grp:lalt_toggle      =       +group(lalt_toggle)
+  grp:sclk_toggle      =       +group(sclk_toggle)
+  grp:lctrl_rctrl_switch       =       +group(lctrl_rctrl_switch)
+  grp:lctrl_lwin_rctrl_menu    =       +group(lctrl_lwin_rctrl_menu)
+  grp:lctrl_lalt_toggle        =       +group(lctrl_lalt_toggle)
+  grp:rctrl_ralt_toggle        =       +group(rctrl_ralt_toggle)
+  grp:ctrl_alt_toggle  =       +group(ctrl_alt_toggle)
+  grp:ctrl_alt_toggle_bidir    =       +group(ctrl_alt_toggle_bidir)
+  grp:lctrl_lshift_toggle      =       +group(lctrl_lshift_toggle)
+  grp:rctrl_rshift_toggle      =       +group(rctrl_rshift_toggle)
+  grp:ctrl_shift_toggle        =       +group(ctrl_shift_toggle)
+  grp:ctrl_shift_toggle_bidir  =       +group(ctrl_shift_toggle_bidir)
+  grp:lalt_lshift_toggle       =       +group(lalt_lshift_toggle)
+  grp:ralt_rshift_toggle       =       +group(ralt_rshift_toggle)
+  grp:alt_shift_toggle =       +group(alt_shift_toggle)
+  grp:alt_shift_toggle_bidir   =       +group(alt_shift_toggle_bidir)
+  lv3:switch           =       +level3(switch)
+  lv3:ralt_switch      =       +level3(ralt_switch)
+  lv3:ralt_switch_multikey     =       +level3(ralt_switch_multikey)
+  lv3:ralt_alt         =       +level3(ralt_alt)
+  lv3:lalt_switch      =       +level3(lalt_switch)
+  lv3:alt_switch       =       +level3(alt_switch)
+  lv3:menu_switch      =       +level3(menu_switch)
+  lv3:win_switch       =       +level3(win_switch)
+  lv3:lwin_switch      =       +level3(lwin_switch)
+  lv3:rwin_switch      =       +level3(rwin_switch)
+  lv3:enter_switch     =       +level3(enter_switch)
+  caps:capslock                =       +capslock(capslock)
+  caps:numlock         =       +capslock(numlock)
+  caps:shiftlock       =       +capslock(shiftlock)
+  caps:swapescape      =       +capslock(swapescape)
+  caps:escape          =       +capslock(escape)
+  caps:backspace       =       +capslock(backspace)
+  caps:super           =       +capslock(super)
+  caps:hyper           =       +capslock(hyper)
+  caps:none            =       +capslock(none)
+  caps:ctrl_modifier   =       +capslock(ctrl_modifier)
+  ctrl:nocaps          =       +ctrl(nocaps)
+  ctrl:lctrl_meta      =       +ctrl(lctrl_meta)
+  ctrl:swapcaps                =       +ctrl(swapcaps)
+  ctrl:ac_ctrl         =       +ctrl(ac_ctrl)
+  ctrl:aa_ctrl         =       +ctrl(aa_ctrl)
+  ctrl:rctrl_ralt      =       +ctrl(rctrl_ralt)
+  ctrl:menu_rctrl      =       +ctrl(menu_rctrl)
+  ctrl:ralt_rctrl      =       +ctrl(ralt_rctrl)
+  compose:ralt         =       +compose(ralt)
+  compose:lwin         =       +compose(lwin)
+  compose:rwin         =       +compose(rwin)
+  compose:menu         =       +compose(menu)
+  compose:lctrl                =       +compose(lctrl)
+  compose:rctrl                =       +compose(rctrl)
+  compose:caps         =       +compose(caps)
+  compose:102          =       +compose(102)
+  compose:paus         =       +compose(paus)
+  compose:prsc         =       +compose(prsc)
+  compose:sclk         =       +compose(sclk)
+  srvrkeys:none                =       +srvr_ctrl(no_srvr_keys)
+  eurosign:e           =       +eurosign(e)
+  eurosign:2           =       +eurosign(2)
+  eurosign:4           =       +eurosign(4)
+  eurosign:5           =       +eurosign(5)
+  rupeesign:4           =       +rupeesign(4)
+  keypad:oss            =       +keypad(oss)
+  keypad:legacy         =      +keypad(legacy)
+  keypad:legacy_wang    =      +keypad(legacy_wang)
+  keypad:oss_wang       =      +keypad(oss_wang)
+  keypad:future         =      +keypad(future)
+  keypad:future_wang    =      +keypad(future_wang)
+  keypad:hex            =      +keypad(ops)+keypad(hex)
+  keypad:atm            =      +keypad(ops)+keypad(hex)+keypad(atm)  
+  nbsp:none             =      +nbsp(none)
+  nbsp:level2           =      +nbsp(level2)
+  nbsp:level3           =      +nbsp(level3)
+  nbsp:level3s          =      +nbsp(level3s)
+  nbsp:level3n          =      +nbsp(level3n)
+  nbsp:level4           =      +nbsp(level4)
+  nbsp:level4n          =      +nbsp(level4n)
+  nbsp:level4nl         =      +nbsp(level4nl)
+  japan:nicola_f_bs     =      +jp(nicola_f_bs)
+  japan:hztg_escape     =      +jp(hztg_escape)
+  kpdl:dot              =      +kpdl(dot)
+  kpdl:comma            =      +kpdl(comma)
+  kpdl:dotoss           =      +kpdl(dotoss)
+  kpdl:dotoss_latin9    =      +kpdl(dotoss_latin9)
+  kpdl:commaoss         =      +kpdl(commaoss)
+  kpdl:momayyezoss      =      +kpdl(momayyezoss)
+  kpdl:kposs            =      +kpdl(kposs)
+  kpdl:semi             =      +kpdl(semi)
+  shift:breaks_caps     =      +shift(breaks_caps)
+  esperanto:qwerty      =      +epo(qwerty)
+  esperanto:dvorak      =      +epo(dvorak)
+  terminate:ctrl_alt_bksp =    +terminate(ctrl_alt_bksp)
+  keypad:pointerkeys   =       +keypad(pointerkeys)
+  apple:alupckeys      =       +macintosh_vndr/apple(alupckeys)
+  shift:both_capslock                =       +shift(both_capslock)
+  shift:lshift_both_capslock         =       +shift(lshift_both_capslock)
+  shift:rshift_both_capslock         =       +shift(rshift_both_capslock)
+  shift:both_capslock_cancel         =       +shift(both_capslock_cancel)
+  shift:lshift_both_capslock_cancel  =       +shift(lshift_both_capslock_cancel)
+  shift:rshift_both_capslock_cancel  =       +shift(rshift_both_capslock_cancel)
+  shift:both_shiftlock               =       +shift(both_shiftlock)
+  shift:lshift_both_shiftlock        =       +shift(lshift_both_shiftlock)
+  shift:rshift_both_shiftlock        =       +shift(rshift_both_shiftlock)
+  lv3:caps_switch                    =       +level3(caps_switch)
+  lv3:bksl_switch                    =       +level3(bksl_switch)
+  lv3:lsgt_switch                    =       +level3(lsgt_switch)
+  lv3:caps_switch_latch              =       +level3(caps_switch_latch)
+  lv3:bksl_switch_latch              =       +level3(bksl_switch_latch)
+  lv3:lsgt_switch_latch              =       +level3(lsgt_switch_latch)
+  lv5:lsgt_switch_lock            =       +level5(lsgt_switch_lock)
+  lv5:ralt_switch_lock            =       +level5(ralt_switch_lock)
+  lv5:lwin_switch_lock            =       +level5(lwin_switch_lock)
+  lv5:rwin_switch_lock            =       +level5(rwin_switch_lock)
+  lv5:lsgt_switch_lock_cancel     =       +level5(lsgt_switch_lock_cancel)
+  lv5:ralt_switch_lock_cancel     =       +level5(ralt_switch_lock_cancel)
+  lv5:lwin_switch_lock_cancel     =       +level5(lwin_switch_lock_cancel)
+  lv5:rwin_switch_lock_cancel     =       +level5(rwin_switch_lock_cancel)
+
+
+
+! option       =       compat
+  grp_led:num          =       +lednum(group_lock)
+  grp_led:caps         =       +ledcaps(group_lock)
+  grp_led:scroll       =       +ledscroll(group_lock)
+  caps:shiftlock       =       +ledcaps(shift_lock)
+  grab:break_actions    =       +xfree86(grab_break)
diff --git a/test/data/symbols/altwin b/test/data/symbols/altwin
new file mode 100644 (file)
index 0000000..9259912
--- /dev/null
@@ -0,0 +1,79 @@
+partial modifier_keys 
+xkb_symbols "meta_alt" {
+    key <LALT> {       [       Alt_L,  Meta_L          ]       };
+    key <RALT> { type[Group1] = "TWO_LEVEL",
+                 symbols[Group1] = [ Alt_R, Meta_R ] };
+    modifier_map Mod1  { Alt_L, Alt_R, Meta_L, Meta_R };
+//  modifier_map Mod4  {};
+};
+
+// Control is mapped to the Win-keys (and the usual Ctrl keys).
+partial modifier_keys 
+xkb_symbols "ctrl_win" {
+    key <LWIN> {       [       Control_L               ]       };
+    key <RWIN> {       [       Control_R               ]       };
+    modifier_map Control { <LWIN>, <RWIN> };
+};
+
+// Ctrl is mapped to the Alt-keys, Alt is mapped to the Win-keys,  Win is mapped to the Ctrl-keys.
+partial modifier_keys 
+xkb_symbols "ctrl_alt_win" {
+    key <LALT> {       [       Control_L, Control_L            ]       };
+    key <RALT> { type[Group1] = "TWO_LEVEL",
+                 symbols[Group1] = [ Control_R, Control_R ] };
+    key <LWIN> {       [       Alt_L, Meta_L           ]       };
+    key <RWIN> {       [       Alt_R, Meta_R           ]       };
+    modifier_map Control { <RALT>, <LALT> };
+    modifier_map  Mod1 { <LWIN>, <RWIN> };
+};
+
+
+partial modifier_keys 
+xkb_symbols "meta_win" {
+    key <LALT> {       [       Alt_L,  Alt_L           ]       };
+    key <RALT> { type[Group1] = "TWO_LEVEL",
+                 symbols[Group1] = [ Alt_R, Alt_R ] };
+    key <LWIN> {       [       Meta_L                  ]       };
+    key <RWIN> {       [       Meta_R                  ]       };
+    modifier_map Mod1  { Alt_L, Alt_R };
+    modifier_map Mod4  { <META>, Meta_L, Meta_R };
+};
+
+partial modifier_keys 
+xkb_symbols "left_meta_win" {
+    key <LALT> {       [       Alt_L,  Alt_L           ]       };
+    key <LWIN> {       [       Meta_L                  ]       };
+    modifier_map Mod1  { Alt_L };
+    modifier_map Mod4  { <META>, Meta_L };
+};
+
+partial modifier_keys 
+xkb_symbols "hyper_win" {
+    key <LWIN> {       [       Hyper_L                 ]       };
+    key <RWIN> {       [       Hyper_R                 ]       };
+    modifier_map Mod4  { Hyper_L, Hyper_R };
+};
+
+// Use Menu for the menu key
+partial modifier_keys 
+xkb_symbols "menu" {
+    key <MENU> {       [       Menu            ]       };
+};
+
+// Layout for Tux key caps with additional right Alt key
+partial modifier_keys 
+xkb_symbols "alt_super_win" {
+    key <LALT> {        [       Alt_L,  Meta_L          ]       };
+    key <RWIN> {        [       Alt_R,  Meta_R          ]       };
+    key <LWIN> {        [       Super_L                 ]       };
+    key <MENU> {        [       Super_R                 ]       };
+    modifier_map Mod1   { Alt_L, Alt_R, Meta_L, Meta_R };
+    modifier_map Mod4   { Super_L, Super_R };
+};
+
+partial modifier_keys 
+xkb_symbols "swap_lalt_lwin" {
+    key <LALT> { type[Group1] = "ONE_LEVEL",
+                 symbols[Group1] = [ Super_L ] };
+    key <LWIN> {       [       Alt_L,  Meta_L          ]       };
+};
diff --git a/test/data/symbols/ca b/test/data/symbols/ca
new file mode 100644 (file)
index 0000000..ab9cef1
--- /dev/null
@@ -0,0 +1,530 @@
+default partial
+xkb_symbols "fr" {
+    name[Group1] = "French (Canada)";
+
+    key <TLDE> { [ numbersign,       bar,     backslash ]      };
+    key <AE01> { [         1,     exclam,     plusminus ]      };
+    key <AE02> { [         2,   quotedbl,            at ]      };
+    key <AE03> { [         3,      slash,      sterling ]      };
+    key <AE04> { [         4,     dollar,          cent ]      };
+    key <AE05> { [         5,    percent,      currency ]      };
+    key <AE06> { [         6,   question,       notsign ]      };
+    key <AE07> { [         7,  ampersand,     brokenbar ]      };
+    key <AE08> { [         8,   asterisk,   twosuperior ]      };
+    key <AE09> { [         9,  parenleft, threesuperior ]      };
+    key <AE10> { [         0, parenright,    onequarter ]      };
+    key <AE11> { [     minus, underscore,       onehalf ]      };
+    key <AE12> { [     equal,       plus, threequarters ]      };
+
+    key <AD01> { [         q,          Q ]     };
+    key <AD02> { [         w,          W ]     };
+    key <AD03> { [         e,          E ]     };
+    key <AD04> { [         r,          R ]     };
+    key <AD05> { [         t,          T ]     };
+    key <AD06> { [         y,          Y ]     };
+    key <AD07> { [         u,          U ]     };
+    key <AD08> { [         i,          I ]     };
+    key <AD09> { [         o,          O,   section ]  };
+    key <AD10> { [         p,          P, paragraph ]  };
+    key <AD11> { [dead_circumflex, dead_circumflex, bracketleft  ]     };
+    key <AD12> { [   dead_cedilla,  dead_diaeresis, bracketright ]     };
+
+    key <AC01> { [         a,          A ]     };
+    key <AC02> { [         s,          S ]     };
+    key <AC03> { [         d,          D ]     };
+    key <AC04> { [         f,          F ]     };
+    key <AC05> { [         g,          G ]     };
+    key <AC06> { [         h,          H ]     };
+    key <AC07> { [         j,          J ]     };
+    key <AC08> { [         k,          K ]     };
+    key <AC09> { [         l,          L ]     };
+    key <AC10> { [ semicolon,      colon, asciitilde ] };
+    key <AC11> { [dead_grave, dead_grave,  braceleft ] };
+    key <BKSL> { [      less,    greater, braceright ] };
+
+    key <LSGT> { [guillemotleft, guillemotright, degree]       };
+    key <AB01> { [         z,          Z ]     };
+    key <AB02> { [         x,          X ]     };
+    key <AB03> { [         c,          C ]     };
+    key <AB04> { [         v,          V ]     };
+    key <AB05> { [         b,          B ]     };
+    key <AB06> { [         n,          N ]     };
+    key <AB07> { [         m,          M,           mu ]       };
+    key <AB08> { [     comma, apostrophe,       macron ]       };
+    key <AB09> { [    period,     period,       hyphen ]       };
+    key <AB10> { [    eacute,     Eacute,   dead_acute ]       };
+
+    key <SPCE> { [     space,      space, nobreakspace ]       };
+
+    include "level3(ralt_switch)"
+};
+
+xkb_symbols "fr-dvorak" {
+    name[Group1] = "French (Canada, Dvorak)";
+
+    key <TLDE>  { [ numbersign,       bar,     backslash ]  };
+    key <AE01>  { [         1,     exclam,     plusminus ]  };
+    key <AE02>  { [         2,   quotedbl,            at ]  };
+    key <AE03>  { [         3,      slash,      sterling ]  };
+    key <AE04>  { [         4,     dollar,          cent ]  };
+    key <AE05>  { [         5,    percent,      currency ]  };
+    key <AE06>  { [         6,   question,       notsign ]  };
+    key <AE07>  { [         7,  ampersand,     brokenbar ]  };
+    key <AE08>  { [         8,   asterisk,   twosuperior ]  };
+    key <AE09>  { [         9,  parenleft, threesuperior ]  };
+    key <AE10>  { [         0, parenright,    onequarter ]  };
+    key <AE11>  { [dead_circumflex, dead_circumflex, bracketleft  ] };
+    key <AE12>  { [   dead_cedilla,  dead_diaeresis, bracketright ] };
+
+    key <AD01>  { [dead_grave, dead_grave,  braceleft ] };
+    key <AD02>  { [     comma, apostrophe,       macron ]   };
+    key <AD03>  { [    period,     period,       hyphen ]   };
+    key <AD04>  { [         p,          P, paragraph ]  };
+    key <AD05>  { [         y,          Y ] };
+    key <AD06>  { [         f,          F ] };
+    key <AD07>  { [         g,          G ] };
+    key <AD08>  { [         c,          C ] };
+    key <AD09>  { [         r,          R ] };
+    key <AD10>  { [         l,          L ] };
+    key <AD11>  { [    eacute,     Eacute,   dead_acute ]   };
+    key <AD12>  { [     equal,       plus, threequarters ]  };
+
+    key <AC01>  { [         a,          A ] };
+    key <AC02>  { [         o,          O,   section ]  };
+    key <AC03>  { [         e,          E ] };
+    key <AC04>  { [         u,          U ] };
+    key <AC05>  { [         i,          I ] };
+    key <AC06>  { [         d,          D ] };
+    key <AC07>  { [         h,          H ] };
+    key <AC08>  { [         t,          T ] };
+    key <AC09>  { [         n,          N ] };
+    key <AC10>  { [         s,          S ] };
+    key <AC11>  { [     minus, underscore,       onehalf ]  };
+    key <BKSL>  { [      less,    greater, braceright ] };
+
+    key <LSGT>  { [guillemotleft, guillemotright, degree]   };
+    key <AB01>  { [ semicolon,      colon, asciitilde ] };
+    key <AB02>  { [         q,          Q ] };
+    key <AB03>  { [         j,          J ] };
+    key <AB04>  { [         k,          K ] };
+    key <AB05>  { [         x,          X ] };
+    key <AB06>  { [         b,          B ] };
+    key <AB07>  { [         m,          M,           mu ]   };
+    key <AB08>  { [         w,          W ] };
+    key <AB09>  { [         v,          V ] };
+    key <AB10>  { [         z,          Z ] };
+
+    key <SPCE>  { [     space,      space, nobreakspace ]   };
+
+    include "level3(ralt_switch)"
+};
+
+partial
+xkb_symbols "fr-legacy" {
+
+    name[Group1] = "French (Canada, legacy)";
+
+    include "ca(fr)"
+
+    key <TLDE> { [    degree,     degree,       notsign ]      };
+    key <AE01> { [         1,     exclam,   onesuperior ]      };
+
+    key <AE03> { [         3, numbersign, threesuperior ]      };
+    key <AE04> { [         4,     dollar,    onequarter ]      };
+    key <AE05> { [         5,    percent,       onehalf ]      };
+    key <AE06> { [         6,   question, threequarters ]      };
+    key <AE07> { [         7,  ampersand,     braceleft ]      };
+    key <AE08> { [         8,   asterisk,   bracketleft ]      };
+    key <AE09> { [         9,  parenleft,  bracketright,   plusminus ] };
+    key <AE10> { [         0, parenright,    braceright ]      };
+    key <AE11> { [     minus, underscore,           bar, questiondown] };
+    key <AE12> { [     equal,       plus,  dead_cedilla ]      };
+
+    key <AD04> { [         r,          R,     paragraph,  registered ] };
+    key <AD06> { [         y,          Y,           yen ]      };
+    key <AD09> { [         o,          O,        oslash,      Ooblique ] };
+    key <AD10> { [         p,          P,         thorn,       THORN ] };
+    key <AD11> { [dead_circumflex, dead_circumflex,           degree ] };
+    key <AD12> { [  ccedilla,   Ccedilla, dead_tilde, dead_diaeresis ] };
+
+    key <AC01> { [         a,          A,            ae,          AE ] };
+    key <AC02> { [         s,          S,        ssharp,     section ] };
+    key <AC03> { [         d,          D,           eth,         ETH ] };
+    key <AC04> { [         f,          F,   ordfeminine ]      };
+    key <AC10> { [ semicolon,      colon,    dead_acute,  dead_acute ] };
+    key <AC11> { [    egrave,     Egrave ]     };
+    key <BKSL> { [    agrave,     Agrave,    dead_grave ]      };
+
+    key <LSGT> { [    ugrave,     Ugrave,     backslash,         bar ] };
+    key <AB01> { [         z,          Z, guillemotleft  ]     };
+    key <AB02> { [         x,          X, guillemotright ]     };
+    key <AB03> { [         c,          C,          cent,   copyright ] };
+    key <AB07> { [         m,          M,            mu,   masculine ] };
+    key <AB08> { [     comma, apostrophe,         less ]       };
+    key <AB09> { [    period,     period,      greater ]       };
+    key <AB10> { [    eacute,     Eacute,        slash ]       };
+};
+
+partial
+xkb_symbols "multi" {
+
+    name[Group1] = "Canadian Multilingual (first part)";
+
+    include "ca(fr)"
+
+    key <TLDE> { [     slash,  backslash,           bar ]      };
+    key <AE01> { [         1,     exclam ]     };
+    key <AE02> { [         2,         at ]     };
+    key <AE03> { [         3, numbersign ]     };
+    key <AE04> { [         4,     dollar ]     };
+    key <AE05> { [         5,    percent ]     };
+    key <AE06> { [         6,   question ]     };
+    key <AE07> { [         7,  ampersand,    braceleft ]       };
+    key <AE08> { [         8,   asterisk,   braceright ]       };
+    key <AE09> { [         9,  parenleft,  bracketleft ]       };
+    key <AE10> { [         0, parenright, bracketright ]       };
+    key <AE11> { [     minus, underscore ]     };
+    key <AE12> { [     equal,       plus,      notsign ]       };
+
+    key <AD09> { [         o,          O ]     };
+    key <AD10> { [         p,          P ]     };
+    key <AD11> { [dead_circumflex, dead_diaeresis, dead_grave  ]       };
+    key <AD12> { [  ccedilla,   Ccedilla,   asciitilde ]       };
+
+    key <AC10> { [ semicolon,      colon,     degree ] };
+    key <AC11> { [    egrave,     Egrave ]     };
+    key <BKSL> { [    agrave,     Agrave ]     };
+
+    key <LSGT> { [    ugrave,     Ugrave ]     };
+    key <AB01> { [         z,          Z, guillemotleft  ]     };
+    key <AB02> { [         x,          X, guillemotright ]     };
+    key <AB08> { [     comma, apostrophe,           less ]     };
+    key <AB09> { [    period,   quotedbl,        greater ]     };
+    key <AB10> { [    eacute,     Eacute ]     };
+};
+
+partial
+xkb_symbols "multi-2gr" {
+
+    name[Group1] = "Canadian Multilingual (second part)";
+
+    key <TLDE> { [    NoSymbol,      hyphen ]  };
+    key <AE01> { [   onesuperior,  exclamdown ]        };
+    key <AE02> { [   twosuperior,  NoSymbol ]  };
+    key <AE03> { [ threesuperior,    sterling ]        };
+    key <AE04> { [    onequarter,    currency ]        };
+    key <AE05> { [       onehalf,threeeighths ]        };
+    key <AE06> { [ threequarters, fiveeighths ]        };
+    key <AE07> { [    NoSymbol,seveneighths ]  };
+    key <AE08> { [    NoSymbol,   trademark ]  };
+    key <AE09> { [    NoSymbol,   plusminus ]  };
+
+    key <AE11> { [    NoSymbol, questiondown]  };
+    key <AE12> { [  dead_cedilla, dead_ogonek ]        };
+
+    key <AD01> { [ NoSymbol,    Greek_OMEGA ]  };
+    key <AD02> { [    lstroke,        Lstroke ]        };
+    key <AD03> { [         oe,             OE ]        };
+    key <AD04> { [  paragraph,     registered ]        };
+    key <AD05> { [     tslash,         Tslash ]        };
+    key <AD06> { [  leftarrow,            yen ]        };
+    key <AD07> { [  downarrow,        uparrow ]        };
+    key <AD08> { [ rightarrow,       idotless ]        };
+    key <AD09> { [     oslash,       Ooblique ]        };
+    key <AD10> { [      thorn,          THORN ]        };
+    key <AD11> { [ NoSymbol, dead_abovering ]  };
+    key <AD12> { [ dead_tilde,    dead_macron ]        };
+
+    key <AC01> { [         ae,          AE ]   };
+    key <AC02> { [     ssharp,     section ]   };
+    key <AC03> { [        eth,         ETH ]   };
+    key <AC04> { [ NoSymbol, ordfeminine ]     };
+    key <AC05> { [        eng,         ENG ]   };
+    key <AC06> { [    hstroke,     Hstroke ]   };
+    key <AC07> { [      U0133,       U0132 ]   };
+    key <AC08> { [        kra,  NoSymbol ]     };
+    key <AC09> { [      U0140,       U013F ]   };
+    key <AC10> { [ dead_acute, dead_doubleacute ]      };
+    key <AC11> { [ NoSymbol,  dead_caron ]     };
+    key <BKSL> { [ NoSymbol,  dead_breve ]     };
+
+
+    key <LSGT> { [ NoSymbol,   brokenbar ]     };
+
+    key <AB03> { [       cent,   copyright ]   };
+    key <AB04> { [  leftdoublequotemark,  leftsinglequotemark ]        };
+    key <AB05> { [ rightdoublequotemark, rightsinglequotemark ]        };
+    key <AB06> { [      U0149,       U266A ]   };
+    key <AB07> { [         mu,   masculine ]   };
+    key <AB08> { [ Greek_horizbar, multiply ]  };
+    key <AB09> { [ periodcentered, division ]  };
+    key <AB10> { [ NoSymbol, dead_abovedot ]   };
+
+};
+
+// based on
+// Inuktitut keyboard for X11
+// written by Pablo Saratxaga <pablo@mandrakesoft.com>
+
+alphanumeric_keys 
+xkb_symbols "ike" {
+
+    name[Group1]= "Inuktitut";
+
+    key        <AE01> { [ 0x01001595, 1                ]       };
+    key        <AE02> { [ 0x01001449, 2                ]       };
+    key        <AE03> { [ 0x01001550, 3                ]       };
+    key        <AE04> { [ 0x01001483, 4                ]       };
+    key        <AE05> { [ 0x01001466, 5                ]       };
+    key        <AE06> { [ 0x01001585, 6                ]       };
+    key        <AE07> { [ 0x010014bb, 7                ]       };
+    key        <AE08> { [ 0x010014d0, 8                ]       };
+    key        <AE09> { [ 0x010014ea, 9                ]       };
+    key        <AE10> { [ 0x0100153e, 0                ]       };
+    key        <AE11> { [ minus,         underscore    ]       };
+    key        <AE12> { [ 0x0100155d, equal            ]       };
+
+       key <AD01> { [ 0x0100158f, 0x0100148b   ]       };
+       key <AD02> { [ 0x01001403, 0x01001431   ]       };
+       key <AD03> { [ 0x0100157f, 0x01001546   ]       };
+       key <AD04> { [ 0x0100146d, 0x01001596   ]       };
+       key <AD05> { [ 0x0100144e, 0x01001671   ]       };
+       key <AD06> { [ 0x010014ef, 0x01001673   ]       };
+       key <AD07> { [ 0x010014a5, 0x01001675   ]       };
+       key <AD08> { [ 0x010014c2, 0x010015a4   ]       };
+       key <AD09> { [ 0x010014d5, 0x010015a0   ]       };
+       key <AD10> { [ 0x01001528, 0x010015a6   ]       };
+       key <AD11> { [ 0x010014a1, 0x01001505   ]       };
+       key <AD12> { [ dead_abovedot, 0x0100141e]       };
+
+       key <AC01> { [ 0x01001591, 0x0100148d   ]       };
+       key <AC02> { [ 0x01001405, 0x01001433   ]       };
+       key <AC03> { [ 0x01001581, 0x01001548   ]       };
+       key <AC04> { [ 0x0100146f, 0x01001555   ]       };
+       key <AC05> { [ 0x01001450, parenleft    ]       };
+       key <AC06> { [ 0x010014f1, parenright   ]       };
+       key <AC07> { [ 0x010014a7, 0x0100152a   ]       };
+       key <AC08> { [ 0x010014c4, 0x01001557   ]       };
+       key <AC09> { [ 0x010014d7, 0x010015a2   ]       };
+       key <AC10> { [ semicolon,  colon        ]       };
+       key <AC11> { [ apostrophe, quotedbl     ]       };
+
+       key <AB01> { [ 0x01001593, 0x01001490   ]       };
+       key <AB02> { [ 0x0100140a, 0x01001438   ]       };
+       key <AB03> { [ 0x01001583, 0x0100154b   ]       };
+       key <AB04> { [ 0x01001472, question     ]       };
+       key <AB05> { [ 0x01001455, 0x0100157c   ]       };
+       key <AB06> { [ 0x010014f4, 0x010014c7   ]       };
+       key <AB07> { [ 0x010014aa, 0x010014da   ]       };
+       key <AB08> { [ comma,      less         ]       };
+       key <AB09> { [ period,     greater      ]       };
+       key <AB10> { [ 0x0100152d, 0x01001559   ]       };
+
+    key        <TLDE> { [ 0x0100157b, 0x01001575       ]       };
+    key        <LSGT> { [ 0x01001579, 0x01001577       ]       };
+    key        <BKSL> { [ backslash,  bar              ]       };
+
+// End alphanumeric section
+};
+
+partial
+xkb_symbols "multix" {
+
+    name[Group1] = "Canadian Multilingual";
+
+    key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC";
+    key <TLDE> { [     slash,  backslash,            bar, NoSymbol,
+                  NoSymbol,     hyphen ]       };
+    key <AE01> { [         1,     exclam,      plusminus, NoSymbol,
+                 onesuperior, exclamdown ]     };
+    key <AE02> { [         2,         at,             at, NoSymbol,
+                 twosuperior, NoSymbol ]       };
+    key <AE03> { [         3, numbersign,       sterling, NoSymbol,
+               threesuperior,   sterling ]     };
+    key <AE04> { [         4,     dollar,           cent, NoSymbol,
+                  onequarter,   currency ]     };
+    key <AE05> { [         5,    percent,       currency, NoSymbol,
+                     onehalf, threeeighths ]   };
+    key <AE06> { [         6,   question,        notsign, NoSymbol,
+               threequarters, fiveeighths ]    };
+    key <AE07> { [         7,  ampersand,      braceleft, NoSymbol,
+                  NoSymbol, seveneighths ]     };
+    key <AE08> { [         8,   asterisk,     braceright, NoSymbol,
+                  NoSymbol,  trademark ]       };
+    key <AE09> { [         9,  parenleft,    bracketleft, NoSymbol,
+                  NoSymbol,  plusminus ]       };
+    key <AE10> { [         0, parenright,   bracketright, NoSymbol ] };
+    key <AE11> { [     minus, underscore,        onehalf, NoSymbol,
+                  NoSymbol, questiondown]      };
+    key <AE12> { [     equal,       plus,        notsign, NoSymbol,
+               dead_cedilla, dead_ogonek ]     };
+
+    key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC";
+    key <AD01> { [         q,           Q,     NoSymbol, NoSymbol,
+                  NoSymbol, Greek_OMEGA ]      };
+    key <AD02> { [         w,           W,     NoSymbol, NoSymbol,
+                     lstroke,     Lstroke ]    };
+    key <AD03> { [         e,           E,     NoSymbol, NoSymbol,
+                          oe,          OE ]    };
+    key <AD04> { [         r,           R,     NoSymbol, NoSymbol,
+                   paragraph,  registered ]    };
+    key <AD05> { [         t,           T,     NoSymbol, NoSymbol,
+                      tslash,      Tslash ]    };
+    key <AD06> { [         y,           Y,     NoSymbol, NoSymbol,
+                   leftarrow,         yen ]    };
+    key <AD07> { [         u,           U,     NoSymbol, NoSymbol,
+                   downarrow,     uparrow ]    };
+    key <AD08> { [         i,           I,     NoSymbol, NoSymbol,
+                  rightarrow,    idotless ]    };
+    key <AD09> { [         o,           O,        section, NoSymbol,
+                      oslash,    Ooblique ]    };
+    key <AD10> { [         p,           P,      paragraph, NoSymbol,
+                       thorn,       THORN ]    };
+
+    key.type[group1]="EIGHT_LEVEL";
+    key <AD11> { [dead_circumflex, dead_diaeresis, dead_grave, NoSymbol,
+                       NoSymbol, dead_abovering ]      };
+
+    key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC";
+    key <AD12> { [  ccedilla,   Ccedilla,     asciitilde, NoSymbol,
+                  dead_tilde,    dead_macron ] };
+
+    key <AC01> { [         a,          A,     NoSymbol, NoSymbol,
+                          ae,         AE ]     };
+    key <AC02> { [         s,          S,     NoSymbol, NoSymbol,
+                      ssharp,    section ]     };
+    key <AC03> { [         d,          D,     NoSymbol, NoSymbol,
+                         eth,        ETH ]     };
+    key <AC04> { [         f,          F,     NoSymbol, NoSymbol,
+                  NoSymbol, ordfeminine ]      };
+    key <AC05> { [         g,          G,     NoSymbol, NoSymbol,
+                         eng,        ENG ]     };
+    key <AC06> { [         h,          H,     NoSymbol, NoSymbol,
+                     hstroke,    Hstroke ]     };
+    key <AC07> { [         j,          J,     NoSymbol, NoSymbol,
+                       U0133,      U0132 ]     };
+    key <AC08> { [         k,          K,     NoSymbol, NoSymbol,
+                         kra, NoSymbol ]       };
+    key <AC09> { [         l,          L,     NoSymbol, NoSymbol,
+                       U0140,      U013F ]     };
+
+    key.type[group1]="EIGHT_LEVEL";
+    key <AC10> { [ semicolon,          colon,         degree, NoSymbol,
+                  dead_acute, dead_doubleacute ]       };
+
+    key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC";
+    key <AC11> { [    egrave,         Egrave,      braceleft, NoSymbol,
+                  NoSymbol,  dead_caron ]      };
+    key <BKSL> { [    agrave,         Agrave,     braceright, NoSymbol,
+                  NoSymbol,  dead_breve ]      };
+
+    key <LSGT> { [    ugrave,     Ugrave,         degree, NoSymbol,
+                  NoSymbol,   brokenbar ]      };
+
+    key.type[group1]="FOUR_LEVEL_SEMIALPHABETIC";
+    key <AB01> { [         z,          Z,  guillemotleft, NoSymbol ]   };
+    key <AB02> { [         x,          X, guillemotright, NoSymbol ]   };
+
+    key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC";
+    key <AB03> { [         c,          C,     NoSymbol, NoSymbol,
+                        cent,   copyright ]    };
+    key <AB04> { [         v,          V,     NoSymbol, NoSymbol,
+         leftdoublequotemark,  leftsinglequotemark ]   };
+    key <AB05> { [         b,          B,     NoSymbol, NoSymbol,
+        rightdoublequotemark, rightsinglequotemark ]   };
+    key <AB06> { [         n,          N,     NoSymbol, NoSymbol,
+                       U0149,       U266A ]    };
+    key <AB07> { [         m,          M,             mu, NoSymbol,
+                          mu,   masculine ]    };
+    key <AB08> { [     comma, apostrophe,           less, NoSymbol,
+              Greek_horizbar, multiply ]       };
+    key <AB09> { [    period,   quotedbl,        greater, NoSymbol,
+              periodcentered, division ]       };
+    key <AB10> { [    eacute,     Eacute,     dead_acute, NoSymbol,
+                  NoSymbol, dead_abovedot ]    };
+
+    include "nbsp(level3s)"
+
+    modifier_map Control{ Control_L };
+
+    include "level3(ralt_switch)"
+    include "level5(rctrl_switch)"
+};
+
+// OLPC Section
+xkb_symbols "olpc" {
+
+    include "ca(fr)"
+    
+    key <AE02> { [          2,    quotedbl,          ograve,        Ograve ] };
+    key <AE03> { [          3,    slash,          at,        VoidSymbol ] };
+    
+    key <AD03> { [          e,    E,          EuroSign, VoidSymbol]    };
+        
+    key <AB09> { [  period,         period,         0x1002010 ]        };
+    
+    key <I219>  { [  guillemotleft,  guillemotright, degree, VoidSymbol ] };
+};
+
+partial alphanumeric_keys 
+xkb_symbols "eng" {
+    name[Group1] = "English (Canada)";
+    include "us(basic)"
+};
+
+// EXTRAS:
+
+partial alphanumeric_keys 
+xkb_symbols "kut" {
+
+    //Ejective U0313  and compose accents are from shs layout
+    include "ca(shs)"
+
+    name[Group1]= "Kutenai";
+
+    // Alphanumeric section
+
+    // Alveolar Click
+    key <AD05> {       [ t,    T,U01C2 ,U01C2  ]       };
+
+    //Cent sign
+    key <AB03> {       [ c,    C,U00A2,U00A2   ]       };
+
+    //Mid dot
+    key <AB09> {       [ period,     greater,U00B7     ]       };
+
+    //Glottal stop
+    key <AB10> {       [ slash,        question, U0294 ]       };
+
+    //COMBINING COMMA ABOVE RIGHT
+    key <AC11> {       [ apostrophe,   quotedbl, U0315,U0315   ]       };
+
+    //MODIFIER LETTER RIGHT HALF RING
+    key <AC10> {       [ semicolon,    colon,U02BE,U02BE       ]       };
+};
+
+// Secwepemctsin keyboard for X11
+// written by Neskie Manuel <neskiem@gmail.com>
+
+partial alphanumeric_keys  
+xkb_symbols "shs" {
+
+    include "us"
+
+    name[Group1]= "Secwepemctsin";
+
+    //Using Dead key to get COMBINING COMMA ABOVE for ejectives on
+    //q, l, t, s, m, g, k, p, w, y, r
+    //XCompose key is used for the other accute and grave.
+
+    key <AB08> { [ comma, less, U0313    ]     };
+    key <AC01> { [ a, A, aacute, Aacute  ]     };
+    key <AD03> { [ e, E, eacute, Eacute  ]     };
+    key <AD07> { [ u, U, uacute, Uacute  ]     };
+    key <AD08> { [ i, I, iacute, Iacute  ]     };
+    key <AD09> { [ o, O, oacute, Oacute  ]     };
+
+    include "level3(ralt_switch)"
+    include "compose(rctrl)"
+};
+
diff --git a/test/data/symbols/capslock b/test/data/symbols/capslock
new file mode 100644 (file)
index 0000000..3e08805
--- /dev/null
@@ -0,0 +1,74 @@
+default partial hidden modifier_keys
+xkb_symbols "capslock" {
+    replace key <CAPS> {       [       Caps_Lock               ]       };
+    modifier_map Lock { Caps_Lock };
+};
+
+partial hidden modifier_keys
+xkb_symbols "shiftlock" {
+    replace key <CAPS> {       [       Shift_Lock              ]       };
+    modifier_map Shift { Shift_Lock };
+};
+
+partial hidden modifier_keys
+xkb_symbols "grouplock" {
+    replace key <CAPS> {       [       ISO_Next_Group, Caps_Lock       ]       };
+};
+
+partial hidden modifier_keys
+xkb_symbols "swapescape" {
+    key <CAPS> {        [       Escape  ]       };
+    key <ESC>  {        [     Caps_Lock    ]       };
+};
+
+partial hidden modifier_keys
+xkb_symbols "groupshift" {
+    key <CAPS> {
+       type[Group1]="PC_ALT_LEVEL2",
+       [       Mode_switch,    Caps_Lock       ]
+    };
+};
+
+partial hidden modifier_keys
+xkb_symbols "escape" {
+    key <CAPS> {        [       Escape  ]       };
+};
+
+partial hidden modifier_keys
+xkb_symbols "backspace" {
+    key <CAPS> {        [       BackSpace  ]       };
+};
+
+partial hidden modifier_keys
+xkb_symbols "super" {
+    key <CAPS> {        [       Super_L  ]       };
+    modifier_map Mod4   { <CAPS> };
+};
+
+partial hidden modifier_keys
+xkb_symbols "hyper" {
+    key <CAPS> {        [       Hyper_L  ]       };
+    modifier_map Mod4   { <CAPS> };
+};
+
+partial hidden modifier_keys
+xkb_symbols "none" {
+    key <CAPS> {        [       VoidSymbol  ]       };
+};
+
+partial hidden modifier_keys
+xkb_symbols "numlock" {
+    key <CAPS> {        [       Num_Lock  ]       };
+};
+
+// This changes the modifier behavior of the <CAPS> key.
+// The keysym will be reset to Caps_Lock
+partial hidden modifier_keys
+xkb_symbols "ctrl_modifier" {
+    replace key <CAPS> {
+        type[Group1] = "ONE_LEVEL",
+        symbols[Group1] = [ Caps_Lock ],
+        actions[Group1] = [ SetMods(modifiers=Control) ]    
+    };
+    modifier_map Control { <CAPS> };
+};
diff --git a/test/data/symbols/compose b/test/data/symbols/compose
new file mode 100644 (file)
index 0000000..d725732
--- /dev/null
@@ -0,0 +1,54 @@
+partial modifier_keys
+xkb_symbols "ralt" {
+    key <RALT> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "lwin" {
+    key <LWIN> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "rwin" {
+    key <RWIN> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "menu" {
+    key <MENU> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "rctrl" {
+    key <RCTL> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "lctrl" {
+    key <LCTL> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "caps" {
+    key <CAPS> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "102" {
+    key <LSGT> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "paus" {
+    key <PAUS> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "prsc" {
+    key <PRSC> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
+
+partial modifier_keys
+xkb_symbols "sclk" {
+    key <SCLK> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
+};
diff --git a/test/data/symbols/ctrl b/test/data/symbols/ctrl
new file mode 100644 (file)
index 0000000..09d76b5
--- /dev/null
@@ -0,0 +1,57 @@
+// eliminate the caps lock key completely (replace with control)
+partial modifier_keys 
+xkb_symbols "nocaps" {
+    replace key <CAPS> {  [ Control_L, Control_L ] };
+    modifier_map  Control { <CAPS>, <LCTL> };
+};
+
+// replace left control with Meta
+xkb_symbols "lctrl_meta" {
+    replace key <LCTL> {  [ Meta_L ] };
+};
+
+// swap the caps lock key with the left control key
+partial modifier_keys 
+xkb_symbols "swapcaps" {
+    replace key <CAPS> {  [ Control_L ] };
+    replace key <LCTL> {  [ Caps_Lock ] };
+};
+
+// moves the control key to the middle row and the caps lock
+// to the bottom row.  Only works if the geometry or keycodes
+// file has defined appropriate aliases for the keys in question.
+partial modifier_keys 
+xkb_symbols "ac_ctrl" {
+    replace key <AC00> {  [ Control_L ] };
+    replace key <AA00> {  [ Caps_Lock ] };
+};
+
+// Moves the control key to the bottom row and the caps lock
+// to the middle row.  Only works if the geometry or keycodes
+// file has defined appropriate aliases for the keys in question.
+partial modifier_keys 
+xkb_symbols "aa_ctrl" {
+    replace key <AA00> {  [ Control_L ] };
+    replace key <AC00> {  [ Caps_Lock ] };
+};
+
+// Right Ctrl works as Right Alt
+partial modifier_keys 
+xkb_symbols "rctrl_ralt" {
+    key <RCTL> {  symbols[Group1]= [ Alt_R ] };
+};
+
+// Menu works as Right Ctrl
+partial modifier_keys
+xkb_symbols "menu_rctrl" {
+  replace key <MENU> { [ Control_R, Control_R ] };
+  modifier_map Control { Control_L, <MENU> };
+};
+
+// right alt functions as another ctrl key
+partial modifier_keys 
+xkb_symbols "ralt_rctrl" {
+    replace key <RALT> { type[Group1]    = "TWO_LEVEL",
+                         symbols[Group1] = [ Control_R, Control_R ] };
+    modifier_map Control { <RALT> }; 
+};
diff --git a/test/data/symbols/de b/test/data/symbols/de
new file mode 100644 (file)
index 0000000..13f5c87
--- /dev/null
@@ -0,0 +1,627 @@
+// based on a keyboard map from an 'xkb/symbols/de' file
+
+default
+xkb_symbols "basic" {
+
+    include "latin(type4)"
+
+    name[Group1]="German";
+
+    key <AE02> { [         2,   quotedbl,  twosuperior,    oneeighth ] };
+    key <AE03> { [         3,    section, threesuperior,    sterling ] };
+    key <AE04> { [         4,     dollar,   onequarter,     currency ] };
+
+    key <AE11> {type[Group1]="FOUR_LEVEL_PLUS_LOCK",  symbols[Group1]=
+                  [ssharp, question, backslash, questiondown, 0x1001E9E ]};
+// The unicode capital letter sharp s U+1E9E is transformed to "SS"
+// to match the rules for capitalizing sharp s in german.
+// If the capital sharp s is needed, delete the line
+// starting with <U1E9C> from /usr/share/X11/locale/iso8859-15/Compose.
+// If both doubled S and capital sharp s are needed, use  0x1001E9E
+// for capital sharp s and some free unicode codepoint like 0x1001E9C
+// for doubled S. Don`t forget to change this in the Compose file, too.
+
+    key <AE12> { [dead_acute, dead_grave, dead_cedilla,  dead_ogonek ] };
+
+    key <AD03> { [         e,          E,     EuroSign,     EuroSign ] };
+    key <AD06> { [         z,          Z,    leftarrow,          yen ] };
+    key <AD11> { [udiaeresis, Udiaeresis, dead_diaeresis, dead_abovering ] };
+    key <AD12> { [      plus,   asterisk,   dead_tilde,  dead_macron ] };
+
+    key <AC02>  { [         s,          S,                U017F,     U1E9E    ] };
+    key <AC07>  { [         j,          J,        dead_belowdot, dead_abovedot   ] };
+    key <AC10> { [odiaeresis, Odiaeresis, dead_doubleacute, dead_belowdot ] };
+    key <AC11> { [adiaeresis, Adiaeresis, dead_circumflex, dead_caron ] };
+    key <TLDE> { [dead_circumflex, degree,     U2032,    U2033 ] };
+
+    key <BKSL> { [numbersign, apostrophe, rightsinglequotemark,   dead_breve ] };
+    key <AB01> { [         y,          Y,       guillemotright,    U203A       ] };
+    key <AB02> { [         x,          X,        guillemotleft,    U2039       ] };
+    key <AB04> { [         v,          V,   doublelowquotemark, singlelowquotemark ]   };
+    key <AB05> { [         b,          B,  leftdoublequotemark, leftsinglequotemark ] };
+    key <AB06> { [         n,          N, rightdoublequotemark, rightsinglequotemark ] };    
+    key <AB08>  { [     comma,  semicolon,       periodcentered,     multiply  ] };
+    key <AB09> { [    period,      colon,                U2026,     division   ] };
+    key <AB10> { [     minus, underscore,               endash,     emdash     ] };
+
+    include "kpdl(comma)"
+
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "nodeadkeys" {
+
+    // modify the basic German layout to not have any dead keys
+
+    include "de(basic)"
+    name[Group1]="German (eliminate dead keys)";
+
+    key <TLDE> { [asciicircum,    degree,      notsign,      notsign ] };
+    key <AE12> { [     acute,      grave,      cedilla,      cedilla ] };
+    key <AD11> { [udiaeresis, Udiaeresis,    diaeresis,    diaeresis ] };
+    key <AD12> { [      plus,   asterisk,   asciitilde,       macron ] };
+    key <AC10> { [odiaeresis, Odiaeresis,  doubleacute,  doubleacute ] };
+    key <AC11> { [adiaeresis, Adiaeresis,  asciicircum,  asciicircum ] };
+    key <BKSL> { [numbersign, apostrophe,        grave,        grave ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "deadgraveacute" {
+    // modify the basic German layout to have only acute and grave
+    // as dead keys (tilde and circumflex are needed as spacing characters
+    // in many programming languages)
+
+    include "de(basic)"
+    name[Group1]="German (dead grave acute)";
+
+    key <TLDE> { [asciicircum,    degree,      notsign,      notsign ] };
+    key <AD12> { [      plus,   asterisk,   asciitilde,  dead_macron ] };
+    key <BKSL> { [numbersign, apostrophe,        grave,        grave ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "deadacute" {
+    // modify the basic German layout to have only acute as
+    // dead keys (ASCII grave, tilde and circumflex are needed as
+    // spacing characters in many programming languages and text formatters)
+
+    include "de(deadgraveacute)"
+
+    name[Group1]="German (dead acute)";
+
+    key <AE12> { [dead_acute,      grave, dead_cedilla,  dead_ogonek ] };
+    key <BKSL> { [numbersign, apostrophe,   dead_grave,   dead_grave ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "ro" {
+    // add romanian-specific letters to the basic German layout.
+    // Romanian symbols are accessible with combination of <AltGr> and
+    // 'a', 's', 't', 'i', 'ä (&auml)' (+<Shift> for capital letters).
+    // To view romanian-specific symbols, add "export LC_CTYPE=ro_RO"
+    // or "export LC_CTYPE=de_DE.utf8" to your .profile.
+
+    include "de(basic)"
+
+    name[Group1]="Romanian (Germany)";
+
+    key <AD05> { [         t,    T,           tcedilla,     Tcedilla    ] };
+    key <AD08> { [         i,    I,        icircumflex,  Icircumflex    ] };
+    key <AC01> { [         a,    A,        acircumflex,  Acircumflex    ] };
+    key <AC02> { [         s,    S,           scedilla,     Scedilla    ] };
+    key <AC11> { [ adiaeresis,   Adiaeresis,    abreve,       Abreve    ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "ro_nodeadkeys" {
+    // add romanian-specific letters to the German nodeadkeys layout.
+    // Read the comment for de_ro !
+
+    include "de(nodeadkeys)"
+    name[Group1]="Romanian (Germany, eliminate dead keys)";
+
+    key <AD05> { [         t,    T,           tcedilla,     Tcedilla    ] };
+    key <AD08> { [         i,    I,        icircumflex,  Icircumflex    ] };
+    key <AC01> { [         a,    A,        acircumflex,  Acircumflex    ] };
+    key <AC02> { [         s,    S,           scedilla,     Scedilla    ] };
+    key <AC11> { [ adiaeresis,   Adiaeresis, abreve,       Abreve       ] };
+};
+
+// German Dvorak keymap by Thorsten Staerk (www.staerk.de/thorsten)
+// Have acute and grave as dead keys, tilde and circumflex alive as they are needed 
+// in many programming languages.
+// to use this keymap, use a 105-key-keyboard and the command setxkbmap -model pc105 -layout dvorak -variant de
+// source: http://www-lehre.informatik.uni-osnabrueck.de/~rfreund/dvorak.php
+partial alphanumeric_keys 
+xkb_symbols "dvorak" {
+    include "us(dvorak)"
+
+    name[Group1]="German (Dvorak)";
+
+    key <TLDE> { [ asciicircum, degree ] };
+
+    key <AE01> { [ 1, exclam, onesuperior ] };
+    key <AE02> { [ 2, quotedbl, twosuperior ] };
+    key <AE03> { [ 3, section, threesuperior ] };
+    key <AE04> { [ 4, dollar, bar ] };
+    key <AE05> { [ 5, percent, bar ] };
+    key <AE06> { [ 6, ampersand, brokenbar ] };
+    key <AE07> { [ 7, slash, braceleft ] };
+    key <AE08> { [ 8, parenleft, bracketleft ] };
+    key <AE09> { [ 9, parenright, bracketright ] };
+    key <AE10> { [ 0, equal, braceright ] };
+    key <AE11> { [ plus, asterisk, asciitilde ] };
+    key <AE12> { [ less, greater, dead_grave ] };
+
+    key <AD01> { [ udiaeresis, Udiaeresis, at ] };
+    key <AD02> { [ comma, semicolon, dead_diaeresis ] };
+    key <AD03> { [ period, colon ] };
+    key <AD08> { [ c, C, copyright, Cacute ] };
+    key <AD09> { [ t, T, trademark ] };
+    key <AD10> { [ z, Z, zabovedot, Zabovedot ] };
+    key <AD11> { [ question, ssharp ] };
+    key <AD12> { [ slash, backslash, dead_acute ] };
+
+    key <AC01> { [ a, A, at, aogonek ] };
+    key <AC02> { [ o, O, oacute, Oacute ] };
+    key <AC03> { [ e, E, EuroSign, eogonek ] };
+    key <AC04> { [ i, I ] };
+    key <AC05> { [ u, U ] };
+    key <AC06> { [ h, H ] };
+    key <AC07> { [ d, D ] };
+    key <AC08> { [ r, R, registered ] };
+    key <AC09> { [ n, N, nacute, Nacute ] };
+    key <AC10> { [ s, S, sacute, Sacute] };
+    key <AC11> { [ l, L, lstroke, Lstroke ] };
+
+    key <AB01> { [ odiaeresis, Odiaeresis ] };
+    key <AB02> { [ q, Q, at ] };
+    key <AB07> { [ m, M, mu ] };
+    key <AB10> { [ numbersign, apostrophe ] };
+
+    key <BKSL> { [ minus, underscore, hyphen, diaeresis] };
+
+    key <LSGT> { [ adiaeresis, Adiaeresis, bar ] };
+
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "Sundeadkeys" {
+
+    // For naming consistency
+
+    include "de(basic)"
+
+};
+
+partial alphanumeric_keys
+xkb_symbols "sundeadkeys" {
+
+    // For naming consistency
+
+    include "de(Sundeadkeys)"
+
+    name[Group1]="German (Sun dead keys)";
+};
+
+
+// German Neo-Layout Version 2
+// adopted 2004 by Hanno Behrens <Hanno.Behrens@gmx.de>
+// inspired by Dvorak/de-ergo  http://www.goebel-consult.de/de-ergo/
+//
+// Authors: 
+//      Stephan Hilb <stephan at ehilb dot de>
+//      <lucky at zankt dot net>
+//      Benjamin Kellermann <Benjamin dot Kellermann at gmx dot Germany>
+//      Erik Streb <mail at erikstreb dot de>
+//        and many other contributors
+//
+//      http://www.neo-layout.org
+//
+// $Revision$, $Date$
+
+partial alphanumeric_keys modifier_keys keypad_keys
+xkb_symbols "neo_base" {
+
+    // Levels in Neo jargon
+    // --------------------------------------------------------------
+    // Ebene 1: normal
+    // Ebene 2: Shift
+    // Ebene 3: Mod3
+    // Ebene 4: Mod4 (for marking something use Shift + Mod4)
+    // Ebene 5: Shift + Mod3
+    // Ebene 6: Mod3 + Mod4
+    // Compose (not a level): Mod3 + Tab
+    // Feststelltaste (Capslock): Shift + Shift
+    // Mod4-Lock: Mod4 + Mod4
+    // Mod4-Lock: Shift + Mod3 + Tab
+
+    // Legend
+    // ===============
+    // Levels in Xkbmap jargon to be found here in the definitions. 
+    // These are the levels used, and Xorg's translations:
+    // --------------------------------------------------------------
+    // Xorg:       Level1                   Level2                   Level3                   Level4                   Level5                   Level6                   Level7                   Level8                   
+    // Neo:        Ebene1                   Ebene2                   Ebene3                   Ebene5                   Ebene4                   Pseudo-Ebene             Ebene6                   ???                      
+    // Keys (Neo): None                     Shift                    Mod3                     Mod3 + Shift             Mod4                     Mod4 + Shift             Mod3 + Mod4              Mod3 + Mod4 + Shift      
+
+
+    // Alphanumeric-keys
+    // ===============
+    key.type[Group1] = "EIGHT_LEVEL";
+
+    // Tab as Multi_key (Compose)
+    // --------------------------------------------------------------
+    key  <TAB> { [ Tab,                     ISO_Left_Tab,            Multi_key,               ISO_Level5_Lock,         NoSymbol,                NoSymbol,                NoSymbol,                ISO_Level5_Lock          ] };
+
+
+    // Number row
+    // --------------------------------------------------------------
+    key <TLDE> { [ dead_circumflex,         dead_caron,              U21BB,                   U02DE,                   dead_abovedot,           Pointer_EnableKeys,      dead_belowdot,           NoSymbol                 ] };
+
+    key <AE01> { [ 1,                       degree,                  onesuperior,             onesubscript,            ordfeminine,             NoSymbol,                notsign,                 NoSymbol                 ] };
+    key <AE02> { [ 2,                       section,                 twosuperior,             twosubscript,            masculine,               NoSymbol,                logicalor,               NoSymbol                 ] };
+    key <AE03> { [ 3,                       U2113,                   threesuperior,           threesubscript,          numerosign,              NoSymbol,                logicaland,              NoSymbol                 ] };
+    key <AE04> { [ 4,                       guillemotright,          U203A,                   femalesymbol,            NoSymbol,                NoSymbol,                U22A5,                   NoSymbol                 ] };
+    key <AE05> { [ 5,                       guillemotleft,           U2039,                   malesymbol,              periodcentered,          NoSymbol,                U2221,                   NoSymbol                 ] };
+    key <AE06> { [ 6,                       dollar,                  cent,                    U26A5,                   sterling,                NoSymbol,                U2225,                   NoSymbol                 ] };
+
+    key <AE07> { [ 7,                       EuroSign,                yen,                     U03F0,                   currency,                NoSymbol,                rightarrow,              NoSymbol                 ] };
+    key <AE08> { [ 8,                       doublelowquotemark,      singlelowquotemark,      U27E8,                   Tab,                     ISO_Left_Tab,            U221E,                   NoSymbol                 ] };
+    key <AE09> { [ 9,                       leftdoublequotemark,     leftsinglequotemark,     U27E9,                   KP_Divide,               KP_Divide,               variation,               NoSymbol                 ] };
+    key <AE10> { [ 0,                       rightdoublequotemark,    rightsinglequotemark,    zerosubscript,           KP_Multiply,             KP_Multiply,             emptyset,                NoSymbol                 ] };
+
+    key <AE11> { [ minus,                   emdash,                  NoSymbol,                U2011,                   KP_Subtract,             KP_Subtract,             hyphen,                  NoSymbol                 ] };
+    key <AE12> { [ dead_grave,              dead_cedilla,            dead_abovering,          dead_dasia,              dead_diaeresis,          NoSymbol,                dead_macron,             NoSymbol                 ] };
+
+    // Top row
+    // --------------------------------------------------------------
+    key.type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC";
+    key <AD01> { [ x,                       X,                       ellipsis,                Greek_xi,                Prior,                   Prior,                   Greek_XI,                NoSymbol                 ] };
+    key <AD02> { [ v,                       V,                       underscore,              NoSymbol,                BackSpace,               BackSpace,               radical,                 NoSymbol                 ] };
+    key <AD03> { [ l,                       L,                       bracketleft,             Greek_lambda,            Up,                      Up,                      Greek_LAMBDA,            NoSymbol                 ] };
+    key <AD04> { [ c,                       C,                       bracketright,            Greek_chi,               Delete,                  Delete,                  U2102,                   NoSymbol                 ] };
+    key <AD05> { [ w,                       W,                       asciicircum,             Greek_omega,             Next,                    Next,                    Greek_OMEGA,             NoSymbol                 ] };
+
+    key <AD06> { [ k,                       K,                       exclam,                  Greek_kappa,             exclamdown,              NoSymbol,                multiply,                NoSymbol                 ] };
+    key <AD07> { [ h,                       H,                       less,                    Greek_psi,               KP_7,                    KP_7,                    Greek_PSI,               NoSymbol                 ] };
+    key <AD08> { [ g,                       G,                       greater,                 Greek_gamma,             KP_8,                    KP_8,                    Greek_GAMMA,             NoSymbol                 ] };
+    key <AD09> { [ f,                       F,                       equal,                   Greek_phi,               KP_9,                    KP_9,                    Greek_PHI,               NoSymbol                 ] };
+    key <AD10> { [ q,                       Q,                       ampersand,               U03D5,                   KP_Add,                  KP_Add,                  U211A,                   NoSymbol                 ] };
+
+    key <AD11> { [ ssharp,                  U1E9E,                   U017F,                   Greek_finalsmallsigma,   U2212,                   NoSymbol,                jot,                     NoSymbol                 ] };
+
+    key.type[Group1] = "EIGHT_LEVEL";
+    key <AD12> { [ dead_acute,              dead_tilde,              dead_stroke,             dead_psili,              dead_doubleacute,        NoSymbol,                dead_breve,              NoSymbol                 ] };
+
+    // Middle row
+    // --------------------------------------------------------------
+    key.type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC";
+    key <AC01> { [ u,                       U,                       backslash,               NoSymbol,                Home,                    Home,                    includedin,              NoSymbol                 ] };
+    key <AC02> { [ i,                       I,                       slash,                   Greek_iota,              Left,                    Left,                    integral,                NoSymbol                 ] };
+    key <AC03> { [ a,                       A,                       braceleft,               Greek_alpha,             Down,                    Down,                    U2200,                   NoSymbol                 ] };
+    key <AC04> { [ e,                       E,                       braceright,              Greek_epsilon,           Right,                   Right,                   U2203,                   NoSymbol                 ] };
+    key <AC05> { [ o,                       O,                       asterisk,                Greek_omicron,           End,                     End,                     elementof,               NoSymbol                 ] };
+
+    key <AC06> { [ s,                       S,                       question,                Greek_sigma,             questiondown,            NoSymbol,                Greek_SIGMA,             NoSymbol                 ] };
+    key <AC07> { [ n,                       N,                       parenleft,               Greek_nu,                KP_4,                    KP_4,                    U2115,                   NoSymbol                 ] };
+    key <AC08> { [ r,                       R,                       parenright,              Greek_rho,               KP_5,                    KP_5,                    U211D,                   NoSymbol                 ] };
+    key <AC09> { [ t,                       T,                       minus,                   Greek_tau,               KP_6,                    KP_6,                    partialderivative,       NoSymbol                 ] };
+    key <AC10> { [ d,                       D,                       colon,                   Greek_delta,             KP_Separator,            comma,                   Greek_DELTA,             NoSymbol                 ] };
+
+    key <AC11> { [ y,                       Y,                       at,                      Greek_upsilon,           period,                  KP_Decimal,              nabla,                   NoSymbol                 ] };
+
+    // Bottom row
+    // --------------------------------------------------------------
+    key <AB01> { [ udiaeresis,              Udiaeresis,              numbersign,              NoSymbol,                Escape,                  Escape,                  union,                   NoSymbol                 ] };
+    key <AB02> { [ odiaeresis,              Odiaeresis,              dollar,                  U03F5,                   Tab,                     Tab,                     intersection,            NoSymbol                 ] };
+    key <AB03> { [ adiaeresis,              Adiaeresis,              bar,                     Greek_eta,               Insert,                  Insert,                  U2135,                   NoSymbol                 ] };
+    key <AB04> { [ p,                       P,                       asciitilde,              Greek_pi,                Return,                  Return,                  Greek_PI,                NoSymbol                 ] };
+    key <AB05> { [ z,                       Z,                       grave,                   Greek_zeta,              Undo,                    Undo,                    U2124,                   NoSymbol                 ] };
+
+    key <AB06> { [ b,                       B,                       plus,                    Greek_beta,              colon,                   NoSymbol,                U21D0,                   NoSymbol                 ] };
+    key <AB07> { [ m,                       M,                       percent,                 Greek_mu,                KP_1,                    KP_1,                    ifonlyif,                NoSymbol                 ] };
+    key.type[Group1] = "EIGHT_LEVEL";
+    key <AB08> { [ comma,                   endash,                  quotedbl,                U03F1,                   KP_2,                    KP_2,                    U21D2,                   NoSymbol                 ] };
+    key <AB09> { [ period,                  enfilledcircbullet,      apostrophe,              U03D1,                   KP_3,                    KP_3,                    U21A6,                   NoSymbol                 ] };
+    key.type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC";
+    key <AB10> { [ j,                       J,                       semicolon,               Greek_theta,             semicolon,               NoSymbol,                Greek_THETA,             NoSymbol                 ] };
+    key.type[Group1] = "EIGHT_LEVEL";
+
+    // Space key
+    // --------------------------------------------------------------
+    key <SPCE> { [ space,                   space,                   space,                   nobreakspace,            KP_0,                    KP_0,                    U202F,                   NoSymbol                 ] };
+
+
+    // Keypad-keys
+    // ===============
+
+    // The former Numlock key:
+    key <NMLK> { [ Tab,                     ISO_Left_Tab,            equal,                   approxeq,                notequal,                Pointer_EnableKeys,      identical,               NoSymbol                 ] };
+
+    // Topmost row
+    // --------------------------------------------------------------
+    key <KPDV> { [ KP_Divide,               KP_Divide,               division,                U2300,                   U2215,                   NoSymbol,                U2223,                   NoSymbol                 ] };
+    key <KPMU> { [ KP_Multiply,             KP_Multiply,             U2219,                   U2299,                   multiply,                NoSymbol,                U2297,                   NoSymbol                 ] };
+    key <KPSU> { [ KP_Subtract,             KP_Subtract,             U2212,                   U2296,                   U2216,                   NoSymbol,                U2238,                   NoSymbol                 ] };
+
+    // Top row
+    // --------------------------------------------------------------
+    key  <KP7> { [ KP_7,                    U2714,                   U2195,                   U226A,                   KP_Home,                 KP_Home,                 upstile,                 NoSymbol                 ] };
+    key  <KP8> { [ KP_8,                    U2718,                   uparrow,                 intersection,            KP_Up,                   KP_Up,                   U22C2,                   NoSymbol                 ] };
+    key  <KP9> { [ KP_9,                    dagger,                  U20D7,                   U226B,                   KP_Prior,                KP_Prior,                U2309,                   NoSymbol                 ] };
+    key <KPAD> { [ KP_Add,                  KP_Add,                  plusminus,               U2295,                   U2213,                   NoSymbol,                U2214,                   NoSymbol                 ] };
+
+    // Middle row
+    // --------------------------------------------------------------
+    key  <KP4> { [ KP_4,                    club,                    leftarrow,               includedin,              KP_Left,                 KP_Left,                 U2286,                   NoSymbol                 ] };
+    key  <KP5> { [ KP_5,                    EuroSign,                colon,                   U22B6,                   KP_Begin,                KP_Begin,                U22B7,                   NoSymbol                 ] };
+    key  <KP6> { [ KP_6,                    U2023,                   rightarrow,              includes,                KP_Right,                KP_Right,                U2287,                   NoSymbol                 ] };
+
+    // Bottom row
+    // --------------------------------------------------------------
+    key  <KP1> { [ KP_1,                    diamond,                 U2194,                   lessthanequal,           KP_End,                  KP_End,                  downstile,               NoSymbol                 ] };
+    key  <KP2> { [ KP_2,                    heart,                   downarrow,               union,                   KP_Down,                 KP_Down,                 U22C3,                   NoSymbol                 ] };
+    key  <KP3> { [ KP_3,                    U2660,                   U21CC,                   greaterthanequal,        KP_Next,                 KP_Next,                 U230B,                   NoSymbol                 ] };
+    key <KPEN> { [ KP_Enter,                KP_Enter,                KP_Enter,                KP_Enter,                KP_Enter,                KP_Enter,                KP_Enter,                NoSymbol                 ] };
+    key <KPEQ> { [ KP_Equal,                NoSymbol,                NoSymbol,                NoSymbol,                NoSymbol,                NoSymbol,                NoSymbol,                NoSymbol                 ] };
+
+    // Bottommost row
+    // --------------------------------------------------------------
+    key  <KP0> { [ KP_0,                    U2423,                   percent,                 U2030,                   KP_Insert,               KP_Insert,               U25A1,                   NoSymbol                 ] };
+    key <KPDL> { [ KP_Separator,            period,                  comma,                   minutes,                 KP_Delete,               KP_Delete,               seconds,                 NoSymbol                 ] };
+};
+
+partial alphanumeric_keys modifier_keys keypad_keys
+xkb_symbols "neo" {
+
+    include "de(neo_base)"
+
+    name[Group1]= "German (Neo 2)";
+
+    include "shift(both_capslock)"
+    include "level3(caps_switch)"
+    include "level3(bksl_switch)"
+    include "level5(lsgt_switch)"
+    include "level5(ralt_switch)"
+};
+
+// Copied from macintosh_vndr/de
+// olh@suse.de   very close to MacOS map
+
+partial alphanumeric_keys 
+xkb_symbols "mac" {
+
+    include "de"
+    name[Group1]= "German (Macintosh)";
+
+    // Alphanumeric section
+    key <AE01> { [         1,     exclam,   exclamdown,           at ] };
+    key <AE05> { [         5,    percent,  bracketleft       ] };
+    key <AE06> { [         6,  ampersand, bracketright       ] };
+    key <AE07> { [         7,      slash,          bar,    backslash ] };
+    key <AE08> { [         8,  parenleft,    braceleft,   asciitilde ] };
+    key <AE09> { [         9, parenright,   braceright       ] };
+    key <AD01> { [         q,          Q, guillemotleft, guillemotright ]      };
+    key <AD04> { [         r,          R,   registered       ] };
+    key <AD07> { [         u,          U,    diaeresis,       Aacute ] };
+    key <AD08> { [         i,          I,        slash,  Ucircumflex ] };
+    key <AD11> { [ udiaeresis, Udiaeresis, periodcentered,    degree ] };
+    key <AD12> { [      plus,   asterisk,   asciitilde       ] }; 
+    key <AC01> { [         a,          A,        aring,        Aring ] };
+    key <AC05> { [         g,          G,    copyright       ] };
+    key <AC06> { [         h,          H,  ordfeminine       ] };
+    key <AC09> { [         l,          L,           at       ] };
+    key <AC10> { [ odiaeresis, Odiaeresis,  dead_acute       ] };
+    key <AB06> { [         n,          N,   asciitilde       ] };
+
+};
+
+partial alphanumeric_keys 
+xkb_symbols "mac_nodeadkeys" {
+    // modify the standard German mac layout to not have any dead keys
+    include "de(mac)"
+    name[Group1]= "German (Macintosh, eliminate dead keys)";
+    key <AE04> { [         4,     dollar,   onequarter,     currency ] };
+
+    key <TLDE> { [ asciicircum,    degree,     notsign       ] };
+    key <AE12> { [      acute,      grave,     cedilla       ] };
+    key <AD11> { [ udiaeresis, Udiaeresis,   diaeresis       ] };
+    key <AD12> { [       plus,   asterisk,  asciitilde,       macron ] };
+    key <AC10> { [ odiaeresis, Odiaeresis,       acute       ] };
+    key <AC11> { [ adiaeresis, Adiaeresis, asciicircum       ] };
+
+    key <BKSL> { [ numbersign, apostrophe,       grave       ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "dsb"
+{
+       name[Group1] = "Lower Sorbian";
+       include "latin(basic)"
+       include "level3(ralt_switch)"
+       include "kpdl(comma)"
+       key <AB01> { [              z,              Z,         zcaron,         Zcaron ] };
+       key <AB02> { [              x,              X,         zacute,         Zacute ] };
+       key <AB03> { [              c,              C,         cacute,         Cacute ] };
+       key <AB04> { [              v,              V,         ccaron,         Ccaron ] };
+       key <AB06> { [              n,              N,         nacute,         Nacute ] };
+       key <AC02> { [              s,              S,         sacute,         Sacute ] };
+       key <AC03> { [              d,              D,         scaron,         Scaron ] };
+       key <AC04> { [              f,              F                                 ] };
+       key <AD01> { [              q,              Q                                 ] };
+       key <AD02> { [              w,              W                                 ] };
+       key <AD03> { [              e,              E,         ecaron,         Ecaron ] };
+       key <AD04> { [              r,              R,         racute,         Racute ] };
+       key <AD05> { [              t,              T,          U20B5,       EuroSign ] };
+       key <AD09> { [              o,              O,         oacute,         Oacute ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "dsb_qwertz"
+{
+       name[Group1] = "Lower Sorbian (qwertz)";
+       include "latin(basic)"
+       include "level3(ralt_switch)"
+       include "kpdl(comma)"
+       key <AB01> { [              y,              Y                                 ] };
+       key <AB02> { [              x,              X                                 ] };
+       key <AB03> { [              c,              C,         cacute,         Cacute ] };
+       key <AB04> { [              v,              V,         ccaron,         Ccaron ] };
+       key <AB06> { [              n,              N,         nacute,         Nacute ] };
+       key <AC02> { [              s,              S,         sacute,         Sacute ] };
+       key <AC03> { [              d,              D,         scaron,         Scaron ] };
+       key <AC04> { [              f,              F                                 ] };
+       key <AD01> { [              q,              Q                                 ] };
+       key <AD02> { [              w,              W                                 ] };
+       key <AD03> { [              e,              E,         ecaron,         Ecaron ] };
+       key <AD04> { [              r,              R,         racute,         Racute ] };
+       key <AD05> { [              t,              T,          U20B5,       EuroSign ] };
+       key <AD06> { [              z,              Z,         zcaron,         Zcaron ] };
+       key <AD07> { [              u,              U,         zacute,         Zacute ] };
+       key <AD09> { [              o,              O,         oacute,         Oacute ] };
+};
+
+// layout for Russian letters on an german keyboard
+// based on US-RU layout by Ivan Popov <pin@konvalo.org> 2005-07-17
+// adopted for german layout by Alexey Fisher <bug-track@fisher-privat.net> 2010-08-19
+
+partial alphanumeric_keys
+xkb_symbols "ru" {
+
+    include "de(basic)"
+    name[Group1]= "Russian (Germany, phonetic)";
+
+key.type[group1]="FOUR_LEVEL_ALPHABETIC";
+
+    key <LatA> { [        Cyrillic_a,        Cyrillic_A ] };
+    key <LatB> { [       Cyrillic_be,       Cyrillic_BE ] };
+    key <LatW> { [       Cyrillic_ve,       Cyrillic_VE ] };
+    key <LatG> { [      Cyrillic_ghe,      Cyrillic_GHE ] };
+    key <LatD> { [       Cyrillic_de,       Cyrillic_DE ] };
+    key <LatE> { [       Cyrillic_ie,       Cyrillic_IE ] };
+    key <TLDE> { [       Cyrillic_io,       Cyrillic_IO, asciitilde ] };
+    key <LatX> { [      Cyrillic_zhe,      Cyrillic_ZHE ] };
+    key <LatZ> { [       Cyrillic_ze,       Cyrillic_ZE ] };
+    key <LatI> { [        Cyrillic_i,        Cyrillic_I ] };
+    key <LatJ> { [   Cyrillic_shorti,   Cyrillic_SHORTI ] };
+    key <LatK> { [       Cyrillic_ka,       Cyrillic_KA ] };
+    key <LatL> { [       Cyrillic_el,       Cyrillic_EL ] };
+    key <LatM> { [       Cyrillic_em,       Cyrillic_EM ] };
+    key <LatN> { [       Cyrillic_en,       Cyrillic_EN ] };
+    key <LatO> { [        Cyrillic_o,        Cyrillic_O ] };
+    key <LatP> { [       Cyrillic_pe,       Cyrillic_PE ] };
+    key <LatR> { [       Cyrillic_er,       Cyrillic_ER ] };
+    key <LatS> { [       Cyrillic_es,       Cyrillic_ES ] };
+    key <LatT> { [       Cyrillic_te,       Cyrillic_TE ] };
+    key <LatU> { [        Cyrillic_u,        Cyrillic_U ] };
+    key <LatF> { [       Cyrillic_ef,       Cyrillic_EF ] };
+    key <LatH> { [       Cyrillic_ha,       Cyrillic_HA ] };
+    key <LatC> { [      Cyrillic_tse,      Cyrillic_TSE ] };
+    key <AC10> { [      Cyrillic_che,      Cyrillic_CHE ] };
+    key <AD11> { [      Cyrillic_sha,      Cyrillic_SHA ] };
+    key <AD12> { [    Cyrillic_shcha,    Cyrillic_SHCHA, plus, asterisk ] };
+    key <AE12> { [ Cyrillic_hardsign, Cyrillic_HARDSIGN ] };
+    key <LatY> { [     Cyrillic_yeru,     Cyrillic_YERU ] };
+    key <LatV> { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] };
+    key <AC11> { [        Cyrillic_e,        Cyrillic_E ] };
+    key <BKSL> { [       Cyrillic_yu,       Cyrillic_YU, numbersign, apostrophe ] };
+    key <LatQ> { [       Cyrillic_ya,       Cyrillic_YA ] };
+
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "htcdream" {
+        include "inet(htcdream)"
+
+        name[Group1]= "German";
+
+        //second row
+        key <AD01> { [ q, Q, Tab, Tab ] };
+        key <AD02> { [ w, W, grave, grave ] };
+        key <AD03> { [ e, E, EuroSign, EuroSign ] };
+        key <AD04> { [ r, R, underscore, underscore ] };
+        key <AD05> { [ t, T, sterling, sterling] };
+        key <AD06> { [ z, Z, division, division ] };
+        key <AD07> { [ u, U, udiaeresis, udiaeresis ] };
+        key <AD08> { [ i, I, minus, minus ] };
+        key <AD09> { [ o, O, odiaeresis, odiaeresis ] };
+        key <AD10> { [ p, P, equal, equal ] };
+
+        //third row
+        key <AC01> { [ a, A, adiaeresis, adiaeresis ] };
+        key <AC02> { [ s, S, ssharp, ssharp] };
+        key <AC03> { [ d ,D, backslash, backslash ] };
+        key <AC04> { [ f, F, braceleft, braceleft ] };
+        key <AC05> { [ g, G, braceright, braceright ] };
+        key <AC06> { [ h, H, multiply, multiply ] };
+        key <AC07> { [ j, J, colon, colon ] };
+        key <AC08> { [ k, K, plus, plus ] };
+        key <AC09> { [ l, L, apostrophe, apostrophe ] };
+
+        //forth row
+        key <AB01> { [ y, Y, bar, bar ] };
+        key <AB02> { [ x, X, bracketleft, bracketleft ] };
+        key <AB03> { [ c, C, bracketright, bracketright ] };
+        key <AB04> { [ v, V, less, less ] };
+        key <AB05> { [ b, B, greater, greater ] };
+        key <AB06> { [ n, N, semicolon, semicolon ] };
+        key <AB07> { [ m, M, quotedbl, quotedbl ] };
+        key <AB08> { [ comma, comma, question, question ] };
+
+        //fifth row
+        key <FK15> { [ at, at, asciitilde, asciitilde ] };
+
+        include "level3(alt_switch)"
+};
+
+// EXTRAS:
+
+partial alphanumeric_keys
+xkb_symbols "us" {
+    include "us"
+
+    name[Group1]="German (US keyboard with German letters)";
+
+    key <AC01> { [           a,          A, adiaeresis, Adiaeresis ] };
+    key <AC02> { [           s,          S,     ssharp,     ssharp ] };
+    key <AC10> { [   semicolon,      colon, odiaeresis, Odiaeresis ] };
+    key <AC11> { [  apostrophe,   quotedbl, adiaeresis, Adiaeresis ] };
+    key <AD03> { [           e,          E,   EuroSign,   EuroSign ] };
+    key <AD07> { [           u,          U, udiaeresis, Udiaeresis ] };
+    key <AD09> { [           o,          O, odiaeresis, Odiaeresis ] };
+    key <AD11> { [ bracketleft,  braceleft, udiaeresis, Udiaeresis ] };
+    key <AE03> { [           3, numbersign,    section,    section ] };
+    key <AE11> { [       minus, underscore,     ssharp,   question ] };
+
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "hu" {
+
+    // modify the basic German layout to not have any dead keys and add Hungarian letters
+
+    include "de(basic)"
+    name[Group1]="German (with Hungarian letters and no dead keys)";
+
+    key <AB01> { [         y,          Y, guillemotleft,        less ] };
+    key <AC10> { [odiaeresis, Odiaeresis,        eacute,      Eacute ] };
+    key <AC11> { [adiaeresis, Adiaeresis,        aacute,       Aacute] };
+    key <AD03> { [         e,          E,      EuroSign,    EuroSign ] };
+    key <AD06> { [         z,          Z,     leftarrow,         yen ] };
+    key <AD07> { [         u,          U,        uacute,      Uacute ] };
+    key <AD08> { [         i,          I,        iacute,      Iacute ] };
+    key <AD09> { [         o,          O,  odoubleacute,Odoubleacute ] };
+    key <AD11> { [udiaeresis, Udiaeresis,  udoubleacute,Udoubleacute ] };
+    key <AD12> { [      plus,   asterisk,    asciitilde,      macron ] };
+    key <AE12> { [     acute,      grave,        oacute,      Oacute ] };
+    key <BKSL> { [numbersign, apostrophe,         grave,       grave ] };
+    key <TLDE> { [asciicircum,    degree,       notsign,     notsign ] };
+    
+    
+};
diff --git a/test/data/symbols/eurosign b/test/data/symbols/eurosign
new file mode 100644 (file)
index 0000000..0d95a90
--- /dev/null
@@ -0,0 +1,23 @@
+// Most keyboards have the EuroSign engraved on the E key
+partial
+xkb_symbols "e" {
+    key <AD03> { [  NoSymbol,   NoSymbol,   EuroSign,  NoSymbol ]      };
+};
+
+// Many Apple keyboards have the EuroSign engraved on the 2 key
+partial
+xkb_symbols "2" {
+    key <AE02> { [  NoSymbol,   NoSymbol,   EuroSign,  NoSymbol ]      };
+};
+
+// Some keyboards have the EuroSign engraved on the 4 key
+partial
+xkb_symbols "4" {
+    key <AE04> { [  NoSymbol,   NoSymbol,   EuroSign,  NoSymbol ]      };
+};
+
+// Many keyboards have the EuroSign engraved on the 5 key
+partial
+xkb_symbols "5" {
+    key <AE05> { [  NoSymbol,   NoSymbol,   EuroSign,  NoSymbol ]      };
+};
diff --git a/test/data/symbols/group b/test/data/symbols/group
new file mode 100644 (file)
index 0000000..fb2f879
--- /dev/null
@@ -0,0 +1,457 @@
+// using the group(switch) map, the right alt key temporarily chooses 
+// the second keyboard group (until it is released).
+//
+partial modifier_keys 
+xkb_symbols "switch" {
+    key <RALT> {       
+       symbols[Group1]= [      Mode_switch, Multi_key  ],
+       virtualMods= AltGr
+    };
+};
+
+// using the group(lswitch) map, the left alt key temporarily chooses
+// the second keyboard group (until it is released).
+//
+partial modifier_keys 
+xkb_symbols "lswitch" {
+    key <LALT> {       
+       symbols[Group1]= [      Mode_switch, Multi_key  ],
+       virtualMods= AltGr
+    };
+};
+
+
+// using the group(win_switch) map, both Windows'logo keys temporarily
+// choose the second keyboard group (until release).  If you use this
+// map, you would declare you keyboard as pc101 or pc102 instead of
+// pc104 or pc105.
+partial modifier_keys
+xkb_symbols "win_switch" {
+    include "group(lwin_switch)"
+    include "group(rwin_switch)"
+};
+
+// using the group(lwin_switch) map, the left Windows' logo key
+// temporarily chooses the second keyboard group (until it is
+// released).  If you use this map, you would declare you keyboard as
+// pc101 or pc102 instead of pc104 or pc105.
+partial modifier_keys
+xkb_symbols "lwin_switch" {
+  key <LWIN> {
+    symbols[Group1] = [ Mode_switch, Multi_key ],
+    virtualMods= AltGr
+    };
+};
+
+// using the group(rwin_switch) map, the right Windows' logo key
+// temporarily chooses the second keyboard group (until it is
+// released).  If you use this map, you would declare you keyboard as
+// pc101 or pc102 instead of pc104 or pc105.
+partial modifier_keys
+xkb_symbols "rwin_switch" {
+  key <RWIN> {
+    symbols[Group1] = [ Mode_switch, Multi_key ],
+    virtualMods= AltGr
+    };
+};
+
+// Right Ctrl key temporary chooses the second keyboard group.
+// Needed mainly for Canadian keyboard
+partial modifier_keys
+xkb_symbols "rctrl_switch" {
+    key <RCTL>  {
+        symbols[Group1]= [ Mode_switch ]
+    };
+};
+
+// using the group(toggle) map, pressing the right alt key switches to
+// the next sequential group (until the next explicit group change).
+partial modifier_keys 
+xkb_symbols "toggle" {
+    virtual_modifiers AltGr;
+    key <RALT> {       
+       symbols[Group1]= [      ISO_Next_Group  ],
+       virtualMods= AltGr
+    };
+};
+
+// using the group(shifts_toggle) map, pressing both shift keys together
+// locks the next or previous sequential keyboard group 
+// (depending on which shift is pressed first - right or left, 
+// correspongingly)
+partial modifier_keys 
+xkb_symbols "shifts_toggle" {
+    key <LFSH> {       [       Shift_L,        ISO_Prev_Group ]        };
+    key <RTSH> {       [       Shift_R,        ISO_Next_Group ]        };
+};
+
+// using the group(shift_caps_toggle) map, pressing:
+//     Shift+Caps Lock toggles group
+partial modifier_keys
+xkb_symbols "shift_caps_toggle" {
+    key        <CAPS> {        [  Caps_Lock,           ISO_Next_Group  ]       };
+};
+
+// using the group(shift_caps_switch) map, pressing:
+// Caps Lock selects the first group
+// Shift+Caps Lock selects the last group
+partial modifier_keys
+xkb_symbols "shift_caps_switch" {
+    key <CAPS> { [ ISO_First_Group, ISO_Last_Group ] };
+};
+
+// using the group(win_menu_switch) map, pressing:
+// LWIN selects the first group
+// RWIN or MENU selects the last group
+partial modifier_keys
+xkb_symbols "win_menu_switch" {
+    virtual_modifiers AltGr;
+    key <LWIN> {
+        virtualMods= AltGr,
+        symbols[Group1] = [ ISO_First_Group ]
+    };
+    key <MENU> {
+        virtualMods= AltGr,
+        symbols[Group1] = [ ISO_Last_Group ]
+    };
+    key <RWIN> {
+        virtualMods= AltGr,
+        symbols[Group1] = [ ISO_Last_Group ]
+    };
+};
+
+// using the group(lctrl_rctrl_switch) map, pressing:
+// Left Control selects the first group
+// Right Control selects the last group
+partial modifier_keys
+xkb_symbols "lctrl_rctrl_switch" {
+    virtual_modifiers AltGr;
+    key <LCTL> {
+        virtualMods= AltGr,
+        symbols[Group1] = [ ISO_First_Group ]
+    };
+    key <RCTL> {
+        virtualMods= AltGr,
+        symbols[Group1] = [ ISO_Last_Group ]
+    };
+};
+
+
+//
+// CTRL-SHIFT toggle section
+//
+partial modifier_keys 
+xkb_symbols "lctrl_lshift_toggle" {
+    key <LFSH> {
+        type[Group1]="PC_CONTROL_LEVEL2",
+        symbols[Group1]= [ Shift_L, ISO_Next_Group ]
+    };
+    key <LCTL> { [ Control_L, ISO_Next_Group ] };
+};
+
+partial modifier_keys 
+xkb_symbols "lctrl_lshift_toggle_rev" {
+    key <LFSH> {
+        type[Group1]="PC_CONTROL_LEVEL2",
+        symbols[Group1]= [ Shift_L, ISO_Prev_Group ]
+    };
+    key <LCTL> { [ Control_L, ISO_Prev_Group ] };
+};
+
+partial modifier_keys
+xkb_symbols "rctrl_rshift_toggle" {
+    key <RTSH> {
+        type[Group1]="PC_CONTROL_LEVEL2",
+        symbols[Group1]= [ Shift_R, ISO_Next_Group ]
+    };
+    key <RCTL> { [ Control_R, ISO_Next_Group ] };
+};
+
+partial modifier_keys 
+xkb_symbols "ctrl_shift_toggle" {
+    include "group(lctrl_lshift_toggle)"
+    include "group(rctrl_rshift_toggle)"
+};
+
+partial modifier_keys 
+xkb_symbols "ctrl_shift_toggle_bidir" {
+    include "group(lctrl_lshift_toggle_rev)"
+    include "group(rctrl_rshift_toggle)"
+};
+
+
+//
+// CTRL-ALT toggle section
+//
+partial modifier_keys
+xkb_symbols "lctrl_lalt_toggle" {
+    virtual_modifiers Alt;
+    key <LALT> {
+        type[Group1]="PC_CONTROL_LEVEL2",
+        symbols[Group1]= [ NoSymbol,    ISO_Next_Group ],
+        virtualMods= Alt
+    };
+    key <LCTL> {
+        type[Group1]="PC_ALT_LEVEL2",
+        symbols[Group1]= [ Control_L,   ISO_Next_Group ]
+    };
+};
+
+partial modifier_keys
+xkb_symbols "lctrl_lalt_toggle_rev" {
+    virtual_modifiers Alt;
+    key <LALT> {
+        type[Group1]="PC_CONTROL_LEVEL2",
+        symbols[Group1]= [ NoSymbol,    ISO_Prev_Group ],
+        virtualMods= Alt
+    };
+    key <LCTL> {
+        type[Group1]="PC_ALT_LEVEL2",
+        symbols[Group1]= [ Control_L,   ISO_Prev_Group ]
+    };
+};
+
+partial modifier_keys
+xkb_symbols "rctrl_ralt_toggle" {
+    virtual_modifiers Alt;
+    key <RALT> {
+        type[Group1]="PC_CONTROL_LEVEL2",
+        symbols[Group1]= [ NoSymbol,    ISO_Next_Group ],
+        virtualMods= Alt
+    };
+    key <RCTL> {
+        type[Group1]="PC_ALT_LEVEL2",
+        symbols[Group1]= [ Control_R,   ISO_Next_Group ]
+    };
+};
+
+partial modifier_keys 
+xkb_symbols "ctrl_alt_toggle" {
+    include "group(lctrl_lalt_toggle)"
+    include "group(rctrl_ralt_toggle)"
+};
+
+partial modifier_keys 
+xkb_symbols "ctrl_alt_toggle_bidir" {
+    include "group(lctrl_lalt_toggle_rev)"
+    include "group(rctrl_ralt_toggle)"
+};
+
+
+//
+// ALT-SHIFT toggle section
+//
+partial modifier_keys
+xkb_symbols "lalt_lshift_toggle" {
+    virtual_modifiers Alt;
+    key <LALT> {
+        symbols[Group1]= [ NoSymbol,    ISO_Next_Group ],
+        virtualMods= Alt
+    };
+    key <LFSH> {
+        type[Group1]="PC_ALT_LEVEL2",
+        symbols[Group1]= [ Shift_L,     ISO_Next_Group ]
+    };
+};
+
+partial modifier_keys
+xkb_symbols "lalt_lshift_toggle_rev" {
+    virtual_modifiers Alt;
+    key <LALT> {
+        symbols[Group1]= [ NoSymbol,    ISO_Prev_Group ],
+        virtualMods= Alt
+    };
+    key <LFSH> {
+        type[Group1]="PC_ALT_LEVEL2",
+        symbols[Group1]= [ Shift_L,     ISO_Prev_Group ]
+    };
+};
+
+partial modifier_keys
+xkb_symbols "ralt_rshift_toggle" {
+    virtual_modifiers Alt;
+    key <RALT> {
+        symbols[Group1]= [ NoSymbol,    ISO_Next_Group ],
+        virtualMods= Alt
+    };
+    key <RTSH> {
+        type[Group1]="PC_ALT_LEVEL2",
+        symbols[Group1]= [ Shift_R,     ISO_Next_Group ]
+    };
+};
+
+partial modifier_keys 
+xkb_symbols "alt_shift_toggle" {
+    include "group(lalt_lshift_toggle)"
+    include "group(ralt_rshift_toggle)"
+};
+
+partial modifier_keys 
+xkb_symbols "alt_shift_toggle_bidir" {
+    include "group(lalt_lshift_toggle_rev)"
+    include "group(ralt_rshift_toggle)"
+};
+
+
+// using the group(menu_toggle) map, pressing:
+//     Menu key toggles groups
+//     Shift+Menu acts as Menu
+partial modifier_keys
+xkb_symbols "menu_toggle" {
+    key        <MENU> {        [  ISO_Next_Group,       Menu   ]       };
+};
+
+// using the group(lwin_toggle) map, pressing the left Windows' logo key
+// toggles groups.  If you use this map, you would declare you keyboard
+// as pc101 or pc102 instead of pc104 or pc105.
+partial modifier_keys
+xkb_symbols "lwin_toggle" {
+  virtual_modifiers AltGr;
+  key <LWIN> {
+    virtualMods= AltGr,
+    symbols[Group1] = [ ISO_Next_Group ]
+    };
+};
+
+// using the group(rwin_toggle) map, pressing the right Windows' logo key
+// toggles groups.  If you use this map, you would declare you keyboard
+// as pc101 or pc102 instead of pc104 or pc105.
+partial modifier_keys
+xkb_symbols "rwin_toggle" {
+  virtual_modifiers AltGr;
+  key <RWIN> {
+    virtualMods= AltGr,
+    symbols[Group1] = [ ISO_Next_Group ]
+    };
+};
+
+// Both Ctrls pressed together toggle group
+partial modifier_keys
+xkb_symbols "ctrls_toggle" {
+  virtual_modifiers LControl, RControl;
+    key <LCTL> {
+       type[Group1]="PC_RCONTROL_LEVEL2",
+       symbols[Group1]= [ NoSymbol,    ISO_Prev_Group ],
+       virtualMods= LControl
+    };
+    key <RCTL> {
+       type[Group1]="PC_LCONTROL_LEVEL2",
+       symbols[Group1]= [ NoSymbol,    ISO_Next_Group ],
+       virtualMods= RControl
+    };
+};
+
+// Both Alts pressed together toggle group
+partial modifier_keys
+xkb_symbols "alts_toggle" {
+  virtual_modifiers LAlt, RAlt;
+    key <LALT> {
+       type[Group1]="PC_RALT_LEVEL2",
+       symbols[Group1]= [ NoSymbol,    ISO_Prev_Group ],
+       virtualMods= LAlt
+    };
+    key <RALT> {
+       type[Group1]="PC_LALT_LEVEL2",
+       symbols[Group1]= [ NoSymbol,    ISO_Next_Group ],
+       virtualMods= RAlt
+    };
+};
+
+// Left Shift key toggles group
+partial modifier_keys
+xkb_symbols "lshift_toggle" {
+  virtual_modifiers AltGr;
+    key <LFSH> {       
+       symbols[Group1]= [      ISO_Next_Group  ],
+       virtualMods= AltGr
+    };
+};
+
+// Right Shift key toggles group
+partial modifier_keys
+xkb_symbols "rshift_toggle" {
+  virtual_modifiers AltGr;
+    key <RTSH> {       
+       symbols[Group1]= [      ISO_Next_Group  ],
+       virtualMods= AltGr
+    };
+};
+
+// Left Alt key toggles group
+partial modifier_keys
+xkb_symbols "lalt_toggle" {
+  virtual_modifiers AltGr;
+    key <LALT> {       
+       symbols[Group1]= [      ISO_Next_Group  ],
+       virtualMods= AltGr
+    };
+};
+
+// Left Ctrl key toggles group
+partial modifier_keys
+xkb_symbols "lctrl_toggle" {
+  virtual_modifiers AltGr;
+    key <LCTL> {       
+       symbols[Group1]= [      ISO_Next_Group  ],
+       virtualMods= AltGr
+    };
+};
+
+// Right Ctrl key toggles group
+partial modifier_keys
+xkb_symbols "rctrl_toggle" {
+  virtual_modifiers AltGr;
+    key <RCTL> {       
+       symbols[Group1]= [      ISO_Next_Group  ],
+       virtualMods= AltGr
+    };
+};
+
+// using the group(alt_caps_toggle) map, pressing:
+//     Alt+Caps Lock toggles group
+//     Caps Lock toggles caps lock
+partial modifier_keys
+xkb_symbols "alt_caps_toggle" {
+    key        <CAPS> {
+       type="PC_ALT_LEVEL2",
+       symbols[Group1]= [  Caps_Lock,  ISO_Next_Group]
+    };
+};
+
+partial hidden modifier_keys
+xkb_symbols "olpc" {
+  key <I219>  { [ ISO_Next_Group, ISO_Prev_Group ] };
+};
+
+partial modifier_keys
+xkb_symbols "alt_space_toggle" {
+    key <SPCE> {
+    type[Group1]="PC_ALT_LEVEL2",
+    symbols[Group1]= [ space,   ISO_Next_Group ]
+    };
+};
+
+// using the group(sclk_toggle) map, pressing the Scroll Lock key
+// toggles groups.
+partial modifier_keys
+xkb_symbols "sclk_toggle" {
+  virtual_modifiers AltGr;
+  key <SCLK> {
+    virtualMods= AltGr,
+    symbols[Group1] = [ ISO_Next_Group ]
+    };
+};
+
+// Control_L+Win_L locks the first group (presumably Lat).
+// Control_R+Menu locks the second group (presumably Rus).
+partial modifier_keys
+xkb_symbols "lctrl_lwin_rctrl_menu" {
+    key <LWIN> {
+        type[ Group1 ]    = "PC_CONTROL_LEVEL2",
+        symbols[ Group1 ] = [ Super_L,    ISO_First_Group ]
+    };
+    key <MENU> {
+        type[ Group1 ]    = "PC_CONTROL_LEVEL2",
+        symbols[ Group1 ] = [ Menu,       ISO_Last_Group ]
+    };
+}; // lctrl_lwin_rctrl_menu
diff --git a/test/data/symbols/il b/test/data/symbols/il
new file mode 100644 (file)
index 0000000..8bbeaaa
--- /dev/null
@@ -0,0 +1,251 @@
+// based on a keyboard map from an 'xkb/symbols/il' file
+
+// This is a partial implemetation of the Israeli standard SI-1452
+// It does not implement changes to the English layout ("Alt-English"), 
+// as I believe that it is not the job of this layout to modify the English
+// layout.
+partial default alphanumeric_keys 
+xkb_symbols "basic" {
+    // uses the kbd layout in use in Israel.
+
+    name[Group1]= "Hebrew";
+
+    key <AD01> { [ slash,      Q               ]       };
+    key <AD02> { [ apostrophe, W               ]       };
+    key <AD04> { [ hebrew_resh,        R               ]       };
+    key <AD05> { [ hebrew_aleph,T              ]       };
+    key <AD06> { [ hebrew_tet, Y               ]       };
+    key <AD07> { [ hebrew_waw, U               ]       };
+    key <AD08> { [ hebrew_finalnun,    I       ]       };
+    key <AD09> { [ hebrew_finalmem,    O       ]       };
+    key <AD10> { [ hebrew_pe,  P               ]       };
+
+    key <AC02> { [ hebrew_dalet,S              ]       };
+    key <AC03> { [ hebrew_gimel,D              ]       };
+    key <AC04> { [ hebrew_kaph,        F               ]       };
+    key <AC05> { [ hebrew_ayin,        G               ]       };
+    key <AC06> { [ hebrew_yod, H               ]       };
+    key <AC07> { [ hebrew_chet,        J               ]       };
+    key <AC08> { [ hebrew_lamed, K             ]       };
+    key <AC09> { [ hebrew_finalkaph,   L       ]       };
+    key <AC10> { [ hebrew_finalpe,     colon   ]       };
+    key <AC11> { [ comma,      quotedbl        ]       };
+
+    key <AB01> { [ hebrew_zain,        Z               ]       };
+    key <AB02> { [ hebrew_samech, X            ]       };
+    key <AB03> { [ hebrew_bet, C               ]       };
+    key <AB04> { [ hebrew_he,  V               ]       };
+    key <AB05> { [ hebrew_nun, B               ]       };
+    key <AB06> { [ hebrew_mem, N               ]       };
+    key <AB07> { [ hebrew_zade,        M               ]       };
+    // Mirrored:
+    key <AB08> { [ hebrew_taw, greater         ]       };
+    key <AB09> { [ hebrew_finalzade,   less    ]       };
+
+    key.type[Group1] = "THREE_LEVEL";
+    
+    key <TLDE> { [ semicolon,  asciitilde,0x10005b0    ]}; // Sheva
+    key <AB10> { [ period,     question,  0x10005c3    ]}; // Sof Pasuq
+    key <AD03> { [ hebrew_qoph,        E,      EuroSign        ]};
+    key <AC01> { [ hebrew_shin,        A,      0x10020AA       ]};
+  
+    // The following may get overriden by the iso9995-3(basic101) symbols.
+    // therefore they are included here. 
+    // Including them isn't a great idea (for instance: what if group 1 uses
+    // UK keyboard mapping, and maps shift-3 to sterling? This mapping won't
+    // preserve that, and I'm not sure that this is a good feature.
+    key <AE01> { [     1, exclam      , 0x10005b1      ]}; // H. Segol
+    key <AE02> { [     2, at          , 0x10005b2      ]}; // H. Patah
+    key <AE03> { [     3, numbersign  , 0x10005b3      ]}; // H.  Qamats
+    key <AE04> { [     4, dollar      , 0x10005b4      ]}; // Hiriq
+    key <AE05> { [     5, percent     , 0x10005b5      ]}; // Tsere
+    key <AE06> { [     6, asciicircum , 0x10005b6      ]}; // Segol
+    key <AE07> { [     7, ampersand   , 0x10005b7      ]}; // Patah
+    key <AE08> { [     8, asterisk    , 0x10005b8      ]}; // Qamats
+    // Mirrored: 
+    key <AE09> { [     9, parenright   , 0x10005c2     ]}; // Sin dot
+    key <AE10> { [     0, parenleft  , 0x10005c1       ]}; // Shin dot
+    key <AE11> { [ minus, underscore  , 0x10005b9      ]}; // Holam
+    key <AE12> { [ equal, plus        , 0x10005bc      ]}; // Dagesh/Shuruq
+  
+    // Mirrored: 
+    key <AD11> { [ bracketright, braceright, 0x10005bf ]}; // Rafe
+    key <AD12> { [ bracketleft,  braceleft,  0x10005bd ]}; // Meteg
+                                      
+    key <BKSL> { [ backslash,    bar,  0x10005bb       ]}; // Qubuts    
+
+    include "level3(ralt_switch)"
+};
+
+
+// nikud patter based on Dekel Tsur's Hebrew mapping for LyX
+partial alphanumeric_keys 
+xkb_symbols "lyx" {
+    name[Group1]= "Hebrew (lyx)";
+
+    key <TLDE> { [ semicolon,  asciitilde      ]       };
+    // On some key (e.g. AD01, right below) there is not yet mapping for the
+    // second shift level. Since I could not figure a simple way to map this
+    // to "emit nothing", it is currently mapped to the same letter of the
+    // first shift level (avoiding mapping may risk it be used by a character
+    // from a different group).
+    key <AD01> { [ slash,      slash           ]       };
+    key <AD02> { [ apostrophe, apostrophe      ]       };
+    key <AD03> { [ hebrew_qoph,        0x10005b8       ]       }; // Qamats
+    key <AD04> { [ hebrew_resh,        0x10005bc       ]       }; // Dagesh/Shuruq
+    key <AD05> { [ hebrew_aleph,       0x100200e       ]       }; // LRM
+    key <AD06> { [ hebrew_tet, 0x100200f       ]       }; // RLM
+    key <AD07> { [ hebrew_waw, 0x10005b9       ]       }; // Holam
+    key <AD08> { [ hebrew_finalnun,hebrew_finalnun]      };
+    key <AD09> { [ hebrew_finalmem,hebrew_finalmem]      };
+    key <AD10> { [ hebrew_pe,  0x10005b7       ]       }; // Patah
+
+    key <AC01> { [ hebrew_shin,        0x10005b0       ]       }; // Sheva
+    key <AC02> { [ hebrew_dalet,       0x10005bc       ]       }; // Dagesh/Shuruq
+    key <AC03> { [ hebrew_gimel,       hebrew_gimel    ]       };
+    key <AC04> { [ hebrew_kaph,        hebrew_kaph     ]       }; 
+    key <AC05> { [ hebrew_ayin,        0x10005c2       ]       }; // Sin dot
+    key <AC06> { [ hebrew_yod, 0x10005c1       ]       }; // Shin dot
+    key <AC07> { [ hebrew_chet,        0x10005b4       ]       }; // Hiriq
+    key <AC08> { [ hebrew_lamed, 0x10020aa     ]       }; // NIS
+    key <AC09> { [ hebrew_finalkaph,hebrew_finalkaph]    };
+    key <AC10> { [ hebrew_finalpe,     colon   ]       };
+    key <AC11> { [ comma,      quotedbl        ]       };
+
+    key <AB01> { [ hebrew_zain,        hebrew_zain     ]       };
+    key <AB02> { [ hebrew_samech,0x10005b6     ]       }; // Segol
+    key <AB03> { [ hebrew_bet, 0x10005bb       ]       }; // Qubuts
+    key <AB04> { [ hebrew_he,  0x10005b1       ]       }; // H. Segol
+    key <AB05> { [ hebrew_nun, 0x10005b2       ]       }; // H. Patah
+    key <AB06> { [ hebrew_mem, 0x10005b3       ]       }; // H.  Qamats
+    key <AB07> { [ hebrew_zade,        0x10005b5       ]       }; // Tsere
+    key <AB08> { [ hebrew_taw, greater         ]       };
+    key <AB09> { [ hebrew_finalzade,   less    ]       };
+    key <AB10> { [ period,     question        ]       };
+
+    // Note the parens mirroring below:
+    key <AD11> { [ bracketright,       braceright      ]       };
+    key <AD12> { [ bracketleft,        braceleft       ]       };
+    key <AE09> { [ 9         , parenright      ]       };
+    key <AE10> { [ 0         , parenleft       ]       };
+    
+    key <AE11> { [ minus     , 0x10005be       ]       }; // H. Hiphen
+    key <AE12> { [ equal     , plus            ]       };
+};
+
+
+partial alphanumeric_keys 
+xkb_symbols "phonetic" {
+
+    // uses the phonetic layout from old Slackware 'il.map' file
+
+    name[Group1]= "Hebrew (phonetic)";
+
+    key <AE12> {        [     equal,    plus, hebrew_doublelowline, hebrew_doublelowline ]};
+
+    key <LatQ> {       [ hebrew_qoph, hebrew_qoph      ]       };
+    key <LatW> {       [ hebrew_waw, hebrew_waw        ]       };
+    key <LatE> {       [ hebrew_aleph, hebrew_aleph    ]       };
+    key <LatR> {       [ hebrew_resh, hebrew_resh      ]       };
+    key <LatT> {       [ hebrew_taw, hebrew_tet        ]       };
+    key <LatY> {       [ hebrew_ayin, hebrew_ayin      ]       };
+    key <LatU> {       [ hebrew_waw, hebrew_waw        ]       };
+    key <LatI> {       [ hebrew_yod, hebrew_yod        ]       };
+    key <LatO> {       [ hebrew_samech, hebrew_samech  ]       };
+    key <LatP> {       [ hebrew_pe, hebrew_finalpe     ]       };
+
+    key <LatA> {       [ hebrew_aleph, hebrew_aleph    ]       };
+    key <LatS> {       [ hebrew_shin, hebrew_shin      ]       };
+    key <LatD> {       [ hebrew_dalet, hebrew_dalet    ]       };
+    key <LatF> {       [ hebrew_pe, hebrew_finalpe     ]       };
+    key <LatG> {       [ hebrew_gimel, hebrew_gimel    ]       };
+    key <LatH> {       [ hebrew_he, hebrew_he          ]       };
+    key <LatJ> {       [ hebrew_yod, hebrew_yod        ]       };
+    key <LatK> {       [ hebrew_kaph, hebrew_finalkaph ]       };
+    key <LatL> {       [ hebrew_lamed, hebrew_lamed    ]       };
+
+    key <LatZ> {       [ hebrew_zain, hebrew_zain      ]       };
+    key <LatX> {       [ hebrew_chet, hebrew_chet      ]       };
+    key <LatC> {       [ hebrew_zade, hebrew_finalzade ]       };
+    key <LatV> {       [ hebrew_waw, hebrew_waw        ]       };
+    key <LatB> {       [ hebrew_bet, hebrew_bet        ]       };
+    key <LatN> {       [ hebrew_nun, hebrew_finalnun   ]       };
+    key <LatM> {       [ hebrew_mem, hebrew_finalmem   ]       };
+};
+
+// The 'Biblical Hebrew' keyboard layout as defined by Tiro for use with the
+// 'SBL Hebrew' font was added 2006.11.13 by Sebastian J. Bronner
+// <waschtl@sbronner.com>.  Its primary features (as compared to the lyx layout)
+// are that the consonants are in the Israeli standard positions, that a great
+// multitude of glyphs can be input directly from the keyboard, and that it is
+// the closest thing to a standard layout a theologian can hope for.
+// Documentation (including printable keyboard tables), SBL Hebrew font, and
+// keyboard layout for Windows are available at
+// http://www.sbl-site.org/Resources/Resources_BiblicalFonts.aspx.
+//
+// It is of interest that the 'basic' layout defined first in this file (as
+// ships with x.org disagrees in the non-consonant characters that the Tiro-
+// layout claims to be the Israeli standard.  Tiros apparent diligence in the
+// PDF-documentation accompanying the keyboard-layout-files lead me to put
+// greater stock in their claim than in this file.  Therefore, the 'biblical'
+// layout below does not include 'il(basic)' but redoes the _whole_ thing from
+// scratch.
+
+partial alphanumeric_keys 
+xkb_symbols "biblical" {
+       name[Group1]= "Hebrew (Biblical, Tiro)";
+       key.type = "FOUR_LEVEL_SEMIALPHABETIC";
+
+       key <TLDE> { [ U05C3, U05AE, semicolon, asciitilde ] };
+       key <AE01> { [ 1,     U05A9, VoidSymbol, exclam ] };
+       key <AE02> { [ 2,     U0599, VoidSymbol, at ] };
+       key <AE03> { [ 3,     U0592, VoidSymbol, numbersign ] };
+       key <AE04> { [ 4,     U05AF, NewSheqelSign, dollar ] };
+       key <AE05> { [ 5,     VoidSymbol, U200D, percent ] };
+       key <AE06> { [ 6,     U05B9, U200C, asciicircum ] };
+       key <AE07> { [ 7,     U05BF, U034F, ampersand ] };
+       key <AE08> { [ 8,     U05C2, U200E, asterisk ] };
+       key <AE09> { [ 9,     U05C1, U200F, parenright ] };
+       key <AE10> { [ 0,     U059D, U25CC, parenleft ] };
+       key <AE11> { [ U05BE, U05A0, minus, underscore ] };
+       key <AE12> { [ equal, U05BC, VoidSymbol, plus ] };
+
+       key <AD01> { [ U0307, U05C4, U0308, slash ] };
+       key <AD02> { [ U05F3, U05AC, U05F4, apostrophe ] };
+       key <AD03> { [ hebrew_qoph, U05AB, U20AC ] };
+       key <AD04> { [ hebrew_resh, U059F ] };
+       key <AD05> { [ hebrew_aleph, U0593 ] };
+       key <AD06> { [ hebrew_tet, U059E ] };
+       key <AD07> { [ hebrew_waw, U059C, U05F0 ] };
+       key <AD08> { [ hebrew_finalnun, U05A1 ] };
+       key <AD09> { [ hebrew_finalmem, U0595 ] };
+       key <AD10> { [ hebrew_pe, U0594 ] };
+       key <AD11> { [ bracketright, U0597, VoidSymbol, braceright ] };
+       key <AD12> { [ bracketleft, U0598, VoidSymbol, braceleft ] };
+       key <BKSL> { [ U05C0, U05A8, backslash, bar ] };
+
+       key <AC01> { [ hebrew_shin, U05BD ] };
+       key <AC02> { [ hebrew_dalet, U05B0 ] };
+       key <AC03> { [ hebrew_gimel, U05BB ] };
+       key <AC04> { [ hebrew_kaph, U05B4 ] };
+       key <AC05> { [ hebrew_ayin, U05B1 ] };
+       key <AC06> { [ hebrew_yod, U05B6, U05F2 ] };
+       key <AC07> { [ hebrew_chet, U05B5, U05F1 ] };
+       key <AC08> { [ hebrew_lamed, U05B3 ] };
+       key <AC09> { [ hebrew_finalkaph, U05B8, U05C7 ] };
+       key <AC10> { [ hebrew_finalpe, U05B2, VoidSymbol, colon ] };
+       key <AC11> { [ U059a, U05B7, comma, quotedbl ] };
+
+       key <AB01> { [ hebrew_zain, U05C5 ] };
+       key <AB02> { [ hebrew_samech, U05A4 ] };
+       key <AB03> { [ hebrew_bet, U05AA, U05A2 ] };
+       key <AB04> { [ hebrew_he, U05A6 ] };
+       key <AB05> { [ hebrew_nun, U05A5, U05C6 ] };
+       key <AB06> { [ hebrew_mem, U05A7 ] };
+       key <AB07> { [ hebrew_zade, U059B ] };
+       key <AB08> { [ hebrew_taw, U0591, VoidSymbol, greater ] };
+       key <AB09> { [ hebrew_finalzade, U0596, VoidSymbol, less ] };
+       key <AB10> { [ U05AD, U05A3, period, question ] };
+
+       key <SPCE> { [ space, space, thinspace, nobreakspace ] };
+};
diff --git a/test/data/symbols/in b/test/data/symbols/in
new file mode 100644 (file)
index 0000000..84d9b06
--- /dev/null
@@ -0,0 +1,1726 @@
+// This layout includes all Indian layouts, including:
+//     - Bengali
+//     - Gujarati 
+//     - Kannada 
+//     - Malayalam
+//     - Oriya 
+//     - Tamil
+//     - Telugu
+//     - Urdu
+
+// Links:
+// - Indic INSCRIPT keyboard layout diagrams:
+//     http://java.sun.com/products/jfc/tsc/articles/InputMethod/indiclayout.html
+// - Bengali Baishakhi (Bengali layouts):
+// - Bengali Baishakhi Inscript (Bengali layouts):
+// - Bengali Bornona (Bengali layouts):
+// - Uni Gitanjali (Bengali layouts):
+//     http://nltr.org
+// - Ekusheyr Shadhinota (Bengali layouts):
+//     http://ekushey.org/projects/shadhinota/index.html
+// - Microsoft Windows XP SP2: Indic Language Standards - an Introduction:
+//     http://www.bhashaindia.com/MSProducts/XpSp2/Articles/IndicLanguageStandards.aspx
+
+// based on a keyboard map from an 'xkb/symbols/dev' file
+
+// Devangari is the default. Kill me if I am wrong:)
+default partial alphanumeric_keys
+xkb_symbols "deva" {
+       // March 2004 -- David Holl <smyrph+dev_xkb@ece.wpi.edu>
+       name[Group1]="Indian";
+
+       key.type="FOUR_LEVEL";
+
+       key <TLDE> { [ U094a, U0912,   grave, asciitilde  ] };
+       key <AE01> { [ U0967, U090d,       1, exclam      ] };
+       key <AE02> { [ U0968, U0945,       2, at          ] };
+       // Shift+AE0[3-8] really need to return a macro of keys defined by
+       // INSCRIPT in place of the symbols that are here for now.  But this
+       // requires XKB to map 1 key into two to three other key presses.
+       key <AE03> { [ U0969, numbersign,  3, numbersign  ] };
+       key <AE04> { [ U096a, dollar,      4, dollar      ] };
+       key <AE05> { [ U096b, percent,     5, percent     ] };
+       key <AE06> { [ U096c, asciicircum, 6, asciicircum ] };
+       key <AE07> { [ U096d, ampersand,   7, ampersand   ] };
+       key <AE08> { [ U096e, asterisk,    8, asterisk    ] };
+       key <AE09> { [ U096f, parenleft,   9, parenleft   ] };
+       key <AE10> { [ U0966, parenright,  0, parenright  ] };
+       key <AE11> { [ minus, U0903, minus, underscore    ] };
+       key <AE12> { [ U0943, U090b, U0944, U0960 ] };
+
+       key <AD01> { [ U094c, U0914 ] };
+       key <AD02> { [ U0948, U0910 ] };
+       key <AD03> { [ U093e, U0906 ] };
+       key <AD04> { [ U0940, U0908, U0963, U0961 ] };
+       key <AD05> { [ U0942, U090a ] };
+       key <AD06> { [ U092c, U092d ] };
+       key <AD07> { [ U0939, U0919 ] };
+       key <AD08> { [ U0917, U0918, U095a ] };
+       key <AD09> { [ U0926, U0927 ] };
+       key <AD10> { [ U091c, U091d, U095b ] };
+       key <AD11> { [ U0921, U0922, U095c, U095d ] };
+       key <AD12> { [ U093c, U091e ] };
+       // I added \ / ? | for shell-convenience (file names and piping)
+       key <BKSL> { [ U0949, U0911, U005C, U007C ] };
+
+       key <AC01> { [ U094b, U0913 ] };
+       key <AC02> { [ U0947, U090f ] };
+       key <AC03> { [ U094d, U0905 ] };
+       key <AC04> { [ U093f, U0907, U0962, U090c ] };
+       key <AC05> { [ U0941, U0909 ] };
+       key <AC06> { [ U092a, U092b, NoSymbol, U095e ] };
+       key <AC07> { [ U0930, U0931 ] };
+       key <AC08> { [ U0915, U0916, U0958, U0959 ] };
+       key <AC09> { [ U0924, U0925 ] };
+       key <AC10> { [ U091a, U091b, U0952 ] };
+       key <AC11> { [ U091f, U0920, NoSymbol, U0951 ] };
+
+       key <AB01> { [ U0946, U090e, U0953 ] };
+       key <AB02> { [ U0902, U0901, NoSymbol, U0950 ] };
+       key <AB03> { [ U092e, U0923, U0954 ] };
+       key <AB04> { [ U0928, U0929 ] };
+       key <AB05> { [ U0935, U0934 ] };
+       key <AB06> { [ U0932, U0933 ] };
+       key <AB07> { [ U0938, U0936 ] };
+       key <AB08> { [ comma, U0937, U0970 ] };
+       key <AB09> { [ period, U0964, U0965, U093d ] };
+       // I added \ / ? | for shell-convenience (file names and piping)
+       key <AB10> { [ U092f, U095f, slash, question ] };
+
+       // space, space, Zero-Width-Non-Joiner (ZWNJ), Zero-Width-Joiner (ZWJ):
+       include "nbsp(zwnj3zwj4)"
+};
+
+//Name         :       Bolnagri (Combined)
+//Description  :       A phonetic keyboard layout for Devnagari(Hindi)
+//                     http://www.indlinux.org/wiki/index.php/BolNagri
+//NOTE         :       This is a combined map of bolnagri_matras and bolnagri_vowels.
+//Inspired by "devrom" keymap by Steve Smith for the windows tool "keyman"
+//Original Author :    Noah Levitt<nlevitt at columbia.edu>
+//Past Authors  : Pramod.R <pramodr at gmail.com> and Ravikant <ravikant at sarai.net>
+// Current Main.: G Karunakar <karunakar@sarai.net>
+
+partial alphanumeric_keys
+xkb_symbols "bolnagri" {
+     name[Group1] = "Hindi (Bolnagri)";
+     key.type="FOUR_LEVEL";
+    //Top Alphanumeric row
+    // Roman digits
+    key <TLDE>  { [   U0902,   U0901,          apostrophe,     asciitilde ] }; // apostrophe: anusvara, candrabindu
+    key <AE01>  { [   1,       exclam,         U0967,          exclam     ] };
+    key <AE02>  { [   2,       at,             U0968,          at         ] };
+    key <AE03>  { [   3,       numbersign,     U0969,          numbersign ] };
+    key <AE04>  { [   4,       dollar,         U096A,          dollar     ] };
+    key <AE05>  { [   5,       percent,        U096B,          percent    ] };
+    key <AE06>  { [   6,       asciicircum,    U096C,          asciicircum ] };
+    key <AE07>  { [   7,       ampersand,      U096D,          ampersand  ] };
+    key <AE08>  { [   8,       asterisk,       U096E,          asterisk   ] };
+    key <AE09>  { [   9,       parenleft,      U096F,          parenleft  ] };
+    key <AE10>  { [   0,       parenright,     U0966,          parenright ] };
+    key <AE11> { [   minus,    underscore           ] };
+    key <AE12> { [   equal,    plus                 ] };
+    key <BKSL>  { [   U0964,   U0965,          U007C,          U005C   ] }; //pipe : danda, double danda
+
+    //Q Row    
+    key <AD01>   { [   U200C,  U200D   ] };  // Q: ZWNJ, ZWJ
+    key <AD02>   { [   U0935,          U950    ] };  // W: wa, OM
+    key <AD03>   { [   U0947,   U0948, U090F,  U0910   ] };  // E: e, ai matras
+    key <AD04>   { [   U0930,  U0943   ] };  // R: ra, vocalic Ri
+    key <AD05>   { [   U0924,   U0925   ] };  // T: ta, tha
+    key <AD06>   { [   U092f,  U091E   ] };  // Y: ya, nya
+    key <AD07>   { [   U0941,   U0942, U0909,  U090A   ] };  // U: u, uu matras
+    key <AD08>   { [   U093F,   U0940, U0907,  U0908   ] };  // I: i, ii matras
+    key <AD09>   { [   U094B,   U094C, U0913,  U0914   ] };  // O: o, au matras
+    key <AD10>   { [   U092A,   U092B   ] };  // P: pa, pha
+    key <AD11>   { [   bracketleft,   braceleft   ] };  
+    key <AD12>  { [   bracketright, braceright   ] };
+    
+    //A Row
+    key <AC01>   { [   U093E,   U0906, U0905,  U0906  ] };   // A: aa
+    key <AC02>   { [   U0938,    U0937   ] };  // S: sa, ssa
+    key <AC03>   { [   U0926,    U0927   ] };  // D: da, dha
+    key <AC04>   { [   U091F,    U0920   ] };  // F: TA, THA
+    key <AC05>   { [   U0917,    U0918   ] };  // G: ga, gha
+    key <AC06>   { [   U0939,    U0903   ] };  // H: ha, visarg 
+    key <AC07>   { [   U091C,    U091D   ] };  // J: ja, jha
+    key <AC08>   { [   U0915,    U0916   ] };  // K: ka, kha
+    key <AC09>   { [   U0932,   U0962   ] };  // L: la, vocalic L or lru matra`
+    key <AC10>   { [   semicolon, colon  ] }; 
+    key <AC11>   { [apostrophe, quotedbl ] };
+
+    //Z Row
+    key <AB01>   { [   U0936,   U0945   ] };  // Z: sha, akaar candra
+    key <AB02>   { [   U094D,    U0949  ] };  // X: halant, aakaar candra
+    key <AB03>   { [   U091A,    U091B   ] };  // C: ca, cha
+    key <AB04>   { [   U0921,    U0922   ] };  // V: da, dha
+    key <AB05>   { [   U092C,    U092D   ] };  // B: ba, bha
+    key <AB06>   { [   U0928,    U0923   ] };  // N: na, nha
+    key <AB07>   { [   U092E,    U093D,        U092E,  U093D   ] };  // M: ma, avagraha
+    key <AB08>   { [   comma,    U0970  ] };// comma: comma, dev abbreviation sign
+    key <AB09>   { [   period,   U093C          ] };  // period: period, nukta
+    key <AB10>  { [   slash,   question ] };
+
+   // begin modifier mappings
+//    modifier_map Shift  { Shift_L };
+//    modifier_map Lock   { Caps_Lock };
+//    modifier_map Control{ Control_L };
+//    modifier_map Mod3   { Mode_switch };
+    include "level3(ralt_switch)"
+};
+
+// based on a keyboard map from an 'xkb/symbols/ben' file
+
+partial alphanumeric_keys
+xkb_symbols "ben" {
+    name[Group1]= "Bengali (India)";
+
+      // Mainly numbers.
+      key <AE01> { [      U09E7                ]       };
+      key <AE02> { [      U09E8                ]       };
+      key <AE03> { [      U09E9                ]       };
+      key <AE04> { [      U09EA                ]       };
+      key <AE05> { [      U09EB                ]       };
+      key <AE06> { [      U09EC                ]       };
+      key <AE07> { [      U09ED                ]       };
+      key <AE08> { [      U09EE                ]       };
+      key <AE09> { [      U09EF, parenleft     ]       };
+      key <AE10> { [      U09E6, parenright    ]       };
+      key <AE11> { [      minus, U0983         ]       };
+      key <AE12> { [      U098B, U09C3 ]       };
+
+// Mainly long vowels
+
+      key <AD01> { [      U09CC,  U0994        ]       };
+      key <AD02> { [      U09C8,  U0990        ]       };
+      key <AD03> { [      U09BE,  U0986        ]       };
+      key <AD04> { [      U09C0,  U0988        ]       };
+      key <AD05> { [      U09C2,  U098A        ]       };
+
+// Mainly voiced consonants
+
+      key <AD06> { [      U09AC,  U09AD        ]       };
+      key <AD07> { [      U09B9,  U0999 ]      };
+      key <AD08> { [      U0997,  U0998 ]      };
+      key <AD09> { [      U09A6,  U09A7 ]      };
+      key <AD10> { [      U099C,  U099D ]      };
+      key <AD11> { [      U09A1, U09A2         ]       };
+      key <AD12> { [      U09BC, U099E         ]       };
+
+// Mainly short vowels
+      key <AC01> { [      U09CB,  U0993 ]      };
+      key <AC02> { [      U09C7,  U098F ]      };
+      key <AC03> { [      U09CD,  U0985 ]      };
+      key <AC04> { [      U09BF,  U0987 ]      };
+      key <AC05> { [      U09C1,  U0989 ]      };
+
+
+// Mainly unvoiced consonants
+
+      key <AC06> { [      U09AA,  U09AB ]      };
+      key <AC07> { [      U09B0,  U09DD ]      };
+      key <AC08> { [      U0995,  U0996 ]      };
+      key <AC09> { [      U09A4,  U09A5 ]      };
+      key <AC10> { [      U099A,  U099B ]      };
+      key <AC11> { [      U099F, U09A0         ]       };
+      key <BKSL> { [      U005C, U007C         ]       };
+
+      key <AB01> { [      z, Z                 ]       };
+      key <AB02> { [      U0982,  U0981 ]       };
+      key <AB03> { [      U09AE,  U09A3 ]       };
+      key <AB04> { [      U09A8,  U09A8 ]       };
+      key <AB05> { [      U09AC,  U09AC ]       };
+      key <AB06> { [      U09B2,  U09B2 ]       };
+      key <AB07> { [      U09B8,  U09B6 ]       };
+      key <AB08> { [      comma,      U09B7 ]       };
+      key <AB09> { [      period,     U0964 ]       };
+      key <AB10> { [      U09DF,  U09AF        ]       };
+};
+
+xkb_symbols "ben_probhat" {
+ name[Group1]= "Bengali (India, Probhat)";
+   key <ESC>  { [ Escape ] };
+
+// numbers
+   key <TLDE> { [ U200D, asciitilde   ] };
+   key <AE01> { [ U09E7, exclam       ] };
+   key <AE02> { [ U09E8, at           ] };
+   key <AE03> { [ U09E9, numbersign   ] };
+   key <AE04> { [ U09EA, U09F3    ] };
+   key <AE05> { [ U09EB, percent      ] };
+   key <AE06> { [ U09EC, asciicircum  ] };
+   key <AE07> { [ U09ED, U099E    ] };
+   key <AE08> { [ U09EE, U09CE    ] };
+   key <AE09> { [ U09EF, parenleft    ] };
+   key <AE10> { [ U09E6, parenright   ] };
+   key <AE11> { [ minus,     underscore   ] };
+   key <AE12> { [ equal,     plus         ] };
+   key <BKSP> { [ BackSpace               ] };
+
+// tab, q to ] 
+   key <TAB>  { [   Tab,  ISO_Left_Tab     ] };
+   key <AD01> { [   U09A6,  U09A7  ] };
+   key <AD02> { [   U09C2,  U098A  ] };
+   key <AD03> { [   U09C0,  U0988  ] };
+   key <AD04> { [   U09B0,  U09DC  ] };
+   key <AD05> { [   U099F,  U09A0  ] };
+   key <AD06> { [   U098F,  U0990  ] };
+   key <AD07> { [   U09C1,  U0989  ] };
+   key <AD08> { [   U09BF,  U0987  ] };
+   key <AD09> { [   U0993,  U0994  ] };
+   key <AD10> { [   U09AA,  U09AB  ] };
+   key <AD11> { [   U09C7,  U09C8  ] };
+   key <AD12> { [   U09CB,  U09CC  ] };
+   key <RTRN> { [   Return                 ] };
+
+// caps, a to ' 
+//   key <CAPS> { [   Caps_Lock              ] };
+   key <AC01> { [   U09BE,  U0985  ] };
+   key <AC02> { [   U09B8,  U09B7  ] };
+   key <AC03> { [   U09A1,  U09A2  ] };
+   key <AC04> { [   U09A4,  U09A5  ] };
+   key <AC05> { [   U0997,  U0998  ] };
+   key <AC06> { [   U09B9,  U0983  ] };
+   key <AC07> { [   U099C,  U099D  ] };
+   key <AC08> { [   U0995,  U0996  ] };
+   key <AC09> { [   U09B2,  U0982  ] };
+   key <AC10> { [   semicolon,  colon      ] };
+   key <AC11> { [   quoteright, quotedbl   ] };
+
+// shift, z to /
+//   key <LFSH> { [   Shift_L                ] };
+   key <AB01> { [   U09DF,  U09AF  ] };
+   key <AB02> { [   U09B6,  U09DD  ] };
+   key <AB03> { [   U099A,  U099B  ] };
+   key <AB04> { [   U0986,  U098B  ] };
+   key <AB05> { [   U09AC,  U09AD  ] };
+   key <AB06> { [   U09A8,  U09A3  ] };
+   key <AB07> { [   U09AE,  U0999  ] };
+   key <AB08> { [   comma,      U09C3  ] };
+   key <AB09> { [   U0964,  U0981  ] };
+   key <AB10> { [   U09CD,  question   ] };
+   key <BKSL> { [   U200C,  U0965  ] };
+
+//   key <LCTL> { [   Control_L              ] };
+//   key <SPCE> { [   space                  ] };
+
+//   modifier_map Shift  { Shift_L };
+//   modifier_map Lock   { Caps_Lock };
+//   modifier_map Control{ Control_L };
+
+};
+
+// Bengali Baishakhi, Bengali Baishakhi Inscript, Bengali Bornona, Uni Gitanjali Layouts are added by Promathesh Mandal <promathesh812004@gmail.com>
+
+xkb_symbols "ben_baishakhi" {
+ name[Group1]= "Bengali (India, Baishakhi)";
+   key <ESC>   { [ Escape                                      ] };
+
+// numbers
+   key <TLDE> { [ 0x100200D, 0x100200C ] };
+   key <AE01> { [ 0x10009E7, exclam            ] };
+   key <AE02> { [ 0x10009E8, at                ] };
+   key <AE03> { [ 0x10009E9, numbersign        ] };
+   key <AE04> { [ 0x10009EA, dollar, 0x10009F2 ] };
+   key <AE05> { [ 0x10009EB, percent           ] };
+   key <AE06> { [ 0x10009EC, asciicircum, 0x10009D7    ] };
+   key <AE07> { [ 0x10009ED, ampersand ] };
+   key <AE08> { [ 0x10009EE,   asterisk,0x10009FA                      ] };
+   key <AE09> { [ 0x10009EF, parenleft         ] };
+   key <AE10> { [ 0x10009E6, parenright        ] };
+   key <AE11> { [ minus, underscore    ] };
+   key <AE12> { [ equal,     plus      ] };
+   key <BKSP> { [ BackSpace                            ] };
+
+// tab, q to ] 
+   key <TAB>   { [   Tab,  ISO_Left_Tab                ] };
+   key <AD01> { [   0x10009A1,  0x10009A2  ] };
+   key <AD02> { [  0x10009C0 ,  0x10009C2  ] };
+   key <AD03> { [   0x10009C7,  0x100098F, 0x1000990 ] };
+   key <AD04> { [   0x10009B0 , 0x10009C3, 0x100098B                           ] };
+   key <AD05> { [   0x100099F,  0x10009A0      ] };
+   key <AD06> { [   0x10009AF,  0x10009DF      ] };
+   key <AD07> { [   0x10009C1,  0x1000989, 0x100098A  ] };
+   key <AD08> { [   0x10009BF,  0x1000987, 0x1000988  ] };
+   key <AD09> { [   0x10009CB,  0x1000993, 0x1000994   ] };
+   key <AD10> { [   0x10009AA,  0x10009AB      ] };
+   key <AD11> { [   bracketleft,  braceleft] };
+   key <AD12> { [   bracketright,      braceright      ] };
+   key <RTRN> { [   Return                             ] };
+
+// caps, a to ' 
+// key <CAPS> { [   Caps_Lock                          ] };
+   key <AC01> { [   0x10009BE,  0x1000985, 0x1000986  ] };
+   key <AC02> { [   0x10009B8,  0x10009B6,  0x10009B7  ] };
+   key <AC03> { [   0x10009A6,  0x10009A7  ] };
+   key <AC04> { [   0x10009A4,   0x10009A5, 0x10009CE  ] };
+   key <AC05> { [   0x1000997,  0x1000998      ] };
+   key <AC06> { [   0x10009CD,  0x10009B9, 0x1000983  ] };
+   key <AC07> { [   0x100099C,  0x100099D      ] };
+   key <AC08> { [   0x1000995,  0x1000996      ] };
+  key <AC09> { [   0x10009B2,  0x1000964, 0x100098C  ] };
+   key <AC10> { [   semicolon,  colon          ] };
+   key <AC11> { [   quoteright, quotedbl       ] };
+
+// shift, z to /
+// key <LFSH> { [   Shift_L                                    ] };
+   key <AB01> { [   0x10009C8, 0x10009CC                       ] };
+   key <AB02> { [   0x10009DC, 0x10009DD                       ] };
+   key <AB03> { [   0x100099A,  0x100099B  ] };
+   key <AB04> { [   0x10009F1,  0x10009F0      ] };
+   key <AB05> { [   0x10009AC,  0x10009AD  ] };
+   key <AB06> { [   0x10009A8,  0x10009A3, 0x100099E  ] };
+   key <AB07> { [   0x10009AE,  0x1000999, 0x1000981  ] };
+   key <AB08> { [   comma,      less   ] };
+   key <AB09> { [    period,   greater,0x10009BC               ] };
+   key <AB10> { [   slash,  question, 0x1000982        ] };
+   key <BKSL> { [   backslash,        bar      ] };
+
+// third level with right-alt
+    include "level3(ralt_switch)"
+
+//   key <LCTL> { [   Control_L              ] };
+//   key <SPCE> { [   space                  ] };
+
+//   modifier_map Shift  { Shift_L };
+//   modifier_map Lock   { Caps_Lock };
+//   modifier_map Control{ Control_L };
+
+
+};
+
+xkb_symbols "ben_inscript" {
+    name[Group1]= "Bengali (India, Baishakhi Inscript)";
+
+      // Mainly numbers.
+      key <TLDE> { [      0x100200D, 0x100200C ]       };
+      key <AE01> { [      0x10009E7            ]       };
+      key <AE02> { [      0x10009E8            ]       };
+      key <AE03> { [      0x10009E9            ]       };
+      key <AE04> { [      0x10009EA            ]       };
+      key <AE05> { [      0x10009EB            ]       };
+      key <AE06> { [      0x10009EC            ]       };
+      key <AE07> { [      0x10009ED            ]       };
+      key <AE08> { [      0x10009EE            ]       };
+      key <AE09> { [      0x10009EF, parenleft ]       };
+      key <AE10> { [      0x10009E6, parenright        ]       };
+      key <AE11> { [      minus, 0x1000983     ]       };
+      key <AE12> { [      0x10009C3, 0x100098B         ]       };
+
+// Mainly long vowels
+
+      key <AD01> { [      0x10009CC,  0x1000994        ]       };
+      key <AD02> { [      0x10009C8,  0x1000990        ]       };
+      key <AD03> { [      0x10009BE,  0x1000986        ]       };
+      key <AD04> { [      0x10009C0,  0x1000988        ]       };
+      key <AD05> { [      0x10009C2,  0x100098A        ]       };
+
+// Mainly voiced consonants
+
+      key <AD06> { [      0x10009AC,  0x10009AD        ]       };
+      key <AD07> { [      0x10009B9,  0x1000999 ]      };
+      key <AD08> { [      0x1000997,  0x1000998 ]      };
+      key <AD09> { [      0x10009A6,  0x10009A7 ]      };
+      key <AD10> { [      0x100099C,  0x100099D ]      };
+      key <AD11> { [      0x10009A1,  0x10009A2 ]      };
+      key <AD12> { [      0x10009BC,  0x100099E ]      };
+
+// Mainly short vowels
+      key <AC01> { [      0x10009CB,  0x1000993 ]      };
+      key <AC02> { [      0x10009C7,  0x100098F ]      };
+      key <AC03> { [      0x10009CD,  0x1000985 ]      };
+      key <AC04> { [      0x10009BF,  0x1000987 ]      };
+      key <AC05> { [      0x10009C1,  0x1000989 ]      };
+
+
+// Mainly unvoiced consonants
+
+      key <AC06> { [      0x10009AA,  0x10009AB ]      };
+      key <AC07> { [      0x10009B0,  0x10009DD ]      };
+      key <AC08> { [      0x1000995,  0x1000996 ]      };
+      key <AC09> { [      0x10009A4,  0x10009A5 ]      };
+      key <AC10> { [      0x100099A,  0x100099B ]      };
+      key <AC11> { [      0x100099F, 0x10009A0         ]       };
+      key <BKSL> { [      backslash, bar       ]       };
+
+      key <AB01> { [      0x10009CE            ]       };
+      key <AB02> { [      0x1000982,  0x1000981 ]       };
+      key <AB03> { [      0x10009AE,  0x10009A3 ]       };
+      key <AB04> { [      0x10009A8,  0x10009A8 ]       };
+      key <AB05> { [      0x10009AC,  0x10009AC ]       };
+      key <AB06> { [      0x10009B2,  0x10009B2 ]       };
+      key <AB07> { [      0x10009B8,  0x10009B6 ]       };
+      key <AB08> { [      comma,      0x10009B7 ]       };
+      key <AB09> { [      period,     0x1000964 ]       };
+      key <AB10> { [      0x10009DF,  0x10009AF        ]       };
+};
+
+xkb_symbols "ben_gitanjali" {
+ name[Group1]= "Bengali (India, Uni Gitanjali)";
+   key <ESC>   { [ Escape                      ] };
+
+// numbers
+   key <TLDE> { [ colon, question      ] };
+   key <AE01> { [ 0x10009E7, 0x10009CE ] };
+   key <AE02> { [ 0x10009E8, quoteright        ] };
+   key <AE03> { [ 0x10009E9, numbersign        ] };
+   key <AE04> { [ 0x10009EA, 0x10009F3 ] };
+   key <AE05> { [ 0x10009EB, slash     ] };
+   key <AE06> { [ 0x10009EC, period    ] };
+   key <AE07> { [ 0x10009ED, ampersand         ] };
+   key <AE08> { [ 0x10009EE, asterisk  ] };
+   key <AE09> { [ 0x10009EF, parenleft  ] };
+   key <AE10> { [ 0x10009E6, parenright        ] };
+   key <AE11> { [ minus, 0x1000983     ] };
+   key <AE12> { [ 0x10009C3, 0x100098B         ] };
+   key <BKSP> { [ BackSpace            ] };
+
+// tab, q to ] 
+   key <TAB>   { [   Tab,  ISO_Left_Tab        ] };
+   key <AD01> { [   0x10009D7,  0x1000994 ] };
+   key <AD02> { [   0x10009C8,  0x1000990 ] };
+   key <AD03> { [   0x10009BE,  0x1000985 ] };
+   key <AD04> { [   0x10009C0,  0x1000988 ] };
+   key <AD05> { [   0x10009C2,  0x100098A ] };
+   key <AD06> { [   0x10009AC,  0x10009AD ] };
+   key <AD07> { [   0x10009B9,  0x1000999 ] };
+   key <AD08> { [   0x1000997,  0x1000998 ] };
+   key <AD09> { [   0x10009A6,  0x10009A7 ] };
+   key <AD10> { [   0x100099C,  0x100099D ] };
+   key <AD11> { [   0x10009A1,  0x10009A2 ] };
+   key <AD12> { [   0x100200C,  0x100099E ] };
+   key <RTRN> { [   Return               ] };
+
+// caps, a to ' 
+// key <CAPS> { [   Caps_Lock                          ] };
+   key <AC01> { [   0x100200D,  0x1000993 ] };
+   key <AC02> { [   0x10009C7,  0x100098F ] };
+   key <AC03> { [   0x10009CD            ] };
+   key <AC04> { [   0x10009BF,  0x1000987 ] };
+   key <AC05> { [   0x10009C1,  0x1000989 ] };
+   key <AC06> { [   0x10009AA,  0x10009AB ] };
+   key <AC07> { [   0x10009B0,  0x10009F0 ] };
+   key <AC08> { [   0x1000995,  0x1000996 ] };
+   key <AC09> { [   0x10009A4,  0x10009A5 ] };
+   key <AC10> { [   0x100099A,  0x100099B ] };
+   key <AC11> { [   0x100099F,  0x10009A0 ] };
+
+// shift, z to /
+// key <LFSH> { [   Shift_L                                    ] };
+   key <AB01> { [   0x10009C7, 0x100098F ] };
+   key <AB02> { [   0x1000982, 0x1000981 ] };
+   key <AB03> { [   0x10009AE, 0x10009A3 ] };
+   key <AB04> { [   0x10009A8, 0x10009DC ] };
+   key <AB05> { [   0x10009F1, 0x10009DD ] };
+   key <AB06> { [   0x10009B2           ] };
+   key <AB07> { [   0x10009B8, 0x10009B6 ] };
+   key <AB08> { [   comma,     0x10009B7 ] };
+   key <AB09> { [   0x1000964, 0x10009FA ] };
+   key <AB10> { [   0x10009AF, 0x10009DF ] };
+   key <BKSL> { [   backslash, bar      ] };
+
+// third level with right-win
+//    include "level3(lwin_switch)"
+
+//   key <LCTL> { [   Control_L              ] };
+//   key <SPCE> { [   space                  ] };
+
+//   modifier_map Shift  { Shift_L };
+//   modifier_map Lock   { Caps_Lock };
+//   modifier_map Control{ Control_L };
+
+
+};
+
+
+xkb_symbols "ben_bornona" {
+ name[Group1]= "Bengali (India, Bornona)";
+   key <ESC>  { [ Escape                                       ] };
+
+// numbers
+   key <TLDE> { [ 0x100200D, 0x100200C         ] };
+   key <AE01> { [ 0x10009E7, exclam            ] };
+   key <AE02> { [ 0x10009E8, 0x1000981         ] };
+   key <AE03> { [ 0x10009E9, numbersign        ] };
+   key <AE04> { [ 0x10009EA, 0x10009F3         ] };
+   key <AE05> { [ 0x10009EB, percent           ] };
+   key <AE06> { [ 0x10009EC, 0x1000983         ] };
+   key <AE07> { [ 0x10009ED, 0x10009CE ] };
+   key <AE08> { [ 0x10009EE, asterisk          ] };
+   key <AE09> { [ 0x10009EF, parenleft         ] };
+   key <AE10> { [ 0x10009E6, parenright        ] };
+   key <AE11> { [ minus,          underscore   ] };
+   key <AE12> { [ equal,          plus                 ] };
+   key <BKSP> { [ BackSpace                            ] };
+
+// tab, q to ] 
+   key <TAB>   { [   Tab,      ISO_Left_Tab    ] };
+   key <AD01> { [   0x1000982,  0x1000999, 0x10009D7   ] };
+   key <AD02> { [   0x10009A2,  0x10009A0, 0x100098A ] };
+   key <AD03> { [   0x10009C7,  0x10009C8, 0x1000988   ] };
+   key <AD04> { [   0x10009B0,  0x10009C3, 0x100098B   ] };
+   key <AD05> { [   0x10009A4,  0x100099F      ] };
+   key <AD06> { [   0x10009A7,  0x10009A5, 0x100098F  ] };
+   key <AD07> { [   0x10009C1,  0x10009C2, 0x1000989   ] };
+   key <AD08> { [   0x10009BF,  0x10009C0, 0x1000987   ] };
+   key <AD09> { [   0x10009CB,  0x10009CC, 0x1000993   ] };
+   key <AD10> { [   0x10009AA, 0x1000990, 0x1000994            ] };
+   key <AD11> { [   0x100005B,  0x100007B, 0x10009DC  ] };
+   key <AD12> { [   0x100005D,  0x100007D  ] };
+   key <RTRN> { [   Return                                     ] };
+
+// caps, a to ' 
+// key <CAPS> { [   Caps_Lock                          ] };
+   key <AC01> { [   0x10009BE,  0x1000985, 0x10009F4  ] };
+   key <AC02> { [   0x10009B8,  0x10009B6, 0x10009F5  ] };
+   key <AC03> { [   0x10009A6,  0x10009A1, 0x10009F8  ] };
+   key <AC04> { [   0x10009AB                          ] };
+   key <AC05> { [   0x1000997,  0x1000998      ] };
+   key <AC06> { [   0x10009CD, 0x10009B9       ] };
+   key <AC07> { [   0x100099C,  0x100099D      ] };
+   key <AC08> { [   0x1000995,  0x1000996      ] };
+   key <AC09> { [   0x10009B2,  0x1000964  ] };
+   key <AC10> { [   semicolon,  0x100003A      ] };
+   key <AC11> { [   quoteright, quotedbl       ] };
+
+// shift, z to /
+// key <LFSH> { [   Shift_L                                    ] };
+   key <AB01> { [   0x10009AF, 0x10009DC       ] };
+   key <AB02> { [   0x10009B7, 0x10009DD, 0x10009FA    ] };
+   key <AB03> { [   0x100099A,  0x100099B  ] };
+   key <AB04> { [   0x10009AD                          ] };
+   key <AB05> { [   0x10009AC,  0x10009DF      ] };
+   key <AB06> { [   0x10009A8,  0x10009A3      ] };
+   key <AB07> { [   0x10009AE,  0x100099E      ] };
+   key <AB08> { [   comma,      0x100003C      ] };
+   key <AB09> { [   0x100002E,  0x100003E  ] };
+   key <AB10> { [   0x100002F,  question       ] };
+   key <BKSL> { [   0x10009F1,  0x10009F0      ] };
+
+//   key <LCTL> { [   Control_L              ] };
+//   key <SPCE> { [   space                  ] };
+
+//   modifier_map Shift  { Shift_L };
+//   modifier_map Lock   { Caps_Lock };
+//   modifier_map Control{ Control_L };
+// third level with right-alt
+    include "level3(ralt_switch)"
+
+};
+
+partial alphanumeric_keys 
+xkb_symbols "guj" {
+      name[Group1]= "Gujarati";
+
+      // Mainly numbers.
+      key <AE01> { [      U0AE7, U0A8D         ]       };
+      key <AE02> { [      U0AE8, U0AC5         ]       };
+      key <AE03> { [      U0AE9                ]       };
+      key <AE04> { [      U0AEA                ]       };
+      key <AE05> { [      U0AEB                ]       };
+      key <AE06> { [      U0AEC                ]       };
+      key <AE07> { [      U0AED                ]       };
+      key <AE08> { [      U0AEE                ]       };
+      key <AE09> { [      U0AEF, parenleft     ]       };
+      key <AE10> { [      U0AE6, parenright ]  };
+      key <AE11> { [      minus,     U0A83  ]  };
+      key <AE12> { [      U0A8B, U0AC3         ]       };
+
+// Mainly long vowels
+
+      key <AD01> { [      U0ACC, U0A94  ]      };
+      key <AD02> { [      U0AC8, U0A90  ]      };
+      key <AD03> { [      U0ABE, U0A86  ]      };
+      key <AD04> { [      U0AC0, U0A88  ]      };
+      key <AD05> { [      U0AC2, U0A8A  ]      };
+
+// Mainly voiced consonants
+
+      key <AD06> { [      U0AAC, U0AAD         ]       };
+      key <AD07> { [      U0AB9, U0A99         ]       };
+      key <AD08> { [      U0A97, U0A98         ]       };
+      key <AD09> { [      U0AA6, U0AA7         ]       };
+      key <AD10> { [      U0A9C, U0A9D         ]       };
+      key <AD11> { [      U0AA1, U0AA2         ]       };
+      key <AD12> { [      U0ABC, U0A9E         ]       };
+
+// Mainly short vowels
+      key <AC01> { [      U0ACB, U0A93 ]       };
+      key <AC02> { [      U0AC7, U0A8F ]       };
+      key <AC03> { [      U0ACD, U0A85  ]      };
+      key <AC04> { [      U0ABF, U0A87  ]      };
+      key <AC05> { [      U0AC1, U0A89  ]      };
+
+// Mainly unvoiced consonants
+
+      key <AC06> { [      U0AAA, U0AAB         ]       };
+      key <AC07> { [      U0AB0, U0AB0         ]       };
+      key <AC08> { [      U0A95, U0A96         ]       };
+      key <AC09> { [      U0AA4, U0AA5         ]       };
+      key <AC10> { [      U0A9A, U0A9B         ]       };
+      key <AC11> { [      U0A9F, U0AA0         ]       };
+      key <BKSL> { [      U0AC9, U0A91         ]       };
+
+      key <AB01> { [      z        , Z         ]       };
+      key <AB02> { [      U0A82, U0A81 ]       };
+      key <AB03> { [      U0AAE, U0AA3  ]       };
+      key <AB04> { [      U0AA8, U0AA8   ]       };
+      key <AB05> { [      U0AB5, U0AB5   ]       };
+      key <AB06> { [      U0AB2, U0AB3  ]       };
+      key <AB07> { [      U0AB8, U0AB6  ]       };
+      key <AB08> { [      comma,     U0AB7  ]       };
+      key <AB09> { [      period,    U0964  ]       };
+      key <AB10> { [      U0AAF, question   ]       };
+};
+
+partial alphanumeric_keys 
+xkb_symbols "kan" {
+
+    // Inscript layout for Kannada  
+    // Author : G Karunakar <karunakar@freedomink.org>
+    // Date   : Wed Nov 13 17:22:58 IST 2002
+    // Kannada digits mapped in basic only
+
+    name[Group1]= "Kannada";
+
+    key <TLDE> { [  U0cca, U0c92       ] };
+    key <AE01> { [  U0ce7                      ] };
+    key <AE02> { [  U0ce8                      ] };
+    key <AE03> { [  U0ce9                      ] };
+    key <AE04> { [  U0cea                      ] };
+    key <AE05> { [  U0ceb                      ] };
+    key <AE06> { [  U0cec                      ] };
+    key <AE07> { [  U0ced                      ] };
+    key <AE08> { [  U0cee                      ] };
+    key <AE09> { [  U0cef                      ] };
+    key <AE10> { [  U0ce6                      ] };
+    key <AE11> { [  U0c83                      ] };
+    key <AE12> { [  U0cc3, U0c8b       ] };
+
+    key <AD01> { [  U0ccc, U0c94       ] };
+    key <AD02> { [  U0cc8, U0c90       ] };
+    key <AD03> { [  U0cbe, U0c86       ] };
+    key <AD04> { [  U0cc0, U0c88       ] };
+    key <AD05> { [  U0cc2, U0c8a       ] };
+    key <AD06> { [  U0cac, U0cad       ] };
+    key <AD07> { [  U0cb9, U0c99       ] };
+    key <AD08> { [  U0c97, U0c98       ] };
+    key <AD09> { [  U0ca6, U0ca7       ] };
+    key <AD10> { [  U0c9c, U0c9d       ] };
+    key <AD11> { [  U0ca1, U0ca2       ] };
+    key <AD12> { [  U0cbc, U0c9e       ] };
+    key <AC01> { [  U0ccb, U0c93       ] };
+    key <AC02> { [  U0cc7, U0c8f       ] };
+    key <AC03> { [  U0ccd, U0c85       ] };
+    key <AC04> { [  U0cbf, U0c87       ] };
+    key <AC05> { [  U0cc1, U0c89       ] };
+    key <AC06> { [  U0caa, U0cab       ] };
+    key <AC07> { [  U0cb0, U0cb1       ] };
+    key <AC08> { [  U0c95, U0c96       ] };
+    key <AC09> { [  U0ca4, U0ca5       ] };
+    key <AC10> { [  U0c9a, U0c9b       ] };
+    key <AC11> { [  U0c9f, U0ca0       ] };
+
+    key <AB01> { [  U0cc6, U0c8e       ] };
+    key <AB02> { [  U0c82                      ] };
+    key <AB03> { [  U0cae, U0ca3       ] };
+    key <AB04> { [  U0ca8                      ] };
+    key <AB05> { [  U0cb5, U0cb4       ] };
+    key <AB06> { [  U0cb2, U0cb3       ] };
+    key <AB07> { [  U0cb8, U0cb6       ] };
+    key <AB08> { [  comma     , U0cb7  ] };
+    key <AB09> { [  period                             ] };
+    key <AB10> { [  U0caf, U0040       ] };
+
+    key <RALT> {
+       symbols[Group1] = [ Mode_switch, Multi_key ],
+       virtualMods = AltGr
+    };
+
+};
+
+// Description : A keymap for Malayalam
+// Encoding    : Unicode (http://www.unicode.org)
+// Author      : Baiju M <baiju@freeshell.org>
+// Date        : Sat Aug  17 21:10:48 IST 2002
+// Mapping:
+
+partial alphanumeric_keys 
+xkb_symbols "mal" {
+
+    name[Group1] = "Malayalam";
+
+    //From grave to backslash (\)
+    
+    key <TLDE> { [ U0d4a , U0d12           ] };
+
+// svu: 
+// These lines were in former "mal" variant - 
+// but the digits are replaced with the ones from 'mal_plusnum' -
+// for the integrity of all Indian layouts
+//
+//    key <AE01> { [1           ,     exclam           ] }; 
+//    key <AE02> { [2           ,         at           ] };
+//    key <AE03> { [3           , numbersign           ] };
+//    key <AE04> { [4           ,     dollar           ] };
+//    key <AE05> { [5           ,    percent           ] };
+//    key <AE06> { [6           ,asciicircum           ] };
+//    key <AE07> { [7           ,  ampersand           ] };
+//    key <AE08> { [8           , asterisk           ] };
+//    key <AE09> { [9           ,  parenleft           ] };
+//    key <AE10> { [0           , parenright           ] };
+
+      key <AE01> { [ U0d67 ,      exclam ] };
+      key <AE02> { [ U0d68 ,          at ] };
+      key <AE03> { [ U0d69 ,  numbersign ] };
+      key <AE04> { [ U0d6a ,      dollar ] };
+      key <AE05> { [ U0d6b ,     percent ] };
+      key <AE06> { [ U0d6c , asciicircum ] };
+      key <AE07> { [ U0d6d ,   ampersand ] };
+      key <AE08> { [ U0d6e ,  asterisk ] };
+      key <AE09> { [ U0d6f ,   parenleft ] };
+      key <AE10> { [ U0d66 ,  parenright ] };
+
+    key <AE11> { [ minus      , U0d03           ] };
+    key <AE12> { [ U0d43 , U0d0b           ] };
+    key <BKSL>  { [U0200c, U05C ]};//bksl: ZWNJ 
+
+  
+    // From 'q' to right bracket (])
+    
+    key <AD01> { [ U0d4c , U0d14 ] };
+    key <AD02> { [ U0d48 , U0d10 ] };
+    key <AD03> { [ U0d3e , U0d06 ] };
+    key <AD04> { [ U0d40 , U0d08 ] };
+    key <AD05> { [ U0d42 , U0d0a ] };
+    key <AD06> { [ U0d2c , U0d2d ] };
+    key <AD07> { [ U0d39 , U0d19 ] };
+    key <AD08> { [ U0d17 , U0d18 ] };
+    key <AD09> { [ U0d26 , U0d27 ] };
+    key <AD10> { [ U0d1c , U0d1d ] };
+    key <AD11> { [ U0d21 , U0d22 ] };
+    key <AD12> { [ U0200d , U0d1e ] };
+
+    // From 'a' to apostrophe (')
+    
+    key <AC01> { [ U0d4b , U0d13 ] };
+    key <AC02> { [ U0d47 , U0d0f ] };
+    key <AC03> { [ U0d4d , U0d05 ] };
+    key <AC04> { [ U0d3f , U0d07 ] };
+    key <AC05> { [ U0d41 , U0d09 ] };
+    key <AC06> { [ U0d2a , U0d2b ] };
+    key <AC07> { [ U0d30 , U0d31 ] };
+    key <AC08> { [ U0d15 , U0d16 ] };
+    key <AC09> { [ U0d24 , U0d25 ] };
+    key <AC10> { [ U0d1a , U0d1b ] };
+    key <AC11> { [ U0d1f , U0d20 ] };
+    
+    // From 'z' to slash (/)
+    
+    key <AB01> { [ U0d46 , U0d0e ] };
+    key <AB02> { [ U0d02 , U200b ] };//X:ZWSP
+    key <AB03> { [ U0d2e , U0d23 ] };
+    key <AB04> { [ U0d28 ] };
+    key <AB05> { [ U0d35 , U0d34 ] };
+    key <AB06> { [ U0d32 , U0d33 ] };
+    key <AB07> { [ U0d38 , U0d36 ] };
+    key <AB08> { [ comma      , U0d37 ] };
+    key <AB09> { [ period     , U0200d ] };
+    key <AB10> { [ U0d2f , question   ] };
+
+};
+
+//Name         :       Lalitha
+//Description  :       A transliteration keyboard layout for Malayalam
+//Original Author :    Noah Levitt<nlevitt at columbia.edu>
+//Current Main  :      Jinesh K.J<jinesh.k@gmail.com>, Swathantra Malayalam Computing (SMC)<smc-discuss@googlegroups.com>
+
+partial alphanumeric_keys
+xkb_symbols "mal_lalitha" {
+     name[Group1] = "Malayalam (Lalitha)";
+     key.type="FOUR_LEVEL";
+    //Top Alphanumeric row
+    // Roman digits
+    key <TLDE>  { [   U0D4D,   U0D02,          apostrophe,     asciitilde ] }; // apostrophe: virama(chandrakala),anusvara
+    key <AE01>  { [   1,       exclam, U0D67,          exclam     ] };
+    key <AE02>  { [   2,       at,             U0D68,          at         ] };
+    key <AE03>  { [   3,       numbersign,     U0D69,          numbersign ] };
+    key <AE04>  { [   4,       dollar,         U0D6A,          dollar     ] };
+    key <AE05>  { [   5,       percent,        U0D6B,          percent    ] };
+    key <AE06>  { [   6,       asciicircum,    U0D6C,          asciicircum ] };
+    key <AE07>  { [   7,       ampersand,      U0D6D,          ampersand  ] };
+    key <AE08>  { [   8,       asterisk,       U0D6E,          asterisk   ] };
+    key <AE09>  { [   9,       parenleft,      U0D6F,          parenleft  ] };
+    key <AE10>  { [   0,       parenright,     U0D66,          parenright ] };
+    key <AE11> { [   minus,    underscore           ] };
+    key <AE12> { [   equal,    plus                 ] };
+    key <BKSL>  { [   U005C,   U007C,          U200C   ] };//backslash:pipe,backslash,ZWNJ 
+
+    //Q Row    
+    key <AD01>   { [   U0D48,  U0D4C,  U0D10,  U0D14  ] }; // Q: ai and au matras 
+    key <AD02>   { [   U0D35   ] };  // W: wa, OM
+    key <AD03>   { [   U0D46,   U0D47, U0D0E,  U0D0F   ] };  // E: e,ee matras
+    key <AD04>   { [   U0D30,  U0D31,  U0D43,  U0D0B   ] };  // R: ra,rra, vocalic Ri
+    key <AD05>   { [   U0D24,   U0D25, U0D1F,  U0D20   ] };  // T: tha, ttha,ta,tta
+    key <AD06>   { [   U0D2f    ] };  // Y: ya
+    key <AD07>   { [   U0D41,   U0D42, U0D09,  U0D0A   ] };  // U: u, uu matras
+    key <AD08>   { [   U0D3F,   U0D40, U0D07,  U0D08   ] };  // I: i, ii matras
+    key <AD09>   { [   U0D4A,   U0D4B, U0D12,  U0D13   ] };  // O: o, oo matras
+    key <AD10>   { [   U0D2A   ] };  // P: pa
+    key <AD11>   { [   bracketleft,   braceleft   ] };//braceleft:   
+    key <AD12>  { [   bracketright, braceright   ] };//braceright:
+    
+    //A Row
+    key <AC01>   { [   U0D3E,   U0D05, U0D06,  U0D05  ] };   // A: a,aa
+    key <AC02>   { [   U0D38,    U0D37   ] };  // S: sa, ssa
+    key <AC03>   { [   U0D26,    U0D27,        U0D21,  U0D22   ] };  // D: soft da,soft dda,hard da,hard dda,
+    key <AC04>   { [   U0D2B     ] };  // F: pha
+    key <AC05>   { [   U0D17,    U0D18   ] };  // G: ga, gha
+    key <AC06>   { [   U0D39,    U0D03   ] };  // H: ha, visarg 
+    key <AC07>   { [   U0D1C,    U0D1D   ] };  // J: ja, jha
+    key <AC08>   { [   U0D15,    U0D16   ] };  // K: ka, kha
+    key <AC09>   { [   U0D32,   U0D33   ] };  // L: la, vocalic L or lru matra`
+    key <AC10>   { [   semicolon, colon  ] }; 
+    key <AC11>   { [apostrophe, quotedbl ] };
+
+    //Z Row
+    key <AB01>   { [   U0D34,   U0D36   ] };  // Z: sha,zha
+    key <AB02>   { [   U0D4D,   U200B  ] };  // X: chandrakala,ZWSP
+    key <AB03>   { [   U0D1A,    U0D1B   ] };  // C: ca, cha
+    key <AB04>   { [   U0D35,   U200D  ] };  // V: va,ZWJ
+    key <AB05>   { [   U0D2C,    U0D2D   ] };  // B: ba, bha
+    key <AB06>   { [   U0D28,    U0D23,        U0D19,  U0D1E   ] };  // N: na, hard na,nga,nha
+    key <AB07>   { [   U0D2E,   U0D02  ] };  // M: ma
+    key <AB08>   { [   comma,    U003C ] };// comma: comma
+    key <AB09>   { [   period,          U003E ] };  // period: period
+    key <AB10>  { [   slash,   question ] };
+
+   // begin modifier mappings
+//    modifier_map Shift  { Shift_L };
+//    modifier_map Lock   { Caps_Lock };
+//    modifier_map Control{ Control_L };
+//    modifier_map Mod3   { Mode_switch };
+    include "level3(ralt_switch)"
+};
+
+
+partial alphanumeric_keys 
+xkb_symbols "ori" {
+    // Inscript layout for Oriya  
+    // Author: G Karunakar <karunakar@freedomink.org>
+    // Date: Wed Nov 13 18:16:19 IST 2002
+
+    name[Group1]= "Oriya";
+    
+    key <AE01> { [  U0b67                      ] };
+    key <AE02> { [  U0b68                      ] };
+    key <AE03> { [  U0b69                      ] };
+    key <AE04> { [  U0b6a                      ] };
+    key <AE05> { [  U0b6b                      ] };
+    key <AE06> { [  U0b6c                      ] };
+    key <AE07> { [  U0b6d                      ] };
+    key <AE08> { [  U0b6e                      ] };
+    key <AE09> { [  U0b6f                      ] };
+    key <AE10> { [  U0b66                      ] };
+    key <AE11> { [  U0b03                      ] };
+    key <AE12> { [  U0b43, U0b0b       ] };
+
+    key <AD01> { [  U0b4c, U0b14       ] };
+    key <AD02> { [  U0b48, U0b10       ] };
+    key <AD03> { [  U0b3e, U0b06       ] };
+    key <AD04> { [  U0b40, U0b08       ] };
+    key <AD05> { [  U0b42, U0b0a       ] };
+    key <AD06> { [  U0b2c, U0b2d       ] };
+    key <AD07> { [  U0b39, U0b19       ] };
+    key <AD08> { [  U0b17, U0b18       ] };
+    key <AD09> { [  U0b26, U0b27       ] };
+    key <AD10> { [  U0b1c, U0b1d       ] };
+    key <AD11> { [  U0b21, U0b22       ] };
+    key <AD12> { [  U0b3c, U0b1e       ] };
+    key <AC01> { [  U0b4b, U0b13       ] };
+    key <AC02> { [  U0b47, U0b0f       ] };
+    key <AC03> { [  U0b4d, U0b05       ] };
+    key <AC04> { [  U0b3f, U0b07       ] };
+    key <AC05> { [  U0b41, U0b09       ] };
+    key <AC06> { [  U0b2a, U0b2b       ] };
+    key <AC07> { [  U0b30                      ] };
+    key <AC08> { [  U0b15, U0b16       ] };
+    key <AC09> { [  U0b24, U0b25       ] };
+    key <AC10> { [  U0b1a, U0b1b       ] };
+    key <AC11> { [  U0b1f, U0b20       ] };
+    key <AB02> { [  U0b02, U0b01       ] };
+    key <AB03> { [  U0b2e, U0b23       ] };
+    key <AB04> { [  U0b28                      ] };
+    key <AB05> { [  U0b35                      ] };
+    key <AB06> { [  U0b32, U0b33       ] };
+    key <AB07> { [  U0b38, U0b36       ] };
+    key <AB08> { [  comma     , U0b37  ] };
+    key <AB09> { [  period                             ] };
+    key <AB10> { [  U0b2f, U0040       ] };
+
+    key <RALT> {
+       symbols[Group1] = [ Mode_switch, Multi_key ],
+       virtualMods = AltGr
+    };
+};
+
+// based on a keyboard map from an 'xkb/symbols/tml' file
+// INSCRIPT
+partial alphanumeric_keys 
+xkb_symbols "tam" {
+      name[Group1]= "Tamil";
+
+      key <TLDE> { [      U0BCA, U0B92 ]       };
+
+      // Mainly numbers.
+      key <AE01> { [      U0BE7                ]       };
+      key <AE02> { [      U0BE8                ]       };
+      key <AE03> { [      U0BE9                ]       };
+      key <AE04> { [      U0BEA                ]       };
+      key <AE05> { [      U0BEB                ]       };
+      key <AE06> { [      U0BEC                ]       };
+      key <AE07> { [      U0BED                ]       };
+      key <AE08> { [      U0BEE                ]       };
+      key <AE09> { [      U0BEF, parenleft     ]       };
+      key <AE10> { [      U0BF0, parenright    ]       };
+      key <AE11> { [      U0BF1, U0B83  ]      };
+      key <AE12> { [      U0BF2, plus  ]       };
+
+// Mainly long vowels
+
+      key <AD01> { [      U0BCC,  U0B94 ]      };
+      key <AD02> { [      U0BC8,  U0B90 ]      };
+      key <AD03> { [      U0BBE,  U0B86 ]      };
+      key <AD04> { [      U0BC0,  U0B88 ]      };
+      key <AD05> { [      U0BC2,  U0B8A ]      };
+
+// Mainly voiced consonants
+
+      key <AD07> { [      U0BB9, U0B99 ]       };
+      key <AD10> { [      U0B9c        ]       }; 
+      key <AD12> { [      U0B9E                                ]       };
+
+// Mainly short vowels
+      key <AC01> { [      U0BCB,  U0B93 ]      };
+      key <AC02> { [      U0BC7,  U0B8F ]      };
+      key <AC03> { [      U0BCD,  U0B85 ]      };
+      key <AC04> { [      U0BBF,  U0B87 ]      };
+      key <AC05> { [      U0BC1,  U0B89 ]      };
+
+// Mainly unvoiced consonants
+
+      key <AC06> { [      U0BAA                ]       };
+      key <AC07> { [      U0BB0,  U0BB1 ]      };
+      key <AC08> { [      U0B95                ]       };
+      key <AC09> { [      U0BA4                ]       };
+      key <AC10> { [      U0B9A                ]       };
+      key <AC11> { [      U0B9F                ]       };
+      key <BKSL> { [      U005C, U007C ]       };//backslash-bar  - Changed to Unicode
+
+      key <AB01> { [      U0BC6,  U0B8E        ]       };
+      key <AB02> { [      U0B82                ]       };
+      key <AB03> { [      U0BAE,  U0BA3 ]       };
+      key <AB04> { [      U0BA8,  U0BA9 ]       };
+      key <AB05> { [      U0BB5,  U0BB4 ]       };
+      key <AB06> { [      U0BB2,  U0BB3 ]       };
+      key <AB07> { [      U0BB8,  U0BB6        ]       };
+      key <AB08> { [      comma,      U0BB7 ]       };
+      key <AB09> { [      period,     U0964 ]       };
+      key <AB10> { [      U0BAF,  question  ]       };
+};
+
+partial alphanumeric_keys 
+xkb_symbols "tam_unicode" {
+
+// Description: A keymap based on the TamilNet'99 typewriter keyboard 
+// Encoding: Unicode (http://www.unicode.org)
+// Author: Thuraiappah Vaseeharan <vasee@ieee.org>
+// Modifed by: Malathi S <malathiramya@gmail.com>
+// Secondary contact: Sri Ramadoss M <amachu@au-kbc.org>
+// Date  : Fri Sep 4 11:32:00 CST 2009
+// Mapping:
+  
+    name[Group1]= "Tamil (Unicode)";
+
+    // granthas
+    key <TLDE> {  [ apostrophe, asciitilde ] };
+    key <AE01> {  [ U0031, exclam ] } ;
+    key <AE02> {  [ U0032, at ] } ;
+    key <AE03> {  [ U0033, numbersign ] } ;
+    key <AE04> {  [ U0034, U0BF9 ] } ;
+    key <AE05> {  [ U0035, percent ] } ;
+    key <AE06> {  [ U0036, asciicircum ] } ;
+    key <AE07> {  [ U0037, ampersand ] } ;
+    key <AE08> {  [ U0038, asterisk ] } ;
+    key <AE09> {  [ U0039, parenleft ] } ;
+    key <AE10> {  [ U0030, parenright ] } ;
+    key <AE11> {  [ minus, underscore ] };
+    key <AE12> {  [ equal, plus        ] };
+
+
+    // Qrow
+    key <AD01> {  [ U0B9E, U0BB6 ] };
+    key <AD02> {  [ U0BB1, U0BB7 ] };
+    key <AD03> {  [ U0BA8, U0BB8 ] };
+    key <AD04> {  [ U0B9A, U0BB9 ] };
+    key <AD05> {  [ U0BB5, U0B9C ] };
+    key <AD06> {  [ U0BB2 ] };
+    key <AD07> {  [ U0BB0 ] };
+    key <AD08> {  [ U0BC8, U0B90 ] };
+    key <AD09> {  [ U0BCA, U0BCB ] };
+    key <AD10> {  [ U0BBF, U0BC0 ] };
+    key <AD11> {  [ U0BC1, U0BC2 ] };
+
+    // Arow
+    key <AC01> { [ U0BAF ] };
+    key <AC02> { [ U0BB3 ] };
+    key <AC03> { [ U0BA9 ] };
+    key <AC04> { [ U0B95 ] };
+    key <AC05> { [ U0BAA ] };
+    key <AC06> { [ U0BBE, U0BB4 ] };
+    key <AC07> { [ U0BA4 ] };
+    key <AC08> { [ U0BAE ] };
+    key <AC09> { [ U0B9F ] };
+    key <AC10> { [ U0BCD, U0B83 ] };
+    key <AC11> { [ U0B99 ] };
+    
+    // Zrow
+    key <AB01> { [ U0BA3 ]  };
+    key <AB02> { [ U0B92, U0B93 ]  };
+    key <AB03> { [ U0B89, U0B8A ]  };
+    key <AB04> { [ U0B8E, U0B8F ]  };
+    key <AB05> { [ U0BC6, U0BC7 ]  };
+    key <AB06> { [ U0B94, U0BCC ]  };
+    key <AB07> { [ U0B85, U0B86 ]  };
+    key <AB08> { [ U0B87, U0B88 ]  };
+};
+
+partial alphanumeric_keys
+xkb_symbols "tam_keyboard_with_numerals" {
+
+// Description: A keymap based on the TamilNet'99 typewriter keyboard 
+// Encoding: Unicode (http://www.unicode.org)
+// Author: Malathi S <malathiramya@gmail.com>
+// Secondary contact: Sri Ramadoss M <amachu@au-kbc.org>
+// Date  : Fri Sep 4 11:33:00 CST 2009
+// Mapping:
+
+      name[Group1]= "Tamil (keyboard with numerals)";
+
+      // Mainly numbers.
+      key <TLDE> { [ apostrophe, asciitilde ] };
+      key <AE01> { [ U0BE7, exclam ] };
+      key <AE02> { [ U0BE8, at ] };
+      key <AE03> { [ U0BE9, numbersign ] };
+      key <AE04> { [ U0BEA, U0BF9 ] };
+      key <AE05> { [ U0BEB, percent ] };
+      key <AE06> { [ U0BEC, asciicircum ] };
+      key <AE07> { [ U0BED, ampersand ] };
+      key <AE08> { [ U0BEE, asterisk ] };
+      key <AE09> { [ U0BEF, parenleft ] };
+      key <AE10> { [ U0BE6, parenright ] };
+      key <AE11> { [ minus, underscore ] };
+      key <AE12> { [ equal, plus ] };
+
+
+    // Qrow
+    key <AD01> {  [ U0B9E, U0BB6 ] };
+    key <AD02> {  [ U0BB1, U0BB7 ] };
+    key <AD03> {  [ U0BA8, U0BB8 ] };
+    key <AD04> {  [ U0B9a, U0BB9 ] };
+    key <AD05> {  [ U0BB5, U0B9c ] };
+    key <AD06> {  [ U0BB2 ] };
+    key <AD07> {  [ U0BB0 ] };
+    key <AD08> {  [ U0BC8, U0B90 ] };
+    key <AD09> {  [ U0BCA, U0BCB ] };
+    key <AD10> {  [ U0BBF, U0BC0 ] };
+    key <AD11> {  [ U0BC1, U0BC2 ] };
+
+    // Arow
+    key <AC01> { [ U0BAF ] };
+    key <AC02> { [ U0BB3 ] };
+    key <AC03> { [ U0BA9 ] };
+    key <AC04> { [ U0B95 ] };
+    key <AC05> { [ U0BAA ] };
+    key <AC06> { [ U0BBE, U0BB4 ] };
+    key <AC07> { [ U0BA4 ] };
+    key <AC08> { [ U0BAE ] };
+    key <AC09> { [ U0B9F ] };
+    key <AC10> { [ U0BCD, U0B83 ] };
+    key <AC11> { [ U0B99 ] };
+
+    // Zrow
+    key <AB01> { [ U0BA3 ]  };
+    key <AB02> { [ U0B92, U0B93 ]  };
+    key <AB03> { [ U0B89, U0B8A ]  };
+    key <AB04> { [ U0B8E, U0B8F ]  };
+    key <AB05> { [ U0BC6, U0BC7 ]  };
+    key <AB06> { [ U0B94, U0BCC ]  };
+    key <AB07> { [ U0B85, U0B86 ]  };
+    key <AB08> { [ U0B87, U0B88 ]  };
+};
+
+partial alphanumeric_keys 
+xkb_symbols "tam_TSCII" {
+
+// Description : A Tamil typewrite-style keymap 
+//               loosely based on TamilNet'99 reommendations 
+// Encoding    : TSCII (http://www.tscii.org)
+// Author      : Thuraiappah Vaseeharan <vasee@ieee.org>
+// Last Modified: Sat Jan  5 17:11:26 CST 2002
+
+    name[Group1]= "Tamil (TSCII typewriter)";
+
+    key <AE01> {  [ 0x10000b7, 0x10000a4 ] }; // aytham
+    key <AE02> {  [ 0x1000082, 0x10000a5 ] }; // shri
+    key <AE03> {  [ 0x1000083, 0x1000088 ] }; // ja
+    key <AE04> {  [ 0x1000084, 0x1000089 ] }; // sha
+    key <AE05> {  [ 0x1000085, 0x100008a ] }; // sa
+    key <AE06> {  [ 0x1000086, 0x100008b ] }; // ha
+    key <AE07> {  [ 0x1000087, 0x100008c ] }; // ksha
+       
+    // Qrow
+    key <AD01> {  [ 0x10000bb, 0x100009a ] }; // nja
+    key <AD02> {  [ 0x10000c8, 0x10000da ] }; // Ra
+    key <AD03> {  [ 0x10000bf, 0x10000d1 ] }; // NNa
+    key <AD04> {  [ 0x10000ba, 0x10000cd ] }; // ca
+    key <AD05> {  [ 0x10000c5, 0x10000d7 ] }; // va
+    key <AD06> {  [ 0x10000c4, 0x10000d6 ] }; // la
+    key <AD07> {  [ 0x10000c3, 0x10000d5 ] }; // ra
+    key <AD08> {  [ 0x10000a8, 0x10000b3 ] }; // sangili, ai
+    key <AD09> {  [ 0x10000ca, 0x10000cb ] }; // di, dI
+    key <AD10> {  [ 0x10000a2, 0x10000a3 ] }; // visiri
+    key <AD11> {  [ dead_acute, 0x10000a3 ] }; // Ukaaram
+
+    // Arow
+    key <AC01> { [ 0x10000c2, 0x10000d4 ] }; // ya
+    key <AC02> { [ 0x10000c7, 0x10000d9 ] }; // La
+    key <AC03> { [ 0x10000c9, 0x10000db ] }; // na
+    key <AC04> { [ 0x10000b8, 0x10000cc ] }; // ka
+    key <AC05> { [ 0x10000c0, 0x10000d2 ] }; // pa
+    key <AC06> { [ dead_grave,0x10000a1 ] }; // pulli,aravu
+    key <AC07> { [ 0x10000be, 0x10000d0 ] }; // tha
+    key <AC08> { [ 0x10000c1, 0x10000d3 ] }; // ma
+    key <AC09> { [ 0x10000bc, 0x10000ce ] }; // da
+    key <AC10> { [ 0x10000c6, 0x10000d8 ] }; // zha
+    key <AC11> { [ 0x10000b9, 0x1000099 ] }; // nga
+    
+    // Zrow
+    key <AB01> { [ 0x10000bd, 0x10000cf ] }; // Na
+    key <AB02> { [ 0x10000b4, 0x10000b5 ] }; // o, O
+    key <AB03> { [ 0x10000af, 0x10000b0 ] }; // u, U
+    key <AB04> { [ 0x10000b1, 0x10000b2 ] }; // e, E
+    key <AB05> { [ 0x10000a6, 0x10000a7 ] }; // kombus
+    key <AB06> { [ 0x10000b6, 0x10000aa ] }; // au
+    key <AB07> { [ 0x10000ab, 0x10000ac ] }; // a, A
+    key <AB08> { [ 0x10000fe, 0x10000ae ] }; // i, I
+
+};
+
+partial alphanumeric_keys 
+xkb_symbols "tam_TAB" {
+
+// Description: A keymap based on the TamilNet'99 typewriter keyboard 
+// Encoding: TAB (http://www.tamilnet99.org)
+// Author: Thuraiappah Vaseeharan <t_vasee@yahoo.com>
+// Date  : Sun Aug 12 02:23:00 CDT 2001
+
+    name[Group1]= "Tamil (TAB typewriter)";
+
+    // numeral row
+    key <AE01> {  [ 0x10000e7, 0x10000a7 ] } ;
+    key <AE02> {  [ 0x10000fa, 0x10000a8 ] } ;
+    key <AE03> {  [ 0x10000fb ] } ;
+    key <AE04> {  [ 0x10000fc ] } ;
+    key <AE05> {  [ 0x10000fd ] } ;
+    key <AE06> {  [ 0x10000fe ] } ;
+    key <AE07> {  [ 0x10000ff ] } ;
+       
+    // q-row
+    key <AD01> {  [ 0x10000eb, 0x10000b3 ] };
+    key <AD02> {  [ 0x10000f8, 0x10000c1 ] };
+    key <AD03> {  [ 0x10000ef, 0x10000b8 ] };
+    key <AD04> {  [ 0x10000ea, 0x10000b2 ] };
+    key <AD05> {  [ 0x10000f5, 0x10000be ] };
+    key <AD06> {  [ 0x10000f4, 0x10000bd ] };
+    key <AD07> {  [ 0x10000f3, 0x10000bc ] };
+    key <AD08> {  [ 0x10000ac, 0x10000e4 ] };
+    key <AD09> {  [ 0x10000ae, 0x10000af ] };
+    key <AD10> {  [ 0x10000a4, 0x10000a6 ] };
+    key <AD11> {  [ dead_circumflex, 0x10000a6 ] }; // Ukaaram
+
+    // a-row
+    key <AC01> {  [ 0x10000f2, 0x10000bb ] };
+    key <AC02> {  [ 0x10000f7, 0x10000c0 ] };
+    key <AC03> {  [ 0x10000f9, 0x10000c2 ] };
+    key <AC04> {  [ 0x10000e8, 0x10000b0 ] };
+    key <AC05> {  [ 0x10000f0, 0x10000b9 ] };
+    key <AC06> {  [ 0x10000a2, 0x10000a3 ] };
+    key <AC07> {  [ 0x10000ee, 0x10000b6 ] };
+    key <AC08> {  [ 0x10000f1, 0x10000ba ] };
+    key <AC09> {  [ 0x10000ec, 0x10000b4 ] };
+    key <AC10> {  [ 0x10000f6, 0x10000bf ] };
+    key <AC11> {  [ 0x10000e9, 0x10000b1 ] };
+    
+    // z-row
+    key <AB01> {  [ 0x10000ed, 0x10000b5 ] };
+    key <AB02> {  [ 0x10000e5, 0x10000e6 ] };
+    key <AB03> {  [ 0x10000e0, 0x10000e1 ] };
+    key <AB04> {  [ 0x10000e2, 0x10000e3 ] };
+    key <AB05> {  [ 0x10000aa, 0x10000ab ] };
+    key <AB06> {  [ 0x10000ac, 0x10000a3 ] };
+    key <AB07> {  [ 0x10000dc, 0x10000dd ] };
+    key <AB08> {  [ 0x10000de, 0x10000df ] };
+};
+
+partial alphanumeric_keys 
+xkb_symbols "tel" {
+
+    // Inscript layout for Telugu using Unicode 
+    // Author: G Karunakar <karunakar@freedomink.org>
+    // Date:
+    // See layout at http://www.indlinux.org/keymap/telugu.php
+
+    name[Group1]= "Telugu";
+
+    key <TLDE> { [  U0c4a, U0c12       ] };
+    key <AE01> { [  U0c67                      ] };
+    key <AE02> { [  U0c68                      ] };
+    key <AE03> { [  U0c69, numbersign  ] };
+    key <AE04> { [  U0c6a, dollar              ] };
+    key <AE05> { [  U0c6b, percent             ] };
+    key <AE06> { [  U0c6c, asciicircum ] };
+    key <AE07> { [  U0c6d, ampersand   ] };
+    key <AE08> { [  U0c6e, asterisk    ] };
+    key <AE09> { [  U0c6f, parenleft   ] };
+    key <AE10> { [  U0c66, parenright  ] };
+    key <AE11> { [  U0c03, underscore  ] };
+    key <AE12> { [  U0c43, U0c0b       ] };
+    key <BKSP> { [  BackSpace                  ] };    
+    key <AD01> { [  U0c4c, U0c14       ] };
+    key <AD02> { [  U0c48, U0c10       ] };
+    key <AD03> { [  U0c3e, U0c06       ] };
+    key <AD04> { [  U0c40, U0c08       ] };
+    key <AD05> { [  U0c42, U0c0a       ] };
+    key <AD06> { [  U0c2c, U0c2d       ] };
+    key <AD07> { [  U0c39, U0c19       ] };
+    key <AD08> { [  U0c17, U0c18       ] };
+    key <AD09> { [  U0c26, U0c27       ] };
+    key <AD10> { [  U0c1c, U0c1d       ] };
+    key <AD11> { [  U0c21, U0c22       ] };
+    key <AD12> { [  U0c1e                      ] };
+  
+    key <AC01> { [  U0c4b, U0c13       ] };
+    key <AC02> { [  U0c47, U0c0f       ] };
+    key <AC03> { [  U0c4d, U0c05       ] };
+    key <AC04> { [  U0c3f, U0c07       ] };
+    key <AC05> { [  U0c41, U0c09       ] };
+    key <AC06> { [  U0c2a, U0c2b       ] };
+    key <AC07> { [  U0c30, U0c31       ] };
+    key <AC08> { [  U0c15, U0c16       ] };
+    key <AC09> { [  U0c24, U0c25       ] };
+    key <AC10> { [  U0c1a, U0c1b       ] };
+    key <AC11> { [  U0c1f, U0c20       ] };
+    key <AB01> { [  U0c46, U0c0e       ] };
+    key <AB02> { [  U0c02, U0c01       ] };
+    key <AB03> { [  U0c2e, U0c23       ] };
+    key <AB04> { [  U0c28                      ] };
+    key <AB05> { [  U0c35                      ] };
+    key <AB06> { [  U0c32, U0c33       ] };
+    key <AB07> { [  U0c38, U0c36       ] };
+    key <AB08> { [  comma     , U0c37  ] };
+    key <AB09> { [  period                             ] };
+    key <AB10> { [  U0c2f, U0040       ] };
+
+    key <RALT> {        
+        symbols[Group1] = [ Mode_switch, Multi_key ],
+        virtualMods = AltGr
+    };
+};
+
+partial alphanumeric_keys 
+xkb_symbols "urd-phonetic" {
+    include "pk(urd-phonetic)"
+    name[Group1]= "Urdu (phonetic)";
+};
+
+partial alphanumeric_keys 
+xkb_symbols "urd-phonetic3" {
+    include "pk(urd-crulp)"
+    name[Group1]= "Urdu (alternative phonetic)";
+};
+
+partial alphanumeric_keys 
+xkb_symbols "urd-winkeys" {
+    include "pk(urd-nla)"
+    name[Group1]= "Urdu (WinKeys)";
+};
+
+// based on a keyboard map from an 'xkb/symbols/gur' file
+
+partial alphanumeric_keys
+xkb_symbols "guru" {
+      name[Group1]= "Punjabi (Gurmukhi)";
+
+      // Mainly numbers.
+      key <AE01> { [      U0A67                ]       };
+      key <AE02> { [      U0A68                ]       };
+      key <AE03> { [      U0A69, U0A71 ]       };
+      key <AE04> { [      U0A6A, U0A74         ]       };
+      key <AE05> { [      U0A6B, U262C         ]       };
+      key <AE06> { [      U0A6C                ]       };
+      key <AE07> { [      U0A6D                ]       };
+      key <AE08> { [      U0A6e                ]       };
+      key <AE09> { [      U0A6F, parenleft     ]       };
+      key <AE10> { [      U0A66, parenright ]  };
+      key <AE11> { [      gur_visarga          ]       };
+      key <AE12> { [      equal,       plus    ]       };
+
+// Mainly long vowels
+
+      key <AD01> { [      U0A4C, U0A14  ]      };
+      key <AD02> { [      U0A48, U0A10  ]      };
+      key <AD03> { [      U0A3E, U0A06  ]      };
+      key <AD04> { [      U0A40, U0A08  ]      };
+      key <AD05> { [      U0A42, U0A0A  ]      };
+
+// Mainly voiced consonants
+
+      key <AD06> { [      U0A2C, U0A2D         ]       };
+      key <AD07> { [      U0A39, U0A19         ]       };
+      key <AD08> { [      U0A17, U0A18         ]       };
+      key <AD09> { [      U0A26, U0A27         ]       };
+      key <AD10> { [      U0A1C, U0A1D         ]       };
+      key <AD11> { [      U0A21, U0A22         ]       };
+      key <AD12> { [      U0A3C, U0A1E         ]       };
+
+// Mainly short vowels
+      key <AC01> { [      U0A4B, U0A13  ]      };
+      key <AC02> { [      U0A47, U0A0F  ]      };
+      key <AC03> { [      U0A4D, U0A05  ]      };
+      key <AC04> { [      U0A3F, U0A07  ]      };
+      key <AC05> { [      U0A41, U0A09  ]      };
+
+// Mainly unvoiced consonants
+
+      key <AC06> { [      U0A2A, U0A2B         ]       };
+      key <AC07> { [      U0A30, U0A5C         ]       };
+      key <AC08> { [      U0A15, U0A16         ]       };
+      key <AC09> { [      U0A24, U0A25         ]       };
+      key <AC10> { [      U0A1A, U0A1B         ]       };
+      key <AC11> { [      U0A1F, U0A20         ]       };
+      key <BKSL> { [      U005C, U007C ]       };
+
+      key <AB01> { [      z,    U0A01  ]       };
+      key <AB02> { [      U0A02, U0A70, U0A71  ]       };
+      key <AB03> { [      U0A2E, U0A23  ]       };
+      key <AB04> { [      U0A28, U0A28  ]       };
+      key <AB05> { [      U0A35, U0A35  ]       };
+      key <AB06> { [      U0A32, U0A33  ]       };
+      key <AB07> { [      U0A38, U0A36  ]       };
+      key <AB08> { [      comma,     less       ]       };
+      key <AB09> { [      period,    U0964  ]       };
+      key <AB10> { [      U0A2F, question   ]       };
+};
+
+//Name         :       Jhelum (Refind Inscript)
+//Description  :       A Jhelum keyboard layout for Gurmukhi (Punjabi)
+//                     http://www.satluj.org/Jhelum.html
+//Modified for Inscript to make
+//Original Author :    Amanpreet Singh Alam <apreet.alam@gmail.com
+partial alphanumeric_keys
+xkb_symbols "jhelum" {
+      name[Group1] = "Punjabi (Gurmukhi Jhelum)";
+          key.type="FOUR_LEVEL";
+     //Top Alphanumeric row
+     // Roman digits
+     key <TLDE>  { [  apostrophe, asciitilde, U0A02,U0A01 ] }; // apostrophe: anusvara, candrabindu
+     key <AE01>  { [   1,exclam,       U0A67,  exclam     ] };
+     key <AE02>  { [   2,at,   U0A68,  at         ] };
+     key <AE03>  { [   3,numbersign, U0A69,    numbersign ] };
+     key <AE04>  { [   4,dollar,       U0A6A,  dollar     ] };
+     key <AE05>  { [   5,percent,U0A6B,        percent    ] };
+     key <AE06>  { [   6,asciicircum, U0A6C,asciicircum ] };
+     key <AE07>  { [   7,ampersand,U0A6D,ampersand  ] };
+     key <AE08>  { [   8,asterisk,U0A6E,       asterisk   ] };
+     key <AE09>  { [   9,parenleft,U0A6F,parenleft  ] };
+     key <AE10>  { [   0,parenright,U0A66,parenright ] };
+     key <AE11>        { [   minus,underscore] };
+     key <AE12>        { [   equal,plus] };
+     key <BKSL>  { [   U0964,U0965,U007C,U005C] }; //pipe : danda, double danda
+     //Q Row   
+     key <AD01>   { [   U0A4C,         U0A14   ] };  // Q: oo, ooh
+     key <AD02>   { [   U0A48,         U0A10   ] };  // W: ee, ae
+     key <AD03>   { [   U0A3E,   U0A06  ] };  // E: a, aa
+     key <AD04>   { [   U0A40, U0A08   ] };  // R: ee, ai
+     key <AD05>   { [   U0A42,   U0A0A   ] };  // T: u, uu
+     key <AD06>   { [   U0A30, U0A5C   ] };  // Y: ra, raa
+     key <AD07>   { [   U0A26,   U0A27   ] };  // U: tha, thha
+     key <AD08>   { [   U0A17,   U0A18   ] };  // I:ga, gha
+     key <AD09>   { [   U0A24,   U0A1F   ] };  // O: ta, tha
+     key <AD10>   { [   U0A2A,   U0A5E   ] };  // P: pa, pha
+     key <AD11>   { [   U0A21,   U0A22,   bracketleft,   braceleft   ] };  
+     key <AD12>         { [   U0A19,   U0A1E,   bracketright, braceright   ] };
+     
+     //A Row
+     key <AC01>   { [   U0A4B,  U0A13  ] };   // A: o, oo
+     key <AC02>   { [   U0A40,    U0A0F   ] };  // S: e, ee
+     key <AC03>   { [   U0A4D,    U0A05   ] };  // D: halant, aa
+     key <AC04>   { [   U0A3F,    U0A07   ] };  // F: i, aa
+     key <AC05>   { [   U0A41,    U0A09   ] };  // G: u, uh
+     key <AC06>   { [   U0A39,    U0A20   ] };  // H: ha, thha
+     key <AC07>   { [   U0A1C,    U0A1D   ] };  // J: ja, jha
+     key <AC08>   { [   U0A15,    U0A16   ] };  // K: ka, kha
+     key <AC09>   { [   U0A32,  U0A25   ] };  // L: la, tha
+     key <AC10>   { [   U0A38,   semicolon, colon  ] }; //; sa
+     key <AC11>   { [apostrophe, quotedbl ] };
+     //Z Row
+     key <AB01>   { [   U0A71,  U0A3C   ] };  // Z: addak, par bindi
+     key <AB02>   { [   U0A02,    U0A70         ] };  // X: bindi, tippi
+     key <AB03>   { [   U0A1A,    U0A1B   ] };  // C: ca, cha
+     key <AB04>   { [   U0A35,    U0A2F   ] };  // V: va, ya
+     key <AB05>   { [   U0A2C,    U0A2D   ] };  // B: ba, bha
+     key <AB06>   { [   U0A28,    U0A23   ] };  // N: na, nha
+     key <AB07>   { [   U0A2E, U0A2E       ] };  // M: ma
+     key <AB08>   { [   comma,    U262C         ] };// comma: comma, dev abbreviation sign
+     key <AB09>   { [   period,   U0A74         ] };  // period: period, nukta
+     key <AB10>         { [   slash,   question ] };
+// begin modifier mappings
+//    modifier_map Shift  { Shift_L };
+//    modifier_map Lock   { Caps_Lock };
+//    modifier_map Control{ Control_L };
+//    modifier_map Mod3   { Mode_switch };
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "olpc" {
+
+// Contact: Walter Bender <walter@laptop.org>
+
+  include "in(deva)"
+  key <TLDE> { [       U094A,  U0912 ] }; // DEVANAGARI VOWEL SIGN SHORT O; DEVANAGARI LETTER SHORT O
+  key <AE01> { [       U0967,  U090D ] }; // DEVANAGARI DIGIT ONE; DEVANAGARI LETTER CANDRA E
+  key <AE02> { [       U0968,  U0945 ] }; // DEVANAGARI DIGIT TWO; DEVANAGARI VOWEL SIGN CANDRA E
+  key <AE03> { [       U0969    ] }; // DEVANAGARI DIGIT THREE; 
+  key <AE04> { [       U096A    ] }; // DEVANAGARI DIGIT FOUR; 
+  key <AE05> { [       U096B    ] }; // DEVANAGARI DIGIT FIVE; 
+  key <AE06> { [       U096C    ] }; // DEVANAGARI DIGIT SIX; 
+  key <AE07> { [       U096D    ] }; // DEVANAGARI DIGIT SEVEN; 
+  key <AE08> { [       U096E    ] }; // DEVANAGARI DIGIT EIGHT; 
+  key <AE09> { [       U096F,  parenleft ] }; // DEVANAGARI DIGIT NINE; 
+  key <AE10> { [       U0966,  parenright ] }; // DEVANAGARI DIGIT ZERO; 
+  key <AE11> { [       minus,          U0903 ] }; // DEVANAGARI SIGN VISARGA; 
+  key <AE12> { [       U0943,  U090B ] }; // DEVANAGARI VOWEL SIGN VOCALIC R; DEVANAGARI LETTER VOCALIC R
+
+  key <AD01> { [       U094C,  U0914 ] }; // DEVANAGARI VOWEL SIGN AU; DEVANAGARI LETTER AU
+  key <AD02> { [       U0948,  U0910 ] }; // DEVANAGARI VOWEL SIGN AI; DEVANAGARI LETTER AI
+  key <AD03> { [       U093E,  U0906 ] }; // DEVANAGARI VOWEL SIGN AA; DEVANAGARI LETTER AA
+  key <AD04> { [       U0940,  U0908 ] }; // DEVANAGARI VOWEL SIGN II; DEVANAGARI LETTER II
+  key <AD05> { [       U0942,  U090A ] }; // DEVANAGARI VOWEL SIGN UU; DEVANAGARI LETTER UU
+  key <AD06> { [       U092C,  U092D ] }; // DEVANAGARI LETTER BA; DEVANAGARI LETTER BHA
+  key <AD07> { [       U0939,  U0919 ] }; // DEVANAGARI LETTER HA; DEVANAGARI LETTER NGA
+  key <AD08> { [       U0917,  U0918 ] }; // DEVANAGARI LETTER GA; DEVANAGARI LETTER GHA
+  key <AD09> { [       U0926,  U0927 ] }; // DEVANAGARI LETTER DA; DEVANAGARI LETTER DHA
+  key <AD10> { [       U091C,  U091D ] }; // DEVANAGARI LETTER JA; DEVANAGARI LETTER JHA
+  key <AD11> { [       U0921,  U0922 ] }; // DEVANAGARI LETTER DDA; DEVANAGARI LETTER DDHA
+  key <AD12> { [       U093C,  U091E ] }; // DEVANAGARI SIGN NUKTA; DEVANAGARI LETTER NYA
+
+  key <BKSL> { [       U0949,  U0911 ] }; // DEVANAGARI VOWEL SIGN CANDRA O; DEVANAGARI LETTER CANDRA O
+
+  key <AC01> { [       U094B,  U0913 ] }; // DEVANAGARI VOWEL SIGN O; DEVANAGARI LETTER O
+  key <AC02> { [       U0947,  U090F ] }; // DEVANAGARI VOWEL SIGN E; DEVANAGARI LETTER E
+  key <AC03> { [       U094D,  U0905 ] }; // DEVANAGARI SIGN VIRAMA; DEVANAGARI LETTER A
+  key <AC04> { [       U093F,  U0907 ] }; // DEVANAGARI VOWEL SIGN I; DEVANAGARI LETTER I
+  key <AC05> { [       U0941,  U0909 ] }; // DEVANAGARI VOWEL SIGN U; DEVANAGARI LETTER U
+  key <AC06> { [       U092A,  U092B ] }; // DEVANAGARI LETTER PA; DEVANAGARI LETTER PHA
+  key <AC07> { [       U0930,  U0931 ] }; // DEVANAGARI LETTER RA; DEVANAGARI LETTER RRA
+  key <AC08> { [       U0915,  U0916 ] }; // DEVANAGARI LETTER KA; DEVANAGARI LETTER KHA
+  key <AC09> { [       U0924,  U0925 ] }; // DEVANAGARI LETTER TA; DEVANAGARI LETTER THA
+  key <AC10> { [       U091A,  U091B ] }; // DEVANAGARI LETTER CA; DEVANAGARI LETTER CHA
+  key <AC11> { [       U091F,  U0920 ] }; // DEVANAGARI LETTER TTA; DEVANAGARI LETTER TTHA
+
+  key <AB01> { [       U0946,  U090E ] }; // DEVANAGARI VOWEL SIGN SHORT E; DEVANAGARI LETTER SHORT E
+  key <AB02> { [       U0902,  U0901 ] }; // DEVANAGARI SIGN ANUSVARA; DEVANAGARI SIGN CANDRABINDU
+  key <AB03> { [       U092E,  U0923 ] }; // DEVANAGARI LETTER MA; DEVANAGARI LETTER NNA
+  key <AB04> { [       U0928,  U0929 ] }; // DEVANAGARI LETTER NA; DEVANAGARI LETTER NNNA
+  key <AB05> { [       U0935,  U0934 ] }; // DEVANAGARI LETTER VA; DEVANAGARI LETTER LLLA
+  key <AB06> { [       U0932,  U0933 ] }; // DEVANAGARI LETTER LA; DEVANAGARI LETTER LLA
+  key <AB07> { [       U0938,  U0936 ] }; // DEVANAGARI LETTER SA; DEVANAGARI LETTER SHA
+  key <AB08> { [       comma,          U0937 ] }; // DEVANAGARI LETTER SSA
+  key <AB09> { [       period,         U0964 ] }; // DEVANAGARI DANDA
+  key <AB10> { [       U092F,  U095F ] }; // DEVANAGARI LETTER YA; DEVANAGARI LETTER YYA
+
+  // space, space, Zero-Width-Non-Joiner (ZWNJ), Zero-Width-Joiner (ZWJ):
+  include "nbsp(zwnj3zwj4)"
+
+  include "group(olpc)"
+};
+
+partial alphanumeric_keys 
+xkb_symbols "hin-wx" {
+
+    name[Group1]= "Hindi (Wx)";
+
+      key <TLDE> {      [     grave, asciitilde, 2, 3    ]     };
+
+      key <AE01> {      [      0x1000967, exclam               ]       };
+      key <AE02> {      [      0x1000968, at           ]       };
+      key <AE03> {      [      0x1000969 , numbersign                  ]       };
+      key <AE04> {      [      0x100096A , dollar              ]       };
+      key <AE05> {      [      0x100096B , percent                     ]       };
+      key <AE06> {      [      0x100096C , asciicircum                 ]       };
+      key <AE07> {      [      0x100096D , ampersand                       ]   };
+      key <AE08> {      [      0x100096e , asterisk                    ]       };
+      key <AE09> {      [      0x100096F, parenleft            ]       };
+      key <AE10> {      [      0x1000966, parenright           ]       };
+      key <AE11> {      [      minus, underscore                       ]       };
+      key <AE12> {      [      equal, plus             ]       };
+
+
+      key <AD01> {      [      0x1000943,  0x1000944, 0x100090B, 0x1000960]    };
+      key <AD02> {      [      0x1000924,  0x1000925           ]       };
+      key <AD03> {      [      0x1000947,  0x1000948, 0x100090F, 0x1000910]    };
+      key <AD04> {      [      0x1000930,  0x1000937           ]       };
+      key <AD05> {      [      0x100091F,  0x1000920           ]       };
+
+
+      key <AD06> {      [      0x100092F               ]       };
+      key <AD07> {      [      0x1000941,  0x1000942, 0x1000909, 0x100090A ]   };
+      key <AD08> {      [      0x100093F,  0x1000940, 0x1000907, 0x1000908 ]   };
+      key <AD09> {      [      0x100094B,  0x100094C, 0x1000913, 0x1000914]    };
+      key <AD10> {      [      0x100092A,  0x100092B           ]       };
+      key <AD11> {      [      bracketleft, braceleft                  ]       };
+      key <AD12> {      [      bracketright, braceright                ]       };
+      key <BKSL> {       [      backslash, bar, 0x1000964, 0x1000965 ] };
+
+      key <AC01> {      [      0x100094D,  0x100093E, 0x1000905,0x1000906 ]    };
+      key <AC02> {      [      0x1000938,  0x1000936           ]       };
+      key <AC03> {      [      0x1000921,  0x1000922           ]       };
+      key <AC04> {      [      0x1000919,  0x100091E           ]       };
+      key <AC05> {      [      0x1000917,  0x1000918           ]       };
+
+
+      key <AC06> {      [      0x1000939,  0x1000903           ]       };
+      key <AC07> {      [      0x100091C,  0x100091D           ]       };
+      key <AC08> {      [      0x1000915,  0x1000916           ]       };
+      key <AC09> {      [      0x1000932,  0x1000962, 0x1000933, 0x100090C]    };
+      key <AC10> {      [      semicolon, colon                ]       };
+      key <AC11> {      [      quoteright, quotedbl            ]       };
+
+      key <AB01> {      [      0x1000901,   0x100093C, 0x100093D, 0x1000950]   };
+      key <AB02> {       [      0x1000926,   0x1000927      ]       };
+      key <AB03> {       [      0x100091A,   0x100091B         ]       };
+      key <AB04> {       [      0x1000935,   dead_V        ]       };
+      key <AB05> {       [      0x100092C,   0x100092D        ]       };
+      key <AB06> {       [      0x1000928,   0x1000923         ]       };
+      key <AB07> {       [      0x100092E,   0x1000902         ]       };
+      key <AB08> {       [      comma,       less         ]       };
+      key <AB09> {       [      period,      greater       ]       };
+      key <AB10> {       [      slash,      question        ]       };
+
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "eng" {
+
+    name[Group1]= "English (India, with RupeeSign)";
+
+    include "us(basic)"
+
+    include "rupeesign(4)"
+
+    include "level3(ralt_switch)"
+};
+
+
+// Description : Enhanced INSCRIPT keymap for Malayalam
+// Encoding    : Unicode (http://www.unicode.org)
+// Author      : Mahesh T Pai <paivakil@gmail.com>
+// Date        : March, 2011
+// Source      : http://www.nongnu.org/smc/docs/images/ml_inscript_layout.jpg
+// Comment     : Based on the Inscript Keyboard created by M Baiju
+// Mapping:
+
+partial alphanumeric_keys 
+xkb_symbols "mal_enhanced" {
+
+    name[Group1] = "Malayalam (enhanced Inscript with Rupee Sign)";
+
+   //From grave to backslash (\)
+    
+      key <TLDE> { [ U0d4a ,       U0d12 ] };
+      key <AE01> { [ U0d67 ,      exclam ] };
+      key <AE02> { [ U0d68 ,          at ] };
+      key <AE03> { [ U0d69 ,  numbersign ] };
+      key <AE04> { [ U0d6a ,      dollar ] };
+      key <AE05> { [ U0d6b ,     percent ] };
+      key <AE06> { [ U0d6c , asciicircum ] };
+      key <AE07> { [ U0d6d ,   ampersand ] };
+      key <AE08> { [ U0d6e ,       U0d7e ] };
+      key <AE09> { [ U0d6f ,   parenleft ] };
+      key <AE10> { [ U0d66 ,  parenright ] };
+
+      key <AE11> { [ minus , U0d03       ] };
+      key <AE12> { [ U0d43 , U0d0b       ] };
+      key <BKSL> { [ U0d7c , U05C        ] }; //bksl: chillu RR 
+
+
+  // From 'q' to right bracket (])
+    
+    key <AD01> { [ U0d57 , U0d14 ] };
+    key <AD02> { [ U0d48 , U0d10 ] };
+    key <AD03> { [ U0d3e , U0d06 ] };
+    key <AD04> { [ U0d40 , U0d08 ] };
+    key <AD05> { [ U0d42 , U0d0a ] };
+    key <AD06> { [ U0d2c , U0d2d ] };
+    key <AD07> { [ U0d39 , U0d19 ] };
+    key <AD08> { [ U0d17 , U0d18 ] };
+    key <AD09> { [ U0d26 , U0d27 ] };
+    key <AD10> { [ U0d1c , U0d1d ] };
+    key <AD11> { [ U0d21 , U0d22 ] };
+    key <AD12> { [ U0200d , U0d1e ] };
+
+    // From 'a' to apostrophe (')
+    
+    key <AC01> { [ U0d4b , U0d13 ] };
+    key <AC02> { [ U0d47 , U0d0f ] };
+    key <AC03> { [ U0d4d , U0d05 ] };
+    key <AC04> { [ U0d3f , U0d07 ] };
+    key <AC05> { [ U0d41 , U0d09 ] };
+    key <AC06> { [ U0d2a , U0d2b ] };
+    key <AC07> { [ U0d30 , U0d31 ] };
+    key <AC08> { [ U0d15 , U0d16 ] };
+    key <AC09> { [ U0d24 , U0d25 ] };
+    key <AC10> { [ U0d1a , U0d1b ] };
+    key <AC11> { [ U0d1f , U0d20 ] };
+    
+    // From 'z' to slash (/)
+    
+    key <AB01> { [ U0d46 , U0d0e ] };
+    key <AB02> { [ U0d02 , U0d7a ] };
+    key <AB03> { [ U0d2e , U0d23 ] };
+    key <AB04> { [ U0d28 , U0d7b ] };
+    key <AB05> { [ U0d35 , U0d34 ] };
+    key <AB06> { [ U0d32 , U0d33 ] };
+    key <AB07> { [ U0d38 , U0d36 ] };
+    key <AB08> { [ comma , U0d37 ] };
+    key <AB09> { [ period , U0d7d ] }; //chillu l
+    key <AB10> { [ U0d2f , question ] };
+
+    // hope this includes the rupee sign at alt + 4
+
+    include "rupeesign(4)"
+    include "level3(ralt_switch)"
+
+};
+
diff --git a/test/data/symbols/inet b/test/data/symbols/inet
new file mode 100644 (file)
index 0000000..b8f4d19
--- /dev/null
@@ -0,0 +1,1873 @@
+// EAK (Easy Access, Internet, Multimedia, PDA) keyboards
+// Copyright (C) 2002 Stanislav Brabec <sbrabec@suse.cz>
+//
+// Based on LinEAK project
+// LinEAK - Linux support for Easy Access and Internet Keyboards      
+// Copyright (C) 2001, 2002 Mark Smulders <Mark@PIRnet.nl>
+
+// Usage in XF86Config:
+// Option "XkbLayout"  "my_kb_layout"
+// Option "XkbVariant" "my_kb_variant"
+// Option "XkbModel"   "my_eak_type"
+// Option "XkbRules"   "xfree86"
+// Simple command line usage:
+// setxkbmap 'my_kb_layout' -variant 'my_kb_variant' -model 'my_eak_type'
+
+// All keyboards listed here should be also mentioned in
+// rules/base, base.lst and base.xml.
+
+// Very common set of media keys
+partial hidden alphanumeric_keys
+xkb_symbols "media_common" {
+    key <I01>   {       [ XF86AudioMedia        ] }; 
+    key <I10>   {       [ XF86AudioPrev         ] };
+    key <I19>   {       [ XF86AudioNext         ] };
+    key <I20>   {       [ XF86AudioMute         ] };
+    key <I22>   {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I24>   {       [ XF86AudioStop, XF86Eject ] };
+    key <I2E>   {       [ XF86AudioLowerVolume  ] };   
+    key <I30>   {       [ XF86AudioRaiseVolume  ] };
+    key <K5A>   {       [ XF86Eject             ] };
+    key <K6C>   {       [ XF86Eject             ] };
+};
+
+// popular web navigation combination
+partial hidden alphanumeric_keys
+xkb_symbols "nav_common" {
+    key <I21>   {       [ XF86Calculator        ] }; 
+    key <I32>   {       [ XF86WWW               ] };
+    key <I65>   {       [ XF86Search            ] };
+    key <I66>   {       [ XF86Favorites         ] };
+    key <I67>   {       [ XF86Reload            ] };
+    key <I68>   {       [ XF86Stop              ] };
+    key <I69>   {       [ XF86Forward           ] };
+    key <I6A>   {       [ XF86Back              ] };
+    key <I6B>   {       [ XF86MyComputer        ] };
+    key <I6C>   {       [ XF86Mail              ] };
+    key <I6D>   {       [ XF86AudioMedia        ] }; 
+};
+
+// ACPI Standard
+partial hidden alphanumeric_keys
+xkb_symbols "acpi_common" {
+    key <I5E>  {       [ XF86PowerOff          ]       };
+    key <I5F>  {       [ XF86Standby           ]       };
+    key <I63>  {       [ XF86WakeUp            ]       };
+    key <I74>  {       [ XF86Battery           ]       };
+    key <I76>  {       [ XF86WLAN              ]       };
+    key <I16>  {       [ XF86Sleep             ]       };
+};
+
+// Combined sections, for simplicity
+partial hidden alphanumeric_keys
+xkb_symbols "media_nav_common" {
+    include "inet(media_common)"
+    include "inet(nav_common)"
+};
+
+partial hidden alphanumeric_keys
+xkb_symbols "media_nav_acpi_common" {
+    include "inet(media_common)"
+    include "inet(nav_common)"
+    include "inet(acpi_common)"
+};
+
+partial hidden alphanumeric_keys
+xkb_symbols "nav_acpi_common" {
+    include "inet(nav_common)"
+    include "inet(acpi_common)"
+};
+
+partial hidden alphanumeric_keys
+xkb_symbols "media_acpi_common" {
+    include "inet(media_common)"
+    include "inet(acpi_common)"
+};
+
+// Evdev Standardized Keycodes
+partial alphanumeric_keys
+xkb_symbols "evdev" {
+    key <MUTE>   {      [ XF86AudioMute         ]       };
+    key <VOL->   {      [ XF86AudioLowerVolume  ]       };
+    key <VOL+>   {      [ XF86AudioRaiseVolume  ]       };
+    key <POWR>   {      [ XF86PowerOff          ]       };
+    key <STOP>   {      [ Cancel                ]       };
+    key <AGAI>   {      [ Redo                  ]       };
+    key <PROP>   {      [ SunProps              ]       };
+    key <UNDO>   {      [ Undo                  ]       };
+    key <FRNT>   {      [ SunFront              ]       };
+    key <COPY>   {      [ XF86Copy              ]       };
+    key <OPEN>   {      [ SunOpen               ]       };
+    key <PAST>   {      [ XF86Paste             ]       };
+    key <FIND>   {      [ Find                  ]       };
+    key <CUT>    {      [ XF86Cut               ]       };
+    key <HELP>   {      [ Help                  ]       };
+    key <LNFD>   {      [ Linefeed              ]       };
+
+// Commented out because HZTG has same keycode as TLDE
+//    key <HZTG>   {      [ Zenkaku_Hankaku       ]       };
+
+    key <HKTG>   {      [ Hiragana_Katakana     ]       };
+    key <HENK>   {      [ Henkan                ]       };
+    key <MUHE>   {      [ Muhenkan              ]       };
+    key <KATA>   {      [ Katakana              ]       };
+    key <HIRA>   {      [ Hiragana              ]       };
+    key <RO>     {      [ Romaji                ]       };
+
+    key <HNGL>   {      [ Hangul                ]       };
+    key <HJCV>   {      [ Hangul_Hanja          ]       };
+    key <FK21>   {      [ XF86TouchpadToggle    ]       };
+    key <FK22>   {      [ XF86TouchpadOn        ]       };
+    key <FK23>   {      [ XF86TouchpadOff       ]       };
+
+//  key <I120>   {      [ ]       }; // KEY_MACRO 
+    key <I126>   {      [ plusminus             ]       };
+    key <I128>   {      [ XF86LaunchA           ]       };
+    key <I147>   {      [ XF86MenuKB            ]       };
+    key <I148>   {      [ XF86Calculator        ]       };
+//  key <I149>   {      [ ]       }; // KEY_SETUP
+    key <I150>   {      [ XF86Sleep             ]       };
+    key <I151>   {      [ XF86WakeUp            ]       };
+    key <I152>   {      [ XF86Explorer          ]       };
+    key <I153>   {      [ XF86Send              ]       };
+//  key <I154>   {      [ ]       }; // KEY_DELETEFILE
+    key <I155>   {      [ XF86Xfer              ]       };
+    key <I156>   {      [ XF86Launch1           ]       };
+    key <I157>   {      [ XF86Launch2           ]       };
+    key <I158>   {      [ XF86WWW               ]       };
+    key <I159>   {      [ XF86DOS               ]       };
+    key <I160>   {      [ XF86ScreenSaver       ]       };
+//  key <I161>   {      [ ]       }; // KEY_DIRECTION
+    key <I162>   {      [ XF86RotateWindows     ]       };
+    key <I163>   {      [ XF86Mail              ]       };
+    key <I164>   {      [ XF86Favorites         ]       };
+    key <I165>   {      [ XF86MyComputer        ]       };
+    key <I166>   {      [ XF86Back              ]       };
+    key <I167>   {      [ XF86Forward           ]       };
+//  key <I168>   {      [ ]       }; // KEY_CLOSECD (opposite of eject)
+    key <I169>   {      [ XF86Eject             ]       };
+    key <I170>   {      [ XF86Eject, XF86Eject  ]       };
+    key <I171>   {      [ XF86AudioNext         ]       };
+    key <I172>   {      [ XF86AudioPlay, XF86AudioPause ] };
+    key <I173>   {      [ XF86AudioPrev         ]       };
+    key <I174>   {      [ XF86AudioStop, XF86Eject ]    };
+    key <I175>   {      [ XF86AudioRecord       ]       };
+    key <I176>   {      [ XF86AudioRewind       ]       };
+    key <I177>   {      [ XF86Phone             ]       };
+//  key <I178>   {      [ ]       }; // KEY_ISO
+    key <I179>   {      [ XF86Tools             ]       };
+    key <I180>   {      [ XF86HomePage          ]       };
+    key <I181>   {      [ XF86Reload           ]       };
+    key <I182>   {      [ XF86Close             ]       };
+//  key <I183>   {      [ ]       }; // KEY_MOVE
+//  key <I184>   {      [ ]       }; // KEY_EDIT
+    key <I185>   {      [ XF86ScrollUp          ]       };
+    key <I186>   {      [ XF86ScrollDown        ]       };
+    key <I187>   {      [ parenleft             ]       };
+    key <I188>   {      [ parenright            ]       };
+    key <I189>   {      [ XF86New               ]       };
+    key <I190>   {      [ Redo                  ]       };
+    key <I192>   {      [ XF86LaunchA           ]       };
+    key <I193>   {      [ XF86LaunchC           ]       };
+    key <I194>   {      [ XF86LaunchD           ]       };
+    key <I195>   {      [ XF86LaunchE           ]       };
+    key <I196>   {      [ XF86LaunchF           ]       };
+    key <I208>   {      [ XF86AudioPlay         ]       };
+    key <I209>   {      [ XF86AudioPause        ]       };
+    key <I210>   {      [ XF86Launch3           ]       };
+    key <I211>   {      [ XF86Launch4           ]       };
+    key <I212>   {      [ XF86LaunchB           ]       };
+    key <I213>   {      [ XF86Suspend           ]       };
+    key <I214>   {      [ XF86Close             ]       };
+    key <I215>   {      [ XF86AudioPlay         ]       };
+    key <I216>   {      [ XF86AudioForward      ]       };
+//  key <I217>   {      [ ]       }; // KEY_BASSBOOST
+    key <I218>   {      [ Print                 ]       };
+//  key <I219>   {      [ ]       }; // KEY_HP
+    key <I220>   {      [ XF86WebCam            ]       };
+//  key <I221>   {      [ ]       }; // KEY_SOUND
+//  key <I222>   {      [ ]       }; // KEY_QUESTION
+    key <I223>   {      [ XF86Mail              ]       };
+    key <I224>   {      [ XF86Messenger         ]       }; // KEY_CHAT
+    key <I225>   {      [ XF86Search            ]       };
+    key <I226>   {      [ XF86Go                ]       }; // KEY_CONNECT
+    key <I227>   {      [ XF86Finance           ]       };
+    key <I228>   {      [ XF86Game              ]       }; // KEY_SPORT
+    key <I229>   {      [ XF86Shop              ]       };
+//  key <I230>   {      [ ]       }; // KEY_ALTERASE
+    key <I231>   {      [ Cancel                ]       };
+    key <I232>   {      [ XF86MonBrightnessDown ]       };
+    key <I233>   {      [ XF86MonBrightnessUp   ]       };
+    key <I234>   {      [ XF86AudioMedia        ]       };
+    key <I235>   {      [ XF86Display           ]       };
+    key <I236>   {      [ XF86KbdLightOnOff     ]       }; // KEY_KBDILLUMTOGGLE
+    key <I237>   {      [ XF86KbdBrightnessDown ]       }; // KEY_KBDILLUMDOWN
+    key <I238>   {      [ XF86KbdBrightnessUp   ]       }; // KEY_KBDILLUMUP
+    key <I239>   {      [ XF86Send              ]       };
+    key <I240>   {      [ XF86Reply             ]       };
+    key <I241>   {      [ XF86MailForward       ]       };
+    key <I242>   {      [ XF86Save              ]       };
+    key <I243>   {      [ XF86Documents         ]       };
+    key <I244>   {      [ XF86Battery           ]       };
+    key <I245>   {      [ XF86Bluetooth         ]       };
+    key <I246>   {      [ XF86WLAN              ]       };
+//  key <I249>   {      [ ]       }; // KEY_VIDEO_NEXT  --  drive next video source
+//  key <I250>   {      [ ]       }; // KEY_VIDEO_PREV  --  drive previous video source
+//  key <I251>   {      [ ]       }; // KEY_BRIGHTNESS_CYCLE  --  bright up, max++ == min
+//  key <I252>   {      [ ]       }; // KEY_BRIGHTNESS_ZERO  --  brightness off
+//  key <I253>   {      [ ]       }; // KEY_DISPLAY_OFF  --  turn off display
+//  key <I254>   {      [ ]       }; // KEY_WIMAX
+    key <I255>   {      [ XF86Hibernate         ]       }; // KEY_HIBERNATE
+    key <FK13>   {      [ XF86Tools         ]       };
+    key <FK14>   {      [ XF86Launch5       ]       };
+    key <FK15>   {      [ XF86Launch6       ]       };
+    key <FK16>   {      [ XF86Launch7       ]       };
+    key <FK17>   {      [ XF86Launch8       ]       };
+    key <FK18>   {      [ XF86Launch9       ]       };
+};
+
+
+// Acer AirKey V
+partial alphanumeric_keys
+xkb_symbols "airkey" {
+    include "inet(acpi_common)"
+    key <I13>  {       [ XF86AudioNext         ]       };
+    key <I15>  {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I16>  {       [ XF86Mail              ]       };
+    key <I18>  {       [ XF86AudioPrev         ]       };
+    key <I19>  {       [ XF86AudioMute         ]       };
+    key <I24>  {       [ XF86WWW               ]       };
+    key <I26>  {       [ XF86AudioLowerVolume  ]       };
+    key <I2D>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I2F>  {       [ XF86Terminal          ]       };
+    key <I31>  {       [ XF86AudioStop, XF86Eject ]    };
+};
+
+// Acer C300 Laptop
+partial alphanumeric_keys
+xkb_symbols "acer_c300" {
+    include "inet(nav_common)"
+    key <I17>   {       [ F14                   ]       };
+    key <I1F>   {       [ F13                   ]       };
+    key <I20>   {       [ XF86AudioMute         ]       };
+    key <I2E>   {       [ XF86AudioLowerVolume  ]       };
+    key <I30>   {       [ XF86AudioRaiseVolume  ]       };
+    key <I5E>   {       [ XF86Launch2           ]       };
+    key <I75>   {       [ Help                  ]       };
+    key <XFER>  {       [ XF86Launch1           ]       };
+};
+
+// Acer Ferrari 4000 Keyboard
+// From Alex Dubov <oakad@yahoo.com>
+partial alphanumeric_keys
+xkb_symbols "acer_ferrari4k" {
+    include "inet(media_nav_common)"
+    key <I24>   {       [ dollar                ]       };
+    key <I25>   {       [ EuroSign              ]       };
+    key <I26>   {       [ XF86Display           ]       };
+    // Missing keycodes - set-up with setkeycodes
+    key <I70>   {       [ Help                  ]       };
+    key <I71>   {       [ XF86Launch1           ]       };
+    key <I72>   {       [ XF86Launch2           ]       };
+    key <I73>   {       [ XF86Launch3           ]       };
+    key <I74>   {       [ XF86Launch4           ]       };
+};
+
+// Acer Laptop (Generic layout for Acer laptops from 2004 onwards)
+// From Carlos Corbacho <cathectic@gmail.com>
+// Keys marked (HAL) require HAL 0.5.10 (or newer) to be set up correctly
+// (Your laptop must also be added to hal-info)
+// (Not all these keys will be available on every Acer laptop)
+partial alphanumeric_keys
+xkb_symbols "acer_laptop" {
+    include "inet(media_nav_acpi_common)"
+    key <I17>   {       [ XF86Launch2           ]        }; // "P" or "P2" (HAL)
+    key <I1F>   {       [ XF86Launch1           ]        }; // "e" or "P1" (HAL)
+
+    // Hotkeys (Function)
+    // Launch Keys
+    // Device keys
+    key <I56>   {       [ XF86Display           ]        }; // Fn+F5 (HAL)
+    key <I71>   {       [ XF86Launch4           ]        }; // Fn+F3 (HAL)
+    key <I72>   {       [ XF86LaunchB           ]        }; // Bluetooth (HAL)
+    key <I73>   {       [ XF86LaunchA           ]        }; // Wireless (HAL)
+    key <I75>   {       [ Help                  ]        }; // Fn+F1 (HAL)
+    key <I79>   {       [ XF86Launch5           ]        }; // Fn+F7 (HAL)
+    key <K66>   {       [ XF86Launch3           ]        }; // Fn+F2 (HAL)
+
+    // Special Characters
+    // To avoid setting a precedent/ standard that will be broken in later
+    // versions of HAL, these keys are commented out for now. When they are no
+    // longer marked 'FIXME' and have saner keycodes, these two entries can be
+    // fixed and permanently uncommented. In the meantime, just uncomment these
+    // to make the keys work
+//  key <K5D>   {       [ EuroSign              ]        }; // Euro (HAL)
+//  key <K5E>   {       [ dollar                ]        }; // Dollar (HAL)
+};
+
+// Azona
+
+// Azona RF2300 wireless Internet Keyboard
+partial alphanumeric_keys
+xkb_symbols "azonaRF2300" {
+    // From Radics Laszlo <garaboncias@mailbox.hu>
+    include "inet(nav_acpi_common)"
+    key <I02>   {       [ XF86HomePage          ]       };
+    key <I17>   {       [ XF86AudioStop         ]       };
+    key <I1E>   {       [ XF86AudioRaiseVolume  ]       };
+    key <I1F>   {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I22>   {       [ XF86AudioNext         ]       };
+    key <I24>   {       [ XF86AudioPrev         ]       };
+    key <I25>   {       [ XF86AudioLowerVolume  ]       };
+    key <I26>   {       [ XF86AudioMute         ]       };
+    key <I3C>   {       [ XF86Copy              ]       };
+    key <I78>   {       [ XF86Cut               ]       };
+//  key <RCTL>  {       [ XF86Paste             ]       };
+};
+
+
+// Brother
+
+// Brother Internet Keyboard
+partial alphanumeric_keys
+xkb_symbols "brother" {
+    include "inet(acpi_common)"
+    key <I10>  {       [ XF86ScrollUp          ]       };
+    key <I12>  {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I17>  {       [ XF86AudioPrev         ]       };
+    key <I18>  {       [ XF86ScrollDown        ]       };
+    key <I19>  {       [ XF86ZoomOut           ]       };
+    key <I1E>  {       [ XF86AudioMute         ]       };
+    key <I21>  {       [ XF86WWW               ]       };
+    key <I22>  {       [ Menu                  ]       };
+    key <I23>  {       [ XF86AudioStop         ]       };
+    key <I24>  {       [ XF86Calculator        ]       };
+    key <I25>  {       [ XF86Xfer              ]       };
+    key <I26>  {       [ XF86Mail              ]       };
+    key <I2E>  {       [ XF86AudioNext         ]       };
+    key <I30>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I32>  {       [ XF86ZoomIn            ]       };
+    key <I68>  {       [ XF86AudioLowerVolume  ]       };
+};
+
+
+// BTC
+
+// BTC 5113RF Multimedia
+partial alphanumeric_keys
+xkb_symbols "btc5113rf" {
+    include "inet(acpi_common)"
+    key <I10>  {       [ XF86AudioStop         ]       };
+    key <I12>  {       [ XF86AudioMute         ]       };
+    key <I19>  {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I1E>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I20>  {       [ XF86Favorites         ]       };
+    key <I21>  {       [ XF86Eject             ]       };
+    key <I22>  {       [ XF86AudioPrev         ]       };
+    key <I24>  {       [ XF86AudioNext         ]       };
+    key <I25>  {       [ XF86AudioLowerVolume  ]       };
+    key <I26>  {       [ XF86Back              ]       };
+    key <I30>  {       [ XF86WWW               ]       };
+    key <I32>  {       [ XF86Search            ]       };
+};
+
+
+// BTC 9000
+partial alphanumeric_keys
+xkb_symbols "btc9000" {
+    include "inet(acpi_common)"
+    key <I10>  {       [ XF86AudioStop         ]       };
+    key <I12>  {       [ XF86AudioMute         ]       };
+    key <I19>  {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I1E>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I20>  {       [ XF86Favorites         ]       };
+    key <I21>  {       [ XF86AudioMedia        ]       };
+    key <I22>  {       [ XF86AudioPrev         ]       };
+    key <I24>  {       [ XF86AudioNext         ]       };
+    key <I25>  {       [ XF86AudioLowerVolume  ]       };
+    key <I26>  {       [ XF86Reload            ]       };
+    key <I2E>  {       [ XF86Mail              ]       };
+    key <I30>  {       [ XF86HomePage          ]       };
+    key <I32>  {       [ XF86Search            ]       };
+};
+
+// BTC 9000A
+partial alphanumeric_keys
+xkb_symbols "btc9000a" {
+    include "inet(acpi_common)"
+    key <I10>  {       [ XF86AudioStop         ]       };
+    key <I12>  {       [ XF86AudioMute         ]       };
+    key <I19>  {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I1E>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I20>  {       [ XF86Favorites         ]       };
+    key <I21>  {       [ XF86Eject             ]       };
+    key <I22>  {       [ XF86AudioPrev         ]       };
+    key <I24>  {       [ XF86AudioNext         ]       };
+    key <I25>  {       [ XF86AudioLowerVolume  ]       };
+    key <I26>  {       [ XF86HomePage          ]       };
+    key <I2E>  {       [ Help                  ]       };
+    key <I30>  {       [ XF86WWW               ]       };
+    key <I32>  {       [ XF86Search            ]       };
+};
+
+// BTC 9001AH
+xkb_symbols "btc9001ah" {
+    include "inet(acpi_common)"
+    key <I02>   {       [ XF86HomePage          ]       };
+    key <I17>   {       [ XF86AudioStop         ]       };
+    key <I1E>   {       [ XF86AudioRaiseVolume  ]       };
+    key <I1F>   {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I22>   {       [ XF86AudioNext         ]       };
+    key <I24>   {       [ XF86AudioPrev         ]       };
+    key <I25>   {       [ XF86AudioLowerVolume  ]       };
+    key <I26>   {       [ XF86AudioMute         ]       };
+    key <I6C>   {       [ XF86Mail              ]       };
+    key <RWIN>  {       [ XF86Eject             ]       };
+};
+
+// BTC 5090
+partial alphanumeric_keys
+xkb_symbols "btc5090" {
+    include "inet(media_nav_acpi_common)"
+    key <I26>   {       [ XF86Start             ]       };
+    key <I33>   {       [ XF86Eject             ]       };
+};
+
+// BTC 9019U
+partial alphanumeric_keys
+xkb_symbols "btc9019u" {
+    include "inet(media_nav_acpi_common)"
+    key <FK17> {       [ XF86Search            ]       };
+    key <I02>  {       [ XF86HomePage          ]       };
+};
+
+// Cherry Blue Line
+
+// Cherry Blue Line CyBo@rd
+partial alphanumeric_keys
+xkb_symbols "cherryblue" {
+    include "inet(nav_common)"
+    key <FK16> {       [ XF86Reload            ]       };
+    key <I02>  {       [ XF86HomePage          ]       };
+    key <I17>  {       [ XF86AudioStop         ]       };
+    key <I1E>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I1F>  {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I22>  {       [ XF86AudioNext         ]       };
+    key <I24>  {       [ XF86AudioPrev         ]       };
+    key <I25>  {       [ XF86AudioLowerVolume  ]       };
+    key <I26>  {       [ XF86AudioMute         ]       };
+    key <I63>  {       [ XF86Standby           ]       };
+    key <PRSC> {       [ XF86Terminal          ]       };
+    key <XFER> {       [ XF86Go                ]       };
+};
+
+// Cherry CyMotion Master XPress
+partial alphanumeric_keys
+xkb_symbols "cherryblueb" {
+    include "inet(media_nav_common)"
+    key <FK16>  {       [ XF86Reload            ]       };
+    key <I02>   {       [ XF86HomePage          ]       };
+    key <I07>   {       [ XF86Forward           ]       };
+    key <I08>   {       [ XF86Back              ]       };
+    key <I0A>   {       [ XF86Copy              ]       };
+    key <I0B>  {       [ XF86ScrollUp          ]       };
+    key <I12>   {       [ XF86ScrollDown        ]       };
+    key <I17>   {       [ XF86Cut               ]       };
+    key <I18>   {       [ XF86Paste             ]       };
+    key <I1E>   {       [ XF86AudioRaiseVolume  ]       };
+    key <I25>   {       [ XF86AudioLowerVolume  ]       };
+    key <I26>   {       [ XF86AudioMute         ]       };
+    key <I2C>   {       [ XF86Book              ]       };
+    key <I32>   {       [ XF86Finance           ]       };
+    key <I63>   {       [ XF86Standby                   ] };
+    key <I67>   {       [ XF86AudioRewind       ]       };
+    key <I70>   {       [ XF86Eject             ]       };
+    key <I71>   {       [ XF86Book              ]       };
+    key <I72>   {       [ XF86Book              ]       };
+    key <PRSC>  {       [ XF86Terminal          ]       };
+    key <XFER>  {       [ XF86Go                ]       };
+};
+
+// Cherry Blue Line CyBo@rd (alternate option)
+partial alphanumeric_keys
+xkb_symbols "cherrybluea" {
+    include "inet(media_nav_acpi_common)"
+    key <I6D>  {       [ XF86Go                ]       };
+};
+
+// Cherry CyBo@rd USB-Hub
+partial alphanumeric_keys
+xkb_symbols "cherrycyboard" {
+    include "inet(media_nav_acpi_common)"
+    key <FK17>    {   [ XF86Search        ]   };
+    key <I02> {   [ XF86HomePage      ]   };
+    key <K67> {   [ XF86Terminal      ]   };
+    key <XFER>    {   [ XF86AudioMedia    ]   };
+};
+
+// Cherry CyMotion Expert
+partial alphanumeric_keys 
+xkb_symbols "cherrycmexpert" {
+    include "inet(cherryblueb)"
+    include "inet(acpi_common)"
+    key <FK15> {       [ XF86Mail              ]       };
+};
+
+
+// Chicony
+
+// Chicony Internet Keyboard
+partial alphanumeric_keys 
+xkb_symbols "chicony" {
+    include "inet(acpi_common)"
+    key <I12>  {       [ XF86AudioMute         ]       };
+    key <I17>  {       [ XF86Mail              ]       };
+    key <I19>  {       [ XF86AudioLowerVolume  ]       };
+    key <I1E>  {       [ XF86Forward           ]       };
+    key <I20>  {       [ XF86AudioNext         ]       };
+    key <I21>  {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I22>  {       [ XF86AudioPrev         ]       };
+    key <I23>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I24>  {       [ XF86AudioStop         ]       };
+    key <I25>  {       [ XF86Back              ]       };
+    key <I26>  {       [ XF86LaunchB           ]       };
+    key <I2E>  {       [ XF86LaunchC           ]       };
+    key <I30>  {       [ XF86LaunchA           ]       };
+    key <I32>  {       [ XF86WWW               ]       };
+    key <I5F>  {       [ XF86ContrastAdjust    ]       };
+    key <I63>  {       [ XF86BrightnessAdjust  ]       };
+};
+
+// Chicony KU-0108
+partial alphanumeric_keys 
+xkb_symbols "chicony0108" {
+    include "inet(cherrycyboard)"
+};
+
+// Chicony KU-0420 AKA Targus Slim Internet Media USB Keyboard
+partial alphanumeric_keys
+xkb_symbols "chicony0420" {
+    include "inet(media_nav_acpi_common)"
+    key <I01>   {       [ XF86AudioMedia        ]       };
+    key <K67>   {       [ XF86MyComputer        ]       };
+};
+
+// Chicony KB-9885
+partial alphanumeric_keys
+xkb_symbols "chicony9885" {
+    include "inet(acpi_common)"
+    key <I12>  {       [ XF86AudioMute         ]       };
+    key <I17>  {       [ XF86Mail              ]       };
+    key <I19>  {       [ XF86AudioLowerVolume  ]       };
+    key <I1E>  {       [ XF86Forward           ]       };
+    key <I20>  {       [ XF86AudioNext         ]       };
+    key <I21>  {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I22>  {       [ XF86AudioPrev         ]       };
+    key <I23>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I24>  {       [ XF86AudioStop         ]       };
+    key <I25>  {       [ XF86Back              ]       };
+    key <I26>  {       [ XF86LaunchB           ]       };
+    key <I2E>  {       [ XF86LaunchC           ]       };
+    key <I30>  {       [ XF86LaunchA           ]       };
+    key <I32>  {       [ XF86WWW               ]       };
+};
+
+
+// Compaq
+
+// Compaq Easy Access Keyboard
+partial alphanumeric_keys
+xkb_symbols "compaqeak8" {
+    key <I13>  {       [ XF86Community         ]       };
+    key <I14>  {       [ XF86Market            ]       };
+    key <I15>  {       [ XF86Meeting           ]       };
+    key <I1A>  {       [ XF86Search            ]       };
+    key <I1B>  {       [ XF86News              ]       };
+    key <I1E>  {       [ XF86Mail              ]       };
+    key <I1F>  {       [ XF86HomePage          ]       };
+    key <I23>  {       [ XF86WWW               ]       };
+};
+
+// Compaq Internet Keyboard (7 keys)
+partial alphanumeric_keys 
+xkb_symbols "compaqik7" {
+    key <I12>  {       [ XF86LightBulb         ]       };
+    key <I1E>  {       [ XF86Mail              ]       };
+    key <I21>  {       [ XF86Search            ]       };
+    key <I23>  {       [ Help                  ]       };
+    key <I25>  {       [ XF86VendorHome        ]       };
+    key <I26>  {       [ XF86HomePage          ]       };
+    key <I32>  {       [ XF86Shop              ]       };
+};
+
+// Compaq Internet Keyboard (13 keys)
+partial alphanumeric_keys
+xkb_symbols "compaqik13" {
+    include "inet(media_acpi_common)"
+    key <I1E>  {       [ XF86Mail              ]       };
+    key <I1F>  {       [ XF86Go                ]       };
+    key <I21>  {       [ XF86Search            ]       };
+    key <I23>  {       [ XF86WWW               ]       };
+    key <I32>  {       [ XF86Shop              ]       };
+};
+
+// Compaq Internet Keyboard (18 keys)
+partial alphanumeric_keys
+xkb_symbols "compaqik18" {
+    include "inet(media_acpi_common)"
+    key <I12>  {       [ XF86LightBulb         ]       };
+    key <I18>  {       [ XF86Eject             ]       };
+    key <I1E>  {       [ XF86Mail              ]       };
+    key <I1F>  {       [ XF86Go                ]       };
+    key <I21>  {       [ XF86Search            ]       };
+    key <I23>  {       [ XF86WWW               ]       };
+    key <I25>  {       [ XF86VendorHome        ]       };
+    key <I26>  {       [ XF86Community         ]       };
+    key <I32>  {       [ XF86Shop              ]       };
+    key <I68>  {       [ Print                 ]       };
+};
+
+
+// Laptop/notebook Compaq (eg. Armada, Evo) Laptop Keyboard
+partial alphanumeric_keys
+xkb_symbols "armada" {
+    include "inet(media_acpi_common)"
+    key <I1A>  {       [ XF86Search            ]       };
+    key <I1E>  {       [ XF86Mail              ]       };
+    key <I1F>  {       [ XF86HomePage          ]       };
+    key <I23>  {       [ XF86WWW               ]       };
+    key <I59>   {       [ XF86Launch2           ]       }; // Battery Monitor 
+    key <I6F>  {       [ XF86AudioMedia        ]       };
+    key <I75>   {       [ XF86Launch0           ]       }; // Info Center 
+};
+
+// Laptop/notebook Compaq (eg. Presario) Internet Keyboard
+partial alphanumeric_keys
+xkb_symbols "presario" {
+    include "inet(media_acpi_common)"
+    key <I14>  {       [ XF86Q                 ]       };
+    key <I18>  {       [ XF86Launch2           ]       };
+    key <I1E>  {       [ XF86Mail              ]       };
+    key <I1F>  {       [ XF86Launch1           ]       };
+    key <I23>  {       [ XF86WWW               ]       };
+    key <I32>  {       [ XF86Shop              ]       };
+    key <I75>  {       [ XF86AudioMedia        ]       };
+};
+
+// Compaq iPaq Keyboard
+partial alphanumeric_keys
+xkb_symbols "ipaq" {
+    key <FK16> {       [ XF86Shop              ]       };
+    key <I02>  {       [ XF86Standby           ]       };
+    key <I65>  {       [ XF86Search            ]       };
+    key <I66>  {       [ XF86Travel            ]       };
+    key <I69>  {       [ XF86BackForward       ]       };
+    key <I6A>  {       [ XF86Q                 ]       };
+    key <I6C>  {       [ XF86Mail              ]       };
+};
+
+
+// Dell
+
+partial alphanumeric_keys
+xkb_symbols "dell" {
+    include "inet(acpi_common)"
+    key <I12>  {       [ XF86Mail              ]       };
+    key <I1E>  {       [ XF86Search            ]       };
+    key <I26>  {       [ XF86HomePage          ]       };
+};
+
+// Dell Precision M65
+partial alphanumeric_keys
+xkb_symbols "dellm65" {
+    include "inet(media_common)"
+    key <I04>   {       [ XF86PowerOff          ]       };
+    key <LWIN>  {       [ Super_L               ]       };
+};
+
+// Laptop/notebook Dell Inspiron 8xxx
+partial alphanumeric_keys
+xkb_symbols "inspiron" {
+    include "inet(media_common)"
+    key <I02>   {       [ XF86AudioStop         ]       };
+    key <I04>   {       [ XF86AudioNext         ]       };
+    key <I21>   {       [ XF86Eject             ]       };
+    key <I56>   {       [ XF86Display           ]       };
+    key <NFER>  {       [ XF86AudioPrev         ]       };
+    key <XFER>  {       [ XF86AudioPlay, XF86AudioPause ] };
+};
+
+// DELL USB Multimedia Keyboard (former 8135, generalized, superset of 8125)
+partial alphanumeric_keys
+xkb_symbols "dellusbmm" {
+    // Describes the extra keys on a SK-8135 Multimedia keyboard
+    // From Olivier Lahaye <olivier dot lahaye at motorola dot com>
+    include "inet(media_nav_acpi_common)"
+    key <I02>  {       [ XF86HomePage          ]       };
+    key <K67>  {       [ XF86MyComputer        ]       }; 
+    key <XFER> {       [ XF86AudioMedia        ]       };  
+};
+
+
+// Diamond
+
+// Diamond 9801 / 9802 series
+partial alphanumeric_keys
+xkb_symbols "diamond" {
+    include "inet(media_nav_acpi_common)"
+    key <I6D>  {       [ XF86Go                ]       };
+};
+
+
+// Ennyah
+
+// Ennyah DKB-1008
+partial alphanumeric_keys
+xkb_symbols "ennyah_dkb1008" {
+    include "inet(media_nav_acpi_common)"
+    key <XFER>  {      [ XF86AudioMedia        ]       };
+};
+
+
+// Genius
+
+// Genius Comfy KB-16M / Genius MM Keyboard KWD-910
+partial alphanumeric_keys
+xkb_symbols "genius" {
+    include "inet(media_acpi_common)"
+    key <I12>   {      [ XF86AudioRaiseVolume  ]       };
+    key <I17>   {      [ XF86Calculator        ]       };
+    key <I19>   {      [ XF86AudioLowerVolume  ]       };
+    key <I1E>   {      [ XF86Forward           ]       };
+    key <I21>   {      [ XF86AudioNext         ]       };
+    key <I23>  {       [ XF86AudioPrev         ]       };
+    key <I25>   {      [ XF86Back              ]       };
+    key <I26>   {      [ XF86ScreenSaver       ]       };
+    key <I2E>   {      [ XF86Mail              ]       };
+    key <I30>   {      [ XF86Eject             ]       };
+    key <I32>   {      [ XF86WWW               ]       };
+};
+
+
+// GeniusComfy21e
+partial alphanumeric_keys
+xkb_symbols "geniuscomfy2" {
+    // Describes the extra keys on a Genius Comfy KB-21e-Scroll
+    // From Radics Laszlo <garaboncias@mailbox.hu>
+    include "inet(media_nav_acpi_common)"
+    key <I23>   {       [ Return                ]       };
+};
+
+// Gyration
+
+partial alphanumeric_keys
+xkb_symbols "gyration" {
+    include "inet(nav_common)"
+    key <FK16> {       [ XF86Reload            ]       };
+    key <I02>  {       [ XF86HomePage          ]       };
+    key <I17>  {       [ XF86AudioStop         ]       };
+    key <I1E>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I1F>  {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I22>  {       [ XF86AudioNext         ]       };
+    key <I24>  {       [ XF86AudioPrev         ]       };
+    key <I25>  {       [ XF86AudioLowerVolume  ]       };
+    key <I26>  {       [ XF86AudioMute         ]       };
+};
+
+
+// Hewlett-Packard
+
+// Hewlett-Packard Internet Keyboard
+partial alphanumeric_keys 
+xkb_symbols "hpi6" {
+    include "inet(media_nav_acpi_common)"
+    key <I02>   {       [ XF86HomePage          ]       };
+    key <I12>  {       [ XF86Search            ]       };
+    key <I14>  {       [ XF86VendorHome        ]       };
+    key <I15>  {       [ XF86Community         ]       };
+    key <I16>  {       [ XF86AudioMedia        ]       };
+    key <I18>  {       [ XF86Eject             ]       };
+    key <I1E>  {       [ XF86Shop              ]       };
+    key <I1F>  {       [ XF86Launch1           ]       };
+    key <I26>  {       [ Help                  ]       };
+    key <I27>  {       [ XF86Finance           ]       };
+    key <I39>  {       [ Print                 ]       };
+    key <I75>   {       [ Help                  ]       };
+};
+
+// Hewlett-Packard SK-2501, SK-2505 Multimedia Keyboard
+partial alphanumeric_keys
+xkb_symbols "hp250x" {
+    key <I12>  {       [ XF86Tools             ]       };
+    key <I17>  {       [ XF86Search            ]       };
+    key <I18>  {       [ XF86Eject             ]       };
+    key <I1E>  {       [ XF86Mail              ]       };
+    key <I20>  {       [ XF86AudioMute         ]       };
+    key <I21>  {       [ XF86Launch5           ]       };
+    key <I22>  {       [ XF86Launch3           ]       };
+    key <I23>  {       [ XF86Launch2           ]       };
+    key <I24>  {       [ XF86Launch4           ]       };
+    key <I25>  {       [ XF86Standby           ]       };
+    key <I26>  {       [ Help                  ]       };
+    key <I2E>  {       [ XF86AudioLowerVolume  ]       };
+    key <I30>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I32>  {       [ XF86WWW               ]       };
+};
+
+// Hewlett-Packard Omnibook XE3 GC, GD, GE and Pavilion N5xxx
+partial alphanumeric_keys
+xkb_symbols "hpxe3gc" {
+    // Describes the OneTouch buttons on HP Omnibook XE3 GC and
+    // HP Pavilion N52XX models.
+    // See http://sourceforge.net/projects/omke for details on enabling
+    // these keys
+    include "inet(media_common)"
+    key <I71>  {       [ Help                  ]       };
+    key <I72>  {       [ XF86Launch1           ]       };
+    key <I73>  {       [ XF86WWW               ]       };
+    key <I74>  {       [ XF86Mail              ]       };
+};
+
+// Hewlett-Packard Omnibook XE3 GF
+partial alphanumeric_keys
+xkb_symbols "hpxe3gf" {
+    // Describes the OneTouch buttons on HP Omnibook XE3 GF models.
+    // See http://sourceforge.net/projects/omke for details on enabling
+    // these keys
+    include "inet(media_nav_common)"
+    key <I73>  {       [ Help                  ]       };
+    key <I74>  {       [ XF86Launch1           ]       };
+};
+
+// Hewlett-Packard Omnibook XT1000
+partial alphanumeric_keys
+xkb_symbols "hpxt1000" {
+    // Describes the OneTouch buttons on HP Omnibook XT1000 models.
+    // See http://sourceforge.net/projects/omke for details on enabling
+    // these keys
+    include "inet(media_nav_common)"
+    key <I71>  {       [ XF86Launch3           ]       };
+    key <I72>  {       [ Help                  ]       };
+    key <I73>  {       [ XF86Launch2           ]       };
+    key <I74>  {       [ XF86Launch1           ]       };
+};
+
+// Hewlett-Packard Pavilion ZT11xx
+partial alphanumeric_keys
+xkb_symbols "hpzt11xx" {
+    // Describes the OneTouch buttons on HP Pavilion ZT11xx models.
+    // See http://sourceforge.net/projects/omke for details on enabling
+    // these keys
+    include "inet(media_nav_common)"
+    key <I71>  {       [ XF86Launch3           ]       };
+    key <I72>  {       [ Help                  ]       };
+    key <I73>  {       [ XF86Launch2           ]       };
+    key <I74>  {       [ XF86Launch1           ]       };
+};
+
+// Hewlett-Packard Pavilion dv5
+partial alphanumeric_keys
+xkb_symbols "hpdv5" {
+    // Describes the OneTouch buttons on HP Pavilion dv5 models.
+    // See http://sourceforge.net/projects/omke for details on enabling
+    // these keys
+    include "inet(media_common)"
+    key <I12>  {       [ XF86ScreenSaver       ]       };
+    key <I32>  {       [ XF86WWW               ]       };
+    key <I75>  {       [ Help                  ]       };
+    key <K6D>  {       [ XF86Launch1           ]       };
+};
+
+// Hewlett-Packard Omnibook XE4xxx and ZE4xxx
+partial alphanumeric_keys
+xkb_symbols "hpxe4xxx" {
+    // Describes the OneTouch buttons on HP Omnibook XE4xxx and ZE4xxx
+    // models.
+    // See http://sourceforge.net/projects/omke for details on enabling
+    // these keys
+    include "inet(media_nav_common)"
+    key <I70>  {       [ Help                  ]       };
+    key <I71>  {       [ XF86Launch2           ]       };
+    key <I73>  {       [ XF86Launch1           ]       };
+};
+
+// Hewlett-Packard Omnibook 500 FA
+partial alphanumeric_keys
+xkb_symbols "hp500fa" {
+    // Describes the OneTouch buttons on HP Omnibook 500 FA models.
+    // See http://sourceforge.net/projects/omke for details on enabling
+    // these keys
+    key <I73>  {       [ Help                  ]       };
+    key <I74>  {       [ XF86Launch1           ]       };
+};
+
+// Hewlett-Packard Omnibook 5xx
+partial alphanumeric_keys
+xkb_symbols "hp5xx" {
+    // Describes the OneTouch buttons on HP Omnibook 5xx models.
+    // See http://sourceforge.net/projects/omke for details on enabling
+    // these keys
+    include "inet(media_common)"
+    key <I73>  {       [ Help                  ]       };
+    key <I74>  {       [ XF86Launch1           ]       };
+};
+
+
+// Honeywell
+
+// Honeywell Euroboard
+partial alphanumeric_keys
+xkb_symbols "honeywell_euroboard" {
+    // January 2002
+    // Scott Penrose <scottp@dd.com.au>
+    // http://linux.dd.com.au/quest/linux/keyboard/honeywell/
+    key <I10>  {       [ XF86Game              ]       };
+    key <I12>  {       [ XF86AudioPrev         ]       };
+    key <I17>  {       [ XF86Eject             ]       };
+    key <I18>  {       [ XF86Launch2           ]       };
+    key <I19>  {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I1E>  {       [ XF86Launch1           ]       };
+    key <I20>  {       [ XF86AudioMute         ]       };
+    key <I22>  {       [ XF86AudioNext         ]       };
+    key <I23>  {       [ XF86AudioStop         ]       };
+    key <I24>  {       [ XF86Mail              ]       };
+    key <I25>  {       [ XF86ScreenSaver       ]       };
+    key <I26>  {       [ XF86Calculator        ]       };
+    key <I2E>  {       [ XF86AudioLowerVolume  ]       };
+    key <I30>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I32>  {       [ XF86WWW               ]       };
+};
+
+
+// IBM
+
+
+// IBM Rapid Access
+partial alphanumeric_keys 
+xkb_symbols "rapidaccess" {
+    key <I12>  {       [ XF86AudioMute         ]       };
+    key <I17>  {       [ XF86Launch2           ]       };
+    key <I1E>  {       [ XF86AudioLowerVolume  ]       };
+    key <I20>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I21>  {       [ XF86AudioNext         ]       };
+    key <I22>  {       [ XF86AudioPause        ]       };
+    key <I22>  {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I23>  {       [ XF86AudioPrev         ]       };
+    key <I24>  {       [ XF86AudioStop         ]       };
+    key <I25>  {       [ XF86Standby           ]       };
+    key <I26>  {       [ Help                  ]       };
+    key <I2E>  {       [ XF86Launch4           ]       };
+    key <I30>  {       [ XF86Launch3           ]       };
+    key <I32>  {       [ XF86Launch1           ]       };
+};
+
+// IBM Rapid Access II
+partial alphanumeric_keys 
+xkb_symbols "rapidaccess2" {
+    include "inet(acpi_common)"
+    key <I12>  {       [ XF86AudioNext         ]       };
+    key <I17>  {       [ XF86Favorites         ]       };
+    key <I1E>  {       [ XF86AudioMute         ]       };
+    key <I20>  {       [ XF86AudioStop         ]       };
+    key <I21>  {       [ XF86AudioLowerVolume  ]       };
+    key <I22>  {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I23>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I24>  {       [ XF86AudioPrev         ]       };
+    key <I25>  {       [ XF86HomePage          ]       };
+    key <I26>  {       [ XF86Shop              ]       };
+    key <I2E>  {       [ XF86Search            ]       };
+    key <I30>  {       [ XF86MyComputer        ]       };
+    key <I32>  {       [ XF86VendorHome        ]       };
+};
+
+// IBM ThinkPad 60 series
+partial alphanumeric_keys
+xkb_symbols "thinkpad60" {
+    include "inet(media_nav_common)"
+    key <I1F> { [ XF86VendorHome ] };
+};
+
+// IBM Space Saver
+partial alphanumeric_keys
+xkb_symbols "ibm_spacesaver" {
+    key <NMLK>  {
+        type="ONE_LEVEL",
+        symbols[Group1]= [ Num_Lock ]
+    };
+};
+
+// Logitech
+
+// Logitech common definitions
+partial hidden alphanumeric_keys
+xkb_symbols "logitech_base" {
+    include "inet(media_nav_acpi_common)"
+    key <I02> { [ XF86HomePage ] };
+    key <I15> { [ XF86Community ] };
+    key <I16> { [ XF86ScrollClick ] };
+    key <I21> {        [ XF86VendorHome ] };
+    key <I3B> { [ XF86New ] };
+    key <I3C> { [ XF86Reply ] };
+    key <I43> { [ XF86MyComputer ] };
+    key <I44> { [ XF86Documents ] };
+    key <I57> { [ XF86Pictures ] };
+    key <I58> { [ XF86Music ] };
+};
+
+// Logitech second set of common keys
+partial hidden alphanumeric_keys
+xkb_symbols "logitech_set3" {
+    key <I17>  {       [ XF86AudioStop         ]       };
+    key <I1E>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I1F>  {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I22>  {       [ XF86AudioNext         ]       };
+    key <I24>  {       [ XF86AudioPrev         ]       };
+    key <I25>  {       [ XF86AudioLowerVolume  ]       };
+    key <I26>  {       [ XF86AudioMute         ]       };
+    key <I44>   {       [ XF86New               ]       };      // F1
+    key <I45>   {       [ XF86Reply             ]       };      // F2
+    key <I4A>   {       [ XF86Send              ]       };      // F4
+    key <I54>   {       [ Print                 ]       };      // F7
+    key <I55>   {       [ XF86Save              ]       };      // F8
+    key <I56>   {       [ XF86Documents         ]       };      // F10
+    key <I69>   {       [ XF86Go                ]       };
+    key <XFER>  {       [ XF86AudioMedia        ]       };
+};
+
+// Logitech Access Keyboard
+partial alphanumeric_keys
+xkb_symbols "logiaccess" {
+    include "inet(logitech_base)"
+    key <FK13> {       [ XF86MailForward       ]       }; 
+    key <FK14> {       [ XF86Send              ]       }; 
+    key <I11>  {       [ XF86Messenger         ]       };
+    key <I12>  {       [ XF86WebCam            ]       };
+};
+
+// Logitech Cordless Desktop (alternate option)
+partial alphanumeric_keys
+xkb_symbols "logicda" {
+    include "inet(logitech_base)"
+    include "inet(logitech_set3)"
+};
+
+// Logitech Internet Navigator Keyboard
+partial alphanumeric_keys
+xkb_symbols "logicink" {
+    include "inet(logitech_base)"
+    key <I11>  {       [ XF86Shop              ]       };
+    key <I12>  {       [ XF86VendorHome        ]       };
+    key <I13>  {       [ XF86Finance           ]       };
+    key <I14>  {       [ XF86Start             ]       };
+};
+
+// Logitech Cordless Desktop EX110
+partial alphanumeric_keys
+xkb_symbols "logiex110" {
+    include "inet(logitech_base)"
+    key <I2F>   {       [ XF86Close             ]       };      // Close
+
+// Extended function keys
+// In the Console before starting X
+// Using setkeycodes e03b 212 e03c 213 e03d 214 e03e 215 e03f 216 e040 217 
+//       setkeycodes e041 218 e042 219 e043 220 e044 221 e057 222 e058 223 6d 206
+// *=keys that are there but need different symbol names.
+    key <I3B>   {       [ Help                  ]       };      // F1
+    key <FK13>  {       [ XF86Word              ]       };      // F2
+    key <FK14>  {       [ XF86Excel             ]       };      // F3
+    key <FK15>  {       [ XF86Pictures          ]       };      // F4
+    key <FK16>  {       [ Undo                  ]       };      // F5
+    key <I65>   {       [ Redo                  ]       };      // F6 *
+    key <I42>   {       [ Print                 ]       };      // F7
+    key <I43>   {       [ XF86Save              ]       };      // F8
+    key <I44>   {       [ XF86Launch1           ]       };      // F9 *
+    key <I45>   {       [ XF86Launch2           ]       };      // F10
+    key <I14>   {       [ XF86Launch3           ]       };      // F11
+    key <I4A>   {       [ XF86Launch4           ]       };      // F12
+};
+
+// Logitech iTouch Internet Navigator Keyboard SE
+partial alphanumeric_keys
+xkb_symbols "logiinkse" {
+    include "inet(logitech_base)"
+    key <FK13> {       [ XF86MailForward       ]       };      // F3
+    key <FK14> {       [ XF86Send              ]       };      // F4
+    key <FK15> {       [ Undo                  ]       };      // F5
+    key <FK16> {       [ Redo                  ]       };      // F6
+    key <FK17> {       [ Print                 ]       };      // F7
+    key <I11>  {       [ XF86Messenger         ]       };
+    key <I12>  {       [ XF86WebCam            ]       };
+    key <I13>  {       [ XF86VendorHome        ]       };
+    key <I14>  {       [ XF86Shop              ]       };
+    key <I42>  {       [ XF86Save              ]       };      // F8
+};
+
+// Logitech iTouch Internet Navigator Keyboard SE (USB)
+partial alphanumeric_keys
+xkb_symbols "logiinkseusb" {
+    include "inet(logitech_base)"
+    include "inet(logitech_set3)"
+};
+
+// Logitech iTouch Cordless Keyboard (model Y-RB6)
+partial alphanumeric_keys
+xkb_symbols "logiitc" {
+    include "inet(logitech_base)"
+    key <I2F> {        [ XF86AudioRaiseVolume ] };
+
+    // Just to override RaiseVolume from logitech_base,
+    // since no keysym can have two keycodes, see
+    // https://bugs.freedesktop.org/show_bug.cgi?id=7095
+    key <I30> {        [ XF86Launch1 ] };
+};
+
+// Logitech Internet Keyboard
+partial alphanumeric_keys
+xkb_symbols "logiik" {
+    include "inet(logitech_base)"
+    key <I12>  {       [ Find                  ]       };
+    key <I17>  {       [ Print                 ]       };
+    key <I18>  {       [ XF86Favorites         ]       };
+    key <I19>  {       [ XF86Reload            ]       };
+    key <I1E>  {       [ XF86Search            ]       };
+    key <I20>  {       [ XF86HotLinks          ]       };
+    key <I22>  {       [ XF86Forward           ]       };
+    key <I23>  {       [ XF86HomePage          ]       };
+    key <I24>  {       [ XF86Stop              ]       };
+    key <I25>  {       [ XF86OpenURL           ]       };
+    key <I26>  {       [ XF86AddFavorite       ]       };
+    key <I32>  {       [ XF86History           ]       };
+    key <I7A>  {       [ XF86WWW               ]       };
+};
+
+// Logitech iTouch
+partial alphanumeric_keys
+xkb_symbols "itouch" {
+    include "inet(logitech_base)"
+    key <I1F>  {       [ XF86AudioMute         ]       };
+    key <I2B>  {       [ XF86AudioLowerVolume  ]       };
+    key <I2D>  {       [ XF86AudioRaiseVolume  ]       };
+};
+
+// Logitech UltraX Cordless Media Desktop
+partial alphanumeric_keys
+xkb_symbols "logiultraxc" {
+    key <FK16>  {       [ XF86AudioMute ]       };
+    key <FK17>  {       [ XF86AudioLowerVolume  ]       };
+    key <I2B>   {       [ XF86AudioNext ]       };
+    key <I2D>   {       [ XF86AudioPrev ]       };
+    key <I2C>   {       [ XF86AudioPlay, XF86AudioPause ]       };
+    key <KPDC>  {       [ XF86AudioRaiseVolume  ]       };
+};
+
+partial alphanumeric_keys 
+xkb_symbols "logidinovo" {
+    include "inet(media_nav_common)"
+    key <I02>  {       [ XF86HomePage          ]       };
+    key <I12>  {       [ XF86Standby           ]       };
+    key <I17>  {       [ XF86Search            ]       };
+    key <I21>  {       [ XF86AudioRaiseVolume  ]       };
+    key <K66>  {       [ XF86AudioLowerVolume  ]       };
+    key <KPDC> {       [ XF86AudioMute         ]       };
+    key <XFER> {       [ XF86AudioMedia        ]       };
+};
+
+partial alphanumeric_keys 
+xkb_symbols "logidinovoedge" {
+    include "inet(media_acpi_common)"
+    key <I02>  {       [ XF86HomePage          ]       };
+    key <I6C>  {       [ XF86Mail              ]       };
+    key <FK17>  {       [ XF86Search            ]       };
+    key <XFER> {       [ XF86AudioMedia        ]       };
+};
+
+partial alphanumeric_keys
+xkb_symbols "logitech_g15" {
+    include "inet(media_nav_acpi_common)"
+    key <AE13> {         [   XF86Messenger ] };
+    key <HKTG> {         [     XF86Launch7 ] };
+    key  <I02> {         [     XF86Launch9 ] };
+    key  <I04> {         [       XF86Phone ] };
+    key  <I08> {         [     XF86LaunchD ] };
+    key  <I09> {         [     XF86Support ] };
+    key  <I0F> {         [     XF86LaunchF ] };
+    key  <I16> {         [      XF86LogOff ] };
+    key  <I18> {         [     XF86Launch5 ] };
+    key  <I21> {         [      XF86Travel ] };
+    key  <I23> {         [       XF86Spell ] };
+    key  <I31> {         [     XF86Launch4 ] };
+    key  <I3C> {         [       XF86Music ] };
+    key  <I42> {         [     XF86Forward ] };
+    key  <I43> {         [        XF86Send ] };
+    key  <I57> {         [        XF86Save ] };
+    key  <I64> {         [    XF86Pictures ] };
+    key  <I67> {         [     XF86LaunchA ] };
+    key  <I76> {         [      XF86iTouch ] };
+    key  <I77> {         [     XF86Launch3 ] };
+    key  <I79> {         [    XF86ToDoList ] };
+    key  <I7B> {         [  XF86Calculator ] };
+    key  <K5A> {         [  XF86VendorHome ] };
+    key  <K5D> {         [        XF86Away ] };
+    key  <K5E> {         [      XF86WebCam ] };
+    key  <K5F> {         [     XF86Launch0 ] };
+    key  <K63> {         [     XF86Launch6 ] };
+    key  <K6D> {         [    XF86Calendar ] };
+    key  <K71> {         [     XF86LaunchB ] };
+    key  <K72> {         [     XF86LaunchC ] };
+    key  <K74> {         [         XF86WWW ] };
+    key  <K75> {         [     XF86LaunchE ] };
+    key <II5D> {         [     XF86Launch1 ] };
+    key <NFER> {         [     XF86Launch2 ] };
+    key <XFER> {         [     XF86Launch8 ] };
+};
+
+
+// Memorex
+
+// Memorex MX1998
+partial alphanumeric_keys
+xkb_symbols "mx1998" {
+    include "inet(media_acpi_common)"
+    key <DOWN> {       [ XF86ScrollDown        ]       };
+    key <I12>  {       [ XF86AudioRewind       ]       };
+    key <I17>  {       [ XF86Close             ]       };
+    key <I18>  {       [ XF86Xfer              ]       };
+    key <I1E>  {       [ XF86AudioRecord       ]       };
+    key <I21>  {       [ XF86Documents         ]       };
+    key <I23>  {       [ XF86Game              ]       };
+    key <I25>  {       [ XF86Calculator        ]       };
+    key <I26>  {       [ Menu                  ]       };
+    key <I32>  {       [ XF86WWW               ]       };
+    key <I57>  {       [ XF86WakeUp            ]       };
+    key <I68>  {       [ XF86DOS               ]       };
+    key <I7A>  {       [ XF86ScreenSaver       ]       };
+    key <UP>   {       [ XF86ScrollUp          ]       };
+};
+
+// Memorex MX2500 EZ-Access Keyboard
+partial alphanumeric_keys
+xkb_symbols "mx2500" {
+    include "inet(media_nav_acpi_common)"
+    key <I12>  {       [ XF86Clear             ]       };
+    key <I13>  {       [ XF86Phone             ]       };
+    key <I14>  {       [ XF86DOS               ]       };
+    key <I17>  {       [ XF86Close             ]       };
+    key <I18>  {       [ XF86Xfer              ]       };
+    key <I1E>  {       [ XF86Eject             ]       };
+    key <I1F>  {       [ XF86Documents         ]       };
+    key <I26>  {       [ XF86News              ]       };
+    key <I6B>  {       [ XF86WakeUp            ]       };
+    key <I6D>  {       [ XF86RotateWindows     ]       };
+};
+
+// Memorex MX2750
+partial alphanumeric_keys
+xkb_symbols "mx2750" {
+    include "inet(media_nav_acpi_common)"
+    key <I32>  {       [ XF86Launch0           ]       };
+};
+
+
+// Microsoft
+
+// Microsoft Natural Wireless Ergonomic Keyboard 4000
+partial alphanumeric_keys
+xkb_symbols "microsoft4000" {
+    include "inet(media_nav_common)"
+    key <I192>  {       [ XF86Launch1           ]       };
+    key <I193>  {       [ XF86Launch2           ]       };
+    key <I194>  {       [ XF86Launch3           ]       };
+    key <I195>  {       [ XF86Launch4           ]       };
+    key <I196>  {       [ XF86Launch5           ]       };
+//  Missing because of lack of support from kbd driver: Zoom in and
+//  slider.
+};
+
+// Microsoft Natural Wireless Ergonomic Keyboard 7000
+partial alphanumeric_keys
+xkb_symbols "microsoft7000" {
+    include "inet(media_nav_common)"
+    key <I07>  {       [ Undo                  ]       };
+    key <I09>  {       [ XF86New               ]       };
+    key <I0A>  {       [ Redo                  ]       };
+    key <I0E>  {       [ XF86MailForward       ]       };
+    key <I2F>  {       [ XF86Close             ]       };
+    key <I39>  {       [ Print                 ]       };
+    key <I55>  {       [ XF86Save              ]       };
+    key <I5A>  {       [ XF86Send              ]       };
+    key <I62>  {       [ Help                  ]       };
+    key <I64>  {       [ XF86Reply             ]       };
+    key <I76>  {       [ parenleft             ]       };
+    key <I7B>  {       [ parenright            ]       };
+    key <K59>  {       [ KP_Equal              ]       };
+    key <K64>  {       [ XF86Open              ]       };
+//  Missing because of lack of support from kbd driver: Spell, Launch,
+//  and Zoom in and out buttons.
+};
+
+// Microsoft Internet Keyboard
+partial alphanumeric_keys
+xkb_symbols "microsoftinet" {
+    include "inet(nav_acpi_common)"
+    key <I68>  {       [ XF86AudioStop         ]       };
+};
+
+// Microsoft Natural Keyboard Pro USB  
+partial alphanumeric_keys  
+ xkb_symbols "microsoftprousb" {  
+    include "inet(nav_common)"
+     key <FK16>   {   [ XF86Reload      ]   };  
+     key <I01>   {   [ XF86AudioMedia   ]   };  
+     key <I02>   {   [ XF86HomePage      ]   };  
+     key <I17>   {   [ XF86AudioStop      ]   };  
+     key <I1E>   {   [ XF86AudioRaiseVolume   ]   };  
+     key <I1F>   {   [ XF86AudioPlay, XF86AudioPause ] };  
+     key <I22>   {   [ XF86AudioNext      ]   };  
+     key <I24>   {   [ XF86AudioPrev      ]   };  
+     key <I25>   {   [ XF86AudioLowerVolume   ]   };  
+     key <I26>   {   [ XF86AudioMute      ]   };  
+     key <I63>   {   [ XF86Standby      ]   };  
+ //   Internet Section -- Left Side  
+ //   Multimedia Section -- Right Side  
+ //   My Computer Section -- Far Right  
+ //  My computer maps to printscreen, so leaving commented out for now   
+ //  key <PRSC>   {   [ XF86MyComputer   ]   };  
+}; 
+
+// Microsoft Natural Keyboard Pro OEM 
+partial alphanumeric_keys  
+xkb_symbols "microsoftprooem" { 
+    include "inet(media_nav_common)"
+    key <FK17> {       [ XF86Search            ]       }; 
+    key <I02>  {       [ XF86HomePage          ]       }; 
+    key <I63>  {       [ XF86Standby           ]       }; 
+    key <K67>  {       [ XF86MyComputer        ]       }; 
+//   Internet Section -- Left Side 
+//   Multimedia Section -- Right Side 
+//   My Computer Section -- Far Right 
+};
+
+// Microsoft Internet Keyboard Pro, Swedish
+partial alphanumeric_keys
+xkb_symbols "microsoftprose" {
+    include "inet(nav_common)"
+    key <FK16> {       [ XF86Reload            ]       };
+    key <I02>  {       [ XF86HomePage          ]       };
+    key <I17>  {       [ XF86AudioStop         ]       };
+    key <I1E>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I1F>  {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I22>  {       [ XF86AudioNext         ]       };
+    key <I24>  {       [ XF86AudioPrev         ]       };
+    key <I25>  {       [ XF86AudioLowerVolume  ]       };
+    key <I26>  {       [ XF86AudioMute         ]       };
+    key <I63>  {       [ XF86Standby           ]       };
+    key <I68>  {       [ XF86AudioStop         ]       };
+    key <PRSC> {       [ XF86MyComputer        ]       };
+    key <XFER> {       [ XF86AudioMedia        ]       };
+};
+
+// Microsoft Office Keyboard
+partial alphanumeric_keys
+xkb_symbols "microsoftoffice" {
+    include "inet(nav_acpi_common)"
+    key <BRK>  {       [ XF86Calendar          ]       };
+    key <END>  {       [ Undo                  ]       };
+    key <I02>  {       [ XF86HomePage          ]       };
+    key <I1E>  {       [ XF86AudioLowerVolume  ]       };
+    key <I25>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I26>  {       [ XF86AudioMute         ]       };
+    key <I3C>  {       [ XF86Cut               ]       };
+    key <I4A>  {       [ XF86LogOff            ]       };
+    key <I54>  {       [ XF86ApplicationLeft   ]       };
+    key <I55>  {       [ XF86TaskPane          ]       };
+    key <I56>  {       [ XF86Spell             ]       };
+    key <I57>  {       [ XF86WWW               ]       };
+    key <I58>  {       [ XF86New               ]       };
+    key <I59>  {       [ XF86Open              ]       };
+    key <I5A>  {       [ XF86Close             ]       };
+    key <I62>  {       [ Help                  ]       };
+    key <I64>  {       [ XF86Save              ]       };
+    key <I67>  {       [ Print                 ]       };
+    key <I6D>  {       [ XF86OfficeHome        ]       };
+    key <I70>  {       [ Redo                  ]       };
+    key <I71>  {       [ XF86Reply             ]       };
+    key <I72>  {       [ XF86MailForward       ]       };
+    key <I73>  {       [ XF86Send              ]       };
+    key <I78>  {       [ XF86Copy              ]       };
+    key <MOAR> {       [ XF86ApplicationRight  ]       };
+    key <RCTL> {       [ XF86Paste             ]       };
+};
+
+// Microsoft Wireless Multimedia Keyboard 1.0A 
+partial alphanumeric_keys 
+xkb_symbols "microsoftmult" { 
+    include "inet(media_nav_acpi_common)"
+    key <AE13>  {       [ XF86Messenger         ]       }; 
+    key <FK14> {       [ XF86New               ]       }; 
+    key <FK15> {       [ XF86Open              ]       }; 
+    key <FK16> {       [ XF86Close             ]       }; 
+    key <FK17> {       [ XF86Reply             ]       }; 
+    key <I07>  {       [ Redo                  ]       }; 
+    key <I08>  {       [ Undo                  ]       }; 
+    key <I16>   {       [ XF86LogOff            ]       }; 
+    key <I23>  {       [ XF86Spell             ]       }; 
+    key <I3B>  {       [ Help                  ]       }; 
+    key <I3C>   {       [ XF86Music     ]       }; 
+    key <I42>  {       [ XF86Forward           ]       }; 
+    key <I43>  {       [ XF86Send              ]       }; 
+    key <I57>  {       [ XF86Save              ]       }; 
+    key <I58>  {       [ Print                 ]       }; 
+    key <I64>   {       [ XF86Pictures  ]       }; 
+    key <I80>   {       [ XF86Documents ]       }; 
+}; 
+
+
+// Oretec
+
+// Oretec MCK-800 MM/Internet keyboard
+partial alphanumeric_keys
+xkb_symbols "oretec" {
+    include "inet(acpi_common)"
+    key <I10>  {       [ XF86ScrollUp          ]       };
+    key <I12>  {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I17>  {       [ XF86AudioPrev         ]       };
+    key <I18>  {       [ XF86ScrollDown        ]       };
+    key <I19>  {       [ XF86ZoomOut           ]       };
+    key <I1E>  {       [ XF86AudioMute         ]       };
+    key <I21>  {       [ XF86WWW               ]       };
+    key <I22>  {       [ Menu                  ]       };
+    key <I23>  {       [ XF86AudioStop         ]       };
+    key <I24>  {       [ XF86Calculator        ]       };
+    key <I25>  {       [ XF86Xfer              ]       };
+    key <I26>  {       [ XF86Mail              ]       };
+    key <I2E>  {       [ XF86AudioNext         ]       };
+    key <I30>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I32>  {       [ XF86ZoomIn            ]       };
+    key <I68>  {       [ XF86AudioLowerVolume  ]       };
+};
+
+
+// Propeller
+
+// Propeller Voyager (KTEZ-1000)
+partial alphanumeric_keys
+xkb_symbols "propeller" {
+    include "inet(media_common)"
+    key <I12>  {       [ XF86AudioRewind       ]       };
+    key <I17>  {       [ XF86Close             ]       };
+    key <I18>  {       [ XF86Xfer              ]       };
+    key <I1E>  {       [ XF86AudioRecord       ]       };
+    key <I21>  {       [ XF86Documents         ]       };
+    key <I23>  {       [ XF86Game              ]       };
+    key <I25>  {       [ XF86Calculator        ]       };
+    key <I26>  {       [ Menu                  ]       };
+    key <I32>  {       [ XF86WWW               ]       };
+    key <I68>  {       [ XF86DOS               ]       };
+    key <I7A>  {       [ XF86Standby           ]       };
+};
+
+
+// QTronix
+
+// QTronix Scorpius 98N+
+partial alphanumeric_keys
+xkb_symbols "qtronix" {
+    key <I10>  {       [ XF86ScrollDown        ]       };
+    key <I12>  {       [ XF86Forward           ]       };
+    key <I13>  {       [ XF86WakeUp            ]       };
+    key <I17>  {       [ XF86Search            ]       };
+    key <I18>  {       [ XF86Standby           ]       };
+    key <I19>  {       [ XF86ScrollUp          ]       };
+    key <I1E>  {       [ XF86Back              ]       };
+    key <I1F>  {       [ XF86Reload            ]       };
+    key <I20>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I21>  {       [ XF86AudioPrev         ]       };
+    key <I22>  {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I23>  {       [ XF86AudioNext         ]       };
+    key <I24>  {       [ XF86AudioStop         ]       };
+    key <I25>  {       [ XF86HomePage          ]       };
+    key <I26>  {       [ XF86AudioMute         ]       };
+    key <I2E>  {       [ XF86AudioLowerVolume  ]       };
+    key <I30>  {       [ XF86AudioRecord       ]       };
+    key <I31>  {       [ XF86PowerOff          ]       };
+    key <I32>  {       [ XF86Stop              ]       };
+    key <I68>  {       [ XF86Calculator        ]       };
+};
+
+
+// Samsung
+
+// Samsung SDM 4500P
+partial alphanumeric_keys
+xkb_symbols "samsung4500" {
+    include "inet(media_nav_acpi_common)"
+    key <AE13> {       [ XF86Launch4           ]       };
+    key <I02>  {       [ XF86Launch1           ]       };
+    key <I04>  {       [ XF86Launch3           ]       };
+    key <I06>  {       [ XF86Launch5           ]       };
+    key <I09>  {       [ XF86Close             ]       };
+    key <I0A>  {       [ XF86Book              ]       };
+    key <I18>  {       [ XF86Eject             ]       };
+    key <I26>  {       [ Help                  ]       };
+    key <I59>  {       [ XF86Explorer          ]       };
+    key <NFER> {       [ XF86Launch2           ]       };
+};
+
+// Samsung SDM 4510P
+partial alphanumeric_keys
+xkb_symbols "samsung4510" {
+    include "inet(media_acpi_common)"
+    key <I02>  {       [ XF86Launch1           ]       };
+    key <I04>  {       [ XF86Launch3           ]       };
+    key <I18>  {       [ XF86Eject             ]       };
+    key <NFER> {       [ XF86Launch2           ]       };
+};
+
+
+// SK
+
+// SK-1300
+partial alphanumeric_keys
+xkb_symbols "sk1300" {
+    include "inet(media_common)"
+    key <I12>  {       [ XF86Eject             ]       };
+    key <I1E>  {       [ XF86Forward           ]       };
+    key <I20>  {       [ XF86WWW               ]       };
+    key <I25>  {       [ XF86Standby           ]       };
+    key <I26>  {       [ XF86Back              ]       };
+    key <I32>  {       [ XF86Stop              ]       };
+};
+
+// SK-2500
+partial alphanumeric_keys
+xkb_symbols "sk2500" {
+    include "inet(media_nav_common)"
+    key <I12>  {       [ XF86AudioRewind       ]       };
+    key <I17>  {       [ XF86Close             ]       };
+    key <I18>  {       [ XF86Eject             ]       };
+    key <I18>  {       [ XF86Eject             ]       };
+    key <I19>  {       [ XF86Forward           ]       };
+    key <I1E>  {       [ XF86AudioRecord       ]       };
+    key <I23>  {       [ XF86Xfer              ]       };
+    key <I25>  {       [ XF86PowerOff          ]       };
+    key <I26>  {       [ Menu                  ]       };
+    key <I7A>  {       [ XF86ScreenSaver       ]       };
+};
+
+// SK-6200
+partial alphanumeric_keys
+xkb_symbols "sk6200" {
+    include "inet(acpi_common)"
+    key <I12>  {       [ XF86Favorites         ]       };
+    key <I14>  {       [ XF86AudioLowerVolume  ]       };
+    key <I16>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I17>  {       [ XF86Back              ]       };
+    key <I19>  {       [ XF86Forward           ]       };
+    key <I1E>  {       [ XF86WWW               ]       };
+    key <I20>  {       [ XF86AudioMute         ]       };
+    key <I21>  {       [ XF86AudioNext         ]       };
+    key <I22>  {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I23>  {       [ XF86AudioPrev         ]       };
+    key <I24>  {       [ XF86AudioStop         ]       };
+    key <I32>  {       [ XF86Mail              ]       };
+};
+
+// SK-7100
+partial alphanumeric_keys
+xkb_symbols "sk7100" {
+    include "inet(media_common)"
+    key <I12>  {       [ XF86AudioPause        ]       };
+    key <I17>  {       [ XF86Close             ]       };
+    key <I18>  {       [ XF86Video             ]       };
+    key <I1E>  {       [ XF86Eject             ]       };
+    key <I25>  {       [ XF86CD                ]       };
+    key <I26>  {       [ XF86Display           ]       };
+    key <I32>  {       [ XF86WWW               ]       };
+};
+
+
+// Sven
+
+// SVEN Ergonomic 2500
+partial alphanumeric_keys
+xkb_symbols "sven" {
+    include "inet(acpi_common)"
+    key <I10>  {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I12>  {       [ XF86Forward           ]       };
+    key <I17>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I18>  {       [ XF86ZoomOut           ]       };
+    key <I19>  {       [ XF86AudioPrev         ]       };
+    key <I1A>  {       [ XF86AudioStop         ]       };
+    key <I1E>  {       [ XF86HomePage          ]       };
+    key <I20>  {       [ XF86Mail              ]       };
+    key <I21>  {       [ XF86ZoomIn            ]       };
+    key <I22>  {       [ XF86MyComputer        ]       };
+    key <I23>  {       [ XF86Stop              ]       };
+    key <I24>  {       [ XF86ScreenSaver       ]       };
+    key <I25>  {       [ XF86AudioLowerVolume  ]       };
+    key <I26>  {       [ XF86AudioMute         ]       };
+    key <I28>  {       [ XF86Calculator        ]       };
+    key <I29>  {       [ XF86Reload            ]       };
+    key <I2E>  {       [ XF86Search            ]       };
+    key <I30>  {       [ XF86Favorites         ]       };
+    key <I31>  {       [ XF86ScrollUp          ]       };
+    key <I32>  {       [ XF86ScrollDown        ]       };
+    key <I62>  {       [ XF86AudioNext         ]       };
+    key <I68>  {       [ XF86Back              ]       };
+};
+
+// SVEN Slim 303
+partial alphanumeric_keys
+xkb_symbols "sven303" {
+    key <I11>  {       [ XF86PowerOff          ]       };
+    key <I12>  {       [ XF86Sleep             ]       };
+    key <I16>  {       [ XF86WakeUp            ]       };
+};
+
+
+// Symplon
+
+// Symplon PaceBook (tablet PC)
+partial alphanumeric_keys
+xkb_symbols "symplon" {
+    include "inet(nav_acpi_common)"
+    key <HOME> {       [ XF86RotationPB        ]       };
+    key <I13>  {       [ XF86SplitScreen       ]       };
+    key <I14>  {       [ XF86Support           ]       };
+    key <I17>  {       [ XF86New               ]       };
+    key <I21>  {       [ XF86User2KB           ]       };
+    key <I25>  {       [ XF86RotationKB        ]       };
+    key <I26>  {       [ XF86MenuKB            ]       };
+    key <I6B>  {       [ XF86User1KB           ]       };
+    key <PAUS> {       [ XF86UserPB            ]       };
+    key <UP>   {       [ XF86MenuPB            ]       };
+};
+
+// Toshiba
+
+// Toshiba Satellite S3000
+partial alphanumeric_keys
+xkb_symbols "toshiba_s3000" {
+    include "inet(media_common)"
+    // Describes the Special buttons on Toshiba Satellite 3000 models.
+    // See http://sourceforge.net/projects/omke for details on enabling
+    // these keys
+    key <I06>  {       [ XF86Launch1           ]       };
+    key <I13>  {       [ XF86Launch2           ]       };
+    key <I71>  {       [ XF86WWW               ]       };
+    key <I73>  {       [ XF86Mail              ]       };
+    key <I75>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I76>  {       [ XF86AudioLowerVolume  ]       };
+};
+
+// Trust
+
+// Trust Wireless Keyboard Classic
+partial alphanumeric_keys
+xkb_symbols "trust" {
+    include "inet(media_nav_acpi_common)"
+    key <I11>  {       [ XF86ScreenSaver       ]       };
+    key <I1E>  {       [ XF86Eject             ]       };
+};
+
+
+// Trust Direct Access Keyboard
+partial alphanumeric_keys
+xkb_symbols "trustda" {
+    include "inet(media_common)"
+    key <I12>  {       [ XF86AudioRewind       ]       };
+    key <I17>  {       [ XF86Close             ]       };
+    key <I18>  {       [ XF86Eject             ]       };
+    key <I1E>  {       [ XF86AudioRecord       ]       };
+    key <I23>  {       [ XF86Xfer              ]       };
+    key <I25>  {       [ XF86Standby           ]       };
+    key <I26>  {       [ Help                  ]       };
+    key <I32>  {       [ XF86WWW               ]       };
+    key <I7A>  {       [ XF86Away              ]       };
+};
+
+
+// YaHoo!
+
+// Yahoo! Internet Keyboard
+partial alphanumeric_keys
+xkb_symbols "yahoo" {
+    include "inet(acpi_common)"
+    key <I11>  {       [ XF86AudioPrev         ]       };
+    key <I12>  {       [ XF86AudioPlay, XF86AudioPause ] };
+    key <I1E>  {       [ XF86AudioStop         ]       };
+    key <I1F>  {       [ XF86AudioNext         ]       };
+    key <I20>  {       [ XF86AudioRecord       ]       };
+    key <I21>  {       [ XF86AudioLowerVolume  ]       };
+    key <I22>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I23>  {       [ XF86AudioMute         ]       };
+    key <I24>  {       [ XF86Close             ]       };
+    key <I25>  {       [ XF86Calculator        ]       };
+    key <I26>  {       [ Help                  ]       };
+    key <I27>  {       [ XF86Mail              ]       };
+    key <I28>  {       [ XF86WWW               ]       };
+};
+
+// Apple keyboards (macbooks, powerbooks, powermac G5, etc)
+partial alphanumeric_keys
+xkb_symbols "apple" {
+// Really brightness up/down
+    key <II65>  {       [ XF86BrightnessAdjust  ]       };
+    key <I54>   {       [ XF86BrightnessAdjust  ]       };
+    key <I20>  {       [ XF86AudioMute         ]       };
+    key <I2E>  {       [ XF86AudioLowerVolume  ]       };
+    key <I30>  {       [ XF86AudioRaiseVolume  ]       };
+    key <I56>   {       [ XF86RotateWindows    ]       };
+// Really keyboard backlight off/up/down
+    key <I57>   {       [ XF86Launch0          ]       };
+    key <I58>  {       [ XF86Launch1           ]       };
+    key <I59>  {       [ XF86Launch2           ]       };
+    key <I5E>  {       [ XF86PowerOff          ]       };
+    key <K5D>  {       [ F13 ]    };
+    key <K5E>  {       [ F14 ]    };
+    key <K5F>  {       [ F15 ]    };
+    key <K6C>  {       [ XF86Eject ]    };
+    key <II5D> {       [ F16 ]    };
+    key <KPEQ>  {       [ KP_Equal ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "cymotionlinux" {
+    include "inet(media_nav_acpi_common)"
+    key <I07>  {       [       Undo                    ]       };
+    key <I0A>  {       [       Redo                    ]       };
+    key <I0F>  {       [       XF86ScrollDown          ]       };
+    key <I17>  {       [       XF86Launch2             ]       };
+    key <I1F>  {       [       XF86Launch1             ]       };
+    key <I28>  {       [       XF86MenuKB              ]       };
+    key <I2B>  {       [       XF86Launch3             ]       };
+    key <I3C>  {       [       XF86Cut                 ]       };
+    key <I78>  {       [       XF86Copy                ]       };
+    key <K65>  {       [       XF86Paste               ]       };
+    key <K75>  {       [       XF86ScrollUp            ]       };
+    key <XFER> {       [       XF86AudioMedia          ]       };
+};
+
+partial alphanumeric_keys 
+xkb_symbols "silvercrest" {
+    include "inet(media_nav_acpi_common)"
+    key <I02>  {       [ XF86HomePage          ]       };    
+    key <I21>  {       [ XF86Launch2           ]       };
+    key <K67>  {       [ XF86Launch1           ]       };
+};
+
+// eMachines
+
+partial alphanumeric_keys
+xkb_symbols "emachines" {
+    include "inet(media_nav_acpi_common)"
+    key <I32>  {  [ XF86iTouch                    ]  };
+    key <KP0>  {  [ KP_0                          ]  };
+    key <KP1>  {  [ KP_1                          ]  };
+    key <KP2>  {  [ KP_2                          ]  };
+    key <KP3>  {  [ KP_3                          ]  };
+    key <KP4>  {  [ KP_4                          ]  };
+    key <KP5>  {  [ KP_5                          ]  };
+    key <KP6>  {  [ KP_6                          ]  };
+    key <KP7>  {  [ KP_7                          ]  };
+    key <KP8>  {  [ KP_8                          ]  };
+    key <KP9>  {  [ KP_9                          ]  };
+    key <KPAD> {  [ KP_Add                        ]  };
+    key <KPDL> {  [ KP_Decimal                    ]  };
+    key <KPDV> {  [ KP_Divide                     ]  };
+    key <KPMU> {  [ KP_Multiply                   ]  };
+    key <KPSU> {  [ KP_Subtract                   ]  };
+};
+
+// BenQ
+
+//
+// BenQ X*
+// (X730, X500, X800)
+//
+// to make the FN_LOCK and CONFIG key work on the BenQ X500 , use ...
+// setkeycodes e074 130 # KEY_PROPS  from /usr/include/linux/input.h
+// setkeycodes e075 171 # KEY_CONFIG from /usr/include/linux/input.h
+partial alphanumeric_keys
+xkb_symbols "benqx" {
+    include "inet(media_nav_acpi_common)"
+    key <I02> { [ XF86ModeLock ] };
+    key <I21> { [ XF86WWW      ]  };
+    key <I2B> { [ XF86Go ] };
+    key <I31> { [ XF86Calendar ] };
+};
+
+// Intel
+
+// Intel Classmate
+partial alphanumeric_keys
+xkb_symbols "classmate" {
+    key <I2E>   {       [ XF86AudioLowerVolume  ] };   
+    key <I30>   {       [ XF86AudioRaiseVolume  ] };
+};
+
+// Unitek
+
+partial alphanumeric_keys
+xkb_symbols "unitekkb1925" {
+    include "inet(media_nav_common)"
+    key <I0C> { [ XF86AudioMute ] };
+    key <I11> { [ XF86PowerOff ] };
+    key <I12> { [ XF86Sleep ] };
+    key <I16> { [ XF86WakeUp ] };
+    key <I18> { [ XF86Search ] };
+    key <I1A> { [ XF86Reload ] };
+};
+
+// Creative
+
+// Creative Desktop Wireless 7000
+partial alphanumeric_keys
+xkb_symbols "creativedw7000" {
+    include "inet(media_nav_acpi_common)"
+    key <I66>   {       [ XF86Pictures ]       };
+};
+
+// Compal
+
+// Compal FL90
+partial alphanumeric_keys
+xkb_symbols "compalfl90" {
+    include "inet(media_nav_acpi_common)"
+    key <I54>   {       [ XF86MonBrightnessUp   ]       };
+    key <II65>  {       [ XF86MonBrightnessDown ]       };
+};
+
+partial alphanumeric_keys
+xkb_symbols "pc105" {
+    include "inet(media_nav_acpi_common)"
+};
+
+// HTC Dream
+partial alphanumeric_keys
+xkb_symbols "htcdream" {
+       key <BKSP> { [ BackSpace ] };
+       key <RTRN> { [ Return ] };
+
+        //first row
+        key <AE01> { [ 1, 1, exclam, exclam ] };
+        key <AE02> { [ 2, 2, at, at ] };
+        key <AE03> { [ 3, 3, numbersign, numbersign ] };
+        key <AE04> { [ 4, 4, dollar, dollar ] };
+        key <AE05> { [ 5, 5, percent, percent ] };
+        key <AE06> { [ 6, 6, dead_circumflex, dead_circumflex ] };
+        key <AE07> { [ 7, 7, ampersand, ampersand ] };
+        key <AE08> { [ 8, 8, asterisk, asterisk ] };
+        key <AE09> { [ 9, 9, parenleft, parenleft ] };
+        key <AE10> { [ 0, 0, parenright, parenright ] };
+
+       //fifth row
+       key <LFSH> { [ Shift_L ] };
+       key <SPCE> { [ space ] };
+       key <AB09> { [ period, period, slash, slash ] };
+       key <RTSH> { [ Shift_R ] };
+
+       //modifiers
+       modifier_map Shift { <LFSH>, <RTSH> };
+};
diff --git a/test/data/symbols/keypad b/test/data/symbols/keypad
new file mode 100644 (file)
index 0000000..1bab391
--- /dev/null
@@ -0,0 +1,633 @@
+partial hidden keypad_keys
+xkb_symbols "overlay" {
+    include "keypad(overlay1)"
+};
+
+partial hidden keypad_keys
+xkb_symbols "overlay1" {
+
+    // Begin "Keypad" section
+
+    key  <KP7> {       [  KP_Home      ],      overlay1=<KO7>  };
+    key  <KP8> {       [  KP_Up        ],      overlay1=<KO8>  };
+    key  <KP9> {       [  KP_Prior     ],      overlay1=<KO9>  };
+
+    key  <KP4> {       [  KP_Left      ],      overlay1=<KO4>  };
+    key  <KP5> {       [  KP_Begin     ],      overlay1=<KO5>  };
+    key  <KP6> {       [  KP_Right     ],      overlay1=<KO6>  };
+
+    key  <KP1> {       [  KP_End       ],      overlay1=<KO1>  };
+    key  <KP2> {       [  KP_Down      ],      overlay1=<KO2>  };
+    key  <KP3> {       [  KP_Next      ],      overlay1=<KO3>  };
+
+    key  <KP0> {       [  KP_Insert    ],      overlay1=<KO0>  };
+    key <KPDL> {       [  KP_Delete    ],      overlay1=<KODL> };
+
+    key  <KO7> {       [  KP_7 ]       };
+    key  <KO8> {       [  KP_8 ]       };
+    key  <KO9> {       [  KP_9 ]       };
+
+    key  <KO4> {       [  KP_4 ]       };
+    key  <KO5> {       [  KP_5 ]       };
+    key  <KO6> {       [  KP_6 ]       };
+
+    key  <KO1> {       [  KP_1 ]       };
+    key  <KO2> {       [  KP_2 ]       };
+    key  <KO3> {       [  KP_3 ]       };
+
+    key  <KO0> {       [  KP_0 ]       };
+    key <KODL> {       [  KP_Decimal ] };
+
+    // End "Keypad" section
+};
+
+partial hidden keypad_keys
+xkb_symbols "overlay2" {
+
+    // Begin "Keypad" section
+
+    key  <KP7> {       [  KP_Home      ],      overlay2=<KO7>  };
+    key  <KP8> {       [  KP_Up        ],      overlay2=<KO8>  };
+    key  <KP9> {       [  KP_Prior     ],      overlay2=<KO9>  };
+
+    key  <KP4> {       [  KP_Left      ],      overlay2=<KO4>  };
+    key  <KP5> {       [  KP_Begin     ],      overlay2=<KO5>  };
+    key  <KP6> {       [  KP_Right     ],      overlay2=<KO6>  };
+
+    key  <KP1> {       [  KP_End       ],      overlay2=<KO1>  };
+    key  <KP2> {       [  KP_Down      ],      overlay2=<KO2>  };
+    key  <KP3> {       [  KP_Next      ],      overlay2=<KO3>  };
+
+    key  <KP0> {       [  KP_Insert    ],      overlay2=<KO0>  };
+    key <KPDL> {       [  KP_Delete    ],      overlay2=<KODL> };
+
+    key  <KO7> {       [  KP_7 ]       };
+    key  <KO8> {       [  KP_8 ]       };
+    key  <KO9> {       [  KP_9 ]       };
+
+    key  <KO4> {       [  KP_4 ]       };
+    key  <KO5> {       [  KP_5 ]       };
+    key  <KO6> {       [  KP_6 ]       };
+
+    key  <KO1> {       [  KP_1 ]       };
+    key  <KO2> {       [  KP_2 ]       };
+    key  <KO3> {       [  KP_3 ]       };
+
+    key  <KO0> {       [  KP_0 ]       };
+    key <KODL> {       [  KP_Decimal ] };
+
+    // End "Keypad" section
+};
+
+partial hidden default keypad_keys
+xkb_symbols "x11" {
+// Ungrab cancels server/keyboard/pointer grabs
+    key <KPDV> {
+        type="CTRL+ALT",
+        symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86_Ungrab ]
+    };
+
+// ClsGrb kills whichever client has a grab in effect
+    key <KPMU> {
+        type="CTRL+ALT",
+        symbols[Group1]= [ KP_Multiply,        KP_Multiply, KP_Multiply, KP_Multiply, XF86_ClearGrab ]
+    };
+
+// -VMode switches to the previous video mode
+    key <KPSU> {
+        type="CTRL+ALT",
+        symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86_Prev_VMode ]
+    };
+
+    key  <KP7> {       [  KP_Home,     KP_7    ]       };
+    key  <KP8> {       [  KP_Up,       KP_8    ]       };
+    key  <KP9> {       [  KP_Prior,    KP_9    ]       };
+
+// +VMode switches to the next video mode
+    key <KPAD> {
+        type="CTRL+ALT",
+        symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86_Next_VMode ]
+    };
+
+    key  <KP4> {       [  KP_Left,     KP_4    ]       };
+    key  <KP5> {       [  KP_Begin,    KP_5    ]       };
+    key  <KP6> {       [  KP_Right,    KP_6    ]       };
+
+    key  <KP1> {       [  KP_End,      KP_1    ]       };
+    key  <KP2> {       [  KP_Down,     KP_2    ]       };
+    key  <KP3> {       [  KP_Next,     KP_3    ]       };
+    key <KPEN> {       [       KP_Enter        ]       };
+    key <KPEQ> {       [       KP_Equal        ]       };
+
+    key  <KP0> {       [  KP_Insert,   KP_0    ]       };
+    key <KPDL> {       [  KP_Delete,   KP_Decimal ]    };
+    key <KPPT> {       [  KP_Decimal,  KP_Decimal ]    };
+};
+
+
+// Legacy PC keypad definition
+// Copyright © 2006-2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+keypad_keys
+xkb_symbols "legacy" {
+
+    include "keypad(core)"
+    include "keypad(legacymath)"
+    include "keypad(legacynumber)"
+    include "kpdl(dot)"
+};
+
+
+// Legacy Wang 725-3771-ae and 725-3771-uk keypad definition
+// Copyright © 2006-2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+keypad_keys
+xkb_symbols "legacy_wang" {
+
+    include "keypad(core)"
+    include "keypad(legacymath)"
+    include "keypad(legacynumber_wang)"
+    include "kpdl(dot)"
+};
+
+
+// Complete new keypad definition
+// Copyright © 2006-2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+keypad_keys
+xkb_symbols "oss" {
+
+    include "keypad(core)"
+    include "keypad(ossmath)"
+    include "keypad(ossnumber)"
+    include "kpdl(dotoss)"
+};
+
+
+// Latin9 restriction of new keypad definition
+// Copyright © 2006-2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+keypad_keys
+xkb_symbols "oss_latin9" {
+
+    include "keypad(core)"
+    include "keypad(ossmath_latin9)"
+    include "keypad(legacynumber)"
+    include "kpdl(dotoss_latin9)"
+};
+
+
+// Wang 725-3771-ae and 725-3771-uk keypad variant of oss keypad
+// Copyright © 2006-2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+keypad_keys
+xkb_symbols "oss_wang" {
+
+    include "keypad(core)"
+    include "keypad(ossmath)"
+    include "keypad(ossnumber_wang)"
+    include "kpdl(dotoss)"
+};
+
+
+// Forward-looking keypad definition
+// Won't work with applications that make ASCII assumptions
+// Copyright © 2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+keypad_keys
+xkb_symbols "future" {
+
+    include "keypad(core)"
+    include "keypad(futuremath)"
+    include "keypad(ossnumber)"
+    include "kpdl(commaoss)"
+};
+
+
+// Forward-looking keypad definition
+// Won't work with applications that make ASCII assumptions
+// Copyright © 2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+keypad_keys
+xkb_symbols "future_wang" {
+
+    include "keypad(core)"
+    include "keypad(futuremath)"
+    include "keypad(ossnumber_wang)"
+    include "kpdl(commaoss)"
+};
+
+
+// Keypad keys nobody changes
+// Copyright © 2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+partial keypad_keys
+xkb_symbols "core" {
+
+    modifier_map Mod2 { Num_Lock };
+
+    key <NMLK> { [ Num_Lock, Pointer_EnableKeys ] };
+    key <KPEN> { [ KP_Enter                     ] };
+    key <KPEQ> { [ KP_Equal                     ] };
+};
+
+
+// Legacy keypad math area
+// Copyright © 2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+//
+// ┏━━━━━┱─────┬─────┬─────┐
+// ┃Num  ┃ ₁   │ ₂   │ ₃   │ ₁ <XF86_Ungrab>
+// ┃Lock⇭┃ /   │ *   │ -   │ ₂ <XF86_ClearGrab>
+// ┡━━━━━╃─────┼─────┼─────┤ ₃ <XF86_Prev_VMode>
+//                   │ ₄   │ ₄ <XF86_Next_VMode>
+//                   │     │
+//                   ┤     │ 1 None
+//                   │     │ 2 Ctrl+Alt
+//                   │ +   │
+//                   ╆━━━━━┪
+partial keypad_keys
+xkb_symbols "legacymath" {
+
+    key.type[Group1]="CTRL+ALT" ;
+
+    key <KPDV> { [   KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86_Ungrab ] }; // / <XF86_Ungrab>
+    key <KPMU> { [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86_ClearGrab ] }; // * <XF86_ClearGrab>
+    key <KPSU> { [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86_Prev_VMode ] }; // - <XF86_Prev_VMode>
+
+    key <KPAD> { [      KP_Add, KP_Add, KP_Add, KP_Add, XF86_Next_VMode ] }; // + <XF86_Next_VMode>
+
+};
+
+
+// Keypad math area with non-CS operators
+// Copyright © 2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+//
+// ┏━━━━━┱─────┬─────┬─────┐
+// ┃Num  ┃ ∕ ₁ │ . ₂ │ − ₃ │ ₁ <XF86_Ungrab>
+// ┃Lock⇭┃ / ÷ │ * × │ - − │ ₂ <XF86_ClearGrab>
+// ┡━━━━━╃─────┼─────┼─────┤ ₃ <XF86_Prev_VMode>
+//                   │ + ₄ │ ₄ <XF86_Next_VMode>
+//                   │     │
+//                   ┤     │ 1 None
+//                   │     │ 2 Level3 ⇮
+//                   │ + + │ 3 Shift+Level3 ⇧⇮
+//                   ╆━━━━━┪ 4 Ctrl+Alt
+partial keypad_keys
+xkb_symbols "ossmath" {
+
+    key.type[Group1]="FOUR_LEVEL_X" ;
+
+    key <KPDV> { [   KP_Divide, 0x1002215, 0x10000F7,     XF86_Ungrab ] }; // / ∕ ÷     <XF86_Ungrab>
+    key <KPMU> { [ KP_Multiply, 0x10022C5, 0x10000D7,  XF86_ClearGrab ] }; // * ⋅ ×  <XF86_ClearGrab>
+    key <KPSU> { [ KP_Subtract, 0x1002212, 0x1002212, XF86_Prev_VMode ] }; // - − − <XF86_Prev_VMode>
+
+    key <KPAD> { [      KP_Add, 0x100002B, 0x100002B, XF86_Next_VMode ] }; // + + + <XF86_Next_VMode>
+
+};
+
+
+// Keypad math area with non-CS operators in first levels
+// As demanded by users not interested in legacy pre-unicode junk
+// Copyright © 2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+//
+// ┏━━━━━┱─────┬─────┬─────┐
+// ┃Num  ┃ / ₁ │ * ₂ │ - ₃ │ ₁ <XF86_Ungrab>
+// ┃Lock⇭┃ ∕ ÷ │ . × │ − − │ ₂ <XF86_ClearGrab>
+// ┡━━━━━╃─────┼─────┼─────┤ ₃ <XF86_Prev_VMode>
+//                   │ + ₄ │ ₄ <XF86_Next_VMode>
+//                   │     │
+//                   ┤     │ 1 None
+//                   │     │ 2 Level3 ⇮
+//                   │ + + │ 3 Shift+Level3 ⇧⇮
+//                   ╆━━━━━┪ 4 Ctrl+Alt
+partial keypad_keys
+xkb_symbols "futuremath" {
+
+    key.type[Group1]="FOUR_LEVEL_X" ;
+
+    key <KPDV> { [ 0x1002215,   KP_Divide, 0x10000F7,     XF86_Ungrab ] }; // ∕ / ÷     <XF86_Ungrab>
+    key <KPMU> { [ 0x10022C5, KP_Multiply, 0x10000D7,  XF86_ClearGrab ] }; // ⋅ * ×  <XF86_ClearGrab>
+    key <KPSU> { [ 0x1002212, KP_Subtract, 0x1002212, XF86_Prev_VMode ] }; // − - − <XF86_Prev_VMode>
+
+    key <KPAD> { [ 0x100002B,      KP_Add, 0x100002B, XF86_Next_VMode ] }; // + + + <XF86_Next_VMode>
+};
+
+
+// Keypad math area with non-CS operators, restricted to latin9
+// Copyright © 2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+//
+// ┏━━━━━┱─────┬─────┬─────┐
+// ┃Num  ┃ / ₁ │ · ₂ │ - ₃ │ ₁ <XF86_Ungrab>
+// ┃Lock⇭┃ / ÷ │ * × │ - - │ ₂ <XF86_ClearGrab>
+// ┡━━━━━╃─────┼─────┼─────┤ ₃ <XF86_Prev_VMode>
+//                   │ + ₄ │ ₄ <XF86_Next_VMode>
+//                   │     │
+//                   ┤     │ 1 None
+//                   │     │ 2 Level3 ⇮
+//                   │ + + │ 3 Shift+Level3 ⇧⇮
+//                   ╆━━━━━┪ 4 Ctrl+Alt
+partial keypad_keys
+xkb_symbols "ossmath_latin9" {
+
+    key.type[Group1]="FOUR_LEVEL_X";
+
+    key <KPDV> { [   KP_Divide,          slash, division,     XF86_Ungrab ] }; // / / ÷     <XF86_Ungrab>
+    key <KPMU> { [ KP_Multiply, periodcentered, multiply,  XF86_ClearGrab ] }; // * · ×  <XF86_ClearGrab>
+    key <KPSU> { [ KP_Subtract,          minus,    minus, XF86_Prev_VMode ] }; // - - - <XF86_Prev_VMode>
+
+    key <KPAD> { [      KP_Add,           plus,     plus, XF86_Next_VMode ] }; // + + + <XF86_Next_VMode>
+};
+
+
+// Legacy keypad number area
+// Copyright © 2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+//
+// ┏━━━━━┱                   ⇱ Home
+// ┃Num  ┃                   ⇲ End
+// ┃Lock⇭┃                   ⇞ Page up
+// ┡━━━━━╃─────┼─────┼       ⇟ Page down
+// │ 7   │ 8   │ 9   │       ⇞ Page up
+// │ ⇱   │ ⇧   │ ⇞   │       ⎀ Insert
+// ├─────┼─────┼─────┤       ␥ Delete
+// │ 4   │ 5   │ 6   │       ⇦⇧⇨⇩ Directions
+// │ ⇦   │     │ ⇨   │
+// ├─────┼─────┼─────╆
+// │ 1   │ 2   │ 3   ┃
+// │ ⇲   │ ⇩   │ ⇟   ┃        1 None
+// ├─────┴─────┼─────┨        2 Num Lock ⇭
+// │ 0         │
+// │ ⎀         │
+// └───────────┴
+partial keypad_keys
+xkb_symbols "legacynumber" {
+
+    key.type[Group1]="KEYPAD" ;
+
+    key <KP7>  { [   KP_Home,       KP_7 ] }; //   <home> 7
+    key <KP8>  { [     KP_Up,       KP_8 ] }; //     <up> 8
+    key <KP9>  { [  KP_Prior,       KP_9 ] }; //  <prior> 9
+    key <KP4>  { [   KP_Left,       KP_4 ] }; //   <left> 4
+    key <KP5>  { [  KP_Begin,       KP_5 ] }; //  <begin> 5
+    key <KP6>  { [  KP_Right,       KP_6 ] }; //  <right> 6
+
+    key <KP1>  { [    KP_End,       KP_1 ] }; //    <end> 1
+    key <KP2>  { [   KP_Down,       KP_2 ] }; //   <down> 2
+    key <KP3>  { [   KP_Next,       KP_3 ] }; //   <next> 3
+
+    key <KP0>  { [ KP_Insert,       KP_0 ] }; // <insert> 0
+};
+
+
+// Legacy Wang 725-3771-ae and 725-3771-uk keypad number area
+// Copyright © 2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+// This is actually a three-level keypad, declared as four-level
+// to avoid defining a new type
+//
+// ┏━━━━━┱                   ⇱ Home
+// ┃Num  ┃                   ⇲ End
+// ┃Lock⇭┃                   ⇞ Page up
+// ┡━━━━━╃─────┼─────┼       ⇟ Page down
+// │ 7   │ 8   │ 9   │       ⇞ Page up
+// │ ⇱ < │ ⇧ > │ ⇞ ^ │       ⎀ Insert
+// ├─────┼─────┼─────┤       ␥ Delete
+// │ 4   │ 5   │ 6   │       ⇦⇧⇨⇩ Directions
+// │ ⇦ [ │   ] │ ⇨ $ │
+// ├─────┼─────┼─────╆
+// │ 1   │ 2   │ 3   ┃
+// │ ⇲ & │ ⇩ @ │ ⇟ # ┃       1 None
+// ├─────┴─────┼─────┨       2 Num Lock ⇭
+// │ 0         │             3 Level3 ⇮
+// │ ⎀         │
+// └───────────┴
+partial keypad_keys
+xkb_symbols "legacynumber_wang" {
+
+    key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
+
+    key <KP7>  { [   KP_Home,   KP_7,         less ] }; //   <home> 7 <
+    key <KP8>  { [     KP_Up,   KP_8,      greater ] }; //     <up> 8 >
+    key <KP9>  { [  KP_Prior,   KP_9,  asciicircum ] }; //  <prior> 9 ^
+    key <KP4>  { [   KP_Left,   KP_4,  bracketleft ] }; //   <left> 4 [
+    key <KP5>  { [  KP_Begin,   KP_5, bracketright ] }; //  <begin> 5 ]
+    key <KP6>  { [  KP_Right,   KP_6,       dollar ] }; //  <right> 6 $
+
+    key <KP1>  { [    KP_End,   KP_1,    ampersand ] }; //    <end> 1 &
+    key <KP2>  { [   KP_Down,   KP_2,           at ] }; //   <down> 2 @
+    key <KP3>  { [   KP_Next,   KP_3,   numbersign ] }; //   <next> 3 #
+
+    key <KP0>  { [ KP_Insert,   KP_0,   apostrophe ] }; // <insert> 0 '
+};
+
+
+// Keypad number area with arrow symbols
+// Copyright © 2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+//
+// ┏━━━━━┱                   ⇱ Home
+// ┃Num  ┃                   ⇲ End
+// ┃Lock⇭┃                   ⇞ Page up
+// ┡━━━━━╃─────┼─────┼       ⇟ Page down
+// │ 7 ⇖ │ 8 ⇑ │ 9 ⇗ │       ⇞ Page up
+// │ ⇱ ↖ │ ⇧ ↑ │ ⇞ ↗ │       ⎀ Insert
+// ├─────┼─────┼─────┤       ␥ Delete
+// │ 4 ⇐ │ 5 ⇔ │ 6 ⇗ │       ⇦⇧⇨⇩ Directions
+// │ ⇦ ← │   ↔ │ ⇨ ↗ │       ⍽ narrow no-break space
+// ├─────┼─────┼─────╆
+// │ 1 ⇙ │ 2 ⇓ │ 3 ⇘ ┃
+// │ ⇲ ↙ │ ⇩ ↓ │ ⇟ ↘ ┃       1 None
+// ├─────┴─────┼─────┨       2 Num Lock ⇭
+// │ 0       ⇕ │             3 Level3 ⇮
+// │ ⎀       ↕ │             4 Shift+Level3 ⇧⇮
+// └───────────┴
+partial keypad_keys
+xkb_symbols "ossnumber" {
+
+    key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
+
+    key <KP7>  { [   KP_Home,   KP_7, 0x1002196, 0x10021D6 ] }; //   <home> 7 ↖ ⇖
+    key <KP8>  { [     KP_Up,   KP_8, 0x1002191, 0x10021D1 ] }; //     <up> 8 ↑ ⇑
+    key <KP9>  { [  KP_Prior,   KP_9, 0x1002197, 0x10021D7 ] }; //  <prior> 9 ↗ ⇗
+    key <KP4>  { [   KP_Left,   KP_4, 0x1002190, 0x10021D0 ] }; //   <left> 4 ← ⇐
+    key <KP5>  { [  KP_Begin,   KP_5, 0x1002194, 0x10021D4 ] }; //  <begin> 5 ↔ ⇔
+    key <KP6>  { [  KP_Right,   KP_6, 0x1002192, 0x10021D2 ] }; //  <right> 6 → ⇒
+
+    key <KP1>  { [    KP_End,   KP_1, 0x1002199, 0x10021D9 ] }; //    <end> 1 ↙ ⇙
+    key <KP2>  { [   KP_Down,   KP_2, 0x1002193, 0x10021D3 ] }; //   <down> 2 ↓ ⇓
+    key <KP3>  { [   KP_Next,   KP_3, 0x1002198, 0x10021D8 ] }; //   <next> 3 ↘ ⇘
+
+    key <KP0>  { [ KP_Insert,   KP_0, 0x1002195, 0x10021D5 ] }; // <insert> 0 ↕ ⇕
+};
+
+
+// Wang 725-3771-ae and 725-3771-uk keypad number area with additional arrow symbols
+// Copyright © 2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+//
+// ┏━━━━━┱                   ⇱ Home
+// ┃Num  ┃                   ⇲ End
+// ┃Lock⇭┃                   ⇞ Page up
+// ┡━━━━━╃─────┼─────┼       ⇟ Page down
+// │ 7 ↖ │ 8 ↑ │ 9 ↗ │       ⇞ Page up
+// │ ⇱ < │ ⇧ > │ ⇞ ^ │       ⎀ Insert
+// ├─────┼─────┼─────┤       ␥ Delete
+// │ 4 ← │ 5 ↔ │ 6 → │       ⇦⇧⇨⇩ Directions
+// │ ⇦ [ │   ] │ ⇨ $ │       ⍽ narrow no-break space
+// ├─────┼─────┼─────╆
+// │ 1 ↙ │ 2 ↓ │ 3 ↘ ┃
+// │ ⇲ & │ ⇩ @ │ ⇟ # ┃       1 None
+// ├─────┴─────┼─────┨       2 Num Lock ⇭
+// │ 0       ↕ │             3 Level3 ⇮
+// │ ⎀       ' │             4 Shift+Level3 ⇧⇮
+// └───────────┴
+partial keypad_keys
+xkb_symbols "ossnumber_wang" {
+
+    key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
+
+    key <KP7>  { [   KP_Home,   KP_7,         less, 0x1002196 ] }; //   <home> 7 < ↖
+    key <KP8>  { [     KP_Up,   KP_8,      greater, 0x1002191 ] }; //     <up> 8 > ↑
+    key <KP9>  { [  KP_Prior,   KP_9,  asciicircum, 0x1002197 ] }; //  <prior> 9 ^ ↗
+    key <KP4>  { [   KP_Left,   KP_4,  bracketleft, 0x1002190 ] }; //   <left> 4 [ ←
+    key <KP5>  { [  KP_Begin,   KP_5, bracketright, 0x1002194 ] }; //  <begin> 5 ] ↔
+    key <KP6>  { [  KP_Right,   KP_6,       dollar, 0x1002192 ] }; //  <right> 6 $ →
+
+    key <KP1>  { [    KP_End,   KP_1,    ampersand, 0x1002199 ] }; //    <end> 1 & ↙
+    key <KP2>  { [   KP_Down,   KP_2,           at, 0x1002193 ] }; //   <down> 2 @ ↓
+    key <KP3>  { [   KP_Next,   KP_3,   numbersign, 0x1002198 ] }; //   <next> 3 # ↘
+
+    key <KP0>  { [ KP_Insert,   KP_0,   apostrophe, 0x1002195 ] }; // <insert> 0 ' ↕
+};
+
+// Standard base "pc" layout only contains cursor keys, and then gets
+// augmented with the digits later. If you define your own layout for
+// the numpad you can inherit the cursors, but you'll have to define
+// the digits yourself. This module can be included in the rules to
+// define math operators; these are the variants used in computer
+// languages that are based on ASCII. NoSymbol doesn't mean that
+// nothing is bound to the key but that no assignment is done here.
+// srvr_ctrl(stdkeypad) and keypad(x11) declare the operator keys to
+// be of type CTRL+ALT in order to assign server control events to
+// them, but it uses the second level which is overwritten if we have
+// more than one definition (shift state) for the key. Instead, here
+// the commands are put at the fourth level.
+partial keypad_keys
+xkb_symbols "ops" {
+    key <KPDV> { [ NoSymbol,  slash,     NoSymbol,  XF86_Ungrab     ] };
+    key <KPMU> { [ NoSymbol,  asterisk,  NoSymbol,  XF86_ClearGrab  ] };
+    key <KPSU> { [ NoSymbol,  minus,     NoSymbol,  XF86_Prev_VMode ] };
+    key <KPAD> { [ NoSymbol,  plus,      NoSymbol,  XF86_Next_VMode ] };
+    key <KPEQ> { [ NoSymbol,  equal      ] };
+};
+
+// Hexadecimal Numpad, by Roland Kaufmann <rlndkfmn at gmail dot com>
+// License: BSD (also covers variant with ATM digit order)
+// Third-level gives the letters used in hexadecimal numbers, or
+// columns in small spreadsheets. As a bonus, having 'e' available at
+// the center of the keyboard makes it easy to enter floating point
+// numbers in scientific notation.
+// Equal is added to start formulas (most numpads on PCs don't have
+// their own equal key), comma as a list separator (as most
+// programming languages wants period as a decimal separator) and
+// colon to enter times and ranges. Someone also may want to represent
+// multiplication and division in prose using x and colon.
+// Two first levels are specified as NoSymbol to not override any
+// previous specification. Combine this with another keypad specifier,
+// e.g. "legacy".
+partial keypad_keys
+xkb_symbols "hex" {
+    key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
+
+    //             None       NumLock      AltGr
+    // symbol row
+    key <KPDV> { [ NoSymbol,  NoSymbol,  parenleft  ] };
+    key <KPMU> { [ NoSymbol,  NoSymbol,  parenright ] };
+    key <KPSU> { [ NoSymbol,  NoSymbol,  dollar     ] };
+
+    // upper row
+    key <KP7>  { [ NoSymbol,  NoSymbol,  a          ] };
+    key <KP8>  { [ NoSymbol,  NoSymbol,  b          ] };
+    key <KP9>  { [ NoSymbol,  NoSymbol,  c          ] };
+    // home row
+    key <KP4>  { [ NoSymbol,  NoSymbol,  d          ] };
+    key <KP5>  { [ NoSymbol,  NoSymbol,  e          ] };
+    key <KP6>  { [ NoSymbol,  NoSymbol,  f          ] };
+    key <KPAD> { [ NoSymbol,  NoSymbol,  comma      ] };
+
+    // lower row
+    key <KP1>  { [ NoSymbol,  NoSymbol,  equal      ] };
+    key <KP2>  { [ NoSymbol,  NoSymbol,  x          ] };
+    key <KP3>  { [ NoSymbol,  NoSymbol,  colon      ] };
+
+    // decimal row
+    key <KP0>  { [ NoSymbol,  NoSymbol,  backslash  ] };
+};
+
+// Main numbers follows the traditions from ATMs and phones with
+// numbers increasing downwards to the right. (It is easier to
+// change the keyboard layout than to reprogram your local ATM;
+// also cell-phones are becoming more common while calculators are
+// becoming more rare).
+// First level is left unspecified, so it may be combined with another
+// layout, e.g. "legacy".
+partial keypad_keys
+xkb_symbols "atm" {
+    // upper row
+    key <KP7>  { [ NoSymbol,  KP_1 ] };
+    key <KP8>  { [ NoSymbol,  KP_2 ] };
+    key <KP9>  { [ NoSymbol,  KP_3 ] };
+
+    // lower row
+    key <KP1>  { [ NoSymbol,  KP_7 ] };
+    key <KP2>  { [ NoSymbol,  KP_8 ] };
+    key <KP3>  { [ NoSymbol,  KP_9 ] };
+};
+
+
+partial default modifier_keys
+xkb_symbols "pointerkeys" {
+    key <NMLK> {       [ Num_Lock,     Pointer_EnableKeys      ]       };
+};
+
+// Only numbers, operators and decimal separator,
+// as seen on keypad overlay on Japanese keyboard.
+// ┌─┬─┬─┬─┐
+// │7│8│9│*│
+// ├─┼─┼─┼─┤
+// │4│5│6│-│
+// ├─┼─┼─┼─┤
+// │1│2│3│+│
+// ├─┼─┼─┼─┤
+// │0│ │·│/│
+// └─┴─┴─┴─┘
+partial keypad_keys
+xkb_symbols "numoperdecsep" {
+    key  <KO7> {       [  KP_7 ]       };
+    key  <KO8> {       [  KP_8 ]       };
+    key  <KO9> {       [  KP_9 ]       };
+// ClsGrb kills whichever client has a grab in effect
+    key <KOMU> {
+        type="CTRL+ALT",
+        symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86_ClearGrab ]
+    };
+
+    key  <KO4> {       [  KP_4 ]       };
+    key  <KO5> {       [  KP_5 ]       };
+    key  <KO6> {       [  KP_6 ]       };
+// -VMode switches to the previous video mode
+    key <KOSU> {
+        type="CTRL+ALT",
+        symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86_Prev_VMode ]
+    };
+
+    key  <KO1> {       [  KP_1 ]       };
+    key  <KO2> {       [  KP_2 ]       };
+    key  <KO3> {       [  KP_3 ]       };
+// +VMode switches to the next video mode
+    key <KOAD> {
+        type="CTRL+ALT",
+        symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86_Next_VMode ]
+    };
+
+    key  <KO0> {       [  KP_0 ]       };
+    key <KODL> {       [ KP_Decimal ]  };
+// Ungrab cancels server/keyboard/pointer grabs
+    key <KODV> {
+        type="CTRL+ALT",
+        symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86_Ungrab ]
+    };
+};
diff --git a/test/data/symbols/kpdl b/test/data/symbols/kpdl
new file mode 100644 (file)
index 0000000..968dbd2
--- /dev/null
@@ -0,0 +1,102 @@
+// The <KPDL> key is a mess.
+// It was probably originally meant to be a decimal separator.
+// Except since it was declared by USA people it didn't use the original
+// SI separator "," but a "." (since then the USA managed to f-up the SI
+// by making "." an accepted alternative, but standards still use "," as
+// default)
+// As a result users of SI-abiding countries expect either a "." or a ","
+// or a "decimal_separator" which may or may not be translated in one of the
+// above depending on applications.
+// It's not possible to define a default per-country since user expectations
+// depend on the conflicting choices of their most-used applications,
+// operating system, etc. Therefore it needs to be a configuration setting
+// Copyright © 2007 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+
+
+// Legacy <KPDL> #1
+// This assumes KP_Decimal will be translated in a dot
+partial keypad_keys
+xkb_symbols "dot" {
+
+    key.type[Group1]="KEYPAD" ;
+
+    key <KPDL> { [ KP_Delete, KP_Decimal ] }; // <delete> <separator>
+};
+
+
+// Legacy <KPDL> #2
+// This assumes KP_Separator will be translated in a comma
+partial keypad_keys
+xkb_symbols "comma" {
+
+    key.type[Group1]="KEYPAD" ;
+
+    key <KPDL> { [ KP_Delete, KP_Separator ] }; // <delete> <separator>
+};
+
+
+// Period <KPDL>, usual keyboard serigraphy in most countries
+partial keypad_keys
+xkb_symbols "dotoss" {
+
+    key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
+
+    key <KPDL> { [ KP_Delete, period, comma, 0x100202F ] }; // <delete> . , ⍽ (narrow no-break space)
+};
+
+
+// Period <KPDL>, usual keyboard serigraphy in most countries, latin-9 restriction
+partial keypad_keys
+xkb_symbols "dotoss_latin9" {
+
+    key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
+
+    key <KPDL> { [ KP_Delete, period, comma, nobreakspace ] }; // <delete> . , ⍽ (no-break space)
+};
+
+
+// Comma <KPDL>, what most non anglo-saxon people consider the real separator
+partial keypad_keys
+xkb_symbols "commaoss" {
+
+    key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
+
+    key <KPDL> { [ KP_Delete, comma, period, 0x100202F ] }; // <delete> , . ⍽ (narrow no-break space)
+};
+
+
+// Momayyez <KPDL>: Bahrain, Iran, Iraq, Kuwait, Oman, Qatar, Saudi Arabia, Syria, UAE
+partial keypad_keys
+xkb_symbols "momayyezoss" {
+
+    key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
+
+    key <KPDL> { [ KP_Delete, 0x100066B, comma, 0x100202F ] }; // <delete> ? , ⍽ (narrow no-break space)
+};
+
+
+// Abstracted <KPDL>, pray everything will work out (it usually does not)
+partial keypad_keys
+xkb_symbols "kposs" {
+
+    key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
+
+    key <KPDL> { [ KP_Delete, KP_Decimal, KP_Separator, 0x100202F ] }; // <delete> ? ? ⍽ (narrow no-break space)
+};
+
+// Spreadsheets may be configured to use the dot as decimal
+// punctuation, comma as a thousands separator and then semi-colon as
+// the list separator. Of these, dot and semi-colon is most important
+// when entering data by the keyboard; the comma can then be inferred
+// and added to the presentation afterwards. Using semi-colon as a
+// general separator may in fact be preferred to avoid ambiguities
+// in data files. Most times a decimal separator is hard-coded, it
+// seems to be period, probably since this is the syntax used in
+// (most) programming languages.
+partial keypad_keys
+xkb_symbols "semi" {
+
+    key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;
+
+    key <KPDL> { [ NoSymbol, NoSymbol, semicolon ] };
+};
diff --git a/test/data/symbols/latin b/test/data/symbols/latin
new file mode 100644 (file)
index 0000000..77b99d4
--- /dev/null
@@ -0,0 +1,256 @@
+// Common Latin alphabet layout
+
+default partial
+xkb_symbols "basic" {
+
+    key <AE01> { [         1,     exclam,  onesuperior,   exclamdown ] };
+    key <AE02> { [         2,         at,  twosuperior,    oneeighth ] };
+    key <AE03> { [         3, numbersign, threesuperior,    sterling ] };
+    key <AE04> { [         4,     dollar,   onequarter,       dollar ] };
+    key <AE05> { [         5,    percent,      onehalf, threeeighths ] };
+    key <AE06> { [         6, asciicircum, threequarters, fiveeighths ] };
+    key <AE07> { [         7,  ampersand,    braceleft, seveneighths ] };
+    key <AE08> { [         8,   asterisk,  bracketleft,    trademark ] };
+    key <AE09> { [         9,  parenleft, bracketright,    plusminus ] };
+    key <AE10> { [         0, parenright,   braceright,       degree ] };
+    key <AE11> { [     minus, underscore,    backslash, questiondown ] };
+    key <AE12> { [     equal,       plus, dead_cedilla,  dead_ogonek ] };
+
+    key <AD01> { [         q,          Q,           at,  Greek_OMEGA ] };
+    key <AD02> { [         w,          W,      lstroke,      Lstroke ] };
+    key <AD03> { [         e,          E,            e,            E ] };
+    key <AD04> { [         r,          R,    paragraph,   registered ] };
+    key <AD05> { [         t,          T,       tslash,       Tslash ] };
+    key <AD06> { [         y,          Y,    leftarrow,          yen ] };
+    key <AD07> { [         u,          U,    downarrow,      uparrow ] };
+    key <AD08> { [         i,          I,   rightarrow,     idotless ] };
+    key <AD09> { [         o,          O,       oslash,     Ooblique ] };
+    key <AD10> { [         p,          P,        thorn,        THORN ] };
+    key <AD11> { [bracketleft,  braceleft, dead_diaeresis, dead_abovering ] };
+    key <AD12> { [bracketright, braceright, dead_tilde,  dead_macron ] };
+
+    key <AC01> { [         a,          A,           ae,           AE ] };
+    key <AC02> { [         s,          S,       ssharp,      section ] };
+    key <AC03> { [         d,          D,          eth,          ETH ] };
+    key <AC04> { [         f,          F,      dstroke,  ordfeminine ] };
+    key <AC05> { [         g,          G,          eng,          ENG ] };
+    key <AC06> { [         h,          H,      hstroke,      Hstroke ] };
+    key <AC07> { [         j,          J,            j,            J ] };
+    key <AC08> { [         k,          K,          kra,    ampersand ] };
+    key <AC09> { [         l,          L,      lstroke,      Lstroke ] };
+    key <AC10> { [ semicolon,    colon, dead_acute, dead_doubleacute ] };
+    key <AC11> { [apostrophe, quotedbl, dead_circumflex,  dead_caron ] };
+    key <TLDE> { [     grave, asciitilde,      notsign,      notsign ] };
+
+    key <BKSL> { [ backslash,        bar,   dead_grave,   dead_breve ] };
+    key <AB01> { [         z,          Z, guillemotleft,        less ] };
+    key <AB02> { [         x,          X, guillemotright,    greater ] };
+    key <AB03> { [         c,          C,         cent,    copyright ] };
+    key <AB04> { [         v,          V, leftdoublequotemark, leftsinglequotemark ]   };
+    key <AB05> { [         b,          B, rightdoublequotemark, rightsinglequotemark ] };
+    key <AB06> { [         n,          N,            n,            N ] };
+    key <AB07> { [         m,          M,           mu,    masculine ] };
+    key <AB08> { [     comma,       less, horizconnector,   multiply ] };
+    key <AB09> { [    period,    greater, periodcentered,   division ] };
+    key <AB10> { [     slash,   question, dead_belowdot, dead_abovedot ] };
+
+};
+
+// Northern Europe ( Danish, Finnish, Norwegian, Swedish) common layout
+
+partial
+xkb_symbols "type2" {
+
+    include "latin"
+
+    key <AE01> { [         1,     exclam,   exclamdown,  onesuperior ] };
+    key <AE02> { [         2,   quotedbl,           at,  twosuperior ] };
+    key <AE03> { [         3, numbersign,     sterling, threesuperior] };
+    key <AE04> { [         4,   currency,       dollar,   onequarter ] };
+    key <AE05> { [         5,    percent,      onehalf,         cent ] };
+    key <AE06> { [         6,  ampersand,          yen,  fiveeighths ] };
+    key <AE07> { [         7,      slash,    braceleft,     division ] };
+    key <AE08> { [         8,  parenleft,  bracketleft, guillemotleft] };
+    key <AE09> { [         9, parenright, bracketright, guillemotright] };
+    key <AE10> { [         0,      equal,   braceright,       degree ] };
+
+    key <AD03> { [         e,          E,     EuroSign,         cent ] };
+    key <AD04> { [         r,          R,   registered,   registered ] };
+    key <AD05> { [         t,          T,        thorn,        THORN ] };
+    key <AD09> { [         o,          O,           oe,           OE ] };
+    key <AD11> { [     aring,  Aring, dead_diaeresis, dead_abovering ] };
+    key <AD12> { [dead_diaeresis, dead_circumflex, dead_tilde, dead_caron ] };
+
+    key <AC01> { [         a,          A,  ordfeminine,    masculine ] };
+
+    key <AB03> { [         c,          C,    copyright,    copyright ] };
+    key <AB08> { [     comma,  semicolon, dead_cedilla,  dead_ogonek ] };
+    key <AB09> { [    period,   colon, periodcentered, dead_abovedot ] };
+    key <AB10> { [     minus, underscore, dead_belowdot, dead_abovedot ] };
+};
+
+// Slavic Latin ( Albanian, Croatian, Polish, Slovene, Yugoslav)
+// common layout
+
+partial
+xkb_symbols "type3" {
+
+    include "latin"
+
+    key <AD01> { [         q,          Q,    backslash,  Greek_OMEGA ] };
+    key <AD02> { [         w,          W,          bar,      Lstroke ] };
+    key <AD06> { [         z,          Z,    leftarrow,          yen ] };
+
+    key <AC04> { [         f,          F,  bracketleft,  ordfeminine ] };
+    key <AC05> { [         g,          G, bracketright,          ENG ] };
+    key <AC08> { [         k,          K,      lstroke,    ampersand ] };
+
+    key <AB01> { [         y,          Y, guillemotleft,         less ]        };
+    key <AB04> { [         v,          V,           at,        grave ] };
+    key <AB05> { [         b,          B,    braceleft,   apostrophe ] };
+    key <AB06> { [         n,          N,   braceright,   braceright ] };
+    key <AB07> { [         m,          M,      section,    masculine ] };
+    key <AB08> { [     comma,  semicolon,         less,     multiply ] };
+    key <AB09> { [    period,      colon,      greater,     division ] };
+};
+
+// Another one Latin common layout
+// (German, Estonian, Spanish, Icelandic, Italian, Latin American, Portuguese)
+partial
+xkb_symbols "type4" {
+
+    include "latin"
+
+    key <AE02> { [         2,   quotedbl,           at,    oneeighth ] };
+    key <AE06> { [         6,  ampersand,      notsign,  fiveeighths ] };
+    key <AE07> { [         7,      slash,    braceleft, seveneighths ] };
+    key <AE08> { [         8,  parenleft,  bracketleft,    trademark ] };
+    key <AE09> { [         9, parenright, bracketright,    plusminus ] };
+    key <AE10> { [         0,      equal,   braceright,       degree ] };
+
+    key <AD03> { [         e,          E,     EuroSign,         cent ] };
+
+    key <AB08> { [   comma,  semicolon, horizconnector,     multiply ] };
+    key <AB09> { [  period,      colon, periodcentered,     division ] };
+    key <AB10> { [   minus, underscore, dead_belowdot, dead_abovedot ] };
+};
+
+partial
+xkb_symbols "nodeadkeys" {
+
+    key <AE12> { [     equal,       plus,     cedilla,        ogonek ] };
+    key <AD11> { [bracketleft,  braceleft,  diaeresis,        degree ] };
+    key <AD12> { [bracketright, braceright, asciitilde,       macron ] };
+    key <AC10> { [ semicolon,      colon,       acute,   doubleacute ] };
+    key <AC11> { [apostrophe,   quotedbl, asciicircum,         caron ] };
+    key <BKSL> { [ backslash,        bar,       grave,         breve ] };
+    key <AB10> { [     slash,   question, dead_belowdot,    abovedot ] };
+};
+
+partial
+xkb_symbols "type2_nodeadkeys" {
+    include "latin(nodeadkeys)"
+
+    key <AD11> { [     aring,      Aring,   diaeresis,        degree ] };
+    key <AD12> { [ diaeresis, asciicircum, asciitilde,         caron ] };
+    key <AB08> { [     comma,  semicolon,     cedilla,        ogonek ] };
+    key <AB09> { [    period,   colon, periodcentered,      abovedot ] };
+    key <AB10> { [   minus, underscore, dead_belowdot,      abovedot ] };
+};
+
+partial
+xkb_symbols "type3_nodeadkeys" {
+    include "latin(nodeadkeys)"
+};
+
+partial
+xkb_symbols "type4_nodeadkeys" {
+    include "latin(nodeadkeys)"
+
+    key <AB10> { [   minus, underscore, dead_belowdot,      abovedot ] };
+};
+
+// Added 2008.03.05 by Marcin Woliński
+// See http://marcinwolinski.pl/keyboard/ for a description.
+// Used by pl(intl)
+//
+// ┌────┐
+// │ 2 4│   2 = Shift,  4 = Level3 + Shift
+// │ 1 3│   1 = Normal, 3 = Level3
+// └────┘
+// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
+// │ ~ ~ │ ! ' │ @ " │ # ˝ │ $ ¸ │ % ˇ │ ^ ^ │ & ˘ │ * ˙ │ ( ̣ │ ) ° │ _ ¯ │ + ˛ ┃ ⌫ Back  ┃
+// │ ` ` │ 1 ¡ │ 2 © │ 3 • │ 4 § │ 5 € │ 6 ¢ │ 7 − │ 8 × │ 9 ÷ │ 0 ° │ - – │ = — ┃  space  ┃
+// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫
+// ┃       ┃ Q   │ W   │ E   │ R   │ T   │ Y   │ U   │ I   │ O   │ P   │ { « │ } » ┃ Enter ┃
+// ┃Tab ↹  ┃ q   │ w   │ e   │ r   │ t   │ y   │ u   │ i   │ o   │ p   │ [ ‹ │ ] › ┃   ⏎   ┃
+// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓      ┃
+// ┃        ┃ A   │ S   │ D   │ F   │ G   │ H   │ J   │ K   │ L   │ : “ │ " ” │ | ¶ ┃      ┃
+// ┃Caps ⇬  ┃ a   │ s   │ d   │ f   │ g   │ h   │ j   │ k   │ l   │ ; ‘ │ ' ’ │ \   ┃      ┃
+// ┣━━━━━━━━┹────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┲┷━━━━━┻━━━━━━┫
+// ┃             │ Z   │ X   │ C   │ V   │ B   │ N   │ M   │ < „ │ > · │ ? ¿ ┃             ┃
+// ┃Shift ⇧      │ z   │ x   │ c   │ v   │ b   │ n   │ m   │ , ‚ │ . … │ / ⁄ ┃Shift ⇧      ┃
+// ┣━━━━━━━┳━━━━━┷━┳━━━┷━━━┱─┴─────┴─────┴─────┴─────┴─────┴───┲━┷━━━━━╈━━━━━┻━┳━━━━━━━┳━━━┛
+// ┃       ┃       ┃       ┃ ␣                               ⍽ ┃       ┃       ┃       ┃
+// ┃Ctrl   ┃Meta   ┃Alt    ┃ ␣           Space               ⍽ ┃AltGr ⇮┃Menu   ┃Ctrl   ┃
+// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛
+partial
+xkb_symbols "intl" {
+
+    key <TLDE> { [     grave,  asciitilde, dead_grave,       dead_tilde ]      };
+    key <AE01> { [         1,      exclam, exclamdown,       dead_acute ]      };
+    key <AE02> { [         2,          at,  copyright,   dead_diaeresis ]      };
+    key <AE03> { [         3,  numbersign,      U2022, dead_doubleacute ]      }; // U+2022 is bullet (the name bullet doesn't work)
+    key <AE04> { [         4,      dollar,    section,     dead_cedilla ]      };
+    key <AE05> { [         5,     percent,   EuroSign,       dead_caron ]      };
+    key <AE06> { [         6, asciicircum,       cent,  dead_circumflex ]      };
+    key <AE07> { [         7,   ampersand,      U2212,       dead_breve ]      }; // U+2212 is MINUS SIGN
+    key <AE08> { [         8,    asterisk,   multiply,    dead_abovedot ]      };
+    key <AE09> { [         9,   parenleft,   division,    dead_belowdot ]      };
+    key <AE10> { [         0,  parenright,     degree,   dead_abovering ]      };
+    key <AE11> { [     minus,  underscore,     endash,      dead_macron ]      };
+    key <AE12> { [     equal,        plus,     emdash,      dead_ogonek ]      };
+
+    key <AD01> { [         q,          Q ]     };
+    key <AD02> { [         w,          W ]     };
+    key <AD03> { [         e,          E ]     };
+    key <AD04> { [         r,          R ]     };
+    key <AD05> { [         t,          T ]     };
+    key <AD06> { [         y,          Y ]     };
+    key <AD07> { [         u,          U ]     };
+    key <AD08> { [         i,          I ]     };
+    key <AD09> { [         o,          O ]     };
+    key <AD10> { [         p,          P ]     };
+    key <AD11> { [bracketleft,   braceleft,  U2039, guillemotleft ]    };
+    key <AD12> { [bracketright, braceright, U203A, guillemotright ]    };
+
+    key <AC01> { [         a,          A ]     };
+    key <AC02> { [         s,          S ]     };
+    key <AC03> { [         d,          D ]     };
+    key <AC04> { [         f,          F ]     };
+    key <AC05> { [         g,          G ]     };
+    key <AC06> { [         h,          H ]     };
+    key <AC07> { [         j,          J ]     };
+    key <AC08> { [         k,          K ]     };
+    key <AC09> { [         l,          L ]     };
+    key <AC10> { [ semicolon,      colon,  leftsinglequotemark,  leftdoublequotemark  ]  };
+    key <AC11> { [apostrophe,   quotedbl, rightsinglequotemark, rightdoublequotemark  ]  };
+
+    key <BKSL> { [ backslash,        bar,      NoSymbol, paragraph ] };
+    key <AB01> { [         z,          Z ]     };
+    key <AB02> { [         x,          X ]     };
+    key <AB03> { [         c,          C ]     };
+    key <AB04> { [         v,          V ]     };
+    key <AB05> { [         b,          B ]     };
+    key <AB06> { [         n,          N ]     };
+    key <AB07> { [         m,          M ]     };
+    key <AB08> { [     comma,       less, singlelowquotemark, doublelowquotemark ]     };
+    key <AB09> { [    period,    greater, ellipsis, periodcentered ]   };
+    key <AB10> { [     slash,   question, U2044,  questiondown ]     };  // U+2044 is FRACTION SLASH
+
+};
diff --git a/test/data/symbols/level3 b/test/data/symbols/level3
new file mode 100644 (file)
index 0000000..9d49555
--- /dev/null
@@ -0,0 +1,196 @@
+// these variants assign various XKB keycodes to ISO_Level3_Shift so that
+// the third shift level can be reached
+//
+
+// the default behavior is for the right Alt key (AltGr) to generate the
+// third engraved symbol
+default partial modifier_keys
+xkb_symbols "ralt_switch" {
+  key <RALT> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift ]
+    };
+  modifier_map Mod5   { ISO_Level3_Shift };
+};
+
+// Right Alt key never chooses 3rd level.
+// This option attempts to undo the effect of a layout's
+// including ralt_switch.  You may also want to select another
+// level3 option that maps the level3 shift to some other key.
+partial modifier_keys
+xkb_symbols "ralt_alt" {
+  key <RALT> { 
+    type[Group1]="TWO_LEVEL",
+    type[Group2]="TWO_LEVEL",
+    type[Group3]="TWO_LEVEL",
+    type[Group4]="TWO_LEVEL",
+    symbols[Group1] = [ Alt_R, Meta_R ], 
+    symbols[Group2] = [ Alt_R, Meta_R ], 
+    symbols[Group3] = [ Alt_R, Meta_R ], 
+    symbols[Group4] = [ Alt_R, Meta_R ]
+    };
+  modifier_map Mod1    { <RALT> };
+};
+
+partial modifier_keys
+xkb_symbols "ralt_switch_multikey" {
+  key <RALT> {
+    type[Group1]="TWO_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift, Multi_key ]
+    };
+};
+
+// special case or right Alt switch - for use with grp:alts_toggle
+//
+partial hidden modifier_keys
+xkb_symbols "ralt_switch_for_alts_toggle" {
+ virtual_modifiers LAlt, AlGr;
+  key <LALT> {
+    type[Group1]="PC_RALT_LEVEL2",
+    symbols[Group1] = [ Alt_L,  ISO_Prev_Group,  ISO_Prev_Group ],
+    virtualMods= LAlt
+  };
+  key <RALT> {
+    type[Group1]="PC_ALT_LEVEL2",
+    symbols[Group1] = [ ISO_Level3_Shift, ISO_Next_Group ],
+    virtualMods= AltGr
+  };
+  modifier_map Mod5   { ISO_Level3_Shift };
+};
+
+// using the level(alt_switch) map, either Alt key temporarily chooses
+// the third shift level.  (Mostly be used to imitate Mac OS functionality.)
+partial modifier_keys
+xkb_symbols "alt_switch" {
+  include "level3(lalt_switch)"
+  include "level3(ralt_switch)"
+};
+
+partial modifier_keys
+xkb_symbols "lalt_switch" {
+  key <LALT> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift ]
+    };
+  modifier_map Mod5   { <LALT> };
+};
+
+// using the level(switch) map, the right Control key temporarily
+// chooses the third shift level (until it is released).
+partial modifier_keys
+xkb_symbols "switch" {
+  key <RCTL> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift ]
+    };
+  modifier_map Mod5   { ISO_Level3_Shift };
+};
+
+// using the level(menu_switch) map, the Menu key temporarily
+// chooses the third shift level (until it is released).
+partial modifier_keys
+xkb_symbols "menu_switch" {
+  key <MENU> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift ]
+    };
+  modifier_map Mod5   { ISO_Level3_Shift };
+};
+
+// using the level3(win_switch) map, the either Windows' logo key
+// temporarily chooses the third shift level.
+partial modifier_keys
+xkb_symbols "win_switch" {
+  include "level3(lwin_switch)"
+  include "level3(rwin_switch)"
+};
+
+// using the level3(lwin_switch) map, the left Windows' logo key
+// temporarily chooses the third shift level.
+partial modifier_keys
+xkb_symbols "lwin_switch" {
+  key <LWIN> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift ]
+    };
+  modifier_map Mod5   { ISO_Level3_Shift };
+};
+
+// using the level(rwin_switch) map, the right Windows' logo key
+// temporarily chooses the third shift level.  If you use this map,
+// you should define your keyboard as pc101 or pc102 instead of pc104
+// or pc105.
+partial modifier_keys
+xkb_symbols "rwin_switch" {
+  key <RWIN> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift ]
+    };
+  modifier_map Mod5   { ISO_Level3_Shift };
+};
+
+// using the level3(enter_switch) map, the Enter key on the keypad
+// temporarily chooses the third shift level.  This is especially
+// useful for Mac laptops which miss the right Alt key.
+partial modifier_keys
+xkb_symbols "enter_switch" {
+  key <KPEN> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift ]
+    };
+  modifier_map Mod5   { ISO_Level3_Shift };
+};
+
+partial modifier_keys
+xkb_symbols "caps_switch" {
+  key <CAPS> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift ]
+  };
+  modifier_map Mod5   { ISO_Level3_Shift };
+};
+
+partial modifier_keys
+xkb_symbols "bksl_switch" {
+  key <BKSL> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift ]
+  };
+  modifier_map Mod5   { ISO_Level3_Shift };
+};
+
+partial modifier_keys
+xkb_symbols "lsgt_switch" {
+  key <LSGT> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift ]
+  };
+  modifier_map Mod5   { ISO_Level3_Shift };
+};
+
+partial modifier_keys
+xkb_symbols "caps_switch_latch" {
+  key <CAPS> {
+    type[Group1]="THREE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift, ISO_Level3_Shift, ISO_Level3_Latch ]
+  };
+  modifier_map Mod5   { ISO_Level3_Shift };
+};
+
+partial modifier_keys
+xkb_symbols "bksl_switch_latch" {
+  key <BKSL> {
+    type[Group1]="THREE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift, ISO_Level3_Shift, ISO_Level3_Latch ]
+  };
+  modifier_map Mod5   { ISO_Level3_Shift };
+};
+
+partial modifier_keys
+xkb_symbols "lsgt_switch_latch" {
+  key <LSGT> {
+    type[Group1]="THREE_LEVEL",
+    symbols[Group1] = [ ISO_Level3_Shift, ISO_Level3_Shift, ISO_Level3_Latch ]
+  };
+  modifier_map Mod5   { ISO_Level3_Shift };
+};
diff --git a/test/data/symbols/level5 b/test/data/symbols/level5
new file mode 100644 (file)
index 0000000..ce219b5
--- /dev/null
@@ -0,0 +1,147 @@
+// these variants assign various XKB keycodes to ISO_Level5_Shift so that
+// the third shift level can be reached
+//
+
+// using the level(switch) map, the right Control key temporarily
+// chooses the fifth shift level (until it is released).
+partial modifier_keys
+xkb_symbols "rctrl_switch" {
+  key <RCTL> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level5_Shift ]
+    };
+  modifier_map Mod3   { ISO_Level5_Shift };
+};
+
+partial modifier_keys
+xkb_symbols "lsgt_switch" {
+  key <LSGT> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level5_Shift ]
+    };
+  modifier_map Mod3   { ISO_Level5_Shift };
+};
+
+partial modifier_keys
+xkb_symbols "ralt_switch" {
+  key <RALT> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1] = [ ISO_Level5_Shift ]
+    };
+  modifier_map Mod3   { ISO_Level5_Shift };
+};
+
+
+// The following modifier keys are used to switch to the third shift and to set a
+// corresponding lock, implemented as NumLock.
+
+partial modifier_keys
+xkb_symbols "lock" {
+  // This adds the definitions needed to create a level5-lock behaviour, using
+  // the real modifier NumLock as a lock indicator.
+  // See also: types/level5 : EIGHT_LEVEL_LEVEL_FIVE_LOCK
+  // See also: compat/level5(level5_lock)
+  key.type[Group1] = "ONE_LEVEL";
+
+  replace key <MDSW> {
+    vmods = LevelFive,
+    symbols[Group1] = [ ISO_Level5_Shift ],
+    actions[Group1] = [ SetMods(modifiers=LevelFive) ]
+  };
+  modifier_map Mod3 { <MDSW> };
+
+  replace key <HYPR> {
+    vmods = NumLock,
+    symbols[Group1] = [ NoSymbol ],
+    actions[Group1] = [ SetMods(modifiers=NumLock) ]
+  };
+  modifier_map Mod2 { <HYPR> };
+};
+
+partial modifier_keys
+xkb_symbols "lsgt_switch_lock" {
+
+  include "level5(lock)"
+
+  key <LSGT> {
+    type[Group1] = "EIGHT_LEVEL",
+    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
+  };
+};
+
+partial modifier_keys
+xkb_symbols "lwin_switch_lock" {
+
+  include "level5(lock)"
+
+  key <LWIN> {
+    type[Group1] = "EIGHT_LEVEL",
+    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
+  };
+};
+
+partial modifier_keys
+xkb_symbols "ralt_switch_lock" {
+
+  include "level5(lock)"
+
+  key <RALT> {
+    type[Group1] = "EIGHT_LEVEL",
+    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
+  };
+};
+
+partial modifier_keys
+xkb_symbols "rwin_switch_lock" {
+
+  include "level5(lock)"
+
+  key <RWIN> {
+    type[Group1] = "EIGHT_LEVEL",
+    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
+  };
+};
+
+partial modifier_keys
+xkb_symbols "lsgt_switch_lock_cancel" {
+
+  include "level5(lock)"
+
+  key <LSGT> {
+    type[Group1] = "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
+    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
+  };
+};
+
+partial modifier_keys
+xkb_symbols "lwin_switch_lock_cancel" {
+
+  include "level5(lock)"
+
+  key <LWIN> {
+    type[Group1] = "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
+    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
+  };
+};
+
+partial modifier_keys
+xkb_symbols "ralt_switch_lock_cancel" {
+
+  include "level5(lock)"
+
+  key <RALT> {
+    type[Group1] = "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
+    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
+  };
+};
+
+partial modifier_keys
+xkb_symbols "rwin_switch_lock_cancel" {
+
+  include "level5(lock)"
+
+  key <RWIN> {
+    type[Group1] = "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
+    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
+  };
+};
diff --git a/test/data/symbols/nbsp b/test/data/symbols/nbsp
new file mode 100644 (file)
index 0000000..77b40df
--- /dev/null
@@ -0,0 +1,204 @@
+// Let Space key provide No-Break Space (NBSP), Narrow No-Break Space (NNBSP),
+// Zero-Width Non-Joiner (ZWNJ), and Zero-Width Joiner (ZWJ) for the desired
+// levels.
+
+
+////////////////////////////////////////
+// Only Space
+
+partial
+xkb_symbols "none" {
+  key <SPCE> {
+    type[Group1]="ONE_LEVEL",
+    symbols[Group1]= [ space ]
+  };
+};
+
+
+////////////////////////////////////////
+// No-Break Space
+
+partial
+xkb_symbols "level2" {
+  key <SPCE> {
+    type[Group1]="TWO_LEVEL",
+    symbols[Group1]= [ space, nobreakspace ]
+  };
+};
+
+
+// level3 & level3ns provide no-breaking spaces starting from level3
+// This is good for typographers but experience shows many users accidently
+// type no-breaking spaces on the CLI (resulting in errors)
+// Used by fr(latin9) and lt(std)
+partial
+xkb_symbols "level3" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, space, nobreakspace ]
+  };
+};
+
+// level3s kills fourth level
+// Used by ca(multix)
+partial
+xkb_symbols "level3s" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, space, nobreakspace, NoSymbol ]
+  };
+};
+
+// for this reason pushing no-breaking spaces to level4 is the safe default nowadays
+partial
+xkb_symbols "level4" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, space, space, nobreakspace ]
+  };
+};
+
+
+////////////////////////////////////////
+// Narrow No-Break Space
+
+// level3n provides narrow no-breaking space in addition to the normal one
+partial
+xkb_symbols "level3n" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, space, nobreakspace, 0x100202F ]
+  };
+};
+
+// level4n provides narrow no-breaking space in addition to the normal one
+partial
+xkb_symbols "level4n" {
+ key <SPCE> {
+   type[Group1]="EIGHT_LEVEL",
+   symbols[Group1]= [ space, space, space, nobreakspace, space, 0x100202F, NoSymbol, NoSymbol ]
+ };
+};
+
+// level4nl provides narrow no-breaking space in addition to the normal one
+// without forcing the use of level5 for mostly four-level layouts
+// Used by fr(oss), be(oss)…
+partial
+xkb_symbols "level4nl" {
+ key <SPCE> {
+   type[Group1]="LOCAL_EIGHT_LEVEL",
+   symbols[Group1]= [ space, space, space, nobreakspace, space, 0x100202F, NoSymbol, NoSymbol ]
+ };
+};
+
+
+////////////////////////////////////////
+// Zero-Width Non-Joiner & Zero-Width Joiner
+// Author: Behnam Esfahbod <behnam@esfahbod.info>
+
+// ZWNJ and ZWJ are widely used in Persian, Kurdinsh, Pashto, Uzbek and other
+// languages that use PersoArabic script.
+
+
+// ZWNJ on level 2
+partial
+xkb_symbols "zwnj2" {
+  key <SPCE> {
+    type[Group1]="TWO_LEVEL",
+    symbols[Group1]= [ space, 0x100200c ]
+  };
+};
+
+
+// ZWNJ on level 2
+// ZWJ on level 3
+partial
+xkb_symbols "zwnj2zwj3" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, 0x100200c, 0x100200d ]
+  };
+};
+
+
+// ZWNJ on level 2
+// ZWJ on level 3
+// NBSP on level 4
+partial
+xkb_symbols "zwnj2zwj3nb4" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, 0x100200c, 0x100200d, nobreakspace ]
+  };
+};
+
+// ZWNJ on level 2
+// NBSP on level 3
+// Used by ir(ku_ara), af(basic), af(ps), af(uz), af(olpc-fa), af(olpc-ps), af(olpc-uz)
+partial
+xkb_symbols "zwnj2nb3" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, 0x100200c, nobreakspace ]
+  };
+};
+
+
+// ZWNJ on level 2
+// NBSP on level 3
+partial
+xkb_symbols "zwnj2nb3s" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, 0x100200c, nobreakspace, NoSymbol ]
+  };
+};
+
+
+// ZWNJ on level 2
+// NBSP on level 3
+// ZWJ on level 4
+partial
+xkb_symbols "zwnj2nb3zwj4" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, 0x100200c, nobreakspace, 0x100200d ]
+  };
+};
+
+
+// ZWNJ on level 2
+// NBSP on level 3
+// NNBSP on level 4
+// Used by ir(pes)
+partial
+xkb_symbols "zwnj2nb3nnb4" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, 0x100200c, nobreakspace, 0x100202F ]
+  };
+};
+
+
+// ZWNJ on level 3
+// ZWJ on level 4
+// Used by in(deva), in(olpc)
+partial
+xkb_symbols "zwnj3zwj4" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, space, 0x100200c, 0x100200d ]
+  };
+};
+
+
+// NBSP on level 2
+// ZWNJ on level 3
+// Used by lk(sin_phonetic)
+partial
+xkb_symbols "nb2zwnj3s" {
+  key <SPCE> {
+    type[Group1]="FOUR_LEVEL",
+    symbols[Group1]= [ space, nobreakspace, 0x100200c, NoSymbol ]
+  };
+};
diff --git a/test/data/symbols/pc b/test/data/symbols/pc
new file mode 100644 (file)
index 0000000..7e13ecb
--- /dev/null
@@ -0,0 +1,90 @@
+default partial alphanumeric_keys modifier_keys 
+xkb_symbols "pc105" {
+
+    key <ESC>  {       [ Escape                        ]       };
+
+    // the extra key on most European keyboards
+    key <LSGT> {       [      less,    greater,          bar,    brokenbar ]   };
+
+    // these keys are common to all layouts
+    key <BKSL> {       [ backslash,    bar             ]       };
+    key <SPCE> {       [        space                  ]       };
+
+    include "srvr_ctrl(fkey2vt)"
+    include "pc(editing)"
+    include "keypad(x11)"
+
+    key <BKSP> {       [ BackSpace, BackSpace  ]       };
+
+    key  <TAB> {       [ Tab,  ISO_Left_Tab    ]       };
+    key <RTRN> {       [ Return        ]       };
+
+    key <CAPS> {       [ Caps_Lock     ]       };
+
+    key <NMLK> {       [ Num_Lock      ]       };
+
+    key <LFSH> {       [ Shift_L       ]       };
+    key <LCTL> {       [ Control_L     ]       };
+
+    key <LWIN> {       [ Super_L                       ]       };
+
+    key <RTSH> {       [ Shift_R       ]       };
+    key <RCTL> {       [ Control_R     ]       };
+
+    key <RWIN> {       [ Super_R                       ]       };
+
+    key <MENU> {       [ Menu                  ]       };
+
+    // begin modifier mappings
+    modifier_map Shift  { Shift_L, Shift_R };
+    modifier_map Lock   { Caps_Lock, ISO_Lock };
+    modifier_map Control{ Control_L, Control_R };
+    modifier_map Mod2   { Num_Lock };
+    modifier_map Mod4   { Super_L, Super_R };
+
+    //  Fake keys for virtual<->real modifiers mapping 
+    key <LVL3> {       [ ISO_Level3_Shift      ]       };
+    key <MDSW> {       [ Mode_switch           ]       };
+    modifier_map Mod5   { <LVL3>, <MDSW> };
+
+    key <ALT>  {       [ NoSymbol, Alt_L       ]       };
+    include "altwin(meta_alt)"
+
+    key <META> {       [ NoSymbol, Meta_L      ]       };
+    modifier_map Mod1   { <META> };
+
+    key <SUPR> {       [ NoSymbol, Super_L     ]       };
+    modifier_map Mod4   { <SUPR> };
+
+    key <HYPR> {       [ NoSymbol, Hyper_L     ]       };
+    modifier_map Mod4   { <HYPR> };
+
+    key <OUTP> { [ XF86Display ] };
+    key <KITG> { [ XF86KbdLightOnOff ] };
+    key <KIDN> { [ XF86KbdBrightnessDown ] };
+    key <KIUP> { [ XF86KbdBrightnessUp ] };
+};
+
+partial hidden alphanumeric_keys
+xkb_symbols "editing" {
+    key <PRSC> {
+       type= "PC_ALT_LEVEL2",
+       symbols[Group1]= [ Print, Sys_Req ]
+    };
+    key <SCLK> {  [  Scroll_Lock       ]       };
+    key <PAUS> {
+       type= "PC_CONTROL_LEVEL2",
+       symbols[Group1]= [ Pause, Break ]
+    };
+    key  <INS> {       [  Insert               ]       };
+    key <HOME> {       [  Home                 ]       };
+    key <PGUP> {       [  Prior                ]       };
+    key <DELE> {       [  Delete               ]       };
+    key  <END> {       [  End                  ]       };
+    key <PGDN> {       [  Next                 ]       };
+
+    key   <UP> {       [  Up                   ]       };
+    key <LEFT> {       [  Left                 ]       };
+    key <DOWN> {       [  Down                 ]       };
+    key <RGHT> {       [  Right                ]       };
+};
diff --git a/test/data/symbols/ru b/test/data/symbols/ru
new file mode 100644 (file)
index 0000000..408e408
--- /dev/null
@@ -0,0 +1,653 @@
+// based on
+// russian standard keyboard
+// AEN <aen@logic.ru>
+// 2001/12/23 by Leon Kanter <leon@blackcatlinux.com>
+// 2005/12/09 Valery Inozemtsev <shrek@altlinux.ru>
+
+// Windows layout
+partial default alphanumeric_keys
+xkb_symbols "winkeys" {
+    include "ru(common)"
+
+    name[Group1]= "Russian";
+
+    key <AE03> {        [               3,      numerosign      ]       };
+    key <AE04> {        [               4,       semicolon      ]       };
+    key <AE05> {        [               5,         percent      ]       };
+    key <AE06> {        [               6,           colon      ]       };
+    key <AE07> {        [               7,        question      ]       };
+    key <AE08> {        [               8,        asterisk      ]       };
+
+    key <AB10> {        [          period,           comma      ]       };
+    key <BKSL> {        [       backslash,           slash      ]       };
+};
+
+partial hidden alphanumeric_keys 
+xkb_symbols "common" {
+
+    key        <AE01> {        [               1,          exclam      ]       };
+    key        <AE02> {        [               2,        quotedbl      ]       };
+    key        <AE03> {        [               3,      numbersign      ]       };
+    key        <AE04> {        [               4,        asterisk      ]       };
+    key        <AE05> {        [               5,           colon      ]       };
+    key        <AE06> {        [               6,           comma      ]       };
+    key        <AE07> {        [               7,          period      ]       };
+    key        <AE08> {        [               8,       semicolon      ]       };
+    key        <AE09> {        [               9,       parenleft      ]       };
+    key        <AE10> {        [               0,      parenright      ]       };
+    key        <AE11> {        [           minus,      underscore      ]       };
+    key        <AE12> {        [           equal,            plus      ]       };
+    key        <BKSL> {        [       backslash,             bar      ]       };
+    key        <AB10> {        [           slash,        question      ]       };
+    key <LSGT> {        [           slash,             bar      ]       };
+
+    key        <TLDE> {        [     Cyrillic_io,     Cyrillic_IO      ]       };
+    key        <AD01> {        [ Cyrillic_shorti, Cyrillic_SHORTI      ]       };
+    key        <AD02> {        [    Cyrillic_tse,    Cyrillic_TSE      ]       };
+    key        <AD03> {        [      Cyrillic_u,      Cyrillic_U      ]       };
+    key        <AD04> {        [     Cyrillic_ka,     Cyrillic_KA      ]       };
+    key        <AD05> {        [     Cyrillic_ie,     Cyrillic_IE      ]       };
+    key        <AD06> {        [     Cyrillic_en,     Cyrillic_EN      ]       };
+    key        <AD07> {        [    Cyrillic_ghe,    Cyrillic_GHE      ]       };
+    key        <AD08> {        [    Cyrillic_sha,    Cyrillic_SHA      ]       };
+    key        <AD09> {        [  Cyrillic_shcha,  Cyrillic_SHCHA      ]       };
+    key        <AD10> {        [     Cyrillic_ze,     Cyrillic_ZE      ]       };
+    key        <AD11> {        [     Cyrillic_ha,     Cyrillic_HA      ]       };
+    key        <AD12> {        [Cyrillic_hardsign,Cyrillic_HARDSIGN    ]       };
+    key        <AC01> {        [     Cyrillic_ef,     Cyrillic_EF      ]       };
+    key        <AC02> {        [   Cyrillic_yeru,   Cyrillic_YERU      ]       };
+    key        <AC03> {        [     Cyrillic_ve,     Cyrillic_VE      ]       };
+    key        <AC04> {        [      Cyrillic_a,      Cyrillic_A      ]       };
+    key        <AC05> {        [     Cyrillic_pe,     Cyrillic_PE      ]       };
+    key        <AC06> {        [     Cyrillic_er,     Cyrillic_ER      ]       };
+    key        <AC07> {        [      Cyrillic_o,      Cyrillic_O      ]       };
+    key        <AC08> {        [     Cyrillic_el,     Cyrillic_EL      ]       };
+    key        <AC09> {        [     Cyrillic_de,     Cyrillic_DE      ]       };
+    key        <AC10> {        [    Cyrillic_zhe,    Cyrillic_ZHE      ]       };
+    key        <AC11> {        [      Cyrillic_e,      Cyrillic_E      ]       };
+    key        <AB01> {        [     Cyrillic_ya,     Cyrillic_YA      ]       };
+    key        <AB02> {        [    Cyrillic_che,    Cyrillic_CHE      ]       };
+    key        <AB03> {        [     Cyrillic_es,     Cyrillic_ES      ]       };
+    key        <AB04> {        [     Cyrillic_em,     Cyrillic_EM      ]       };
+    key        <AB05> {        [      Cyrillic_i,      Cyrillic_I      ]       };
+    key        <AB06> {        [     Cyrillic_te,     Cyrillic_TE      ]       };
+    key        <AB07> {        [Cyrillic_softsign,Cyrillic_SOFTSIGN    ]       };
+    key        <AB08> {        [     Cyrillic_be,     Cyrillic_BE      ]       };
+    key        <AB09> {        [     Cyrillic_yu,     Cyrillic_YU      ]       };
+
+    key.type[group1]="TWO_LEVEL";
+
+    include "kpdl(comma)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "legacy" {
+    include "ru(common)"
+
+    name[Group1]= "Russian (legacy)";
+};
+
+partial alphanumeric_keys
+xkb_symbols "olpc" {
+
+    include "ru(common)"
+
+    key        <TLDE> {        [          0x01000451,          0x01000401, grave       ]       }; // Ñ‘, Ð
+    key <AE03> {        [               3,      numbersign, 0x01002116      ]       }; // â„–
+    key <AE04> {        [               4,          dollar, semicolon   ]       };
+    key <AE06> {        [               6,      asciicircum, colon      ]       };
+    key <AE07> {        [               7,          ampersand           ]       };
+    key <AE09> {        [               9,          parenleft, acute    ]       };
+    key <AC12> {        [       backslash,          bar, slash          ]       };
+
+    include "group(olpc)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "typewriter" {
+    include "ru(common)"
+    name[Group1]= "Russian (typewriter)";
+    key        <TLDE> {        [             bar,            plus      ]       };
+    key        <AE01> {        [      numerosign,               1      ]       };
+    key        <AE02> {        [           minus,               2      ]       };
+    key        <AE03> {        [           slash,               3      ]       };
+    key        <AE04> {        [        quotedbl,               4      ]       };
+    key        <AE05> {        [           colon,               5      ]       };
+    key        <AE06> {        [           comma,               6      ]       };
+    key        <AE07> {        [          period,               7      ]       };
+    key        <AE08> {        [      underscore,               8      ]       };
+    key        <AE09> {        [        question,               9      ]       };
+    key        <AE10> {        [         percent,               0      ]       };
+    key        <AE11> {        [          exclam,           equal      ]       };
+    key        <AE12> {        [       semicolon,       backslash      ]       };
+
+    key        <BKSL> {        [       parenright,      parenleft      ]       };
+
+    key        <AD12> {        [Cyrillic_hardsign,Cyrillic_HARDSIGN    ]       };
+    key        <AB10> {        [     Cyrillic_io,     Cyrillic_IO      ]       };
+};
+
+partial alphanumeric_keys
+xkb_symbols "typewriter-legacy" {
+    include "ru(common)"
+    name[Group1]= "Russian (typewriter, legacy)";
+    key        <TLDE> {        [      apostrophe,        quotedbl      ]       };
+    key        <AE01> {        [          exclam,               1      ]       };
+    key        <AE02> {        [      numerosign,               2      ]       };
+    key        <AE03> {        [           slash,               3      ]       };
+    key        <AE04> {        [       semicolon,               4      ]       };
+    key        <AE05> {        [           colon,               5      ]       };
+    key        <AE06> {        [           comma,               6      ]       };
+    key        <AE07> {        [          period,               7      ]       };
+    key        <AE08> {        [      underscore,               8      ]       };
+    key        <AE09> {        [        question,               9      ]       };
+    key        <AE10> {        [         percent,               0      ]       };
+    key        <BKSL> {        [       parenleft,      parenright      ]       };
+
+    key        <AD12> {        [Cyrillic_hardsign,Cyrillic_HARDSIGN    ]       };
+    key        <AB10> {        [     Cyrillic_io,     Cyrillic_IO      ]       };
+};
+
+partial alphanumeric_keys
+xkb_symbols "phonetic" {
+
+    name[Group1]= "Russian (phonetic)";
+
+    key        <AE01> {        [               1,          exclam      ]       };
+    key        <AE02> {        [               2,              at      ]       };
+    key        <AE03> {        [               3,     Cyrillic_io      ]       };
+    key        <AE04> {        [               4,     Cyrillic_IO      ]       };
+    key        <AE05> {        [               5, Cyrillic_hardsign    ]       };
+    key        <AE06> {        [               6, Cyrillic_HARDSIGN    ]       };
+    key        <AE07> {        [               7,       ampersand      ]       };
+    key        <AE08> {        [               8,        asterisk      ]       };
+    key        <AE09> {        [               9,       parenleft      ]       };
+    key        <AE10> {        [               0,      parenright      ]       };
+    key <AE11> {       [           minus,      underscore      ]       };
+
+    key        <AB09> {        [          period,         greater      ]       };
+    key        <AB10> {        [           slash,        question      ]       };
+    key        <AB08> {        [           comma,            less      ]       };
+    key        <AC10> {        [       semicolon,           colon      ]       };
+    key        <AC11> {        [      apostrophe,        quotedbl      ]       };
+    key        <LSGT> {        [             bar,       brokenbar      ]       };
+
+    key        <TLDE> {        [     Cyrillic_yu,     Cyrillic_YU      ]       };
+    key        <LatQ> {        [     Cyrillic_ya,     Cyrillic_YA      ]       };
+    key        <LatZ> {        [     Cyrillic_ze,     Cyrillic_ZE      ]       };
+    key        <LatS> {        [     Cyrillic_es,     Cyrillic_ES      ]       };
+    key        <LatA> {        [      Cyrillic_a,      Cyrillic_A      ]       };
+    key        <LatW> {        [     Cyrillic_ve,     Cyrillic_VE      ]       };
+    key        <LatC> {        [    Cyrillic_tse,    Cyrillic_TSE      ]       };
+    key        <LatX> {        [Cyrillic_softsign,Cyrillic_SOFTSIGN    ]       };
+    key        <LatD> {        [     Cyrillic_de,     Cyrillic_DE      ]       };
+    key        <LatE> {        [     Cyrillic_ie,     Cyrillic_IE      ]       };
+    key        <LatV> {        [    Cyrillic_zhe,    Cyrillic_ZHE      ]       };
+    key        <LatF> {        [     Cyrillic_ef,     Cyrillic_EF      ]       };
+    key        <LatT> {        [     Cyrillic_te,     Cyrillic_TE      ]       };
+    key        <LatR> {        [     Cyrillic_er,     Cyrillic_ER      ]       };
+    key        <LatN> {        [     Cyrillic_en,     Cyrillic_EN      ]       };
+    key        <LatB> {        [     Cyrillic_be,     Cyrillic_BE      ]       };
+    key        <LatH> {        [     Cyrillic_ha,     Cyrillic_HA      ]       };
+    key        <LatG> {        [    Cyrillic_ghe,    Cyrillic_GHE      ]       };
+    key        <LatY> {        [   Cyrillic_yeru,   Cyrillic_YERU      ]       };
+    key        <LatM> {        [     Cyrillic_em,     Cyrillic_EM      ]       };
+    key        <LatJ> {        [ Cyrillic_shorti, Cyrillic_SHORTI      ]       };
+    key        <LatU> {        [      Cyrillic_u,      Cyrillic_U      ]       };
+    key        <LatK> {        [     Cyrillic_ka,     Cyrillic_KA      ]       };
+    key        <LatI> {        [      Cyrillic_i,      Cyrillic_I      ]       };
+    key        <LatO> {        [      Cyrillic_o,      Cyrillic_O      ]       };
+    key        <LatL> {        [     Cyrillic_el,     Cyrillic_EL      ]       };
+    key        <LatP> {        [     Cyrillic_pe,     Cyrillic_PE      ]       };
+
+    key        <AD11> {        [    Cyrillic_sha,    Cyrillic_SHA      ]       };
+    key        <AE12> {        [    Cyrillic_che,    Cyrillic_CHE      ]       };
+    key        <AD12> {        [  Cyrillic_shcha,  Cyrillic_SHCHA      ]       };
+    key        <BKSL> {        [      Cyrillic_e,      Cyrillic_E      ]       };
+};
+
+partial alphanumeric_keys
+xkb_symbols "phonetic_winkeys" {
+
+    include "ru(phonetic)"
+    name[Group1]= "Russian (phonetic WinKeys)";
+
+    key        <LatX> {        [     Cyrillic_ha,     Cyrillic_HA      ]       };
+    key        <LatH> {        [     Cyrillic_che,     Cyrillic_CHE    ]       };
+    key        <AE12> {        [ Cyrillic_softsign, Cyrillic_softsign  ]       };
+
+};
+
+partial alphanumeric_keys
+xkb_symbols "tt" {
+    include "ru(winkeys)"
+    name[Group1]= "Tatar";
+
+    key.type[group1]="FOUR_LEVEL";
+
+    key <TLDE> {       [      0x010004bb,      0x010004ba,
+                             Cyrillic_io,     Cyrillic_IO      ]       };
+    key        <AD02> {        [      0x010004e9,      0x010004e8,
+                            Cyrillic_tse,    Cyrillic_TSE      ]       };
+    key        <AD09> {        [      0x010004d9,      0x010004d8,
+                          Cyrillic_shcha,  Cyrillic_SHCHA      ]       };
+    key        <AD12> {        [      0x010004af,      0x010004ae,
+                       Cyrillic_hardsign,Cyrillic_HARDSIGN     ]       };
+    key        <AC10> {        [      0x010004a3,      0x010004a2,
+                            Cyrillic_zhe,    Cyrillic_ZHE      ]       };
+    key        <AB07> {        [      0x01000497,      0x01000496,
+                       Cyrillic_softsign,Cyrillic_SOFTSIGN     ]       };
+
+    include "level3(ralt_switch)"
+
+};
+
+partial alphanumeric_keys 
+xkb_symbols "os_legacy" {
+    include "ru(common)"
+
+    name[Group1]= "Ossetian (legacy)";
+
+    key        <TLDE> {        [      Cyrillic_e,      Cyrillic_E      ]       };
+    key        <AC07> {        [      Cyrillic_o,      Cyrillic_O, Cyrillic_io, Cyrillic_IO    ]       };
+    key        <AC11> {        [      0x010004D5,      0x010004D4      ]       };
+};
+
+partial alphanumeric_keys 
+xkb_symbols "os_winkeys" {
+    include "ru(winkeys)"
+
+    name[Group1]= "Ossetian (WinKeys)";
+
+    key        <TLDE> {        [      Cyrillic_e,      Cyrillic_E      ]       };
+    key        <AC07> {        [      Cyrillic_o,      Cyrillic_O, Cyrillic_io, Cyrillic_IO    ]       };
+    key        <AC11> {        [      0x010004D5,      0x010004D4      ]       };
+};
+
+partial alphanumeric_keys
+xkb_symbols "cv" {
+    include "ru(winkeys)"
+
+    name[Group1]= "Chuvash";
+
+    key.type[group1]="FOUR_LEVEL";
+
+    key        <AD03> {        [      Cyrillic_u,      Cyrillic_U,
+                            0x010004f3,    0x010004f2      ]       };
+    key        <AD05> {        [      Cyrillic_ie,     Cyrillic_IE,
+                       0x01000115,     0x01000114     ]       };
+    key        <AC04> {        [      Cyrillic_a,      Cyrillic_A,
+                          abreve,  Abreve      ]       };
+    key        <AB03> {        [      Cyrillic_es,     Cyrillic_ES,
+                            ccedilla,    Ccedilla      ]       };
+
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "udm" {
+    include "ru(winkeys)"
+
+    name[Group1]= "Udmurt";
+
+    key.type[group1]="FOUR_LEVEL";
+
+    key        <AE01> {        [        question,          exclam,    1,       1       ]       };
+    key        <AE02> {        [       parenleft,        quotedbl,    2,       2       ]       };
+    key        <AE03> {        [      parenright,      numerosign,    3,       3       ]       };
+    key        <AE04> {        [           colon,       semicolon,    4,       4       ]       };
+    key        <AE05> {        [        asterisk,         percent,    5,       5       ]       };
+    key        <AE06> {        [      0x010004dd,      0x010004dc,    6,       6       ]       };
+    key        <AE07> {        [      0x010004e7,      0x010004e6,    7,       7       ]       };
+    key        <AE08> {        [      0x010004f5,      0x010004f4,    8,       8       ]       };
+    key        <AE09> {        [      0x010004e5,      0x010004e4,    9,       9       ]       };
+    key        <AE10> {        [      0x010004df,      0x010004de,    0,       0       ]       };
+
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "cv_latin" {
+    include "us(alt-intl)"
+
+    name[Group1]= "Chuvash (Latin)";
+
+    key.type[group1]="FOUR_LEVEL";
+
+    key        <AD01> {        [         q,    Q,    0x01000161,       0x01000160 ] };
+    key        <AD02> {        [         w,    W,    udiaeresis,       Udiaeresis ] };
+    key        <AD03> { [         e,   E,    0x01000115,       0x01000114 ] };
+    key        <AD07> {        [         u,    U,    udiaeresis,       Udiaeresis ] };
+    key        <AD08> {        [         i,    I,    0x0100012d,       0x0100012c ] };
+    key        <AD09> {        [         o,    O,    odiaeresis,       Odiaeresis ] };
+    key        <AC01> { [        a,    A,        abreve,           Abreve ] };
+    key        <AC02> { [        s,    S,      scedilla,         Scedilla ] };
+    key        <AC05> { [        g,    G,        gbreve,           Gbreve ] };
+    key        <AC07> { [        j,    J,    0x01000131,       0x01000130 ] };
+    key        <AB03> { [         c,    C,      ccedilla,         Ccedilla ] };
+
+    include "level3(ralt_switch)"
+
+};
+
+// Komi language layout
+// based on
+// russian standard keyboard
+// Vlad Shakhov <lumpen.intellectual@gmail.com>
+// Last Changes 2007/10/23 by Vlad Shakhov <lumpen.intellectual@gmail.com>
+
+partial alphanumeric_keys 
+xkb_symbols "kom" {
+
+    include "ru(winkeys)"
+
+    name[Group1]= "Komi";
+
+    key.type[group1]="FOUR_LEVEL_ALPHABETIC";
+
+// cyrilllic o with diaeresis 
+    key        <AC07> { [      Cyrillic_o,             Cyrillic_O,             
+                       U04E7,                  U04E6           ] };
+    
+// hard I as additional key for soft Cyrillic_I 
+    key <AB05> { [      Cyrillic_i,            Cyrillic_I,
+                       Ukrainian_i,            Ukrainian_I     ] };
+
+    include "level3(ralt_switch)"
+};
+
+// Yakut language layout
+// 2008/04/23 Yakov Aleksandrov <bertjickty@yandex.ru>
+// 2008/04/23 Anatoliy Zhozhikov <jav@sitc.ru>
+// 2008/04/23 Aleksandr Varlamov
+partial alphanumeric_keys
+xkb_symbols "sah" {
+
+    include "ru(winkeys)"
+
+    name[Group1]= "Yakut";
+
+    key.type[group1]="FOUR_LEVEL_ALPHABETIC";
+
+    key <TLDE> { [     Cyrillic_io,            Cyrillic_IO,
+                       U04EB,                  U04EA                   ] };
+    key <AD01> { [     Cyrillic_shorti,        Cyrillic_SHORTI,
+                       U048B,                  U048A                   ] };
+    key <AD03> { [     Cyrillic_u,             Cyrillic_U,
+                       Cyrillic_u_straight,    Cyrillic_U_straight     ] };
+    key <AD04> { [     Cyrillic_ka,            Cyrillic_KA,
+                       U04C4,                  U04C3                   ] };
+    key <AD06> { [     Cyrillic_en,            Cyrillic_EN,
+                       U04A5,                  U04A4                   ] };
+    key <AD07> { [     Cyrillic_ghe,           Cyrillic_GHE,
+                       U0495,                  U0494                   ] };
+    key <AD10> { [     Cyrillic_ze,            Cyrillic_ZE,
+                       U04E1,                  U04E0                   ] };
+    key <AD11> { [     Cyrillic_ha,            Cyrillic_HA,
+                       Cyrillic_shha,          Cyrillic_SHHA           ] };
+    key <AC07> { [     Cyrillic_o,             Cyrillic_O,
+                       Cyrillic_o_bar,         Cyrillic_O_bar          ] };
+    key <AC10> { [     Cyrillic_zhe,           Cyrillic_ZHE,
+                       U0461,                  U0460                   ] };
+    key <AB02> { [     Cyrillic_che,           Cyrillic_CHE,
+                       Cyrillic_u_macron,      Cyrillic_U_macron       ] };
+    key <AB04> { [     Cyrillic_em,            Cyrillic_EM,
+                       U04C8,                  U04C7                   ] };
+    key <AB05> { [     Cyrillic_i,             Cyrillic_I,
+                       Cyrillic_i_macron,      Cyrillic_I_macron       ] };
+
+    include "level3(ralt_switch)"
+};
+
+
+//Kalmyk language layout
+//based on the Kalmyk language layout: http://soft.oyrat.org/
+//Nikolay Korneev <halmg@oyrat.org>
+//Toli Miron <mirontoli@gmail.com>
+        
+partial alphanumeric_keys
+xkb_symbols "xal" {
+    include "ru(winkeys)"
+
+    name[Group1]= "Kalmyk";
+
+    key.type[group1]="FOUR_LEVEL";
+
+    key <AE01> {        [                     question,                  exclam,               1      ]       };
+    key <AE02> {        [                          numerosign,                quotedbl,               2      ]       };
+    key <AE03> {        [          Cyrillic_u_straight,     Cyrillic_U_straight,               3      ]       };
+    key <AE04> {        [               Cyrillic_schwa,          Cyrillic_SCHWA,               4      ]       }; 
+    key <AE05> {        [                     asterisk,                 percent,               5      ]       };
+    key <AE06> {        [        Cyrillic_en_descender,   Cyrillic_EN_descender,               6      ]       };
+    key <AE07> {        [               Cyrillic_o_bar,          Cyrillic_O_bar,               7      ]       }; 
+    key <AE08> {        [                Cyrillic_shha,           Cyrillic_SHHA,               8      ]       }; 
+    key <AE09> {        [       Cyrillic_zhe_descender,  Cyrillic_ZHE_descender,               9      ]       };
+    key <AE10> {        [                    semicolon,                   colon,               0      ]       };
+
+    key <TLDE> {        [                    parenleft,               parenright, Cyrillic_io, Cyrillic_IO    ]       };
+
+    key <AD02> {        [                 Cyrillic_tse,             Cyrillic_TSE,         dollar      ]       };
+    key <AD03> {        [                   Cyrillic_u,               Cyrillic_U,       EuroSign      ]       }; 
+    key <AD04> {        [                  Cyrillic_ka,              Cyrillic_KA,     registered      ]       }; 
+    key <AD05> {        [                  Cyrillic_ie,              Cyrillic_IE,      trademark      ]       }; 
+    key <AD11> {        [                  Cyrillic_ha,              Cyrillic_HA,    bracketleft      ]       }; 
+    key <AD12> {        [            Cyrillic_hardsign,        Cyrillic_HARDSIGN,   bracketright      ]       };
+    key <AC11> {        [                   Cyrillic_e,               Cyrillic_E,     apostrophe      ]       };
+    key <AB03> {        [                  Cyrillic_es,              Cyrillic_ES,      copyright      ]       }; 
+    key <AB08> {        [                  Cyrillic_be,              Cyrillic_BE,           less      ]       };
+    key <AB09> {        [                  Cyrillic_yu,              Cyrillic_YU,        greater      ]       };
+
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "dos" {
+
+    include "ru(common)"
+
+    name[Group1]= "Russian (DOS)";
+
+    key        <TLDE> {        [   parenright,  parenleft   ] };
+    key        <AE04> {        [   4,           currency    ] };
+    key        <AE09> {        [   9,           question    ] };
+    key        <AE10> {        [   0,           percent     ] };
+
+    key        <AB10> {        [   Cyrillic_io, Cyrillic_IO ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "bak" {
+    include "ru(winkeys)"
+
+    name[Group1]= "Bashkirian";
+    key.type[group1]="FOUR_LEVEL";
+
+    key <TLDE> { [     0x010004d9,       0x010004d8,   Cyrillic_io,   Cyrillic_IO      ] };
+    key <AE01> { [     exclam,           quotedbl,      1,       1       ] };
+    key <AE02> { [     0x010004e9,       0x010004e8,    2,       2 ] };
+    key <AE03> { [     0x010004a1,       0x010004a0,    3,       3 ] };
+    key <AE04> { [     0x01000493,       0x01000492,    4,       4 ] };
+    key <AE05> { [     0x010004ab,       0x010004aa,    5,       5 ] };
+    key <AE06> { [     colon,            semicolon,     6,       6 ] };
+    key <AE07> { [     0x01000499,       0x01000498,    7,       7 ] };
+    key <AE08> { [     0x010004bb,       0x010004ba,    8,       8 ] };
+    key <AE09> { [     question,         parenleft,     9,       9 ] };
+    key <AE10> { [     numerosign,       parenright,    0,       0 ] };
+    key <AE11> { [     minus,            percent,       minus,    underscore     ]};
+    key <AE12> { [     0x010004af, 0x010004ae,    equal,  plus    ]};
+    key <BKSL> { [     0x010004a3, 0x010004a2,    backslash,        slash     ]};      
+       
+    include "level3(ralt_switch)"
+};
+
+// Serbian charecters added as third level symbols to Russian keyboard layout.
+
+partial alphanumeric_keys
+xkb_symbols "srp" {
+    include "ru(common)"
+    include "level3(ralt_switch)"
+
+    name[Group1]= "Serbian (Russia)";
+
+    key <AE03> { [ 3, numerosign ] };
+    key <AE04> { [ 4, semicolon ] };
+    key <AE05> { [ 5, percent ] };
+    key <AE06> { [ 6, colon ] };
+    key <AE07> { [ 7, question ] };
+    key <AE08> { [ 8, asterisk ] };
+    key <AB10> { [ period, comma ] };
+    key <BKSL> { [ backslash, slash ] };
+    key        <AD01> { [ Cyrillic_shorti, Cyrillic_SHORTI, U458, U408 ] };
+    key        <AD06> { [ Cyrillic_en, Cyrillic_EN, U45A, U40A ] };
+    key        <AC08> { [ Cyrillic_el, Cyrillic_EL, U459, U409 ] };
+    key        <AC09> { [ Cyrillic_de, Cyrillic_DE, U45F, U40F ] };
+    key        <AC10> { [ Cyrillic_zhe, Cyrillic_ZHE, U452, U402 ] };
+    key        <AB02> { [ Cyrillic_che, Cyrillic_CHE, U45B, U40B ] };
+};
+
+// Mari language layout
+// based on Russian standard keyboard
+// http://www.marlamuter.ru/
+partial alphanumeric_keys
+xkb_symbols "chm" {
+    include "ru(common)"
+    
+    name[Group1]= "Mari";
+
+    key.type[group1]="FOUR_LEVEL_ALPHABETIC";
+    key <AC04> { [      Cyrillic_a,     Cyrillic_A,    U04D3,       U04D2     ] };
+    key <AD03> { [      Cyrillic_u, Cyrillic_U,    U04F1,       U04F0     ] };
+    key <AC02> { [      Cyrillic_ui,    Cyrillic_UI,   U04F9,       U04F8     ] };
+    key <AD06> { [      Cyrillic_n, Cyrillic_N,    U04A5,       U04A4     ] };
+    key <AC11> { [      Cyrillic_e, Cyrillic_E,    U04E9,       U04E8     ] };
+    key <AC10> { [      Cyrillic_zh,    Cyrillic_ZH,   U04EB,       U04EA     ] };
+    key <AC01> { [      Cyrillic_f, Cyrillic_F,     UF537,      UF536     ] };
+
+    include "level3(ralt_switch)"
+};
+
+// EXTRAS:
+
+// Church Slavonic language layout
+// based on
+// russian standard keyboard
+// Aleksandr Andreev and Yuri Shardt 
+// Last Changes 2010/08/01. Contact <aleksandr.andreev@gmail.com>
+
+partial alphanumeric_keys
+xkb_symbols "chu"
+{
+           name[Group1]= "Church Slavonic";
+           key <TLDE> { [ U0457, U0407, U0482, U20DD ] }; // ї Ї ҂ e.g: а⃝ where the last is a combining ten thousands sign
+           key <AE01> { [ U0461, U0460, U047D, U047C] }; // ѡ Ѡ ѽ Ѽ
+           key <AE02> { [ U0454, U0404, U0465, U0464] }; // є Є ѥ Ѥ
+           key <AE03> { [ U046F, U046E, U0469, U0468] }; // ѯ Ѯ ѩ Ѩ
+           key <AE04> { [ U0471, U0470, U046D, U046C] }; // ѱ Ѱ ѭ Ѭ
+           key <AE05> { [ U0473, U0472, UA657, UA656] }; // ѳ Ѳ iotified A
+           key <AE06> { [ U0475, U0474, U0477, U0476] }; // ѵ Ѵ ѷ Ѷ
+           key <AE07> { [ U047B, U047A, UA64D, UA64C] }; // ѻ Ѻ ꙍ Ꙍ
+           key <AE08> { [ U047F, U047E, U046B, U046A] }; // ѿ Ѿ ѫ Ѫ
+           key <AE09> { [ U0455, U0405, parenleft, U002A ] }; // ѕ Ѕ ( *
+           key <AE10> { [ Cyrillic_u,  Cyrillic_U, parenright, U0488 ] }; // у У ) NB: for diagraph Ouk, use Cyrillic_o + Cyrillic_u
+           key <AE11> { [ U0483, U0486, U0487, U005F] }; // а҃ а҆ а҇, _ (titlo, psili, pokrytie, underscore)
+           key <AE12> { [ U0301, U0300, U0484, UA67E] }; //  а̀ а́ а҄ ꙾ (oxia, varia, kamora, kavyka)
+           key <AD01> {        [ Cyrillic_shorti, Cyrillic_SHORTI, U0456       ]       };
+           key <AD02> {        [    Cyrillic_tse,    Cyrillic_TSE, U2DF0       ]       };
+           key <AD03> {        [   UA64B,  UA64A, U2DF9        ]       }; // Cyrillic monograph Uk (not U)!
+           key <AD04> {        [     Cyrillic_ka,     Cyrillic_KA, U2DE6       ]       };
+           key <AD05> {        [     Cyrillic_ie,     Cyrillic_IE, U2DF7       ]       };
+           key <AD06> {        [     Cyrillic_en,     Cyrillic_EN, U2DE9       ]       };
+           key <AD07> {        [    Cyrillic_ghe,    Cyrillic_GHE, U2DE2       ]       };
+           key <AD08> {        [    Cyrillic_sha,    Cyrillic_SHA, U2DF2       ]       };
+           key <AD09> {        [  Cyrillic_shcha,  Cyrillic_SHCHA, U2DF3       ]       };
+           key <AD10> {        [     Cyrillic_ze,     Cyrillic_ZE, U2DE5       ]       };
+           key <AD11> {        [     Cyrillic_ha,     Cyrillic_HA, U2DEF       ]       };
+           key <AD12> {        [Cyrillic_hardsign,Cyrillic_HARDSIGN, UA67D     ]       }; // Payerok
+           key <BKSL> { [backslash, slash, colon, question] }; // \ / : ? (note, for Slavonic question use semicolon
+           key <AC01> {        [     Cyrillic_ef,     Cyrillic_EF      ]       };
+           key <AC02> {        [   Cyrillic_yeru,   Cyrillic_YERU      ]       };
+           key <AC03> {        [     Cyrillic_ve,     Cyrillic_VE, U2DE1       ]       };
+           key <AC04> {        [      Cyrillic_a,      Cyrillic_A, U2DF6       ]       };
+           key <AC05> {        [     Cyrillic_pe,     Cyrillic_PE, U2DEB       ]       };
+           key <AC06> {        [     Cyrillic_er,     Cyrillic_ER, U2DEC       ]       };
+           key <AC07> {        [      Cyrillic_o,      Cyrillic_O, U2DEA       ]       };
+           key <AC08> {        [     Cyrillic_el,     Cyrillic_EL, U2DE7       ]       };
+           key <AC09> {        [     Cyrillic_de,     Cyrillic_DE, U2DE3       ]       };
+           key <AC10> {        [    Cyrillic_zhe,    Cyrillic_ZHE, U2DE4       ]       };
+           key <AC11> {        [     U0463,    U0462, U2DFA    ]       }; // Yat
+           key <AB01> {        [    U0467, U0466, U2DFD        ]       }; // Small Yus
+           key <AB02> {        [    Cyrillic_che,    Cyrillic_CHE, U2DF1       ]       };
+           key <AB03> {        [     Cyrillic_es,     Cyrillic_ES, U2DED       ]       };
+           key <AB04> {        [     Cyrillic_em,     Cyrillic_EM, U2DE8       ]       };
+           key <AB05> {        [      Cyrillic_i,      Cyrillic_I      ]       };
+           key <AB06> {        [     Cyrillic_te,     Cyrillic_TE, U2DEE       ]       };
+           key <AB07> {        [Cyrillic_softsign,Cyrillic_SOFTSIGN    ]       };
+           key <AB08> {        [     Cyrillic_be,     Cyrillic_BE, U2DE0       ]       };
+           key <AB09> {        [     Cyrillic_yu,     Cyrillic_YU, U2DFB       ]       };
+           key <AB10> {        [          period,    comma, semicolon, exclam      ]       };
+};
+
+
+// RUU (Russian-Ukrainian United keyboard layout).
+// Modified Russian standart keyboard with third level contains Ukrainian
+// and Belorusian alphabetic letters and commonly used Unicode symbols.
+// Description http://wiki.opennet.ru/RUU [russian]
+// Vasyĺ V. Vercynśkyj <fuckel@ukr.net>
+// Last Changes 2011/05/11
+//
+// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
+// │ ' ~ │ ! ≈ │ " ∞ │ № ₴ │ ; € │ % ‰ │ : ≤ │ ? ≥ │ * × │ ( { │ ) } │ _ – │ + ± ┃ ⌫       ┃
+// │ ’  ́ │ 1 ÷ │ 2 ¤ │ 3 § │ 4 $ │ 5 ° │ 6 < │ 7 > │ 8 • │ 9 [ │ 0 ] │ - — │ = ≠ ┃Backspace┃
+// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫
+// ┃       ┃ Й   │ Ц   │ У Ў │ К   │ Е Ё │ Н   │ Г Ґ │ Ш   │ Щ   │ З   │ Х   │ Ъ Ї ┃ Enter ┃
+// ┃ Tab ↹ ┃ й   │ ц   │ у ў │ к ® │ е ё │ н   │ г ґ │ ш   │ щ   │ з   │ х   │ ъ ї ┃   ⏎   ┃
+// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓      ┃
+// ┃ Caps   ┃ Ф   │ Ы І │ В   │ А   │ П   │ Р   │ О   │ Л   │ Д   │ Ж   │ Э Є │ | ¦ ┃      ┃
+// ┃ Lock ⇬ ┃ ф   │ ы і │ в   │ а   │ п   │ р   │ о   │ л   │ д   │ ж   │ э є │ / \ ┃      ┃
+// ┣━━━━━━━━┻━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┲━━━┷━━━━━┻━━━━━━┫
+// ┃          ┃ Я   │ Ч   │ С   │ М   │ И   │ Т   │ Ь   │ Б „ │ Ю “ │ , … ┃                ┃
+// ┃  Shift ⇧ ┃ я   │ ч   │ с © │ м   │ и   │ т ™ │ ь µ │ б « │ ю » │ . / ┃     Shift ⇧    ┃
+// ┣━━━━━━━┳━━┻━━━━┳┷━━━━━┷┱────┴─────┴─────┴─────┴─────┴─────┴┲━━━━┷━━┳━━┻━━━━┳━━━━━━━┳━━━┛
+// ┃       ┃       ┃       ┃                                   ┃       ┃       ┃       ┃
+// ┃ Ctrl  ┃ Meta  ┃  Alt  ┃                Space              ┃AltGr ⇮┃ Menu  ┃ Ctrl  ┃
+// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛
+
+
+
+partial alphanumeric_keys
+xkb_symbols "ruu" {
+    include "ru(common)"
+
+    name[Group1]= "Russian (with Ukrainian-Belorussian layout)";
+
+    key <TLDE> {    [  U2019,          apostrophe,     U0301,          asciitilde      ]       };      // Apostrophe and Stress symbol
+    key <AE01> {    [  1,              exclam,         U00F7,          U2248           ]       };      // Division Sign and Almost Equal To
+    key <AE02> {    [  2,              quotedbl,       currency,       infinity        ]       };
+    key <AE03> {    [  3,              numerosign,     U00A7,          U20B4           ]       };      // Paragraph and Hryvnia sign
+    key <AE04> {    [  4,              semicolon,      dollar,         EuroSign        ]       };
+    key <AE05> {    [  5,              percent,        degree,         U2030           ]       };      // Per Mille Sign
+    key <AE06> {    [  6,              colon,          less,           U2264           ]       };      // Less-Than Or Equal To
+    key <AE07> {    [  7,              question,       greater,        U2265           ]       };      // Greater-Than Or Equal To
+    key <AE08> {    [  8,              asterisk,       enfilledcircbullet, U00D7       ]       };      // Multiplication Sign
+    key <AE09> {    [  9,              parenleft,      bracketleft,    braceleft       ]       };
+    key <AE10> {    [  0,              parenright,     bracketright,   braceright      ]       };
+    key <AE11> {    [  minus,          underscore,     emdash,         endash          ]       };
+    key <AE12> {    [  equal,          plus,           notequal,       plusminus       ]       };
+    key <AD03> {    [  Cyrillic_u,     Cyrillic_U, Byelorussian_shortu, Byelorussian_SHORTU ]  };
+    key <AD04> {    [  Cyrillic_ka,    Cyrillic_KA,    registered                      ]       };      // Registered tm
+    key <AD05> {    [  Cyrillic_ie,    Cyrillic_IE,    Cyrillic_io,    Cyrillic_IO     ]       };
+    key <AD07> {    [Cyrillic_ge, Cyrillic_GE, Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN ] };
+    key <AD10> {    [  Cyrillic_ze,    Cyrillic_ZE,    U00B6                           ]       };      // Pilcrow Sign
+    key <AD12> {    [Cyrillic_hardsign,        Cyrillic_HARDSIGN, Ukrainian_yi, Ukrainian_YI   ]       };
+    key <AC02> {    [  Cyrillic_yeru,  Cyrillic_YERU,  Ukrainian_i,  Ukrainian_I       ]       };
+    key <AC11> {    [  Cyrillic_e,     Cyrillic_E,     Ukrainian_ie,Ukrainian_IE       ]       };
+    key <BKSL> {    [  slash,          bar,            backslash,      U00A6           ]       };      // Broken Bar
+    key <AB03> {    [  Cyrillic_es,    Cyrillic_ES,    copyright                       ]       };
+    key <AB06> {    [  Cyrillic_te,    Cyrillic_TE,    trademark                       ]       };
+    key <AB07> {    [  Cyrillic_softsign, Cyrillic_SOFTSIGN, U00B5                     ]       };      // Micro Sign
+    key <AB08> {    [  Cyrillic_be,    Cyrillic_BE,    guillemotleft,  doublelowquotemark ]    };
+    key <AB09> {    [  Cyrillic_yu,    Cyrillic_YU,    guillemotright, leftdoublequotemark ]   };
+    key <AB10> {    [  period,         comma,          slash,          ellipsis        ]       };
+
+    include "level3(ralt_switch)"
+};
diff --git a/test/data/symbols/shift b/test/data/symbols/shift
new file mode 100644 (file)
index 0000000..6fbec5b
--- /dev/null
@@ -0,0 +1,84 @@
+partial modifier_keys 
+xkb_symbols "breaks_caps" {
+    key <LFSH> {
+       type = "ALPHABETIC",
+       actions [Group1] = [
+           SetMods(modifiers=Shift),
+           SetMods(modifiers=Shift+Lock,clearLocks)
+       ]
+    };
+    key <RTSH> {
+       type = "ALPHABETIC",
+       actions [Group1] = [
+           SetMods(modifiers=Shift),
+           SetMods(modifiers=Shift+Lock,clearLocks)
+       ]
+    };
+};
+
+// When pressed together with another Shift key, set/release Lock.
+partial modifier_keys
+xkb_symbols "lshift_both_capslock" {
+  key <LFSH> {
+    type[Group1]="TWO_LEVEL",
+    symbols[Group1] = [ Shift_L,                       Caps_Lock                ]
+  };
+};
+// When pressed together with another Shift key, set or unset Lock.
+partial modifier_keys
+xkb_symbols "rshift_both_capslock" {
+  key <RTSH> {
+    type[Group1]="TWO_LEVEL",
+    symbols[Group1] = [ Shift_R,                       Caps_Lock                ]
+  };
+};
+partial modifier_keys
+xkb_symbols "both_capslock" {
+  include "shift(lshift_both_capslock)"
+  include "shift(rshift_both_capslock)"
+};
+
+// Release Lock when pressed alone and set Lock when pressed with another Shift key.
+partial modifier_keys
+xkb_symbols "lshift_both_capslock_cancel" {
+  key <LFSH> {
+    type[Group1]="ALPHABETIC",
+    symbols[Group1] = [ Shift_L,                       Caps_Lock                ]
+  };
+};
+// Release Lock when pressed alone and set Lock when pressed with another Shift key.
+partial modifier_keys
+xkb_symbols "rshift_both_capslock_cancel" {
+  key <RTSH> {
+    type[Group1]="ALPHABETIC",
+    symbols[Group1] = [ Shift_R,                       Caps_Lock                ]
+  };
+};
+partial modifier_keys
+xkb_symbols "both_capslock_cancel" {
+  include "shift(lshift_both_capslock_cancel)"
+  include "shift(rshift_both_capslock_cancel)"
+};
+
+
+// When pressed together with another Shift key, lock/unlock Shift.
+partial modifier_keys
+xkb_symbols "lshift_both_shiftlock" {
+  key <LFSH> {
+    type[Group1]="TWO_LEVEL",
+    symbols[Group1] = [ Shift_L,                       Shift_Lock ]
+  };
+};
+// When pressed together with another Shift key, lock/unlock Shift.
+partial modifier_keys
+xkb_symbols "rshift_both_shiftlock" {
+  key <RTSH> {
+    type[Group1]="TWO_LEVEL",
+    symbols[Group1] = [ Shift_R,                       Shift_Lock ]
+  };
+};
+partial modifier_keys
+xkb_symbols "both_shiftlock" {
+  include "shift(lshift_both_shiftlock)"
+  include "shift(rshift_both_shiftlock)"
+};
diff --git a/test/data/symbols/srvr_ctrl b/test/data/symbols/srvr_ctrl
new file mode 100644 (file)
index 0000000..73b5af2
--- /dev/null
@@ -0,0 +1,125 @@
+// Actions which control the server's behavior
+
+partial keypad_keys function_keys
+xkb_symbols "xfree86" {
+    include "srvr_ctrl(stdkeypad)"
+    include "srvr_ctrl(fkey2vt)"
+};
+
+partial keypad_keys 
+xkb_symbols "stdkeypad" {
+
+// Ungrab cancels server/keyboard/pointer grabs
+    key <KPDV> {
+       type="CTRL+ALT",
+       symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86_Ungrab ]
+    };
+
+// ClsGrb kills whichever client has a grab in effect
+    key <KPMU> {
+       type="CTRL+ALT",
+       symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86_ClearGrab ]
+    };
+
+// -VMode switches to the previous video mode
+    key <KPSU> {
+       type="CTRL+ALT",
+       symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86_Prev_VMode ]
+    };
+
+// +VMode switches to the next video mode
+    key <KPAD> {
+       type="CTRL+ALT",
+       symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86_Next_VMode]
+    };
+
+};
+
+partial function_keys 
+xkb_symbols "fkey2vt" {
+
+    key <FK01> {
+       type="CTRL+ALT",
+       symbols[Group1]= [ F1, F1, F1, F1, XF86_Switch_VT_1 ]
+    };
+
+    key <FK02> {
+       type="CTRL+ALT",
+       symbols[Group1]= [ F2, F2, F2, F2, XF86_Switch_VT_2 ]
+    };
+
+    key <FK03> {
+       type="CTRL+ALT",
+       symbols[Group1]= [ F3, F3, F3, F3, XF86_Switch_VT_3 ]
+    };
+
+    key <FK04> {
+       type="CTRL+ALT",
+       symbols[Group1]= [ F4, F4, F4, F4, XF86_Switch_VT_4 ]
+    };
+
+    key <FK05> {
+       type="CTRL+ALT",
+       symbols[Group1]= [ F5, F5, F5, F5, XF86_Switch_VT_5 ]
+    };
+
+    key <FK06> {
+       type="CTRL+ALT",
+       symbols[Group1]= [ F6, F6, F6, F6, XF86_Switch_VT_6 ]
+    };
+
+    key <FK07> {
+       type="CTRL+ALT",
+       symbols[Group1]= [ F7, F7, F7, F7, XF86_Switch_VT_7 ]
+    };
+
+    key <FK08> {
+       type="CTRL+ALT",
+       symbols[Group1]= [ F8, F8, F8, F8, XF86_Switch_VT_8 ]
+    };
+
+    key <FK09> {
+       type="CTRL+ALT",
+       symbols[Group1]= [ F9, F9, F9, F9, XF86_Switch_VT_9 ]
+    };
+
+    key <FK10> {
+       type="CTRL+ALT",
+       symbols[Group1]= [ F10, F10, F10, F10, XF86_Switch_VT_10 ]
+    };
+
+    key <FK11> {
+       type="CTRL+ALT",
+       symbols[Group1]= [ F11, F11, F11, F11, XF86_Switch_VT_11 ]
+    };
+
+    key <FK12> {
+       type="CTRL+ALT",
+       symbols[Group1]= [ F12, F12, F12, F12, XF86_Switch_VT_12 ]
+    };
+
+};
+
+partial function_keys keypad_keys
+xkb_symbols "no_srvr_keys" {
+
+    key.type="TWO_LEVEL";
+
+    key <FK01> { [ F1, F1 ]    };
+    key <FK02> { [ F2, F2 ]    };
+    key <FK03> { [ F3, F3 ]    };
+    key <FK04> { [ F4, F4 ]    };
+    key <FK05> { [ F5, F5 ]    };
+    key <FK06> { [ F6, F6 ]    };
+    key <FK07> { [ F7, F7 ]    };
+    key <FK08> { [ F8, F8 ]    };
+    key <FK09> { [ F9, F9 ]    };
+    key <FK10> { [ F10, F10 ]  };
+    key <FK11> { [ F11, F11 ]  };
+    key <FK12> { [ F12, F12 ]  };
+
+    key <KPDV> { [ KP_Divide,  KP_Divide       ] };
+    key <KPMU> { [ KP_Multiply,        KP_Multiply     ] };
+    key <KPSU> { [ KP_Subtract,        KP_Subtract     ] };
+    key <KPAD> { [ KP_Add,     KP_Add          ] };
+};
diff --git a/test/data/symbols/terminate b/test/data/symbols/terminate
new file mode 100644 (file)
index 0000000..c74220b
--- /dev/null
@@ -0,0 +1,7 @@
+partial default modifier_keys
+xkb_symbols "ctrl_alt_bksp" {
+    key <BKSP> {
+        type="CTRL+ALT",
+        symbols[Group1] = [ NoSymbol, NoSymbol, NoSymbol, NoSymbol, Terminate_Server ]
+    };
+};
diff --git a/test/data/symbols/us b/test/data/symbols/us
new file mode 100644 (file)
index 0000000..7c3ee24
--- /dev/null
@@ -0,0 +1,1337 @@
+default
+partial alphanumeric_keys modifier_keys 
+xkb_symbols "basic" {
+
+    name[Group1]= "English (US)";
+
+    // Alphanumeric section
+    key <TLDE> {       [     grave,    asciitilde      ]       };
+    key <AE01> {       [         1,    exclam          ]       };
+    key <AE02> {       [         2,    at              ]       };
+    key <AE03> {       [         3,    numbersign      ]       };
+    key <AE04> {       [         4,    dollar          ]       };
+    key <AE05> {       [         5,    percent         ]       };
+    key <AE06> {       [         6,    asciicircum     ]       };
+    key <AE07> {       [         7,    ampersand       ]       };
+    key <AE08> {       [         8,    asterisk        ]       };
+    key <AE09> {       [         9,    parenleft       ]       };
+    key <AE10> {       [         0,    parenright      ]       };
+    key <AE11> {       [     minus,    underscore      ]       };
+    key <AE12> {       [     equal,    plus            ]       };
+
+    key <AD01> {       [         q,    Q               ]       };
+    key <AD02> {       [         w,    W               ]       };
+    key <AD03> {       [         e,    E               ]       };
+    key <AD04> {       [         r,    R               ]       };
+    key <AD05> {       [         t,    T               ]       };
+    key <AD06> {       [         y,    Y               ]       };
+    key <AD07> {       [         u,    U               ]       };
+    key <AD08> {       [         i,    I               ]       };
+    key <AD09> {       [         o,    O               ]       };
+    key <AD10> {       [         p,    P               ]       };
+    key <AD11> {       [ bracketleft,  braceleft       ]       };
+    key <AD12> {       [ bracketright, braceright      ]       };
+
+    key <AC01> {       [         a,    A               ]       };
+    key <AC02> {       [         s,    S               ]       };
+    key <AC03> {       [         d,    D               ]       };
+    key <AC04> {       [         f,    F               ]       };
+    key <AC05> {       [         g,    G               ]       };
+    key <AC06> {       [         h,    H               ]       };
+    key <AC07> {       [         j,    J               ]       };
+    key <AC08> {       [         k,    K               ]       };
+    key <AC09> {       [         l,    L               ]       };
+    key <AC10> {       [ semicolon,    colon           ]       };
+    key <AC11> {       [ apostrophe,   quotedbl        ]       };
+
+    key <AB01> {       [         z,    Z               ]       };
+    key <AB02> {       [         x,    X               ]       };
+    key <AB03> {       [         c,    C               ]       };
+    key <AB04> {       [         v,    V               ]       };
+    key <AB05> {       [         b,    B               ]       };
+    key <AB06> {       [         n,    N               ]       };
+    key <AB07> {       [         m,    M               ]       };
+    key <AB08> {       [     comma,    less            ]       };
+    key <AB09> {       [    period,    greater         ]       };
+    key <AB10> {       [     slash,    question        ]       };
+
+    key <BKSL> {       [ backslash,         bar        ]       };
+    // End alphanumeric section
+};
+
+partial alphanumeric_keys
+xkb_symbols "euro" {
+
+    name[Group1]= "English (US, with euro on 5)";
+
+    include "us(basic)"
+
+    include "eurosign(5)"
+
+    include "level3(ralt_switch)"
+};
+
+
+partial alphanumeric_keys
+xkb_symbols "intl" {
+
+    name[Group1]= "English (US, international with dead keys)";
+
+    include "us(basic)"
+
+    // Alphanumeric section
+    key <TLDE> { [dead_grave, dead_tilde,         grave,       asciitilde ] };
+    key <AE01> { [        1,     exclam,    exclamdown,      onesuperior ] };
+    key <AE02> { [        2,         at,   twosuperior, dead_doubleacute ] };
+    key <AE03> { [        3, numbersign, threesuperior,      dead_macron ] };
+    key <AE04> { [        4,     dollar,      currency,         sterling ] };
+    key <AE05> { [        5,    percent,      EuroSign,     dead_cedilla ] };
+    key <AE06> { [    6, dead_circumflex,    onequarter,      asciicircum ] };
+    key <AE07> { [        7,  ampersand,       onehalf,        dead_horn ] };
+    key <AE08> { [        8,   asterisk, threequarters,      dead_ogonek ] };
+    key <AE09> { [        9,  parenleft, leftsinglequotemark, dead_breve ] };
+    key <AE10> { [        0, parenright, rightsinglequotemark, dead_abovering ] };
+    key <AE11> { [     minus, underscore,           yen,    dead_belowdot ] };
+    key <AE12> { [     equal,       plus,      multiply,         division ] };
+
+    key <AD01> { [        q,          Q,    adiaeresis,       Adiaeresis ] };
+    key <AD02> { [        w,          W,         aring,            Aring ] };
+    key <AD03> { [        e,          E,        eacute,           Eacute ] };
+    key <AD04> { [        r,          R,    registered,       registered ] };
+    key <AD05> { [        t,          T,         thorn,            THORN ] };
+    key <AD06> { [        y,          Y,    udiaeresis,       Udiaeresis ] };
+    key <AD07> { [        u,          U,        uacute,           Uacute ] };
+    key <AD08> { [        i,          I,        iacute,           Iacute ] };
+    key <AD09> { [        o,          O,        oacute,           Oacute ] };
+    key <AD10> { [        p,          P,    odiaeresis,       Odiaeresis ] };
+    key <AD11> { [ bracketleft,  braceleft,  guillemotleft, leftdoublequotemark ] };
+    key <AD12> { [bracketright, braceright, guillemotright, rightdoublequotemark ] };
+
+    key <AC01> { [        a,          A,        aacute,           Aacute ] };
+    key <AC02> { [        s,          S,        ssharp,          section ] };
+    key <AC03> { [        d,          D,           eth,              ETH ] };
+    key <AC04> { [        f,          F,             f,                F ] };
+    key <AC05> { [        g,          G,             g,                G ] };
+    key <AC06> { [        h,          H,             h,                H ] };
+    key <AC07> { [        j,          J,             j,                J ] };
+    key <AC08> { [        k,          K,            oe,               OE ] };
+
+    key <AC09> { [        l,          L,        oslash,         Ooblique ] };
+    key <AC10> { [ semicolon,      colon,     paragraph,           degree ] };
+    key <AC11> { [dead_acute, dead_diaeresis, apostrophe,        quotedbl ] };
+
+    key <AB01> { [        z,          Z,            ae,               AE ] };
+    key <AB02> { [        x,          X,             x,                X ] };
+    key <AB03> { [        c,          C,     copyright,             cent ] };
+    key <AB04> { [        v,          V,             v,                V ] };
+    key <AB05> { [        b,          B,             b,                B ] };
+    key <AB06> { [        n,          N,        ntilde,           Ntilde ] };
+    key <AB07> { [        m,          M,            mu,               mu ] };
+    key <AB08> { [     comma,       less,      ccedilla,         Ccedilla ] };
+    key <AB09> { [    period,    greater, dead_abovedot,       dead_caron ] };
+    key <AB10> { [     slash,   question,  questiondown,        dead_hook ] };
+    key <BKSL> { [ backslash,        bar,       notsign,        brokenbar ] };
+
+    include "level3(ralt_switch)"
+};
+
+// Based on symbols/us_intl keyboard map:
+// Dead-keys definition for a very simple US/ASCII layout.
+// by Conectiva (http://www.conectiva.com.br)
+// modified by Ricardo Y. Igarashi (iga@that.com.br)
+
+// Added the following deadkeys, to make it truly international:
+//
+// dead_macron: on AltGr-minus
+// dead_breve: on AltGr-parenleft
+// dead_abovedot: on AltGr-period
+// dead_abovering: on AltGr-0
+// dead_doubleacute: on AltGr-equal (as quotedbl is already used)
+// dead_caron: on AltGr-less (AltGr-shift-comma)
+// dead_cedilla: on AltGr-comma
+// dead_ogonek: on AltGr-semicolon
+// dead_belowdot: on AltGr-underscore (AltGr-shift-minus)
+// dead_hook: on AltGr-question
+// dead_horn: on AltGr-plus (AltGr-shift-equal)
+// dead_diaeresis: on AltGr-colon (Alt-shift-semicolon)
+//
+// those were already there:
+// dead_grave
+// dead_acute
+// dead_circumflex
+// dead_tilde
+// dead_diaeresis
+
+partial alphanumeric_keys
+xkb_symbols "alt-intl" {
+
+  name[Group1]= "English (US, alternative international)";
+
+  include "us"
+
+  key <TLDE> { [ dead_grave, dead_tilde,    grave,           asciitilde    ] };
+  key <AE05> { [          5, percent,      EuroSign                        ] };
+  key <AE06> { [         6, dead_circumflex, asciicircum,    asciicircum   ] };
+  key <AE09> { [         9, parenleft, leftsinglequotemark,  dead_breve ] };
+  key <AE10> { [         0, parenright, rightsinglequotemark, dead_abovering ] };
+  key <AE11> { [      minus, underscore,    dead_macron,      dead_belowdot ] };
+  key <AE12> { [      equal, plus,         dead_doubleacute, dead_horn     ] };
+
+  key <AD03> { [          e, E,                     EuroSign,         cent         ] };
+
+  key <AC10> { [  semicolon, colon,         dead_ogonek,   dead_diaeresis  ] };
+  key <AC11> { [ dead_acute, dead_diaeresis, apostrophe,    quotedbl       ] };
+
+  key <AB08> { [      comma, less,          dead_cedilla,  dead_caron      ] };
+  key <AB09> { [     period, greater,       dead_abovedot, dead_circumflex ] };
+  key <AB10> { [      slash, question,      dead_hook,     dead_hook       ] };
+
+  include "level3(ralt_switch)"
+};
+
+// based on a keyboard map from an 'xkb/symbols/dk' file
+
+partial alphanumeric_keys
+xkb_symbols "dvorak" {
+
+    name[Group1]= "English (Dvorak)";
+
+    // Alphanumeric section
+
+    key <TLDE> { [       grave,        asciitilde, dead_grave, dead_tilde      ] };
+
+    key <AE01> { [         1,  exclam          ]       };
+    key <AE02> { [         2,  at              ]       };
+    key <AE03> { [         3,  numbersign      ]       };
+    key <AE04> { [         4,  dollar          ]       };
+    key <AE05> { [         5,  percent         ]       };
+    key <AE06> { [         6,  asciicircum, dead_circumflex, dead_circumflex ] };
+    key <AE07> { [         7,  ampersand       ]       };
+    key <AE08> { [         8,  asterisk        ]       };
+    key <AE09> { [         9,  parenleft,  dead_grave] };
+    key <AE10> { [         0,  parenright      ]       };
+    key <AE11> { [ bracketleft,        braceleft       ]       };
+    key <AE12> { [ bracketright, braceright,  dead_tilde] };
+
+    key <AD01> { [  apostrophe,        quotedbl, dead_acute, dead_diaeresis    ] };
+    key <AD02> { [     comma,  less,   dead_cedilla, dead_caron        ] };
+    key <AD03> { [      period,        greater, dead_abovedot, periodcentered  ] };
+    key <AD04> { [         p,  P               ]       };
+    key <AD05> { [         y,  Y               ]       };
+    key <AD06> { [         f,  F               ]       };
+    key <AD07> { [         g,  G               ]       };
+    key <AD08> { [         c,  C               ]       };
+    key <AD09> { [         r,  R               ]       };
+    key <AD10> { [         l,  L               ]       };
+    key <AD11> { [     slash,  question        ]       };
+    key <AD12> { [     equal,  plus            ]       };
+
+    key <AC01> { [         a,  A               ]       };
+    key <AC02> { [         o,  O               ]       };
+    key <AC03> { [         e,  E               ]       };
+    key <AC04> { [         u,  U               ]       };
+    key <AC05> { [         i,  I               ]       };
+    key <AC06> { [         d,  D               ]       };
+    key <AC07> { [         h,  H               ]       };
+    key <AC08> { [         t,  T               ]       };
+    key <AC09> { [         n,  N               ]       };
+    key <AC10> { [         s,  S               ]       };
+    key <AC11> { [     minus,  underscore      ]       };
+
+    key <AB01> { [   semicolon,        colon, dead_ogonek, dead_doubleacute ] };
+    key <AB02> { [         q,  Q               ]       };
+    key <AB03> { [         j,  J               ]       };
+    key <AB04> { [         k,  K               ]       };
+    key <AB05> { [         x,  X               ]       };
+    key <AB06> { [         b,  B               ]       };
+    key <AB07> { [         m,  M               ]       };
+    key <AB08> { [         w,  W               ]       };
+    key <AB09> { [         v,  V               ]       };
+    key <AB10> { [         z,  Z               ]       };
+
+    key <BKSL> { [  backslash,  bar             ]       };
+};
+
+// Dvorak international with dead keys
+// Olivier Mehani (shtrom-xorg@ssji.net)
+// Reproduce the per-key mapping of us(intl) for the dvorak layout
+// aka "I just swapped my keys over"
+partial alphanumeric_keys
+xkb_symbols "dvorak-intl" {
+
+    name[Group1]= "English (Dvorak international with dead keys)";
+
+    include "us(dvorak)"
+
+    key <TLDE> { [dead_grave, dead_tilde,         grave,       asciitilde ] };
+
+    key <AE01> { [        1,     exclam,    exclamdown,      onesuperior ] };
+    key <AE02> { [        2,         at,   twosuperior, dead_doubleacute ] };
+    key <AE03> { [        3, numbersign, threesuperior,      dead_macron ] };
+    key <AE04> { [        4,     dollar,      currency,         sterling ] };
+    key <AE05> { [        5,    percent,      EuroSign,     dead_cedilla ] };
+    key <AE06> { [    6, dead_circumflex,    onequarter,      asciicircum ] };
+    key <AE07> { [        7,  ampersand,       onehalf,        dead_horn ] };
+    key <AE08> { [        8,   asterisk, threequarters,      dead_ogonek ] };
+    key <AE09> { [        9,  parenleft, leftsinglequotemark, dead_breve ] };
+    key <AE10> { [        0, parenright, rightsinglequotemark, dead_abovering ] };
+    key <AE11> { [ bracketleft,  braceleft,  guillemotleft, leftdoublequotemark ] };
+    key <AE12> { [bracketright, braceright, guillemotright, rightdoublequotemark ] };
+
+    key <AD01> { [dead_acute, dead_diaeresis, apostrophe,        quotedbl ] };
+    key <AD02> { [     comma,       less,      ccedilla,         Ccedilla ] };
+    key <AD03> { [    period,    greater, dead_abovedot,       dead_caron ] };
+    key <AD04> { [        p,          P,    odiaeresis,       Odiaeresis ] };
+    key <AD05> { [        y,          Y,    udiaeresis,       Udiaeresis ] };
+    // key <AD06> { [     f,   F               ]       };
+    // key <AD07> { [     g,   G               ]       };
+    key <AD08> { [        c,          C,     copyright,             cent ] };
+    key <AD09> { [        r,          R,    registered,       registered ] };
+    key <AD10> { [        l,          L,        oslash,         Ooblique ] };
+    key <AD11> { [     slash,   question,  questiondown,        dead_hook ] };
+    // key <AD12> { [     equal,       plus,      multiply,         division ] };
+
+    key <AC01> { [        a,          A,        aacute,           Aacute ] };
+    key <AC02> { [        o,          O,        oacute,           Oacute ] };
+    key <AC03> { [        e,          E,        eacute,           Eacute ] };
+    key <AC04> { [        u,          U,        uacute,           Uacute ] };
+    key <AC05> { [        i,          I,        iacute,           Iacute ] };
+    key <AC06> { [        d,          D,           eth,              ETH ] };
+    // key <AC07> { [     h,   H               ]       };
+    key <AC08> { [        t,          T,         thorn,            THORN ] };
+    key <AC09> { [        n,          N,        ntilde,           Ntilde ] };
+    key <AC10> { [        s,          S,        ssharp,          section ] };
+    // key <AC11> { [     minus, underscore,           yen,    dead_belowdot ] };
+
+    key <AB01> { [ semicolon,      colon,     paragraph,           degree ] };
+    key <AB02> { [        q,          Q,    adiaeresis,       Adiaeresis ] };
+    // key <AB03> { [     j,   J               ]       };
+    key <AB04> { [        k,          K,            oe,               OE ] };
+    // key <AB05> { [     x,   X               ]       };
+    // key <AB06> { [     b,   B               ]       };
+    key <AB07> { [        m,          M,            mu,               mu ] };
+    key <AB08> { [        w,          W,         aring,            Aring ] };
+    // key <AB09> { [     v,   V               ]       };
+    key <AB10> { [        z,          Z,            ae,               AE ] };
+
+    key <BKSL> { [ backslash,        bar,       notsign,        brokenbar ] };
+
+    include "level3(ralt_switch)"
+};
+
+// Dvorak international without dead keys
+// Stephane Magnenat (stephane at magnenat dot net, http://stephane.magnenat.net)
+// Based on information from http://www.poupinou.org/dvorak/index.html
+//
+//  `   1   2   3   4   5   6   7   8   9   0   [   ]   \
+//                  €
+//
+//      '   ,   .   p   y   f   g   c   r   l   /   =
+//          ä   ê   ë   ü           ç
+//
+//      a   o   e   u   i   d   h   t   n   s   -
+//      à   ô   é   û   î                   ß
+//
+//      ;   q   j   k   x   b   m   w   v   z
+//      â   ö   è   ù   ï
+
+partial alphanumeric_keys
+xkb_symbols "dvorak-alt-intl" {
+
+    name[Group1]= "English (Dvorak alternative international no dead keys)";
+
+    include "us(dvorak)"
+
+    key <AE04> { [         4,  dollar,    EuroSign ] };
+
+    key <AD02> { [     comma,    less,  adiaeresis,       dead_caron ] };
+    key <AD03> { [    period, greater, ecircumflex,   periodcentered   ] };
+    key <AD04> { [         p,       P,  ediaeresis,     dead_cedilla ] };
+    key <AD05> { [         y,       Y,  udiaeresis ] };
+    key <AD08> { [         c,       C,    ccedilla,    dead_abovedot ] };
+
+    key <AC01> { [         a,       A,      agrave ] };
+    key <AC02> { [         o,       O, ocircumflex ] };
+    key <AC03> { [         e,       E,      eacute ] };
+    key <AC04> { [         u,       U, ucircumflex ] };
+    key <AC05> { [         i,       I, icircumflex ] };
+    key <AC10> { [         s,       S,      ssharp ] };
+
+    key <AB01> { [ semicolon,   colon, acircumflex ] };
+    key <AB02> { [         q,       Q,  odiaeresis,      dead_ogonek ] };
+    key <AB03> { [         j,       J,      egrave, dead_doubleacute ] };
+    key <AB04> { [         k,       K,      ugrave ] };
+    key <AB05> { [         x,       X,  idiaeresis ] };
+
+    include "level3(ralt_switch)"
+};
+
+// Left and right handed dvorak layouts
+// by sqweek <sqweek@gmail.com> 2006-01-30
+// Based on the corresponding layouts in the console-tools package.
+partial alphanumeric_keys
+xkb_symbols "dvorak-l" {
+
+    include "us(dvorak)"
+    name[Group1]= "English (left handed Dvorak)";
+
+    key <AE01> {       [ bracketleft,  braceleft       ]       };
+    key <AE02> {       [ bracketright, braceright      ]       };
+    key <AE03> {       [       slash,  question        ]       };
+    key <AE04> {       [           p,  P               ]       };
+    key <AE05> {       [           f,  F               ]       };
+    key <AE06> {       [           m,  M               ]       };
+    key <AE07> {       [           l,  L               ]       };
+    key <AE08> {       [           j,  J               ]       };
+    key <AE09> {       [           4,  dollar          ]       };
+    key <AE10> {       [           3,  numbersign      ]       };
+    key <AE11> {       [           2,  at              ]       };
+    key <AE12> {       [           1,  exclam          ]       };
+
+    key <AD01> {       [   semicolon,  colon           ]       };
+    key <AD02> {       [           q,  Q               ]       };
+    key <AD03> {       [           b,  B               ]       };
+    key <AD04> {       [           y,  Y               ]       };
+    key <AD05> {       [           u,  U               ]       };
+    key <AD06> {       [           r,  R               ]       };
+    key <AD07> {       [           s,  S               ]       };
+    key <AD08> {       [           o,  O               ]       };
+    key <AD09> {       [      period,  greater         ]       };
+    key <AD10> {       [           6,  asciicircum     ]       };
+    key <AD11> {       [           5,  percent         ]       };
+    key <AD12> {       [       equal,  plus            ]       };
+
+    key <AC01> {       [       minus,  underscore      ]       };
+    key <AC02> {       [           k,  K               ]       };
+    key <AC03> {       [           c,  C               ]       };
+    key <AC04> {       [           d,  D               ]       };
+    key <AC05> {       [           t,  T               ]       };
+    key <AC06> {       [           h,  H               ]       };
+    key <AC07> {       [           e,  E               ]       };
+    key <AC08> {       [           a,  A               ]       };
+    key <AC09> {       [           z,  Z               ]       };
+    key <AC10> {       [           8,  asterisk        ]       };
+    key <AC11> {       [           7,  ampersand       ]       };
+
+    key <AB01> {       [  apostrophe,  quotedbl        ]       };
+    key <AB02> {       [           x,  X               ]       };
+    key <AB03> {       [           g,  G               ]       };
+    key <AB04> {       [           v,  V               ]       };
+    key <AB05> {       [           w,  W               ]       };
+    key <AB06> {       [           n,  N               ]       };
+    key <AB07> {       [           i,  I               ]       };
+    key <AB08> {       [       comma,  less            ]       };
+    key <AB09> {       [           0,  parenright      ]       };
+    key <AB10> {       [           9,  parenleft       ]       };
+};
+
+partial alphanumeric_keys
+xkb_symbols "dvorak-r" {
+    
+    include "us(dvorak)"
+    name[Group1]= "English (right handed Dvorak)";
+
+    key <AE01> {       [           1,  exclam          ]       };
+    key <AE02> {       [           2,  at              ]       };
+    key <AE03> {       [           3,  numbersign      ]       };
+    key <AE04> {       [           4,  dollar          ]       };
+    key <AE05> {       [           j,  J               ]       };
+    key <AE06> {       [           l,  L               ]       };
+    key <AE07> {       [           m,  M               ]       };
+    key <AE08> {       [           f,  F               ]       };
+    key <AE09> {       [           p,  P               ]       };
+    key <AE10> {       [       slash,  question        ]       };
+    key <AE11> {       [ bracketleft,  braceleft       ]       };
+    key <AE12> {       [ bracketright, braceright      ]       };
+
+    key <AD01> {       [           5,  percent         ]       };
+    key <AD02> {       [           6,  asciicircum ]   };
+    key <AD03> {       [           q,  Q               ]       };
+    key <AD04> {       [      period,  greater         ]       };
+    key <AD05> {       [           o,  O               ]       };
+    key <AD06> {       [           r,  R               ]       };
+    key <AD07> {       [           s,  S               ]       };
+    key <AD08> {       [           u,  U               ]       };
+    key <AD09> {       [           y,  Y               ]       };
+    key <AD10> {       [           b,  B               ]       };
+    key <AD11> {       [   semicolon,  colon           ]       };
+    key <AD12> {       [       equal,  plus            ]       };
+
+    key <AC01> {       [           7,  ampersand       ]       };
+    key <AC02> {       [           8,  asterisk        ]       };
+    key <AC03> {       [           z,  Z               ]       };
+    key <AC04> {       [           a,  A               ]       };
+    key <AC05> {       [           e,  E               ]       };
+    key <AC06> {       [           h,  H               ]       };
+    key <AC07> {       [           t,  T               ]       };
+    key <AC08> {       [           d,  D               ]       };
+    key <AC09> {       [           c,  C               ]       };
+    key <AC10> {       [           k,  K               ]       };
+    key <AC11> {       [       minus,  underscore      ]       };
+
+    key <AB01> {       [           9,  parenleft       ]       };
+    key <AB02> {       [           0,  parenright      ]       };
+    key <AB03> {       [           x,  X               ]       };
+    key <AB04> {       [       comma,  less            ]       };
+    key <AB05> {       [           i,  I               ]       };
+    key <AB06> {       [           n,  N               ]       };
+    key <AB07> {       [           w,  W               ]       };
+    key <AB08> {       [           v,  V               ]       };
+    key <AB09> {       [           g,  G               ]       };
+    key <AB10> {       [  apostrophe,  quotedbl        ]       };
+};
+
+// Classic dvorak layout
+// by Piter Punk <piterpk@terra.com.br> - 2006-07-06 
+// Based on dvorak layout and e-mail from Russel L. Harris rlharris@oplink.net 
+// on xorg list.
+partial alphanumeric_keys
+xkb_symbols "dvorak-classic" {
+
+    name[Group1]= "English (classic Dvorak)";
+
+    // Alphanumeric section
+
+    key <TLDE> { [       grave,        asciitilde, dead_grave, dead_tilde      ] };
+
+    key <AE01> { [ bracketleft,        braceleft       ]       };
+    key <AE02> { [         7,  ampersand       ]       };
+    key <AE03> { [         5,  percent         ]       };
+    key <AE04> { [         3,  numbersign      ]       };
+    key <AE05> { [         1,  exclam          ]       };
+    key <AE06> { [         9,  parenleft,  dead_grave] };
+    key <AE07> { [         0,  parenright      ]       };
+    key <AE08> { [         2,  at              ]       };
+    key <AE09> { [         4,  dollar          ]       };
+    key <AE10> { [         6,  asciicircum, dead_circumflex, dead_circumflex ] };
+    key <AE11> { [         8,  asterisk        ]       };
+    key <AE12> { [ bracketright, braceright,  dead_tilde] };
+
+    key <AD01> { [     slash,  question        ]       };
+    key <AD02> { [     comma,  less,   dead_cedilla, dead_caron        ] };
+    key <AD03> { [      period,        greater, dead_abovedot, periodcentered  ] };
+    key <AD04> { [         p,  P               ]       };
+    key <AD05> { [         y,  Y               ]       };
+    key <AD06> { [         f,  F               ]       };
+    key <AD07> { [         g,  G               ]       };
+    key <AD08> { [         c,  C               ]       };
+    key <AD09> { [         r,  R               ]       };
+    key <AD10> { [         l,  L               ]       };
+    key <AD11> { [  apostrophe,        quotedbl, dead_acute, dead_diaeresis    ] };
+    key <AD12> { [     equal,  plus            ]       };
+
+    key <AC01> { [         a,  A               ]       };
+    key <AC02> { [         o,  O               ]       };
+    key <AC03> { [         e,  E               ]       };
+    key <AC04> { [         u,  U               ]       };
+    key <AC05> { [         i,  I               ]       };
+    key <AC06> { [         d,  D               ]       };
+    key <AC07> { [         h,  H               ]       };
+    key <AC08> { [         t,  T               ]       };
+    key <AC09> { [         n,  N               ]       };
+    key <AC10> { [         s,  S               ]       };
+    key <AC11> { [     minus,  underscore      ]       };
+
+    key <AB01> { [   semicolon,        colon, dead_ogonek, dead_doubleacute ] };
+    key <AB02> { [         q,  Q               ]       };
+    key <AB03> { [         j,  J               ]       };
+    key <AB04> { [         k,  K               ]       };
+    key <AB05> { [         x,  X               ]       };
+    key <AB06> { [         b,  B               ]       };
+    key <AB07> { [         m,  M               ]       };
+    key <AB08> { [         w,  W               ]       };
+    key <AB09> { [         v,  V               ]       };
+    key <AB10> { [         z,  Z               ]       };
+    key <BKSL> { [  backslash,  bar             ]       };
+};
+
+// Programmer Dvorak, by Roland Kaufmann <rlndkfmn at gmail dot com>
+// License: BSD, available at <http://www.kaufmann.no/roland/dvorak/license.html>
+// Main features: Numbers are in shift position (like French), symbols have been
+// placed in locations that give good hand-alternation and finger rolling with
+// symbols that usually follows, accented characters are possible for I18N.
+partial alphanumeric_keys
+xkb_symbols "dvp" {
+    include "us(dvorak)"
+
+    name[Group1] = "English (programmer Dvorak)";
+
+    //             Unmodified       Shift           AltGr            Shift+AltGr
+    // symbols row, left side
+    key <TLDE> { [ dollar,          asciitilde,     dead_tilde                  ] };
+    key <AE01> { [ ampersand,       percent                                     ] };
+    key <AE02> { [ bracketleft,     7,              currency                    ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+    key <AE03> { [ braceleft,       5,              cent                        ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+    key <AE04> { [ braceright,      3,              yen                         ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+    key <AE05> { [ parenleft,       1,              EuroSign                    ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+    key <AE06> { [ equal,           9,              sterling                    ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+
+    // symbols row, right side
+    key <AE07> { [ asterisk,        0                                           ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+    key <AE08> { [ parenright,      2,              onehalf                     ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+    key <AE09> { [ plus,            4                                           ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+    key <AE10> { [ bracketright,    6                                           ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+    key <AE11> { [ exclam,          8,              exclamdown                  ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+    key <AE12> { [ numbersign,      grave,          dead_grave                  ] };
+    key <BKSP> { [ BackSpace,       BackSpace                                   ] };
+
+    // upper row, left side
+    key <AD01> { [ semicolon,       colon,          dead_diaeresis              ] };
+    key <AD02> { [ comma,           less,           guillemotleft               ] };
+    key <AD03> { [ period,          greater,        guillemotright              ] };
+    key <AD04> { [ p,               P,              paragraph,       section    ] };
+    key <AD05> { [ y,               Y,              udiaeresis,      Udiaeresis ] };
+
+    // upper row, right side
+    key <AD08> { [ c,               C,              ccedilla,        Ccedilla   ] };
+    key <AD09> { [ r,               R,              registered,      trademark  ] };
+    key <AD11> { [ slash,           question,       questiondown                ] };
+    key <AD12> { [ at,              asciicircum,    dead_circumflex, dead_caron ] };
+
+    // home row, left side
+    key <AC01> { [ a,               A,              aring,           Aring      ] };
+    key <AC02> { [ o,               O,              oslash,          Ooblique   ] };
+    key <AC03> { [ e,               E,              ae,              AE         ] };
+    key <AC04> { [ u,               U,              eacute,          Eacute     ] };
+
+    // home row, right side
+    key <AC06> { [ d,               D,              eth,             ETH        ] };
+    key <AC07> { [ h,               H,              dead_acute                  ] };
+    key <AC08> { [ t,               T,              thorn,           THORN      ] };
+    key <AC09> { [ n,               N,              ntilde,          Ntilde     ] };
+    key <AC10> { [ s,               S,              ssharp                      ] };
+    key <AC11> { [ minus,           underscore,     hyphen                      ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+    key <BKSL> { [ backslash,       bar                                         ] };
+
+    // lower row, left side
+    key <AB01> { [ apostrophe,      quotedbl,       dead_acute                  ] };
+};
+
+// phonetic layout for Russian letters on an US keyboard
+// by Ivan Popov <pin@konvalo.org> 2005-07-17
+
+// level3 modifier is a shortcut to the "us" meaning of the keys where
+// we place cyrillic letters, handy for accessing the corresponding
+// punctuation marks.
+// It is important to have access to punctuation marks, and the rest of
+// alphabetical keys are added for being consequent so that the users
+// can expect the level3 modifier to give what the key label shows.
+
+partial alphanumeric_keys
+xkb_symbols "rus" {
+
+    name[Group1]= "Russian (US, phonetic)";
+
+    include "us(basic)"
+
+key.type[group1]="FOUR_LEVEL_ALPHABETIC";
+
+    key        <LatA> {        [ Cyrillic_a, Cyrillic_A ]      };
+    key        <LatB> {        [ Cyrillic_be, Cyrillic_BE ]    };
+    key        <LatW> {        [ Cyrillic_ve, Cyrillic_VE ]    };
+    key        <LatG> {        [ Cyrillic_ghe, Cyrillic_GHE ]  };
+    key        <LatD> {        [ Cyrillic_de, Cyrillic_DE ]    };
+    key        <LatE> {        [ Cyrillic_ie, Cyrillic_IE ]    };
+    key        <TLDE> {        [ Cyrillic_io, Cyrillic_IO, grave, asciitilde ] };
+    key        <LatV> {        [ Cyrillic_zhe, Cyrillic_ZHE ]  };
+    key        <LatZ> {        [ Cyrillic_ze, Cyrillic_ZE ]    };
+    key        <LatI> {        [ Cyrillic_i, Cyrillic_I ]      };
+    key        <LatJ> {        [ Cyrillic_shorti, Cyrillic_SHORTI ]    };
+    key        <LatK> {        [ Cyrillic_ka, Cyrillic_KA ]    };
+    key        <LatL> {        [ Cyrillic_el, Cyrillic_EL ]    };
+    key        <LatM> {        [ Cyrillic_em, Cyrillic_EM ]    };
+    key        <LatN> {        [ Cyrillic_en, Cyrillic_EN ]    };
+    key        <LatO> {        [ Cyrillic_o, Cyrillic_O ]      };
+    key        <LatP> {        [ Cyrillic_pe, Cyrillic_PE ]    };
+    key        <LatR> {        [ Cyrillic_er, Cyrillic_ER ]    };
+    key        <LatS> {        [ Cyrillic_es, Cyrillic_ES ]    };
+    key        <LatT> {        [ Cyrillic_te, Cyrillic_TE ]    };
+    key        <LatU> {        [ Cyrillic_u, Cyrillic_U ]      };
+    key        <LatF> {        [ Cyrillic_ef, Cyrillic_EF ]    };
+    key        <LatH> {        [ Cyrillic_ha, Cyrillic_HA ]    };
+    key        <LatC> {        [ Cyrillic_tse, Cyrillic_TSE ]  };
+    key <AC10> {        [ Cyrillic_che, Cyrillic_CHE, semicolon, colon ] };
+    key        <AD11> {        [ Cyrillic_sha, Cyrillic_SHA, bracketleft, braceleft] };
+    key        <AD12> {        [ Cyrillic_shcha, Cyrillic_SHCHA, bracketright, braceright ]    };
+    key <AE12> {        [ Cyrillic_hardsign, Cyrillic_HARDSIGN, equal, plus ] };
+    key        <LatY> {        [ Cyrillic_yeru, Cyrillic_YERU ]        };
+    key        <LatX> {        [ Cyrillic_softsign, Cyrillic_SOFTSIGN ]        };
+    key        <BKSL> {        [ Cyrillic_e, Cyrillic_E, backslash, bar ]      };
+    key <AC11> {        [ Cyrillic_yu, Cyrillic_YU, apostrophe, quotedbl ] };
+    key        <LatQ> {        [ Cyrillic_ya, Cyrillic_YA ]    };
+
+    include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "mac" {
+
+    include "us(basic)"
+    name[Group1]= "English (Macintosh)";
+    key.type[group1]="FOUR_LEVEL";
+
+    // Slightly improvised from http://homepage.mac.com/thgewecke/kblayout.jpg
+    key <LSGT> { [   section,  plusminus,       section,        plusminus ] };
+    key <TLDE> { [     grave, asciitilde,    dead_grave,        dead_horn ] };
+    key <AE01> { [        1,     exclam,    exclamdown,            U2044 ] };
+    key <AE02> { [        2,         at,     trademark,         EuroSign ] };
+    key <AE03> { [        3, numbersign,      sterling,            U2039 ] };
+    key <AE04> { [        4,     dollar,          cent,            U203A ] };
+    key <AE05> { [        5,    percent,      infinity,            UFB01 ] };
+    key <AE06> { [         6,asciicircum,       section,            UFB02 ] };
+    key <AE07> { [        7,  ampersand,     paragraph,     doubledagger ] };
+    key <AE08> { [        8,   asterisk, enfilledcircbullet,      degree ] };
+    key <AE09> { [        9,  parenleft,   ordfeminine,   periodcentered ] };
+    key <AE10> { [        0, parenright,     masculine,singlelowquotemark] };
+    key <AE11> { [     minus, underscore,        endash,           emdash ] };
+    key <AE12> { [     equal,       plus,      notequal,        plusminus ] };
+
+    key <AD01> { [        q,          Q,            oe,               OE ] };
+    key <AD02> { [        w,          W,         U2211,doublelowquotemark] };
+    key <AD03> { [        e,          E,    dead_acute,            acute ] };
+    key <AD04> { [        r,          R,    registered,            U2030 ] };
+    key <AD05> { [        t,          T,        dagger,       dead_caron ] };
+    key <AD06> { [        y,          Y,           yen,       onequarter ] };
+    key <AD07> { [        u,        U,  dead_diaeresis,        diaeresis ] };
+    key <AD08> { [        i,        I, dead_circumflex,            U02C6 ] };
+    key <AD09> { [        o,          O,        oslash,         Ooblique ] };
+    key <AD10> { [        p,          P,      Greek_pi,            U220F ] };
+    key <AD11> { [ bracketleft,  braceleft, leftdoublequotemark, rightdoublequotemark ] };
+    key <AD12> { [bracketright, braceright, leftsinglequotemark, rightsinglequotemark ] };
+    key <BKSL> { [ backslash,        bar, guillemotleft,   guillemotright ] };
+
+    key <AC01> { [        a,          A,         aring,            Aring ] };
+    key <AC02> { [        s,          S,        ssharp,      dead_stroke ] };
+    key <AC03> { [        d,          D, partialderivative,          eth ] };
+    key <AC04> { [        f,          F,      function,        dead_hook ] };
+    key <AC05> { [        g,          G,     copyright, dead_doubleacute ] };
+    key <AC06> { [        h,          H, dead_abovedot,    dead_belowdot ] };
+    key <AC07> { [        j,          J,         U2206,          onehalf ] };
+    key <AC08> { [        k,          K,dead_abovering,            UF8FF ] };
+
+    key <AC09> { [        l,          L,       notsign,            THORN ] };
+    key <AC10> { [ semicolon,      colon,         U2026,            thorn ] };
+    key <AC11> { [apostrophe,   quotedbl,            ae,               AE ] };
+
+    key <AB01> { [        z,          Z,   Greek_OMEGA,     dead_cedilla ] };
+    key <AB02> { [        x,          X,         U2248,      dead_ogonek ] };
+                               // unclear whether "approxeq" is 2248 or 2245
+    key <AB03> { [        c,          C,      ccedilla,         Ccedilla ] };
+    key <AB04> { [        v,          V,    squareroot,            U25CA ] };
+    key <AB05> { [        b,          B,      integral,         idotless ] };
+    key <AB06> { [        n,          N,    dead_tilde,            U02DC ] };
+    key <AB07> { [        m,          M,            mu,    threequarters ] };
+    key <AB08> { [     comma,       less, lessthanequal,      dead_macron ] };
+    key <AB09> { [    period,    greater, greaterthanequal,    dead_breve ] };
+    key <AB10> { [     slash,   question,      division,     questiondown ] };
+
+    include "level3(ralt_switch)"
+};
+// Colemak symbols for xkb on X.Org Server 7.x
+// 2006-01-01 Shai Coleman, http://colemak.com/ . Public domain.
+
+partial alphanumeric_keys
+xkb_symbols "colemak" {
+    include "us"
+    name[Group1]= "English (Colemak)";
+
+    // Alphanumeric section
+    key <TLDE> { [        grave,   asciitilde,      dead_tilde,       asciitilde ] };
+    key <AE01> { [            1,       exclam,      exclamdown,      onesuperior ] };
+    key <AE02> { [            2,           at,       masculine,      twosuperior ] };
+    key <AE03> { [            3,   numbersign,     ordfeminine,    threesuperior ] };
+    key <AE04> { [            4,       dollar,            cent,         sterling ] };
+    key <AE05> { [            5,      percent,        EuroSign,              yen ] };
+    key <AE06> { [            6,  asciicircum,         hstroke,          Hstroke ] };
+    key <AE07> { [            7,    ampersand,             eth,              ETH ] };
+    key <AE08> { [            8,     asterisk,           thorn,            THORN ] };
+    key <AE09> { [            9,    parenleft,  leftsinglequotemark,  leftdoublequotemark ] };
+    key <AE10> { [            0,   parenright, rightsinglequotemark,  rightdoublequotemark ] };
+    key <AE11> { [        minus,   underscore,          endash,           emdash ] };
+    key <AE12> { [        equal,         plus,        multiply,         division ] };
+
+    key <AD01> { [            q,            Q,      adiaeresis,       Adiaeresis ] };
+    key <AD02> { [            w,            W,           aring,            Aring ] };
+    key <AD03> { [            f,            F,          atilde,           Atilde ] };
+    key <AD04> { [            p,            P,          oslash,         Ooblique ] };
+    key <AD05> { [            g,            G,     dead_ogonek,       asciitilde ] };
+    key <AD06> { [            j,            J,         dstroke,          Dstroke ] };
+    key <AD07> { [            l,            L,         lstroke,          Lstroke ] };
+    key <AD08> { [            u,            U,          uacute,           Uacute ] };
+    key <AD09> { [            y,            Y,      udiaeresis,       Udiaeresis ] };
+    key <AD10> { [    semicolon,        colon,      odiaeresis,       Odiaeresis ] };
+    key <AD11> { [  bracketleft,    braceleft,   guillemotleft,        0x1002039 ] };
+    key <AD12> { [ bracketright,   braceright,  guillemotright,        0x100203a ] };
+    key <BKSL> { [    backslash,          bar,      asciitilde,       asciitilde ] };
+
+    key <AC01> { [            a,            A,          aacute,           Aacute ] };
+    key <AC02> { [            r,            R,      dead_grave,       asciitilde ] };
+    key <AC03> { [            s,            S,          ssharp,       asciitilde ] };
+    key <AC04> { [            t,            T,      dead_acute, dead_doubleacute ] };
+    key <AC05> { [            d,            D,  dead_diaeresis,       asciitilde ] };
+    key <AC06> { [            h,            H,      dead_caron,       asciitilde ] };
+    key <AC07> { [            n,            N,          ntilde,           Ntilde ] };
+    key <AC08> { [            e,            E,          eacute,           Eacute ] };
+    key <AC09> { [            i,            I,          iacute,           Iacute ] };
+    key <AC10> { [            o,            O,          oacute,           Oacute ] };
+    key <AC11> { [   apostrophe,     quotedbl,          otilde,           Otilde ] };
+
+    key <AB01> { [            z,            Z,              ae,               AE ] };
+    key <AB02> { [            x,            X, dead_circumflex,       asciitilde ] };
+    key <AB03> { [            c,            C,        ccedilla,         Ccedilla ] };
+    key <AB04> { [            v,            V,              oe,               OE ] };
+    key <AB05> { [            b,            B,      dead_breve,       asciitilde ] };
+    key <AB06> { [            k,            K,  dead_abovering,       asciitilde ] };
+    key <AB07> { [            m,            M,     dead_macron,       asciitilde ] };
+    key <AB08> { [        comma,         less,    dead_cedilla,       asciitilde ] };
+    key <AB09> { [       period,      greater,   dead_abovedot,       asciitilde ] };
+    key <AB10> { [        slash,     question,    questiondown,       asciitilde ] };
+
+    key <CAPS> { [    BackSpace,    BackSpace,       BackSpace,        BackSpace ] };
+    key <LSGT> { [        minus,   underscore,          endash,           emdash ] };
+    key <SPCE> { [        space,        space,           space,     nobreakspace ] };
+
+    include "level3(ralt_switch)"
+};
+
+// I do NOT like dead-keys - the International keyboard as defined by Microsoft
+// doesn't fit my needs. Why use two keystrokes for all simple characters (eg '
+// and <space> generates a single ') just to have an é (eacute) in two strokes
+// as well? I type ' more often than é (eacute).
+//
+// This file works just like a regular keyboard, BUT has all dead-keys
+// accessible at level3 (through AltGr). An ë (ediaeresis) is now: AltGr+"
+// followed by an e. In other words, this keyboard is not international as long
+// as you leave the right Alt key alone.
+//
+// The original MS International keyboard was intended for Latin1 (iso8859-1).
+// With the introduction of iso8859-15, the (important) ligature oe (and OE)
+// became available. I added them next to ae. Because I write ediaeresis more
+// often than registered, I moved registered to be next to copyright and added
+// ediaeresis and idiaeresis. - Adriaan
+
+partial alphanumeric_keys
+xkb_symbols "altgr-intl" {
+
+   name[Group1]= "English (international AltGr dead keys)";
+
+   include "us(intl)"
+
+// five dead keys moved into level3:
+
+   key <TLDE> { [    grave, asciitilde,  dead_grave,   dead_tilde      ] };
+   key <AC11> { [apostrophe,quotedbl,    dead_acute,   dead_diaeresis  ] };
+
+// diversions from the MS Intl keyboard:
+
+   key <AE01> { [        1, exclam,      onesuperior,  exclamdown      ] };
+   key <AD04> { [        r, R,           ediaeresis,   Ediaeresis      ] };
+   key <AC07> { [        j, J,           idiaeresis,   Idiaeresis      ] };
+   key <AB02> { [        x, X,           oe,           OE              ] };
+   key <AB04> { [        v, V,           registered,   registered      ] };
+
+// onequarter etc (not in iso8859-15) moved to get three unshifted deadkeys:
+
+   key <AE06> { [        6, asciicircum, dead_circumflex, onequarter    ] };
+   key <AE07> { [        7, ampersand,   dead_horn,       onehalf       ] };
+   key <AE08> { [        8, asterisk,    dead_ogonek,     threequarters ] };
+
+   include "level3(ralt_switch)"
+};
+
+// Intel ClassmatePC Keyboard Layout
+// by Piter PUNK <piterpk@terra.com.br>
+//
+// The keyboard layouts below maps the us(basic), us(intl) and us(alt-intl)
+// to ClassmatePC keyboard. All layouts uses RCTL as level3(switch) since
+// the keyboard doesn't have AltGr key. The EuroSign is engraved at 5 key.
+
+// classmate - us(basic)
+partial alphanumeric_keys
+xkb_symbols "classmate" {
+    include "us(basic)"
+    name[Group1]= "USA - ClassmatePC";
+
+    key <LSGT> { [ backslash,  bar,            backslash,      bar ] };
+
+    include "eurosign(5)"
+    include "level3(switch)"
+};
+
+// classmate-intl - us(intl)
+// RCTL is generated by Fn+Alt, because that, when trying to access
+// the level3 symbols at 7,8,9,0,u,i,o,p,j,k,l,;,m,. and / we got
+// the keypad keycodes. The keypad is changed to make Fn+Alt+<KP_key>
+// generate the same symbol as the original key.
+partial alphanumeric_keys
+xkb_symbols "classmate-intl" {
+    include "us(intl)"
+    name[Group1]= "USA - ClassmatePC (International)";
+    key.type[Group1]="FOUR_LEVEL";
+
+    key <LSGT> { [ backslash,  bar,            backslash,      bar ] };
+
+    key <KP7>  { [     KP_Home,                KP_7,   
+                       onehalf,                dead_horn       ] };
+    key <KP8>  { [     KP_Up,                  KP_8,
+                       threequarters,          dead_ogonek     ] };
+    key <KP9>  { [     KP_Prior,               KP_9,
+                       leftsinglequotemark,    dead_breve      ] };
+    key <KPMU> { [     KP_Multiply,            KP_Multiply,
+                       rightsinglequotemark,   dead_abovering  ] };
+
+    key <KP4>  { [     KP_Left,                KP_4,
+                       uacute,                 Uacute          ] };
+    key <KP5>  { [     KP_Begin,               KP_5,
+                       iacute,                 Iacute          ] };
+    key <KP6>  { [     KP_Right,               KP_6,
+                       oacute,                 Oacute          ] };
+    key <KPSU> { [     KP_Subtract,            KP_Subtract,
+                       odiaeresis,             Odiaeresis      ] };
+
+    key <KP2>  { [     KP_Down,                KP_2,
+                       oe,                     OE              ] };
+    key <KP3>  { [     KP_Next,                KP_3,
+                       oslash,                 Ooblique        ] };
+    key <KPAD> { [     KP_Add,                 KP_Add,
+                       paragraph,              degree          ] };
+   
+    key <KP0>  { [     KP_Insert,              KP_0,
+                       mu,                     mu      ] };
+    key <KPDL> { [     KP_Delete,              KP_Decimal,
+                       dead_abovedot,          dead_caron      ] }; 
+    key <KPDV> { [     KP_Divide,              KP_Divide,
+                       questiondown,           dead_hook       ] };
+
+    include "level3(switch)"
+};
+
+// classmate-alt-intl - us(alt-intl)
+// RCTL is generated by Fn+Alt, because that, when trying to access
+// the level3 symbols at 7,8,9,0,u,i,o,p,j,k,l,;,m,. and / we got
+// the keypad keycodes. The keypad is changed to make Fn+Alt+<KP_key>
+// generate the same symbol as the original key.
+partial alphanumeric_keys
+xkb_symbols "classmate-alt-intl" {
+    include "us(alt-intl)"
+    name[Group1]= "USA - ClassmatePC (Alternative international)";
+    key.type[Group1]="FOUR_LEVEL";
+
+    key <LSGT> { [ backslash,  bar,            backslash,      bar ] };
+
+    key <KPSU> { [     KP_Subtract,            KP_Subtract     ] };
+
+    key <KP9>  { [     KP_Prior,               KP_9,
+                       leftsinglequotemark,    dead_breve      ] };
+    key <KPMU> { [     KP_Multiply,            KP_Multiply,
+                       rightsinglequotemark,   dead_abovering  ] };
+
+    key <KPAD> { [     KP_Add,                 KP_Add,
+                       dead_ogonek,            dead_diaeresis   ] };
+    
+    key <KPDL> { [     KP_Delete,              KP_Decimal,
+                       dead_abovedot,          dead_circumflex ] }; 
+    key <KPDV> { [     KP_Divide,              KP_Divide,
+                       dead_hook,              dead_hook       ] };
+
+    include "level3(switch)"
+};
+
+// classmate-altgr-intl - us(altgr-intl)
+// RCTL is generated by Fn+Alt, because that, when trying to access
+// the level3 symbols at 7,8,9,0,u,i,o,p,j,k,l,;,m,. and / we got
+// the keypad keycodes. The keypad is changed to make Fn+Alt+<KP_key>
+// generate the same symbol as the original key.
+partial alphanumeric_keys
+xkb_symbols "classmate-altgr-intl" {
+    include "us(altgr-intl)"
+    name[Group1]= "USA - ClassmatePC (International Fn+Alt dead-keys)";
+    key.type[Group1]="FOUR_LEVEL";
+
+    key <LSGT> { [ backslash,  bar,            backslash,      bar ] };
+
+    key <KP7>  { [     KP_Home,                KP_7,   
+                       dead_horn,              dead_horn       ] };
+    key <KP8>  { [     KP_Up,                  KP_8,
+                       dead_ogonek,            dead_ogonek     ] };
+    key <KP9>  { [     KP_Prior,               KP_9,
+                       leftsinglequotemark,    dead_breve      ] };
+    key <KPMU> { [     KP_Multiply,            KP_Multiply,
+                       rightsinglequotemark,   dead_abovering  ] };
+
+    key <KP4>  { [     KP_Left,                KP_4,
+                       uacute,                 Uacute          ] };
+    key <KP5>  { [     KP_Begin,               KP_5,
+                       iacute,                 Iacute          ] };
+    key <KP6>  { [     KP_Right,               KP_6,
+                       oacute,                 Oacute          ] };
+    key <KPSU> { [     KP_Subtract,            KP_Subtract,
+                       odiaeresis,             Odiaeresis      ] };
+
+    key <KP1>  { [     KP_End,                 KP_1,
+                       idiaeresis,             Idiaeresis      ] };
+    key <KP2>  { [     KP_Down,                KP_2,
+                       oe,                     OE              ] };
+    key <KP3>  { [     KP_Next,                KP_3,
+                       oslash,                 Ooblique        ] };
+    key <KPAD> { [     KP_Add,                 KP_Add,
+                       paragraph,              degree          ] };
+   
+    key <KP0>  { [     KP_Insert,              KP_0,
+                       mu,                     mu      ] };
+    key <KPDL> { [     KP_Delete,              KP_Decimal,
+                       dead_abovedot,          dead_caron      ] }; 
+    key <KPDV> { [     KP_Divide,              KP_Divide,
+                       questiondown,           dead_hook       ] };
+
+    include "level3(switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "olpc" {
+
+   include "us(basic)"
+   name[Group1]= "English (US)";
+
+   // OLPC international US English keyboard layout.
+   // It's a little different from the usual international layout.
+   // See: http://wiki.laptop.org/go/Image:Keyboard_english.png
+
+   key <TLDE> { [     grave, asciitilde,    dead_grave, dead_tilde ] };
+   key <AE01> { [         1,     exclam,    exclamdown, exclamdown ] };
+   key <AE02> { [         2,         at,       notsign,    notsign ] };
+   key <AE03> { [         3, numbersign,     0x1000300,  0x1000300 ] }; // combining grave
+   key <AE04> { [         4,     dollar,     0x1000301,  0x1000301 ] }; // combining acute
+   key <AE05> { [         5,    percent,     0x1000306,  0x1000306 ] }; // combining breve above
+   key <AE06> { [         6,asciicircum,     0x100030A,  0x100030A ] }; // combining ring above
+   key <AE07> { [         7,  ampersand,     0x1000302,  0x1000302 ] }; // combining circumflex above
+   key <AE08> { [         8,   asterisk,     0x100030C,  0x100030C ] }; // combining caron above
+   key <AE09> { [         9,  parenleft,     0x1000307,  0x1000307 ] }; // combining dot above
+   key <AE10> { [         0, parenright,     0x1000308,  0x1000308 ] }; // combining diaeresis above
+   key <AE11> { [     minus, underscore,     0x1000304,  0x1000304 ] }; // combining macron above
+   key <AE12> { [     equal,       plus,     0x1000303,  0x1000303 ] }; // combining tilde above
+
+   key <AD01> { [         q,          Q,  Greek_omega, Greek_OMEGA ] };
+   key <AD02> { [         w,          W,       oslash,      Oslash ] };
+   key <AD03> { [         e,          E,           oe,          OE ] };
+   key <AD04> { [         r,          R,    0x1000327,   0x1000327 ] }; // combining cedilla
+   key <AD05> { [         t,          T,    0x100032E,   0x100032E ] }; // combining breve below
+   key <AD06> { [         y,          Y,    0x1000325,   0x1000325 ] }; // combining ring below
+   key <AD07> { [         u,          U,    0x100032D,   0x100032D ] }; // combining circumflex below
+   key <AD08> { [         i,          I,    0x100032C,   0x100032C ] }; // combining caron below
+   key <AD09> { [         o,          O,    0x1000323,   0x1000323 ] }; // combining dot below
+   key <AD10> { [         p,          P,    0x1000324,   0x1000324 ] }; // combining diaeresis below
+   key <AD11> { [ bracketleft,  braceleft,  0x1000331,   0x1000331 ] }; // combining macron below
+   key <AD12> { [bracketright, braceright,  0x1000330,   0x1000330 ] }; // combining tilde below
+
+   key <AC01>  { [         a,          A,          ae,               AE ] };
+   key <AC02>  { [         s,          S,      ssharp,        0x1001E9C ] }; // uppercase S sharp
+   key <AC03>  { [         d,          D,         eth,              ETH ] };
+   key <AC04>  { [         f,          F,       thorn,            THORN ] };
+   key <AC06>  { [         h,          H,    sterling,         sterling ] };
+   key <AC07>  { [         j,          J,    EuroSign,         EuroSign ] };
+   key <AC10>  { [ semicolon,      colon,   masculine,      ordfeminine ] };
+   key <AC11>  { [ apostrophe,  quotedbl,    currency,         currency ] };
+   key <BKSL>  { [ backslash,        bar,      section,         section ] };
+
+   key <AB03>  { [         c,          C,    ccedilla,         Ccedilla ] };
+   key <AB06>  { [         n,          N,      ntilde,           Ntilde ] };
+   key <AB07>  { [         m,          M,          mu,               mu ] };
+   key <AB08>  { [     comma,     less,  guillemotleft,   guillemotleft ] };
+   key <AB09>  { [    period,  greater, guillemotright,  guillemotright ] };
+   key <AB10>  { [     slash,   question, questiondown,    questiondown ] };
+
+   key <I219>  { [  multiply,   division, ISO_Next_Group, ISO_Prev_Group ] };
+
+   include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "olpc2" {
+   include "us(olpc)"
+   name[Group1]= "English (layout toggle on multiply/divide key)";
+   include "group(olpc)"
+};
+
+// Based on Cherokee Nation Official Layout
+// http://www.cherokee.org/extras/downloads/font/Keyboard.htm
+
+partial alphanumeric_keys modifier_keys
+xkb_symbols "chr" {
+
+    name[Group1]= "Cherokee";
+    key.type[group1]="ALPHABETIC";
+
+    // Alphanumeric section
+    key <TLDE> { [      grave,      U13CA ] };
+    key <AE01> { [          1,      U13B1 ] };
+    key <AE02> { [          2,      U13C7 ] };
+    key <AE03> { [          3,      U13E7 ] };
+    key <AE04> { [      U13D9,      U13B0 ] };
+    key <AE05> { [      U13E6,      U13B9 ] };
+    key <AE06> { [      U13DC,      U13DD ] };
+    key <AE07> { [      U13CB,      U13E1 ] };
+    key <AE08> { [      U13D6,      U13BA ] };
+    key <AE09> { [      U13D2,  parenleft ] };
+    key <AE10> { [      U13C4, parenright ] };
+    key <AE11> { [      U13BF,      U13BC ] };
+    key <AE12> { [      U13F3,      U13BD ] };
+
+    key <AD01> { [      U13AA,      U13C6 ] };
+    key <AD02> { [      U13B3,      U13EB ] };
+    key <AD03> { [      U13A1,      U13E3 ] };
+    key <AD04> { [      U13DB,      U13CF ] };
+    key <AD05> { [      U13D4,      U13D8 ] };
+    key <AD06> { [      U13EF,      U13F2 ] };
+    key <AD07> { [      U13A4,      U13AD ] };
+    key <AD08> { [      U13A2,      U13F1 ] };
+    key <AD09> { [      U13A3,      U13EC ] };
+    key <AD10> { [      U13C1,      U13EA ] };
+    key <AD11> { [      U13D5,      U13D1 ] };
+    key <AD12> { [      U13B6,      U13E4 ] };
+    key <BKSL> { [      U13E9,      U13EE ] };
+
+    key <AC01> { [      U13A0,      U13CC ] };
+    key <AC02> { [      U13CD,      U13CE ] };
+    key <AC03> { [      U13D7,      U13D0 ] };
+    key <AC04> { [      U13A9,      U13C8 ] };
+    key <AC05> { [      U13A6,      U13E5 ] };
+    key <AC06> { [      U13AF,      U13B2 ] };
+    key <AC07> { [      U13DA,      U13AB ] };
+    key <AC08> { [      U13B8,      U13A7 ] };
+    key <AC09> { [      U13B5,      U13AE ] };
+    key <AC10> { [      U13E8,      U13E0 ] };
+    key <AC11> { [ apostrophe,   quotedbl ] };
+
+    key <AB01> { [      U13AC,      U13C3 ] };
+    key <AB02> { [      U13F4,      U13ED ] };
+    key <AB03> { [      U13D3,      U13DF ] };
+    key <AB04> { [      U13A5,      U13DE ] };
+    key <AB05> { [      U13A8,      U13F0 ] };
+    key <AB06> { [      U13BE,      U13BB ] };
+    key <AB07> { [      U13C5,      U13B7 ] };
+    key <AB08> { [      comma,      U13E2 ] };
+    key <AB09> { [     period,      U13B4 ] };
+    key <AB10> { [      U13C2,      U13C9 ] };
+
+    // End alphanumeric section
+};
+
+// Serbian charecters added as third level symbols to US keyboard layout.
+
+partial alphanumeric_keys
+xkb_symbols "hbs" {
+
+  name[Group1]= "Serbo-Croatian (US)";
+
+  include "us"
+
+  key <TLDE> { [ grave, asciitilde ] };
+  key <AE06> { [ 6, dead_caron, asciicircum, asciicircum ] };
+  key <AC09> { [ l, L, U1C9, U1C8 ] };
+  key <AB06> { [ n, N, U1CC, U1CB ] };
+  key <AB01> { [ z, Z, U1C6, U1C5 ] };
+  key <AD03> { [ e, E, EuroSign, cent ] };
+  key <AC03> { [ d, D, dstroke, Dstroke ] };
+  key <AC11> { [ dead_acute, quotedbl, apostrophe, apostrophe ] };
+  key <SPCE> { [ space, space, nobreakspace, nobreakspace ] };
+  key <AB08> { [ comma, less, NoSymbol, guillemotright ] };
+  key <AB09> { [ period, greater, NoSymbol, guillemotleft ] };
+
+  include "level3(ralt_switch)"
+};
+
+//based on http://upload.wikimedia.org/wikipedia/commons/1/18/T-Mobile_G1_launch_event_2.jpg
+partial alphanumeric_keys
+xkb_symbols "htcdream" {
+        include "inet(htcdream)"
+        name[Group1]= "English (US)";
+
+        //second row
+        key <AD01> { [ q, Q, Tab, Tab ] };
+        key <AD02> { [ w, W, grave, grave ] };
+        key <AD03> { [ e, E, underscore, underscore ] };
+        key <AD04> { [ r, R, sterling, sterling ] };
+        key <AD05> { [ t, T, EuroSign, EuroSign ] };
+        key <AD06> { [ y, Y, division, division ] };
+        key <AD07> { [ u, U, multiply, multiply ] };
+        key <AD08> { [ i, I, minus, minus ] };
+        key <AD09> { [ o, O, plus, plus ] };
+        key <AD10> { [ p, P, equal, equal ] };
+
+        //third row
+        key <AC01> { [ a, A, NoSymbol, NoSymbol ] };
+        key <AC02> { [ s, S, bar, bar ] };
+        key <AC03> { [ d ,D, backslash, backslash ] };
+        key <AC04> { [ f, F, braceleft, braceleft ] };
+        key <AC05> { [ g, G, braceright, braceright ] };
+        key <AC06> { [ h, H, colon, colon ] };
+        key <AC07> { [ j, J, semicolon, semicolon ] };
+        key <AC08> { [ k, K, quotedbl, quotedbl ] };
+        key <AC09> { [ l, L, apostrophe, apostrophe ] };
+
+        //forth row
+        key <AB01> { [ z, Z, NoSymbol, NoSymbol ] };
+        key <AB02> { [ x, X, NoSymbol, NoSymbol ] };
+        key <AB03> { [ c, C, NoSymbol, NoSymbol ] };
+        key <AB04> { [ v, V, bracketleft, bracketleft ] };
+        key <AB05> { [ b, B, bracketright, bracketright ] };
+        key <AB06> { [ n, N, less, less ] };
+        key <AB07> { [ m, M, greater, greater ] };
+        key <AB08> { [ comma, comma, question, question ] };
+
+        //fifth row
+        key <FK15> { [ at, at, asciitilde, asciitilde ] };
+
+        include "level3(alt_switch)"
+};
+
+// EXTRAS:
+
+// XCompose is out! Unicode combining is in!  For those of us who live
+// on the edge: A keymap using Unicode combining characters instead of
+// deadkeys.  This variation does not deviate from the lame MS-style
+// US-intl layout; but it uses AltGr for combining, like altgr-intl.
+//
+// This might break your font layout layout systems (because they
+// suck), caveat emptor.  Also, most of today's software will count
+// individual combining marks for selection, deletion, character
+// counting &c., and won't be smart enough to do canonical equivalence
+// when searching, &c.
+//
+// With Unicode combining you use "handwriting order", not
+// "typewriting order" as with deadkeys.  That is, you first type the
+// base character, then the diacritics/accents/modifiers.  This has
+// the advantage of avoiding hidden states --- each keypress changes
+// something on screen.
+//
+// TODO: as of now, this duplicates all us(intl) functionality with
+// combining.  With care, perhaps we could add more combining marks
+// not present in intl, and support all major languages.
+partial alphanumeric_keys
+xkb_symbols "intl-unicode" {
+
+ name[Group1]= "English (US, international AltGr Unicode combining)";
+
+ include "us(intl)"
+ include "level3(ralt_switch)"
+
+ // grave, tilde
+ key <TLDE> { [grave, asciitilde, U0300, U0303 ] };
+ // double acute
+ key <AE02> { [ 2, at, twosuperior, U030B ] };
+ // macron
+ key <AE03> { [ 3, numbersign, threesuperior, U0304 ] };
+ // circumflex
+ key <AE06> { [ 6, asciicircum, onequarter, U0302 ] };
+ // horn
+ key <AE07> { [ 7, ampersand, onehalf, U031B ] };
+ // ogonek
+ key <AE08> { [ 8, asterisk, threequarters, U0328 ] };
+ // breve
+ key <AE09> { [         9, parenleft, leftsinglequotemark, U0306 ] };
+ // abovering
+ key <AE10> { [         0, parenright, rightsinglequotemark, U030A ] };
+
+ // belowdot
+ key <AE11> { [ minus, underscore, yen, U0323 ] };
+ // acute, diaeresis
+ key <AC11> { [apostrophe, quotedbl, U0301, U0308 ] };
+ // abovedot, caron
+ key <AB09> { [ period, greater, U0307, U030C ] };
+ // hook
+ key <AB10> { [ slash, question, questiondown, 0309 ] };
+
+ // alt-intl compatibility
+ // cedilla, caron
+ key <AB08> { [ comma, less,    U0327, U030C ] };
+ // ogonek, diaeresis
+ key <AC10> { [ semicolon, colon,       U0328, U0308 ] };
+ // doubleacute, horn
+ key <AE12> { [ equal, plus,    U030B, U031B ] };
+
+ // we don't do combining latin letters and combining enclosures
+ // because support for those is very rare.
+};
+
+// XCompose is out! Unicode combining is in! For those of us who live
+// on the edge: A keymap using Unicode combining characters instead of
+// deadkeys. This variation does break compatibility with us-intl,
+// whenever I thought it would be more mnemonic or Unicodeish.
+partial alphanumeric_keys
+xkb_symbols "alt-intl-unicode" {
+
+ name[Group1]= "English (US, international AltGr Unicode combining, alternative)";
+
+ include "extras/us(intl-unicode)"
+ include "level3(ralt_switch)"
+
+ // easier macron; em-dash.
+ // em-dash is available via compose, but I added here since it's such
+ // an important typographic character.
+ key <AE11> { [ minus, underscore, U0304, U2014 ] };
+
+ // belowdot, abovedot (caron at coma/less key, per above)
+ key <AB09> { [ period, greater, U0323, U0307 ] };
+
+};
+
+partial alphanumeric_keys  
+xkb_symbols "ats" {
+
+    include "us"
+
+    name[Group1]= "Atsina";
+
+    //Using Dead key to get COMBINING COMMA ABOVE for ejectives on
+    //q, l, t, s, m, g, k, p, w, y, r
+    //XCompose key is used for the other accute and grave.
+
+    key <AD03> { [ e, E, eacute, Eacute  ] };
+    key <AD07> { [ u, U, uacute, Uacute  ] };
+    key <AD08> { [ i, I, iacute, Iacute  ] };
+    key <AD09> { [ o, O, oacute, Oacute  ] };
+    key <AD11> { [ bracketleft,        braceleft, U03B8 ] };
+    key <AD12> { [ bracketright, braceright, U010D, U010C ] };
+    //U+010C (uppercase Č) and U+010D (lowercase č).
+
+    key <AC01> { [ a, A, aacute, Aacute  ] };
+
+
+    //Small letter Open use compose to key get acute accent
+    key <AB03> { [ c,  C, U0254, U0186           ] };
+    key <AB08> { [ comma,     less, U0313 ] };
+    key <AB10> { [ slash, question, U0294 ] };
+
+    include "level3(ralt_switch)"
+    include "compose(rctrl)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "crd" {
+
+  include "us"
+
+  name[Group1]= "Couer D'alene Salish";
+
+  // Alphanumeric section
+  key <AD02> { [         w,           W, U02B7, U02B7 ] }; 
+  key <AE07> { [         7,   ampersand, U0294        ] }; 
+  key <AD01> { [         q,           Q, U221A        ] }; 
+  key <AB04> { [         v,           V, U0259        ] }; 
+  key <BKSL> { [ backslash,         bar, U026B        ] }; 
+  key <AD03> { [         e,           E, U025B        ] }; 
+  key <AD08> { [         i,           I, U026A        ] }; 
+  key <AC07> { [         j,           J, U01F0        ] }; 
+  key <AE06> { [         6, asciicircum, U0295        ] }; 
+  key <AC02> { [         s,           S, U0161        ] }; 
+  key <AB03> { [         c,           C, U010D        ] }; 
+  key <AD09> { [         o,           O, U0254        ] }; 
+  key <AB09> { [    period,     greater, U0323        ] }; 
+
+  include "level3(ralt_switch)"
+  include "compose(rctrl)"
+
+  // End alphanumeric section
+};
diff --git a/test/data/types/basic b/test/data/types/basic
new file mode 100644 (file)
index 0000000..552b834
--- /dev/null
@@ -0,0 +1,29 @@
+default xkb_types "basic" {
+
+    // Fairly standard definitions for
+    // the four required key types
+
+    virtual_modifiers NumLock;
+
+    type "ONE_LEVEL" {
+       modifiers = None;
+       map[None] = Level1;
+       level_name[Level1]= "Any";
+    };
+
+    type "TWO_LEVEL" {
+       modifiers = Shift;
+       map[Shift] = Level2;
+       level_name[Level1] = "Base";
+       level_name[Level2] = "Shift";
+    };
+
+    type "ALPHABETIC" {
+        modifiers = Shift+Lock;
+        map[Shift] = Level2;
+        map[Lock] = Level2;
+        level_name[Level1] = "Base";
+        level_name[Level2] = "Caps";
+    };
+
+};
diff --git a/test/data/types/complete b/test/data/types/complete
new file mode 100644 (file)
index 0000000..3b59ca2
--- /dev/null
@@ -0,0 +1,9 @@
+default xkb_types "complete" {
+    include "basic"
+    include "mousekeys"
+    include "pc"
+    include "iso9995"
+    include "level5"
+    include "extra"
+    include "numpad"
+};
diff --git a/test/data/types/extra b/test/data/types/extra
new file mode 100644 (file)
index 0000000..465796b
--- /dev/null
@@ -0,0 +1,161 @@
+partial default xkb_types "default" {
+    // Definition for a key type used for the czech keymap, for instance.
+    // Defines style a with four level shift. It is similar to three_level
+    // type used for iso9995 but it lets the shift key behave "normally".
+
+    virtual_modifiers LevelThree;
+
+    type "FOUR_LEVEL" {
+        modifiers = Shift+LevelThree;
+       map[None] = Level1;
+       map[Shift] = Level2;
+       map[LevelThree] = Level3;
+       map[Shift+LevelThree] = Level4;
+       level_name[Level1] = "Base";
+       level_name[Level2] = "Shift";
+       level_name[Level3] = "Alt Base";  
+       level_name[Level4] = "Shift Alt";  
+    };
+
+    type "FOUR_LEVEL_ALPHABETIC" {
+       modifiers = Shift+Lock+LevelThree;
+       map[None] = Level1;
+       map[Shift] = Level2;
+       map[Lock]  = Level2;
+       map[LevelThree] = Level3;
+       map[Shift+LevelThree] = Level4;
+       map[Lock+LevelThree] =  Level4;
+       map[Lock+Shift+LevelThree] =  Level3;
+       level_name[Level1] = "Base";
+       level_name[Level2] = "Shift";
+       level_name[Level3] = "Alt Base";
+       level_name[Level4] = "Shift Alt";
+    };
+
+    type "FOUR_LEVEL_SEMIALPHABETIC" {
+       modifiers = Shift+Lock+LevelThree;
+       map[None] = Level1;
+       map[Shift] = Level2;
+       map[Lock]  = Level2;
+       map[LevelThree] = Level3;
+       map[Shift+LevelThree] = Level4;
+       map[Lock+LevelThree] =  Level3;
+        map[Lock+Shift+LevelThree] = Level4;
+       preserve[Lock+LevelThree] = Lock;
+       preserve[Lock+Shift+LevelThree] = Lock;
+       level_name[Level1] = "Base";
+       level_name[Level2] = "Shift";
+       level_name[Level3] = "Alt Base";
+       level_name[Level4] = "Shift Alt";
+    };
+
+    // Another four level keypad variant
+    // First two levels are controled by NumLock (with active Shift-ing like
+    // in KEYPAD). LevelThree overrides this mode, with two additional
+    // Shift-ed levels
+    // NumLock state is intentionnaly ignored when LevelThree is active
+    type "FOUR_LEVEL_MIXED_KEYPAD" {
+        modifiers = Shift+NumLock+LevelThree;
+        map[None] = Level1;
+        map[Shift+NumLock] = Level1;
+        map[NumLock] = Level2;
+        map[Shift] = Level2;
+        map[LevelThree] = Level3;
+       map[NumLock+LevelThree] = Level3;
+        map[Shift+LevelThree] = Level4;
+       map[Shift+NumLock+LevelThree] = Level4;
+        level_name[Level1] = "Base";
+        level_name[Level2] = "Number";
+        level_name[Level3] = "Alt Base";
+        level_name[Level4] = "Shift Alt";
+    };
+
+    // Base level, two Shift-ed LevelThree levels, one Ctrl+Alt command level
+    type "FOUR_LEVEL_X" {
+        modifiers = Shift+LevelThree+Control+Alt;
+        map[None] = Level1;
+        map[LevelThree] = Level2;
+       map[Shift+LevelThree] = Level3;
+       map[Control+Alt] = Level4;
+        level_name[Level1] = "Base";
+        level_name[Level2] = "Alt Base";
+        level_name[Level3] = "Shift Alt";
+       level_name[Level4] = "Ctrl+Alt";
+    };
+
+// Special type for keys used in Serbian Latin Unicode map
+// It makes it possible to use all three forms of latin letters 
+// present in Unicode that are made up of two separate letters 
+// (forms like LJ, Lj, and lj; NJ, Nj, and nj; etc)
+
+    type "SEPARATE_CAPS_AND_SHIFT_ALPHABETIC" {
+        modifiers = Shift+Lock+LevelThree;
+        map[None] = Level1;
+        map[Shift] = Level2;
+        map[Lock] = Level4;
+        map[LevelThree] = Level3;
+        map[Shift+LevelThree] = Level4;
+        map[Lock+LevelThree] =  Level3;
+        map[Lock+Shift+LevelThree] = Level3;
+        preserve[Lock]= Lock;
+        preserve[Lock+LevelThree]= Lock;
+        level_name[Level1] = "Base";
+        level_name[Level2] = "Shift";
+        level_name[Level3] = "AltGr Base";
+        level_name[Level4] = "Shift AltGr";
+    };
+
+// type for e.g. german ssharp which is capitalized SS.
+// CHARACTERISTICS:
+// It is FOUR_LEVEL with the exception that the fifth level
+// is mapped to the Lock modifier.
+// If other modifiers are used, the Lock state is ignored.
+// DETAILS ABOUT GERMAN:
+// The capital form of ssharp (called sharp s) only exists for
+// completely capitalized Text, not at the beginning of sentences
+// or nouns (nouns have a captial letter at the beginning in german).
+// The ssharp key, to the right of the zero key, takes this into
+// account and has a questionmark mapped on shift-ssharp since
+// normally no capital version is needed.
+// When typing with active capsLock, this key type is needed to
+// output two capital letters S because this is the only german key
+// whose capital letter is not the same as the one typed with shift.
+
+    type "FOUR_LEVEL_PLUS_LOCK" {
+        modifiers = Shift+Lock+LevelThree;
+        map[None] = Level1;
+        map[Shift] = Level2;
+        map[LevelThree] = Level3;
+        map[Shift+LevelThree] = Level4;
+        map[Lock]  = Level5;
+        map[Lock+Shift] = Level2;
+        map[Lock+LevelThree] = Level3;
+        map[Lock+Shift+LevelThree] = Level4;
+        level_name[Level1] = "Base";
+        level_name[Level2] = "Shift";
+        level_name[Level3] = "Alt Base";
+        level_name[Level4] = "Shift Alt";
+        level_name[Level5] = "Lock";
+    };
+};
+
+// This enables the four level shifting also for the keypad.
+partial xkb_types "keypad" {
+    virtual_modifiers LevelThree;
+
+    type "FOUR_LEVEL_KEYPAD" {
+       modifiers = Shift+NumLock+LevelThree;
+       map[None] = Level1;
+       map[Shift] = Level2;
+       map[NumLock] = Level2;
+       map[Shift+NumLock] = Level1;
+       map[LevelThree] = Level3;
+       map[Shift+LevelThree] = Level4;
+       map[NumLock+LevelThree] = Level4;
+       map[Shift+NumLock+LevelThree] = Level3;
+       level_name[Level1] = "Base";
+       level_name[Level2] = "Number";
+       level_name[Level3] = "Alt Base";
+       level_name[Level4] = "Alt Number";
+    };       
+};
diff --git a/test/data/types/iso9995 b/test/data/types/iso9995
new file mode 100644 (file)
index 0000000..0cf3420
--- /dev/null
@@ -0,0 +1,18 @@
+partial default xkb_types "default" {
+
+    // Definition for a key type which 
+    // can be used to implement ISO9995
+    // style level three shift
+    virtual_modifiers LevelThree;
+
+    type "THREE_LEVEL" {
+       modifiers = Shift+LevelThree;
+       map[None] = Level1;
+       map[Shift] = Level2;
+       map[LevelThree] = Level3;
+       map[Shift+LevelThree] = Level3;
+       level_name[Level1] = "Base";
+       level_name[Level2] = "Shift";
+       level_name[Level3] = "Level3";
+    };
+};
diff --git a/test/data/types/level5 b/test/data/types/level5
new file mode 100644 (file)
index 0000000..f9ba5b2
--- /dev/null
@@ -0,0 +1,213 @@
+partial default xkb_types "default" {
+    // Definition for a key type used for the czech keymap, for instance.
+    // Defines style a with four level shift. It is similar to three_level
+    // type used for iso9995 but it lets the shift key behave "normally".
+
+    virtual_modifiers LevelThree,ScrollLock,LevelFive;
+
+    type "EIGHT_LEVEL" {
+        modifiers = Shift+LevelThree+LevelFive;
+       map[None] = Level1;
+       map[Shift] = Level2;
+       map[LevelThree] = Level3;
+       map[Shift+LevelThree] = Level4;
+       map[LevelFive] = Level5;
+       map[Shift+LevelFive] = Level6;
+       map[LevelThree+LevelFive] = Level7;
+       map[Shift+LevelThree+LevelFive] = Level8;
+       level_name[Level1] = "Base";
+       level_name[Level2] = "Shift";
+       level_name[Level3] = "Alt Base";  
+       level_name[Level4] = "Shift Alt";  
+       level_name[Level5] = "X";
+       level_name[Level6] = "X Shift";
+       level_name[Level7] = "X Alt Base";
+       level_name[Level8] = "X Shift Alt";
+    };
+
+    type "EIGHT_LEVEL_ALPHABETIC" {
+       modifiers = Shift+Lock+LevelThree+LevelFive;
+       map[None] = Level1;
+       map[Shift] = Level2;
+       map[Lock]  = Level2;
+       map[LevelThree] = Level3;
+       map[Shift+LevelThree] = Level4;
+       map[Lock+LevelThree] =  Level4;
+        map[Lock+Shift+LevelThree] = Level3;
+
+       map[LevelFive] = Level5;
+       map[Shift+LevelFive] = Level6;
+       map[Lock+LevelFive]  = Level6;
+       map[LevelThree+LevelFive] = Level7;
+       map[Shift+LevelThree+LevelFive] = Level8;
+       map[Lock+LevelThree+LevelFive] =  Level8;
+        map[Lock+Shift+LevelThree+LevelFive] = Level7;
+
+       level_name[Level1] = "Base";
+       level_name[Level2] = "Shift";
+       level_name[Level3] = "Alt Base";
+       level_name[Level4] = "Shift Alt";
+       level_name[Level5] = "X";
+       level_name[Level6] = "X Shift";
+       level_name[Level7] = "X Alt Base";
+       level_name[Level8] = "X Shift Alt";
+    };
+
+//    type "EIGHT_LEVEL_LEVEL_FIVE_LOCK" {
+//     // Level5-Lock is implemented by using NumLock, because a real modifier
+//     // is required.
+//     
+//        modifiers = Shift + Lock + LevelThree + NumLock + LevelFive;
+//
+//        map[None]                                    = Level1;
+//        map[Shift]                                   = Level2;
+//        map[LevelThree]                              = Level3;
+//        map[LevelThree+Shift]                        = Level4;
+//
+//        map[LevelFive]                               = Level5;
+//        map[LevelFive+Shift]                         = Level6;
+//        map[LevelFive+LevelThree]                    = Level7;
+//        map[LevelFive+LevelThree+Shift]              = Level8;
+//
+//        map[NumLock]                                 = Level5;
+//        map[NumLock+Shift]                           = Level6;
+//        map[NumLock+LevelThree]                      = Level7;
+//        map[NumLock+LevelThree+Shift]                = Level8;
+//
+//        map[NumLock+LevelFive]                       = Level1;
+//        map[NumLock+LevelFive+Shift]                 = Level2;
+//        map[NumLock+LevelFive+LevelThree]            = Level3;
+//        map[NumLock+LevelFive+LevelThree+Shift]      = Level4;
+//
+//        // Lock has no effect
+//        map[Lock]                                    = Level1;
+//        map[Lock+Shift]                              = Level2;
+//        map[Lock+LevelThree]                         = Level3;
+//        map[Lock+LevelThree+Shift]                   = Level4;
+//
+//        map[Lock+LevelFive]                          = Level5;
+//        map[Lock+LevelFive+Shift]                    = Level6;
+//        map[Lock+LevelFive+LevelThree]               = Level7;
+//        map[Lock+LevelFive+LevelThree+Shift]         = Level8;
+//
+//        map[Lock+NumLock]                            = Level5;
+//        map[Lock+NumLock+Shift]                      = Level6;
+//        map[Lock+NumLock+LevelThree]                 = Level7;
+//        map[Lock+NumLock+LevelThree+Shift]           = Level8;
+//
+//        map[Lock+NumLock+LevelFive]                  = Level1;
+//        map[Lock+NumLock+LevelFive+Shift]            = Level2;
+//        map[Lock+NumLock+LevelFive+LevelThree]       = Level3;
+//        map[Lock+NumLock+LevelFive+LevelThree+Shift] = Level4;
+//
+//        preserve[LevelFive+Shift] = Shift;
+//        preserve[NumLock+Shift] = Shift;
+//        preserve[Lock+LevelFive+Shift] = Shift;
+//        preserve[Lock+NumLock+Shift] = Shift;
+//
+//        level_name[Level1] = "Base";
+//        level_name[Level2] = "Shift";
+//        level_name[Level3] = "Alt Base";
+//        level_name[Level4] = "Shift Alt";
+//        level_name[Level5] = "X";
+//        level_name[Level6] = "X Shift";
+//        level_name[Level7] = "X Alt Base";
+//        level_name[Level8] = "X Shift Alt";
+//    };
+//
+//    type "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK" {
+//     // Level5-Lock is implemented by using NumLock, because a real modifier
+//     // is required.
+//     
+//        modifiers = Shift + Lock + LevelThree + NumLock + LevelFive;
+//    
+//        map[None]                                    = Level1;
+//        map[Shift]                                   = Level2;
+//        map[LevelThree]                              = Level3;
+//        map[LevelThree+Shift]                        = Level4;
+//
+//        map[LevelFive]                               = Level5;
+//        map[LevelFive+Shift]                         = Level6;
+//        map[LevelFive+LevelThree]                    = Level7;
+//        map[LevelFive+LevelThree+Shift]              = Level8;
+//
+//        map[NumLock]                                 = Level5;
+//        map[NumLock+Shift]                           = Level6;
+//        map[NumLock+LevelThree]                      = Level7;
+//        map[NumLock+LevelThree+Shift]                = Level8;
+//
+//        map[NumLock+LevelFive]                       = Level1;
+//        map[NumLock+LevelFive+Shift]                 = Level2;
+//        map[NumLock+LevelFive+LevelThree]            = Level3;
+//        map[NumLock+LevelFive+LevelThree+Shift]      = Level4;
+//
+//        // Lock interchanges Level1 and Level2
+//        map[Lock]                                    = Level2;
+//        map[Lock+Shift]                              = Level1;
+//        map[Lock+LevelThree]                         = Level3;
+//        map[Lock+LevelThree+Shift]                   = Level4;
+//
+//        map[Lock+LevelFive]                          = Level5;
+//        map[Lock+LevelFive+Shift]                    = Level6;
+//        map[Lock+LevelFive+LevelThree]               = Level7;
+//        map[Lock+LevelFive+LevelThree+Shift]         = Level8;
+//
+//        map[Lock+NumLock]                            = Level5;
+//        map[Lock+NumLock+Shift]                      = Level6;
+//        map[Lock+NumLock+LevelThree]                 = Level7;
+//        map[Lock+NumLock+LevelThree+Shift]           = Level8;
+//
+//        map[Lock+NumLock+LevelFive]                  = Level2;
+//        map[Lock+NumLock+LevelFive+Shift]            = Level1;
+//        map[Lock+NumLock+LevelFive+LevelThree]       = Level4;
+//        map[Lock+NumLock+LevelFive+LevelThree+Shift] = Level3;
+//
+//        preserve[LevelFive+Shift] = Shift;
+//        preserve[NumLock+Shift] = Shift;
+//
+//        level_name[Level1] = "Base";
+//        level_name[Level2] = "Shift";
+//        level_name[Level3] = "Alt Base";
+//        level_name[Level4] = "Shift Alt";
+//        level_name[Level5] = "X";
+//        level_name[Level6] = "X Shift";
+//        level_name[Level7] = "X Alt Base";
+//        level_name[Level8] = "X Shift Alt";
+//    };
+
+    type "EIGHT_LEVEL_SEMIALPHABETIC" {
+       modifiers = Shift+Lock+LevelThree+LevelFive;
+       map[None] = Level1;
+       map[Shift] = Level2;
+       map[Lock]  = Level2;
+       map[LevelThree] = Level3;
+       map[Shift+LevelThree] = Level4;
+       map[Lock+LevelThree] =  Level3;
+        map[Lock+Shift+LevelThree] = Level4;
+
+       map[LevelFive] = Level5;
+       map[Shift+LevelFive] = Level6;
+       map[Lock+LevelFive]  = Level6;
+       map[LevelThree+LevelFive] = Level7;
+       map[Shift+LevelThree+LevelFive] = Level8;
+       map[Lock+LevelThree+LevelFive] =  Level7;
+        map[Lock+Shift+LevelThree+LevelFive] = Level8;
+
+       preserve[Lock+LevelThree] = Lock;
+       preserve[Lock+Shift+LevelThree] = Lock;
+       preserve[Lock+LevelFive] = Lock;
+       preserve[Lock+Shift+LevelFive] = Lock;
+       preserve[Lock+LevelThree+LevelFive] = Lock;
+       preserve[Lock+Shift+LevelThree+LevelFive] = Lock;
+
+       level_name[Level1] = "Base";
+       level_name[Level2] = "Shift";
+       level_name[Level3] = "Alt Base";
+       level_name[Level4] = "Shift Alt";
+       level_name[Level5] = "X";
+       level_name[Level6] = "X Shift";
+       level_name[Level7] = "X Alt Base";
+       level_name[Level8] = "X Shift Alt";
+    };
+
+};
diff --git a/test/data/types/mousekeys b/test/data/types/mousekeys
new file mode 100644 (file)
index 0000000..88d88a2
--- /dev/null
@@ -0,0 +1,10 @@
+partial default xkb_types "default" {
+    virtual_modifiers Alt;
+
+    type "SHIFT+ALT" {
+       modifiers = Shift+Alt;
+       map[Shift+Alt] = Level2;
+       level_name[Level1] = "Base";
+       level_name[Level2] = "Shift+Alt";
+    };
+};
diff --git a/test/data/types/numpad b/test/data/types/numpad
new file mode 100644 (file)
index 0000000..7888d7d
--- /dev/null
@@ -0,0 +1,67 @@
+partial default xkb_types "pc" {
+    type "KEYPAD" {
+       modifiers = Shift+NumLock;
+       map[None] = Level1;
+       map[Shift] = Level2;
+       map[NumLock] = Level2;
+       map[Shift+NumLock] = Level1;
+       level_name[Level1] = "Base";
+       level_name[Level2] = "Number";
+    };
+    include "extra(keypad)"
+};
+
+// On Mac keypads, level 1 and 2 are swapped
+partial xkb_types "mac" {
+    type "KEYPAD" {
+       modifiers = None;
+       map[None] = Level2;
+       level_name[Level2] = "Number";
+    };
+    include "extra(keypad)"
+};
+
+partial xkb_types "microsoft" {
+    type "KEYPAD" {
+        modifiers = Shift+NumLock;
+        map[None] = Level1;
+        preserve[Shift] = Shift;
+        map[NumLock] = Level2;
+        level_name[Level1] = "Base";
+        level_name[Level2] = "Number";
+    };
+    include "extra(keypad)"
+};
+
+// Swiss-German style numeric keypad: Shift and NumLock operates as
+// two independent modifiers; however, since we want shift state for
+// the cursor keys, only three levels are used from the key mappings.
+// Closest type is actually FOUR_LEVEL_X, but most numpad layouts uses
+// FOUR_LEVEL_MIXED_KEYPAD so that's the one we are going to override.
+partial xkb_types "shift3" {
+    type "FOUR_LEVEL_MIXED_KEYPAD" {
+        modifiers = Shift+NumLock+Control+Alt;
+
+        // NumLock Off => navigate using cursor keys
+        map[None] = Level1;
+
+        // NumLock Off + Shift pressed => select using cursor keys
+        preserve[Shift] = Shift;
+
+        // NumLock On => decimal digits
+        map[NumLock] = Level2;
+
+        // NumLock On + Shift pressed => auxiliary symbols,
+        // e.g. hexadecimal digits
+        map[Shift+NumLock] = Level3;
+
+        // Ctrl + Alt, regardless of NumLock and Shift => command keys
+        map[Control+Alt] = Level4;
+
+        // reverse map from levels to modifiers
+        level_name[Level1] = "Base";
+        level_name[Level2] = "NumLock";
+        level_name[Level3] = "Shift+NumLock";
+        level_name[Level4] = "Ctrl+Alt";
+    };
+};
diff --git a/test/data/types/pc b/test/data/types/pc
new file mode 100644 (file)
index 0000000..01a5634
--- /dev/null
@@ -0,0 +1,115 @@
+partial default xkb_types "default" {
+
+    // Some types that are necessary
+    // for a full implementation of
+    // a PC compatible keyboard.
+    virtual_modifiers Alt;
+    virtual_modifiers LevelThree;
+    virtual_modifiers LAlt;
+    virtual_modifiers RAlt;
+    virtual_modifiers RControl;
+    virtual_modifiers LControl;
+
+    type "PC_CONTROL_LEVEL2" {
+       modifiers = Control;
+       map[None] = Level1;
+       map[Control] = Level2;
+       level_name[Level1] = "Base";
+       level_name[Level2] = "Control";
+    };
+
+    type "PC_LCONTROL_LEVEL2" {
+       modifiers = LControl;
+       map[None] = Level1;
+       map[LControl] = Level2;
+       level_name[Level1] = "Base";
+       level_name[Level2] = "LControl";
+    };
+
+    type "PC_RCONTROL_LEVEL2" {
+       modifiers = RControl;
+       map[None] = Level1;
+       map[RControl] = Level2;
+       level_name[Level1] = "Base";
+       level_name[Level2] = "RControl";
+    };
+
+    type "PC_ALT_LEVEL2" {
+       modifiers = Alt;
+       map[None] = Level1;
+       map[Alt] = Level2;
+       level_name[Level1] = "Base";
+       level_name[Level2] = "Alt";
+    };
+
+    type "PC_LALT_LEVEL2" {
+       modifiers = LAlt;
+       map[None] = Level1;
+       map[LAlt] = Level2;
+       level_name[Level1] = "Base";
+       level_name[Level2] = "LAlt";
+    };
+
+    type "PC_RALT_LEVEL2" {
+       modifiers = RAlt;
+       map[None] = Level1;
+       map[RAlt] = Level2;
+       level_name[Level1] = "Base";
+       level_name[Level2] = "RAlt";
+    };
+
+    type "CTRL+ALT" {
+       modifiers = Control+Alt+Shift+LevelThree;
+        map[None] = Level1;
+        map[Shift] = Level2;
+        map[LevelThree] = Level3;
+        map[Shift+LevelThree] = Level4;
+       map[Control+Alt] = Level5;
+        level_name[Level1] = "Base";
+        level_name[Level2] = "Shift";
+        level_name[Level3] = "Alt Base";
+        level_name[Level4] = "Shift Alt";
+       level_name[Level5] = "Ctrl+Alt";
+    };
+
+   // Local eight level
+   // Needed when you want part of your layout eight-level but can not use
+   // LevelFive as modifier, as this will take over right ctrl by default
+   // for all the layout and is too invasive for your average four-level user
+   // Needed to fix bug #9529
+   // FIXME Should really use RControl but it's seems not to be enabled by
+   // default and touching this requires a lot of testing
+   type "LOCAL_EIGHT_LEVEL" {
+       modifiers = Shift+Lock+LevelThree+Control;
+
+       map[None]       = Level1;
+       map[Lock+Shift] = Level1;
+       map[Shift] = Level2;
+       map[Lock]  = Level2;
+
+       map[LevelThree]            = Level3;
+       map[Lock+Shift+LevelThree] = Level3;
+       map[Shift+LevelThree] = Level4;
+       map[Lock+LevelThree]  = Level4;
+
+       map[Control]            = Level5;
+       map[Lock+Shift+Control] = Level5;
+       map[Shift+Control] = Level6;
+       map[Lock+Control]  = Level6;
+
+       map[LevelThree+Control]            = Level7;
+       map[Lock+Shift+LevelThree+Control] = Level7;
+       map[Shift+LevelThree+Control] = Level8;
+       map[Lock+LevelThree+Control]  = Level8;
+
+       level_name[Level1] = "Base";
+       level_name[Level2] = "Shift";
+       level_name[Level3] = "Level3";
+       level_name[Level4] = "Shift Level3";
+       level_name[Level5] = "Ctrl";
+       level_name[Level6] = "Shift Ctrl";
+       level_name[Level7] = "Level3 Ctrl";
+       level_name[Level8] = "Shift Level3 Ctrl";
+    };
+
+};
index c726ff2..1c084e2 100644 (file)
@@ -95,8 +95,8 @@ int main(int argc, char *argv[])
 
     assert(ctx);
 
-    assert(test_rmlvo(ctx, "base",       "pc105",  "us,il,ru,ca",  ",,,multix",      "grp:alts_toggle,ctrl:nocaps,compose:rwin"));
-    assert(test_rmlvo(ctx, "base",       "",       "us",  "",      ""));
+    assert(test_rmlvo(ctx, "evdev",       "pc105",  "us,il,ru,ca",  ",,,multix",      "grp:alts_toggle,ctrl:nocaps,compose:rwin"));
+    assert(test_rmlvo(ctx, "evdev",       "",       "us",  "",      ""));
     assert(test_rmlvo(ctx, "evdev",      "pc105",  "us",  "intl",  ""));
     assert(test_rmlvo(ctx, "evdev",      "pc105",  "us",  "intl",  "grp:alts_toggle"));