rulescomp: remove bad failtests
authorRan Benita <ran234@gmail.com>
Sun, 12 Aug 2012 15:16:52 +0000 (18:16 +0300)
committerRan Benita <ran234@gmail.com>
Sat, 1 Sep 2012 07:58:10 +0000 (10:58 +0300)
Since we now handle empty model/layout, the last couple of tests should
not fail. The reason they do is bacause they try to use a non-existent
"base" rules file. When the file is brought in these tests do not fail.
Since we already test for non-existent rules file, we can remove them,
and refine the other tests a bit.

Signed-off-by: Ran Benita <ran234@gmail.com>
test/data/keycodes/xfree86 [new file with mode: 0644]
test/data/rules/base [new file with mode: 0644]
test/rulescomp.c

diff --git a/test/data/keycodes/xfree86 b/test/data/keycodes/xfree86
new file mode 100644 (file)
index 0000000..0c91018
--- /dev/null
@@ -0,0 +1,410 @@
+// "standard" XFree86 codes
+// It seems that the "default" must be the first entry in the file.
+
+default xkb_keycodes "xfree86" {
+    include "xfree86(basic)"
+    <BKSL> =  51;
+    alias <AC12> = <BKSL>;
+    <LSGT> =  94;
+};
+
+xkb_keycodes "basic" {
+
+    minimum= 8;
+    maximum= 255;
+
+    <TLDE> =  49;
+    alias <AE00> = <TLDE>;     // Some geometries use AE00
+    <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;
+    <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> = 109;
+    <RALT> = 113;
+    // Microsoft keyboard extra keys
+    <LWIN> = 115;
+    <RWIN> = 116;
+    <MENU> = 117;
+
+    <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> = 111;
+    <SYRQ> =  92;
+    <SCLK> =  78;
+    <PAUS> = 110;
+    <BRK>  = 114;
+
+    <INS>  = 106;
+    <HOME> =  97;
+    <PGUP> =  99;
+    <DELE> = 107;
+    <END>  = 103;
+    <PGDN> = 105;
+
+    <UP>   =  98;
+    <LEFT> = 100;
+    <DOWN> = 104;
+    <RGHT> = 102;
+
+    <NMLK> =  77;
+    <KPDV> = 112;
+    <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> = 108;
+
+    <KP0>  =  90;
+    <KPDL> =  91;
+    <KPEQ> = 126;
+
+    <FK13> =  118;
+    <FK14> =  119;
+    <FK15> =  120;
+    <FK16> =  121;
+    <FK17> =  122;
+    <KPDC> =  123;
+
+    // Keys that are generated on Japanese keyboards
+
+    alias <HZTG> = <TLDE>;     // Hankaku_Zenkaku toggle
+    <HKTG> =   208;            // Hiragana_Katakana toggle
+    <AB11> =   211;            // backslash/underscore
+    <XFER> =   129;            // Henkan
+    <NFER> =   131;            // Muhenkan
+    <AE13> =   133;            // Yen
+    <EISU> =   210;            // Alphanumeric mode on macintosh
+    <KANA> =   209;            // Kana mode on macintosh
+
+    // Keys that are generated on Korean keyboards
+
+    alias <HNGL> = <FK16>;     // Hangul Latin toggle
+    alias <HJCV> = <FK17>;     // Hangul to Hanja conversion
+
+    // Extended keys that may be generated on "Internet" keyboards.
+    // These are not standardised, hence the meaningless names.
+    // The entries commented out are never generated because the raw codes
+    // in those positions are already used for well-defined keys.
+
+    alias <I01> = <XFER>;
+    <I02> =   130;
+    alias <I03> = <NFER>;
+    <I04> =   132;
+    alias <I05> = <AE13>;
+    <I06> =   134;
+    <I07> =   135;
+    <I08> =   136;
+    <I09> =   137;
+    <I0A> =   138;
+    <I0B> =   139;
+    <I0C> =   140;
+    <I0D> =   141;
+    <I0E> =   142;
+    <I0F> =   143;
+    <I10> =   144;
+    <I11> =   145;
+    <I12> =   146;
+    <I13> =   147;
+    <I14> =   148;
+    <I15> =   149;
+    <I16> =   150;
+    <I17> =   151;
+    <I18> =   152;
+    <I19> =   153;
+    <I1A> =   154;
+    <I1B> =   155;
+    // <I1C> =   156;  <META>
+    // <I1D> =   157;  <K59>
+    <I1E> =   158;
+    <I1F> =   159;
+    <I20> =   160;
+    <I21> =   161;
+    <I22> =   162;
+    <I23> =   163;
+    <I24> =   164;
+    <I25> =   165;
+    <I26> =   166;
+    <I27> =   167;
+    <I28> =   168;
+    <I29> =   169;
+    // <I2A> =   170;  <K5A>
+    <I2B> =   171;
+    <I2C> =   172;
+    <I2D> =   173;
+    <I2E> =   174;
+    <I2F> =   175;
+    <I30> =   176;
+    <I31> =   177;
+    <I32> =   178;
+    <I33> =   179;
+    <I34> =   180;
+    // <I35> =   181;  <K5B>
+    // <I36> =   182;  <K5D>
+    // <I37> =   183;  <K5E>
+    // <I38> =   184;  <K5F>
+    <I39> =   185;
+    <I3A> =   186;
+    <I3B> =   187;
+    <I3C> =   188;
+    // <I3D> =   189;  <K62>
+    // <I3E> =   190;  <K63>
+    // <I3F> =   191;  <K64>
+    // <I40> =   192;  <K65>
+    // <I41> =   193;  <K66>
+    <I42> =   194;
+    <I43> =   195;
+    <I44> =   196;
+    <I45> =   197;
+    // <I46> =   198;  <K67>
+    // <I47> =   199;  <K68>
+    // <I48> =   200;  <K69>
+    // <I49> =   201;  <K6A>
+    <I4A> =   202;
+    // <I4B> =   203;  <K6B>
+    // <I4C> =   204;  <K6C>
+    // <I4D> =   205;  <K6D>
+    // <I4E> =   206;  <K6E>
+    // <I4F> =   207;  <K6F>
+    // <I50> =   208;  <K70>
+    // <I51> =   209;  <K71>
+    // <I52> =   210;  <K72>
+    // <I53> =   211;  <K73>
+    <I54> =   212;
+    <I55> =   213;
+    <I56> =   214;
+    <I57> =   215;
+    <I58> =   216;
+    <I59> =   217;
+    <I5A> =   218;
+    // <I5B> =   219;  <K74>
+    // <I5C> =   220;  <K75>
+    // <I5D> =   221;  <K76>
+    <I5E> =   222;
+    <I5F> =   223;
+    <I60> =   224;
+    <I61> =   225;
+    <I62> =   226;
+    <I63> =   227;
+    <I64> =   228;
+    <I65> =   229;
+    <I66> =   230;
+    <I67> =   231;
+    <I68> =   232;
+    <I69> =   233;
+    <I6A> =   234;
+    <I6B> =   235;
+    <I6C> =   236;
+    <I6D> =   237;
+    <I6E> =   238;
+    <I6F> =   239;
+    <I70> =   240;
+    <I71> =   241;
+    <I72> =   242;
+    <I73> =   243;
+    <I74> =   244;
+    <I75> =   245;
+    <I76> =   246;
+    <I77> =   247;
+    <I78> =   248;
+    <I79> =   249;
+    <I7A> =   250;
+    <I7B> =   251;
+    <I7C> =   252;
+    <I7D> =   253;
+    <I7E> =   254;
+    <I7F> =   255;
+
+    // MacBooks generate 0x65 for the lower brightness key
+    <II65> =  101;
+
+    // Required for apple/logitech_g15 keyboard
+    <II5D> = 93;
+
+    // Codes generated for scancodes 0x59-0x5f, 0x62-0x76
+    <K59> =   157;             // <I1D>
+    <K5A> =   170;             // <I2A>
+    <K5B> =   181;             // <I35>
+    alias <K5C> = <KPEQ>;
+    <K5D> =   182;             // <I36>
+    <K5E> =   183;             // <I37>
+    <K5F> =   184;             // <I38>
+    <K62> =   189;             // <I3D>
+    <K63> =   190;             // <I3E>
+    <K64> =   191;             // <I3F>
+    <K65> =   192;             // <I40>
+    <K66> =   193;             // <I41>
+    <K67> =   198;             // <I46>
+    <K68> =   199;             // <I47>
+    <K69> =   200;             // <I48>
+    <K6A> =   201;             // <I49>
+    <K6B> =   203;             // <I4B>
+    <K6C> =   204;             // <I4C>
+    <K6D> =   205;             // <I4D>
+    <K6E> =   206;             // <I4E>
+    <K6F> =   207;             // <I4F>
+    alias <K70> = <HKTG>;      // <I50>
+    alias <K71> = <KANA>;      // <I51>
+    alias <K72> = <EISU>;      // <I52>
+    alias <K73> = <AB11>;      // <I53>
+    <K74> =   219;             // <I5B>
+    <K75> =   220;             // <I5C>
+    <K76> =   221;             // <I5D>
+   
+    // Solaris compatibility
+
+    alias <LMTA> = <LWIN>;
+    alias <RMTA> = <RWIN>;
+    alias <COMP> = <MENU>;
+    alias <POWR> = <I0C>;
+    alias <MUTE> = <I0D>;
+    alias <VOL-> = <I0E>;
+    alias <VOL+> = <I0F>;
+    alias <HELP> = <I10>;
+    alias <STOP> = <I11>;
+    alias <AGAI> = <I12>;
+    alias <PROP> = <I13>;
+    alias <UNDO> = <I14>;
+    alias <FRNT> = <I15>;
+    alias <COPY> = <I16>;
+    alias <OPEN> = <I17>;
+    alias <PAST> = <I18>;
+    alias <FIND> = <I19>;
+    alias <CUT>  = <I1A>;
+    alias <OUTP> = <I56>;
+    alias <KITG> = <I57>;
+    alias <KIDN> = <I58>;
+    alias <KIUP> = <I59>;
+
+    // Other codes never generated.  The XFree86 ddx never generates
+    // these codes.
+    // Thus we can use them as fake keys
+    <MDSW> =     8;
+    <LVL3> =   124; // <U7C>
+    <ALT>  =   125; // <U7D>
+    <META> =   156; // <I1C>
+    <SUPR> =   127; // <U7F>
+    <HYPR> =   128; // <U80>
+
+    indicator 1 = "Caps Lock";
+    indicator 2 = "Num Lock";
+    indicator 3 = "Scroll Lock";
+
+    alias <ALGR> = <RALT>;
+
+    // For Brazilian ABNT2
+    alias <KPPT> = <I06>;
+};
+
+// What keyboard is this?
+
+xkb_keycodes "102" {
+    include "xfree86(xfree86)"
+
+    // There will be warnings from xkbcomp because of multiple definitions.
+
+    <RALT> = 122;
+    <RCTL> = 123;
+
+    <PRSC> = 121;
+    <PAUS> = 118;
+
+    <INS>  = 131;
+    <HOME> = 135;
+    <PGUP> = 119;
+    <DELE> = 129;
+    <END>  = 130;
+    <PGDN> = 134;
+
+    <UP>   = 128;
+    <LEFT> = 132;
+    <DOWN> = 120;
+    <RGHT> = 133;
+
+    <KPDV> = 125;
+
+    <KPEN> = 124;
+};
+
+
+// IBM ThinkPad Z60m/Z60t/Z61m/Z61t
+xkb_keycodes "thinkpadz60" {
+    include "xfree86(xfree86)"
+    <MENU> = 227;
+};
diff --git a/test/data/rules/base b/test/data/rules/base
new file mode 100644 (file)
index 0000000..44fa866
--- /dev/null
@@ -0,0 +1,1167 @@
+// 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
+  amiga                =       amiga(de)
+  ataritt      =       ataritt(de)
+  empty         =       empty
+  sun4         =       sun(type4_euro)
+  sun5         =       sun(type5_euro)
+  sun6         =       sun(type6_usb)
+  sun6euro     =       sun(type6tuv_usb)
+  pc98         =       xfree98(pc98)
+ $applealu     =       macintosh(alukbd)
+  macintosh_hhk        =       macintosh(hhk)
+  macintosh_old        =       macintosh(old)
+ $macs         =       macintosh
+  thinkpadz60  =       xfree86(thinkpadz60)
+  *            =       xfree86
+
+! layout[1]    =       keycodes
+  $azerty       =       +aliases(azerty)
+  $qwertz       =       +aliases(qwertz)
+  *             =       +aliases(qwerty)
+
+! layout       =       keycodes
+  $azerty       =       +aliases(azerty)
+  $qwertz       =       +aliases(qwertz)
+  *             =       +aliases(qwerty)
+
+! option       =       keycodes
+
+! 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
+  a4techKB21    =       +inet(media_nav_common)
+  a4techKBS8    =       +inet(media_nav_acpi_common)
+  a4_rfkb23     =       +inet(media_nav_acpi_common)
+  asus_laptop   =       +inet(media_common)
+  acer_tm_800   =       +inet(acer_laptop)
+  benqx730      =       +inet(benqx)
+  benqx800      =       +inet(benqx)
+  btc5126t      =       +inet(nav_acpi_common)
+  btc9116u      =       +inet(btc9019u)
+  btc6301urf    =       +inet(media_nav_acpi_common)
+  dellsk8125    =       +inet(dell)
+  dellsk8135    =       +inet(dell)
+  cherrybunlim  =       +inet(nav_common)
+  dexxa         =       +inet(media_nav_common)
+  dtk2000       =       +inet(media_nav_acpi_common)
+  fscaa1667g    =       +inet(media_nav_common)
+  geniuskb19e   =       +inet(media_nav_acpi_common)
+  geniuscomfy   =       +inet(media_nav_acpi_common)
+  geniuskkb2050hs =     +inet(dellusbmm)
+  hpnx9020      =       +inet(hpi6)
+  latitude      =       +inet(media_common)
+  logicd        =       +inet(logitech_base)
+  logicd_it     =       +inet(logitech_base)
+  logicd_nav    =       +inet(logitech_base)
+  logicd_opt    =       +inet(logitech_base)
+  logiultrax    =       +inet(logitech_base)
+  logiclx300    =       +inet(logiex110)
+  logii350      =       +inet(logiex110)
+  logimel       =       +inet(logiex110)
+  logicdit      =       +inet(logicd)
+  logicdo       =       +inet(logicd)
+  logicdp       =       +inet(logicd)
+  logicdpa      =       +inet(logicda)
+  logiciink     =       +inet(logicink)
+  ltcd          =       +inet(logicda)
+  microsoftccurve2k =   +inet(microsoftprooem)
+  microsoftpro  =       +inet(media_nav_acpi_common)
+  precision_m   =       +inet(media_nav_common)
+  scorpius      =       +inet(media_nav_acpi_common)
+  sp_inet       =       +inet(media_nav_acpi_common)
+  targa_v811    =       +inet(media_nav_acpi_common)
+  thinkpad      =       +inet(media_nav_common)
+  thinkpadz60   =       +inet(thinkpad60)
+  tm2030USB-102 =       +inet(media_nav_acpi_common)
+  tm2030USB-106 =       +inet(media_nav_acpi_common)
+  trust_slimline =      +inet(media_nav_acpi_common)
+  vsonku306     =       +inet(microsoftprooem)
+  $inetkbds     =       +inet(%m)
+  $maclaptop    =       +inet(apple)+level3(enter_switch)
+  $applealu     =       +inet(apple)
+  $macs                =       +inet(apple)
+
+! 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)
+  japan:kana_lock      =       +japan(kana_lock)
+  caps:shiftlock       =       +ledcaps(shift_lock)
+  grab:break_actions    =       +xfree86(grab_break)
+
+
+! option       =       types
+  caps:internal                        =       +caps(internal)
+  caps:internal_nocancel       =       +caps(internal_nocancel)
+  caps:shift                   =       +caps(shift)
+  caps:shift_nocancel          =       +caps(shift_nocancel)
+  numpad:pc                    =       +numpad(pc)
+  numpad:mac                   =       +numpad(mac)
+  numpad:microsoft             =       +numpad(microsoft)
+  numpad:shift3                =       +numpad(shift3)
index bed0bb5..fe17b8d 100644 (file)
@@ -79,7 +79,7 @@ benchmark(struct xkb_context *context)
 
     clock_gettime(CLOCK_MONOTONIC, &start);
     for (i = 0; i < BENCHMARK_ITERATIONS; i++)
-        assert(test_rmlvo_silent(context, "evdev",       "",       "us",  "",      ""));
+        assert(test_rmlvo_silent(context, "evdev", "evdev", "us", "", ""));
     clock_gettime(CLOCK_MONOTONIC, &stop);
 
     xkb_set_log_priority(context, old_prio);
@@ -102,17 +102,20 @@ int main(int argc, char *argv[])
 
     assert(ctx);
 
-    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"));
+    if (argc > 1 && streq(argv[1], "bench")) {
+        benchmark(ctx);
+        return 0;
+    }
 
-    assert(!test_rmlvo(ctx, "base",      "",       "",    "",      ""));
-    assert(!test_rmlvo(ctx, "base",      "pc105",  "",    "",      ""));
-    assert(!test_rmlvo(ctx, "badrules",  "",       "us",  "",      ""));
+    assert(test_rmlvo(ctx, "evdev", "pc105", "us,il,ru,ca", ",,,multix", "grp:alts_toggle,ctrl:nocaps,compose:rwin"));
+    assert(test_rmlvo(ctx, "base",  "pc105", "us,in", "", ""));
+    assert(test_rmlvo(ctx, "evdev", "pc105", "us", "intl", ""));
+    assert(test_rmlvo(ctx, "evdev", "evdev", "us", "intl", "grp:alts_toggle"));
 
-    if (argc > 1 && streq(argv[1], "bench"))
-        benchmark(ctx);
+    assert(test_rmlvo(ctx, "", "", "", "", ""));
+    assert(test_rmlvo(ctx, NULL, NULL, NULL, NULL, NULL));
+
+    assert(!test_rmlvo(ctx, "does-not-exist", "", "", "", ""));
 
     xkb_context_unref(ctx);
 }