blob: 618cf1cafd96513d1100d950447c37a5c71f9d3f [file] [log] [blame]
<!--
Copyright © 1991-2024 Unicode, Inc.
For terms of use, see http://www.unicode.org/copyright.html
SPDX-License-Identifier: Unicode-3.0
CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
-->
<!-- Note: This DTD is not compatible with prior versions of the keyboard data.
See ldmlKeyboard.dtd and CLDR v43 and prior. -->
<!ELEMENT keyboard3 ( import*, locales?, version?, info, settings?, displays?, keys?, flicks?, forms?, layers*, variables?, transforms*, special* ) >
<!ATTLIST keyboard3 locale CDATA #REQUIRED >
<!--@MATCH:validity/bcp47-wellformed-->
<!ATTLIST keyboard3 conformsTo (45) #REQUIRED >
<!--@MATCH:version-->
<!--@METADATA-->
<!ATTLIST keyboard3 xmlns CDATA #IMPLIED >
<!--@MATCH:any-->
<!--@METADATA-->
<!ELEMENT import EMPTY >
<!ATTLIST import path CDATA #REQUIRED >
<!--@MATCH:any-->
<!ATTLIST import base (cldr) #IMPLIED >
<!ELEMENT locales ( locale* ) >
<!ELEMENT locale EMPTY >
<!ATTLIST locale id CDATA #REQUIRED >
<!--@MATCH:validity/bcp47-wellformed-->
<!ELEMENT version EMPTY >
<!ATTLIST version number CDATA #IMPLIED >
<!--@MATCH:semver-->
<!--@VALUE-->
<!ATTLIST version cldrVersion CDATA #FIXED "45" >
<!--@MATCH:version-->
<!--@METADATA-->
<!ELEMENT info EMPTY >
<!ATTLIST info name CDATA #REQUIRED >
<!--@MATCH:any-->
<!--@VALUE-->
<!ATTLIST info author CDATA #IMPLIED >
<!--@MATCH:any-->
<!--@VALUE-->
<!ATTLIST info layout CDATA #IMPLIED >
<!--@MATCH:any-->
<!--@VALUE-->
<!ATTLIST info indicator CDATA #IMPLIED >
<!--@MATCH:any-->
<!--@VALUE-->
<!ELEMENT settings EMPTY >
<!--@ORDERED-->
<!ATTLIST settings normalization (disabled) #IMPLIED >
<!--@VALUE-->
<!ELEMENT displays ( import*, display*, displayOptions*, special* ) >
<!ELEMENT display EMPTY >
<!ATTLIST display keyId NMTOKEN #IMPLIED >
<!--@MATCH:any-->
<!ATTLIST display output CDATA #IMPLIED >
<!--@MATCH:any-->
<!--@ALLOWS_UESC-->
<!ATTLIST display display CDATA #REQUIRED >
<!--@MATCH:any-->
<!--@VALUE-->
<!--@ALLOWS_UESC-->
<!ELEMENT displayOptions EMPTY >
<!ATTLIST displayOptions baseCharacter CDATA #IMPLIED >
<!--@MATCH:any-->
<!--@VALUE-->
<!--@ALLOWS_UESC-->
<!ELEMENT special ANY >
<!ELEMENT keys ( import*, key*, special* ) >
<!ELEMENT key EMPTY >
<!ATTLIST key id NMTOKEN #REQUIRED >
<!--@MATCH:any-->
<!ATTLIST key flickId NMTOKEN #IMPLIED >
<!--@MATCH:any-->
<!ATTLIST key gap (true) #IMPLIED >
<!--@VALUE-->
<!ATTLIST key output CDATA #IMPLIED >
<!--@MATCH:any-->
<!--@VALUE-->
<!--@ALLOWS_UESC-->
<!ATTLIST key longPressKeyIds NMTOKENS #IMPLIED >
<!--@MATCH:any-->
<!--@VALUE-->
<!ATTLIST key longPressDefaultKeyId NMTOKEN #IMPLIED >
<!--@MATCH:any-->
<!--@VALUE-->
<!ATTLIST key multiTapKeyIds NMTOKENS #IMPLIED >
<!--@MATCH:any-->
<!--@VALUE-->
<!ATTLIST key stretch (true) #IMPLIED >
<!--@VALUE-->
<!ATTLIST key layerId NMTOKEN #IMPLIED >
<!--@MATCH:any-->
<!--@VALUE-->
<!ATTLIST key width CDATA #IMPLIED >
<!--@MATCH:range/0.01~100.0-->
<!--@VALUE-->
<!ELEMENT flicks ( import*, flick*, special* ) >
<!ELEMENT flick ( flickSegment+, special* ) >
<!ATTLIST flick id NMTOKEN #REQUIRED >
<!--@MATCH:any-->
<!ELEMENT flickSegment EMPTY >
<!ATTLIST flickSegment directions NMTOKENS #REQUIRED >
<!--@MATCH:regex/(n|e|s|w|ne|nw|se|sw)([ ]+(n|e|s|w|ne|nw|se|sw))*-->
<!ATTLIST flickSegment keyId NMTOKEN #REQUIRED >
<!--@MATCH:any-->
<!--@VALUE-->
<!ELEMENT forms ( import*, form*, special* ) >
<!ELEMENT form ( scanCodes+, special* ) >
<!ATTLIST form id NMTOKEN #IMPLIED >
<!--@MATCH:regex/[A-Za-z0-9][A-Za-z0-9_-]*-->
<!ELEMENT scanCodes EMPTY >
<!ATTLIST scanCodes codes NMTOKENS #REQUIRED >
<!--@MATCH:regex/[0-9a-fA-F]{2}( [0-9a-fA-F]{2})*-->
<!--@VALUE-->
<!ELEMENT layers ( import*, layer*, special* ) >
<!ATTLIST layers formId NMTOKEN #REQUIRED >
<!--@MATCH:regex/[A-Za-z0-9][A-Za-z0-9_-]*-->
<!ATTLIST layers minDeviceWidth CDATA #IMPLIED >
<!--@MATCH:range/1~999-->
<!ELEMENT layer ( row+, special* ) >
<!ATTLIST layer id NMTOKEN #IMPLIED >
<!--@MATCH:regex/[A-Za-z0-9][A-Za-z0-9_-]*-->
<!ATTLIST layer modifiers NMTOKENS #IMPLIED >
<!--@MATCH:regex/(none|([A-Za-z0-9]+)( [A-Za-z0-9]+)*)-->
<!ELEMENT row EMPTY >
<!--@ORDERED-->
<!ATTLIST row keys NMTOKENS #REQUIRED >
<!--@MATCH:any-->
<!--@VALUE-->
<!ELEMENT variables ( import*, string*, set*, uset*, special* ) >
<!ELEMENT string EMPTY >
<!ATTLIST string id NMTOKEN #REQUIRED >
<!--@MATCH:regex/[0-9A-Za-z_]{1,32}-->
<!ATTLIST string value CDATA #REQUIRED >
<!--@MATCH:any-->
<!--@VALUE-->
<!--@ALLOWS_UESC-->
<!ELEMENT set EMPTY >
<!ATTLIST set id NMTOKEN #REQUIRED >
<!--@MATCH:regex/[0-9A-Za-z_]{1,32}-->
<!ATTLIST set value CDATA #REQUIRED >
<!--@MATCH:any-->
<!--@VALUE-->
<!--@ALLOWS_UESC-->
<!ELEMENT uset EMPTY >
<!ATTLIST uset id NMTOKEN #REQUIRED >
<!--@MATCH:regex/[0-9A-Za-z_]{1,32}-->
<!ATTLIST uset value CDATA #REQUIRED >
<!--@MATCH:any-->
<!--@VALUE-->
<!ELEMENT transforms ( import*, transformGroup*, special* ) >
<!ATTLIST transforms type (simple | backspace) #REQUIRED >
<!--@MATCH:literal/simple, backspace-->
<!ELEMENT transformGroup ( import*, ( transform* | reorder* ), special* ) >
<!ELEMENT transform EMPTY >
<!--@ORDERED-->
<!ATTLIST transform from CDATA #REQUIRED >
<!--@MATCH:any-->
<!--@VALUE-->
<!--@ALLOWS_UESC-->
<!ATTLIST transform to CDATA #IMPLIED >
<!--@MATCH:any-->
<!--@VALUE-->
<!--@ALLOWS_UESC-->
<!ELEMENT reorder EMPTY >
<!--@ORDERED-->
<!ATTLIST reorder before CDATA #IMPLIED >
<!--@MATCH:any-->
<!--@VALUE-->
<!--@ALLOWS_UESC-->
<!ATTLIST reorder from CDATA #REQUIRED >
<!--@MATCH:any-->
<!--@VALUE-->
<!--@ALLOWS_UESC-->
<!ATTLIST reorder order CDATA #IMPLIED >
<!--@MATCH:any-->
<!--@VALUE-->
<!ATTLIST reorder tertiary CDATA #IMPLIED >
<!--@MATCH:any-->
<!--@VALUE-->
<!ATTLIST reorder tertiaryBase CDATA #IMPLIED >
<!--@MATCH:any-->
<!--@VALUE-->
<!ATTLIST reorder preBase CDATA #IMPLIED >
<!--@MATCH:any-->
<!--@VALUE-->