Edit

kc3-lang/libxkbcommon/test/data/rules/evdev-modern

Branch :

  • Show log

    Commit

  • Author : Pierre Le Marre
    Date : 2024-09-24 15:23:16
    Hash : cdafba4f
    Message : rules: Add support for index ranges There is a lot of repetition in the current rules files provided by xkeyboard-config, because the MLVO mappings need to match on the exact layout/variant index. This also prevents to increase the number of maximum groups, because it does not scale. We introduces the following new special layout/variant indexes: - “single”: matches a single layout; same as with no index. - “first”: matches the first layout/variant, no matter how many layouts are in the RMLVO configuration. It allows to merge `layout` and `layout[1]` patterns. - “later”: matches all but the first layout. This is an index range. - “any”: matches layout at any position. This is an index range. We also introduces the new `%i` expansion, which correspond to the index of the matched layout in a mapping with an index range. Example: layout[later] = symbols my_layout = +my_symbols:%i * = +%l[%i]:%i Let’s have a look at concrete examples from xkeyboard-config: ! model layout = symbols * * = pc+%l%(v) ! model layout[1] = symbols * * = pc+%l[1]%(v[1]) ! model layout[2] = symbols * * = +%l[2]%(v[2]) ! model layout[3] = symbols * * = +%l[3]%(v[3]) ! model layout[4] = symbols * * = +%l[4]%(v[4]) ! layout option = symbols * grp:toggle = +group(toggle) ! layout[1] option = symbols * grp:toggle = +group(toggle):1 ! layout[2] option = symbols * grp:toggle = +group(toggle):2 ! layout[3] option = symbols * grp:toggle = +group(toggle):3 ! layout[4] option = symbols * grp:toggle = +group(toggle):4 With this commit we can now simplify it into: ! model layout[first] = symbols * * = pc+%l[%i]%(v[%i]) ! model layout[later] = symbols * * = +%l[%i]%(v[%i]):%i ! layout[any] option = symbols * grp:toggle = +group(toggle):%i The latter rule will work even if we increase XKB_MAX_GROUPS, whereas the former would require to add the missing entries for the new groups. In order to maintain consistent rules, we now disallow layout and variant to have different indexes. For example, the following mapping are now invalid: - layout variant[1] - layout[1] variant[2] - layout[1] variant - layout[first] variant[1] - layout[first] variant - layout variant[any] - etc.

  • test/data/rules/evdev-modern
  • // DO NOT EDIT THIS FILE - IT WAS AUTOGENERATED BY merge.py 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 olck \
    //              ori pk ru scc sy syr tel th tj tam ua uz
    
    // PC models
    ! $pcmodels = pc86 pc101 pc102 pc104 pc104alt pc105
    
    // Jolla devices and keyboards
    ! $jollamodels = jollasbj
    
    // Microsoft models (using MS geometry)
    ! $msmodels = microsoft microsoft4000 microsoft7000 microsoftpro microsoftprousb microsoftprose microsoftsurface
    
    // Nokia devices and keyboards
    ! $nokiamodels = nokiasu8w nokiarx44 nokiarx51
    
    // 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
    
    
    // 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
    
    ! $thinkpads = thinkpad thinkpad60 thinkpadz60
    
    ! $sun = sun_type6_jp sun_type6_usb sun_type6_euro_usb \
             sun_type6_jp_usb sun_type6_unix_usb sun_type7_jp_usb \
             sun_type7_usb sun_type7_euro_usb sun_type7_unix_usb
    
    ! $sun_jp = sun_type6_jp sun_type6_jp_usb sun_type7_jp_usb
    
    // Sun Type_6_7 keyboards with custom layouts
    ! $sun_custom = ara be br ca ch cz de dk \
                    ee es fi fr gb gr it jp \
                    kr lt lv nl no pl pt ro \
                    ru se sk tr tw ua us
    
    ! $sun_var =  sun_type6 sun_type6_suncompat sun_type6_de sun_type6_fr \
                  sun_type7 sun_type7_suncompat suncompat
    
    ! $sun_compat = sun_type6 sun_type6_suncompat sun_type7_suncompat suncompat
    
    
    ! $evdevkbds = ibm_spacesaver
    
    ! $dvoraklayouts = br ca de ee es fr gb no pl se us
    
    ! model		=	keycodes
      applealu_jis	=	evdev+macintosh(jisevdev)
     $jollamodels   =       evdev+jolla(jolla)
      olpc          =       evdev+olpc(olpc)
      olpcm         =       evdev+olpc(olpcm)
      *		=	evdev
    
    ! 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)
      everex	=	everex(STEPnote)
      thinkpad	=	thinkpad(intl)
      thinkpad60	=	thinkpad(60)
      thinkpadz60	=	thinkpad(60)
      apex300	=	steelseries(apex300)
     $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)
      sun_type6_jp          =   sun(type6jp)
      sun_type6_usb         =   sun(type6)
      sun_type6_euro_usb    =   sun(type6tuv)
      sun_type6_jp_usb      =   sun(type6jp)
      sun_type6_unix_usb    =   sun(type6unix)
      sun_type7_jp_usb      =   sun(type6jp)
      sun_type7_usb         =   sun(type7)
      sun_type7_euro_usb    =   sun(type7tuv)
      sun_type7_unix_usb    =   sun(type7unix)
      *		=       pc(pc104)
    
    ! model		layout[first]		variant[first]	=	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)
      *		$sun_custom		$sun_var	=	pc+sun_vndr/%l%(v)
    
    ! model		layout[first]		=	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
      *		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)
    
    ! model		layout			=	symbols
      ataritt	$nonlatin		=	xfree68_vndr/ataritt(us)+%l[%i]%(v[%i]):2
      ataritt	*			=	xfree68_vndr/ataritt(us)+%l[%i]%(v[%i])
      amiga		$nonlatin		=	xfree68_vndr/amiga(usa1)+%l[%i]%(v[%i]):2
      amiga		*			=	xfree68_vndr/amiga(usa1)+%l[%i]%(v[%i])
      classmate	us			=	pc+%l[%i](classmate)
      empty         *                       =       empty(basic)
      *             empty                   =       empty(basic)
      jollasbj 	$nonlatin		=	jolla_vndr/sbj(common)+us+%l[%i]%(v[%i]):2
      jollasbj	*			=	jolla_vndr/sbj(common)+%l[%i]%(v[%i])
     $sun		$sun_custom		=	pc+sun_vndr/%l[%i]%(v[%i])
      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[%i]%(v[%i]):2
      macintosh_old	*			=	macintosh_vndr/us(oldmac)+%l[%i]%(v[%i])
      applealu_jis	jp			=	macintosh_vndr/apple(alukbd)+macintosh_vndr/jp(usmac)+macintosh_vndr/jp(mac):2
      applealu_jis	*			=	macintosh_vndr/apple(alukbd)+%l[%i]%(v[%i])+macintosh_vndr/jp(mac):2
     $applealu	$macvendorlayouts	=	macintosh_vndr/apple(alukbd)+macintosh_vndr/%l[%i]%(v[%i])
     $applealu	*			=	macintosh_vndr/apple(alukbd)+%l[%i]%(v[%i])
     $macs		en_US			=	pc+macintosh_vndr/us(extended)
     $macs		$macvendorlayouts	=	pc+macintosh_vndr/%l[%i]%(v[%i])
      nokiarx44	*			=	nokia_vndr/rx-44(%l[%i])
      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[%i]%_v[%i])
      nokiasu8w	*			=	nokia_vndr/su-8w(%l[%i])
      olpc		$olpclayouts		=	olpc+%l[%i]%(m)
      olpc		*			=	olpc+%l[%i]%(v[%i])
      olpcm		$olpclayouts		=	olpc+%l[%i]%(m)
      olpcm		*			=	olpc+%l[%i]%(v[%i])
     $thinkpads   	br			=	pc+br(thinkpad)
      sl-c3x00	*			=	pc+sharp_vndr/sl-c3x00(basic)
      ws003sh	*			=	pc+sharp_vndr/ws003sh(basic)
      ws007sh	*			=	pc+sharp_vndr/ws007sh(basic)
      ws011sh	*			=	pc+sharp_vndr/ws011sh(basic)
      ws020sh	*			=	pc+sharp_vndr/ws020sh(basic)
      *	   	$nonlatin		=	pc+us+%l[%i]%(v[%i]):2
    
    ! model		layout[first]		=	symbols
      *		*			=	pc+%l[%i]%(v[%i])
    
    ! model		layout[later]	=	symbols
      *		ar		=	+ara%(v[%i]):%i
      *		ben		=	+in(ben):%i
      *		bs		=	+ba%(v[%i]):%i
      *		cs		=	+rs%(v[%i]):%i
      *		cz_qwerty	=	+cz(qwerty):%i
      *		dev		=	+in(deva):%i
      *		dvorak		=	+us(dvorak):%i
      *		dzdwi		=	+bt%(v[%i]):%i
      *		el		=	+gr%(v[%i]):%i
      *		en_US		=	+latin%(v[%i]):%i
      *		guj		=	+in(guj):%i
      *		gur		=	+in(guru):%i
      *		iu		=	+ca(ike):%i
      *		lo		=	+la%(v[%i]):%i
      *		kan		=	+in(kan):%i
      *		mi		=	+mao%(v[%i]):%i
      *		ogham		=	+ie(ogam):%i
      *		ori		=	+ie(ori):%i
      *		sapmi		=	+no(smi):%i
      *		sr		=	+srp%(v[%i]):%i
      *		syr		=	+sy(syc):%i
      *		tel		=	+in(tel):%i
      *		tml		=	+in(tam):%i
      *		yu		=	+srp%(v[%i]):%i
      *		fr-latin9	=	+fr(latin9):%i
      *		us_intl		=	+us(alt-intl):%i
      *		ben(basic)	=	+in(ben):%i
      *		ben(probhat)	=	+in(ben_probhat):%i
      *		dev(basic)	=	+in(deva):%i
      *		dvorak($dvoraklayouts)	=	+%v(dvorak):%i
      *		dvorak(basic)		=	+us(dvorak):%i
      *		dvorak(pl_basic)	=	+pl(dvorak):%i
      *		dvorak(pl)		=	+pl(dvorak_quotes):%i
      *		dvorak(pl_altquotes)	=	+pl(dvorak_altquotes):%i
      *		dzdwi(basic)		=	+bt(basic):%i
      *		fi(basic)		=	+fi(classic):%i
      *		ge(azerty_tskapo)	=	+fr(geo):%i
      *		guj(basic)		=	+in(guj):%i
      *		gur(basic)		=	+in(guru):%i
      *		ie(laptop)		=	+ie(basic):%i
      *		ie(CloGaelachLaptop)	=	+ie(CloGaelach):%i
      *		in(urd)			=	+in(urd-phonetic):%i
      *		iu(basic)		=	+ca(ike):%i
      *		lo(basic)		=	+la(basic):%i
      *		kan(basic)		=	+in(kan):%i
      *		mal(basic)		=	+in(mal):%i
      *		mal(mlplusnum)		=	+in(mal):%i
      *		ogham(basic)		=	+ie(ogam):%i
      *		ogham(laptop)		=	+ie(ogam):%i
      *		ogham(is434)		=	+ie(ogam_is434):%i
      *		ogham(is434laptop)	=	+ie(ogam_is434):%i
      *		ori(basic)		=	+in(ori):%i
      *		ro(de)			=	+ro(winkeys):%i
      *		ro(us)			=	+ro(std):%i
      *		ro(academic)		=	+ro(std):%i
      *		ro(std_comma)		=	+ro(std):%i
      *		ro(comma)		=	+ro(basic):%i
      *		ru(os)			=	+ru(os_legacy):%i
      *		pk(urd)			=	+pk(urd-phonetic):%i
      *		sapmi(basic)		=	+no(smi):%i
      *		sapmi(nodeadkeys)	=	+no(smi_nodeadkeys):%i
      *		sapmi(sefi)		=	+fi(smi):%i
      *		sin(phonetic-static)	=	+in(sin_phonetic):%i
      *		syr(basic)		=	+sy(syc):%i
      *		syr(phonetic)		=	+sy(syc_phonetic):%i
      *		tam(INSCRIPT)		=	+in(tam):%i
      *		tam(UNI)		=	+in(tam_unicode):%i
      *		tam(NUMERAL-KEYBOARD)	=	+in(tam_keyboard_with_numerals):%i
      *		tam(TAB)		=	+in(tam_TAB):%i
      *		tam(TSCII)		=	+in(tam_TSCII):%i
      *		tel(basic)		=	+in(tel):%i
      *		yu(basic)		=	+srp(latin):%i
      *		yu(unicode)		=	+srp(latinunicode):%i
      *		yu(yz)			=	+srp(latinyz):%i
      *		yu(unicodeyz)		=	+srp(latinunicodeyz):%i
      nokiarx51	cz(qwerty)		=	+nokia_vndr/rx-51(cz_qwerty):%i
      nokiarx51	*			=	+nokia_vndr/rx-51(%l[%i]%_v[%i]):%i
     $sun		$sun_custom		=	+sun_vndr/%l[%i]%(v[%i]):%i
      *		*			=	+%l[%i]%(v[%i]):%i
    
    ! model		layout[later]	variant[later]	=	symbols
      *		ben		basic		=	+in(ben):%i
      *		ben		probhat		=	+in(ben_probhat):%i
      *		dev		basic		=	+in(deva):%i
      *		dvorak		$dvoraklayouts	=	+%v(dvorak):%i
      *		dvorak		basic		=	+us(dvorak):%i
      *		dvorak		pl_basic	=	+pl(dvorak):%i
      *		dvorak		pl		=	+pl(dvorak_quotes):%i
      *		dvorak		pl_altquotes	=	+pl(dvorak_altquotes):%i
      *		dzdwi		basic		=	+bt(basic):%i
      *		fi		basic		=	+fi(classic):%i
      *		ge		azerty_tskapo	=	+fr(geo):%i
      *		guj		basic		=	+in(guj):%i
      *		gur		basic		=	+in(guru):%i
      *		ie		laptop		=	+ie(basic):%i
      *		ie		CloGaelachLaptop	=	+ie(CloGaelach):%i
      *		in		urd		=	+in(urd-phonetic):%i
      *		iu		basic		=	+ca(ike):%i
      *		lo		basic		=	+la(basic):%i
      *		kan		basic		=	+in(kan):%i
      *		mal		basic		=	+in(mal):%i
      *		mal		mlplusnum	=	+in(mal):%i
      *		ogham		basic		=	+ie(ogam):%i
      *		ogham		laptop		=	+ie(ogam):%i
      *		ogham		is434		=	+ie(ogam_is434):%i
      *		ogham		is434laptop	=	+ie(ogam_is434):%i
      *		ori		basic		=	+in(ori):%i
      *		ro		de		=	+ro(winkeys):%i
      *		ro		us		=	+ro(std):%i
      *		ro		academic	=	+ro(std):%i
      *		ro		std_comma	=	+ro(std):%i
      *		ro		comma		=	+ro(basic):%i
      *		ru		os		=	+ru(os_legacy):%i
      *		pk		urd		=	+pk(urd-phonetic):%i
      *		sapmi		basic		=	+no(smi):%i
      *		sapmi		nodeadkeys	=	+no(smi_nodeadkeys):%i
      *		sapmi		sefi		=	+fi(smi):%i
      *		sin		phonetic-static	=	+in(sin_phonetic):%i
      *		syr		basic		=	+sy(syc):%i
      *		syr		phonetic	=	+sy(syc_phonetic):%i
      *		tam		INSCRIPT	=	+in(tam):%i
      *		tam		UNI		=	+in(tam_unicode):%i
      *		tam		NUMERAL-KEYBOARD	=	+in(tam_keyboard_with_numerals):%i
      *		tam		TAB		=	+in(tam_TAB):%i
      *		tam		TSCII		=	+in(tam_TSCII):%i
      *		tel		basic		=	+in(tel):%i
      *		yu		basic		=	+srp(latin):%i
      *		yu		unicode		=	+srp(latinunicode):%i
      *		yu		yz		=	+srp(latinyz):%i
      *		yu		unicodeyz	=	+srp(latinunicodeyz):%i
    
    ! model		=	symbols
      $evdevkbds    =	+inet(evdev)+inet(%m)
      chromebook    =	+inet(evdev)+inet(chromebook)
      applealu_jis  =	+inet(evdev)+macintosh_vndr/jp(alujiskeys)
      *             =	+inet(evdev)
    
    ! layout[any]	variant[any]		=	compat
      de		neo			=	+caps(caps_lock):%i+misc(assign_shift_left_action):%i+level5(level5_lock):%i
      de		adnw			=	+caps(caps_lock):%i+misc(assign_shift_left_action):%i+level5(level5_lock):%i
      de		koy			=	+caps(caps_lock):%i+misc(assign_shift_left_action):%i+level5(level5_lock):%i
      de		bone			=	+caps(caps_lock):%i+misc(assign_shift_left_action):%i+level5(level5_lock):%i
      de		bone_eszett_home	=	+caps(caps_lock):%i+misc(assign_shift_left_action):%i+level5(level5_lock):%i
      de		neo_qwertz		=	+caps(caps_lock):%i+misc(assign_shift_left_action):%i+level5(level5_lock):%i
      de		neo_qwerty		=	+caps(caps_lock):%i+misc(assign_shift_left_action):%i+level5(level5_lock):%i
      jp		$sun_compat		=	+complete+japan(kana_lock):%i
    
    ! model		layout[single]	=	compat
      pc98		nec_vndr/jp	=	pc98(basic)
      *		jp		=	complete+japan
      olpc          *               =       olpc
      olpcm         *               =       olpc
      *		*		=	complete
    
    ! model		layout[first]	=	compat
      *		*		=	complete
    
    ! model		=	types
      $macs		=	complete+numpad(mac)
      $applealu	=	complete+numpad(mac)
      $nokiamodels	=	complete+nokia
      *		=	complete
    
    ! layout[any]		option		=	symbols
      $threelevellayouts	grp:alts_toggle =	+level3(ralt_switch_for_alts_toggle):%i
      *			misc:typo 	=	+typo(base):%i
      *			misc:apl	=	+apl(level3):%i
    
    ! option				=	symbols
      grp:shift_toggle			=	+group(shifts_toggle)
      altwin:menu				=	+altwin(menu)
      altwin:menu_win			=	+altwin(menu_win)
      altwin:meta_alt			=	+altwin(meta_alt)
      altwin:alt_win			=	+altwin(alt_win)
      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)
      altwin:swap_alt_win			=	+altwin(swap_alt_win)
      altwin:prtsc_rwin			=	+altwin(prtsc_rwin)
      grab:debug				=	+srvr_ctrl(grab_debug)
      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:menu_switch			=	+group(menu_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_space_toggle			=	+group(win_space_toggle)
      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)
      grp:lctrl_lwin_toggle			=	+group(lctrl_lwin_toggle)
      grp:menu_latch_group2			=	+group(menu_latch_group2)
      grp:menu_latch_group2_lock		=	+group(menu_latch_group2_lock)
      grp:menu_latch			=	+group(menu_latch)
      grp:menu_latch_lock			=	+group(menu_latch_lock)
      grp:menu_latch_negative		=	+group(menu_latch_negative)
      grp:menu_latch_negative_lock		=	+group(menu_latch_negative_lock)
      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)
      lv3:4_switch_isolated			=	+level3(4_switch_isolated)
      lv3:9_switch_isolated			=	+level3(9_switch_isolated)
      caps:capslock				=	+capslock(capslock)
      caps:numlock				=	+capslock(numlock)
      caps:shiftlock			=	+capslock(shiftlock)
      caps:swapescape			=	+capslock(swapescape)
      caps:escape				=	+capslock(escape)
      caps:escape_shifted_capslock		=	+capslock(escape_shifted_capslock)
      caps:backspace			=	+capslock(backspace)
      caps:super				=	+capslock(super)
      caps:hyper				=	+capslock(hyper)
      caps:menu				=	+capslock(menu)
      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:swapcaps_hyper			=	+ctrl(swapcaps_hyper)
      ctrl:swapcaps_and_switch_layout	=	+ctrl(swapcaps_and_switch_layout)
      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)
      ctrl:swap_lalt_lctl			=	+ctrl(swap_lalt_lctl)
      ctrl:swap_lwin_lctl			=	+ctrl(swap_lwin_lctl)
      ctrl:swap_rwin_rctl			=	+ctrl(swap_rwin_rctl)
      ctrl:swap_lalt_lctl_lwin		=	+ctrl(swap_lalt_lctl_lwin)
      compose:ralt				=	+compose(ralt)
      compose:lwin				=	+compose(lwin)
      compose:lwin-altgr			=	+compose(lwin-altgr)
      compose:rwin				=	+compose(rwin)
      compose:rwin-altgr			=	+compose(rwin-altgr)
      compose:menu				=	+compose(menu)
      compose:menu-altgr			=	+compose(menu-altgr)
      compose:lctrl				=	+compose(lctrl)
      compose:lctrl-altgr			=	+compose(lctrl-altgr)
      compose:rctrl				=	+compose(rctrl)
      compose:rctrl-altgr			=	+compose(rctrl-altgr)
      compose:caps				=	+compose(caps)
      compose:caps-altgr			=	+compose(caps-altgr)
      compose:102				=	+compose(102)
      compose:102-altgr			=	+compose(102-altgr)
      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)
      nbsp:zwnj2            		=	+nbsp(zwnj2)
      nbsp:zwnj2zwj3        		=	+nbsp(zwnj2zwj3)
      nbsp:zwnj2zwj3nb4     		=	+nbsp(zwnj2zwj3nb4)
      nbsp:zwnj2nb3         		=	+nbsp(zwnj2nb3)
      nbsp:zwnj2nb3s        		=	+nbsp(zwnj2nb3s)
      nbsp:zwnj2nb3zwj4     		=	+nbsp(zwnj2nb3zwj4)
      nbsp:zwnj2nb3nnb4     		=	+nbsp(zwnj2nb3nnb4)
      nbsp:zwnj3zwj4        		=	+nbsp(zwnj3zwj4)
      japan:nicola_f_bs     		=	+jp(nicola_f_bs)
      japan:hztg_escape     		=	+jp(hztg_escape)
      korean:ralt_hangul			=	+kr(ralt_hangul)
      korean:rctrl_hangul			=	+kr(rctrl_hangul)
      korean:ralt_hanja			=	+kr(ralt_hanja)
      korean:rctrl_hanja			=	+kr(rctrl_hanja)
      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)
      esperanto:colemak     		=	+epo(colemak)
      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)
      solaris:sun_compat			=	+sun_vndr/solaris(sun_compat)
      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			=	+level5(lsgt_switch)
      lv5:ralt_switch			=	+level5(ralt_switch)
      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)
      parens:swap_brackets			=	+parens(swap_brackets)
    
    
    ! option		=	compat
      grp_led:num		=	+lednum(group_lock)
      grp_led:caps		=	+ledcaps(group_lock)
      grp_led:scroll	=	+ledscroll(group_lock)
      mod_led:compose	=	+ledcompose(compose)
      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)