• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!--
2Copyright © 1991-2024 Unicode, Inc.
3For terms of use, see http://www.unicode.org/copyright.html
4SPDX-License-Identifier: Unicode-3.0
5CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
6-->
7<!-- Note: This DTD is not compatible with prior versions of the keyboard data.
8     See ldmlKeyboard.dtd  and CLDR v43 and prior. -->
9
10<!ELEMENT keyboard3 ( import*, locales?, version?, info, settings?, displays?, keys?, flicks?, forms?, layers*, variables?, transforms*, special* ) >
11<!ATTLIST keyboard3 locale CDATA #REQUIRED >
12    <!--@MATCH:validity/bcp47-wellformed-->
13<!ATTLIST keyboard3 conformsTo (45 | 46) #REQUIRED >
14    <!--@MATCH:version-->
15    <!--@METADATA-->
16<!ATTLIST keyboard3 xmlns CDATA #IMPLIED >
17    <!--@MATCH:any-->
18    <!--@METADATA-->
19
20<!ELEMENT import EMPTY >
21<!ATTLIST import path CDATA #REQUIRED >
22    <!--@MATCH:any-->
23<!ATTLIST import base (cldr) #IMPLIED >
24
25<!ELEMENT locales ( locale* ) >
26
27<!ELEMENT locale EMPTY >
28<!ATTLIST locale id CDATA #REQUIRED >
29    <!--@MATCH:validity/bcp47-wellformed-->
30
31<!ELEMENT version EMPTY >
32<!ATTLIST version number CDATA #IMPLIED >
33    <!--@MATCH:semver-->
34    <!--@VALUE-->
35<!ATTLIST version cldrVersion CDATA #FIXED "46" >
36    <!--@MATCH:version-->
37    <!--@METADATA-->
38
39<!ELEMENT info EMPTY >
40<!ATTLIST info name CDATA #REQUIRED >
41    <!--@MATCH:any-->
42    <!--@VALUE-->
43<!ATTLIST info author CDATA #IMPLIED >
44    <!--@MATCH:any-->
45    <!--@VALUE-->
46<!ATTLIST info layout CDATA #IMPLIED >
47    <!--@MATCH:any-->
48    <!--@VALUE-->
49<!ATTLIST info indicator CDATA #IMPLIED >
50    <!--@MATCH:any-->
51    <!--@VALUE-->
52
53<!ELEMENT settings EMPTY >
54    <!--@ORDERED-->
55<!ATTLIST settings normalization (disabled) #IMPLIED >
56    <!--@VALUE-->
57
58<!ELEMENT displays ( import*, display*, displayOptions*, special* ) >
59
60<!ELEMENT display EMPTY >
61<!ATTLIST display keyId NMTOKEN #IMPLIED >
62    <!--@MATCH:any-->
63<!ATTLIST display output CDATA #IMPLIED >
64    <!--@MATCH:any-->
65    <!--@ALLOWS_UESC-->
66<!ATTLIST display display CDATA #REQUIRED >
67    <!--@MATCH:any-->
68    <!--@VALUE-->
69    <!--@ALLOWS_UESC-->
70
71<!ELEMENT displayOptions EMPTY >
72<!ATTLIST displayOptions baseCharacter CDATA #IMPLIED >
73    <!--@MATCH:any-->
74    <!--@VALUE-->
75    <!--@ALLOWS_UESC-->
76
77<!ELEMENT special ANY >
78
79<!ELEMENT keys ( import*, key*, special* ) >
80
81<!ELEMENT key EMPTY >
82<!ATTLIST key id NMTOKEN #REQUIRED >
83    <!--@MATCH:any-->
84<!ATTLIST key flickId NMTOKEN #IMPLIED >
85    <!--@MATCH:any-->
86<!ATTLIST key gap (true) #IMPLIED >
87    <!--@VALUE-->
88<!ATTLIST key output CDATA #IMPLIED >
89    <!--@MATCH:any-->
90    <!--@VALUE-->
91    <!--@ALLOWS_UESC-->
92<!ATTLIST key longPressKeyIds NMTOKENS #IMPLIED >
93    <!--@MATCH:any-->
94    <!--@VALUE-->
95<!ATTLIST key longPressDefaultKeyId NMTOKEN #IMPLIED >
96    <!--@MATCH:any-->
97    <!--@VALUE-->
98<!ATTLIST key multiTapKeyIds NMTOKENS #IMPLIED >
99    <!--@MATCH:any-->
100    <!--@VALUE-->
101<!ATTLIST key stretch (true) #IMPLIED >
102    <!--@VALUE-->
103<!ATTLIST key layerId NMTOKEN #IMPLIED >
104    <!--@MATCH:any-->
105    <!--@VALUE-->
106<!ATTLIST key width CDATA #IMPLIED >
107    <!--@MATCH:range/0.01~100.0-->
108    <!--@VALUE-->
109
110<!ELEMENT flicks ( import*, flick*, special* ) >
111
112<!ELEMENT flick ( flickSegment+, special* ) >
113<!ATTLIST flick id NMTOKEN #REQUIRED >
114    <!--@MATCH:any-->
115
116<!ELEMENT flickSegment EMPTY >
117<!ATTLIST flickSegment directions NMTOKENS #REQUIRED >
118    <!--@MATCH:regex/(n|e|s|w|ne|nw|se|sw)([ ]+(n|e|s|w|ne|nw|se|sw))*-->
119<!ATTLIST flickSegment keyId NMTOKEN #REQUIRED >
120    <!--@MATCH:any-->
121    <!--@VALUE-->
122
123<!ELEMENT forms ( import*, form*, special* ) >
124
125<!ELEMENT form ( scanCodes+, special* ) >
126<!ATTLIST form id NMTOKEN #IMPLIED >
127    <!--@MATCH:regex/[A-Za-z0-9][A-Za-z0-9_-]*-->
128
129<!ELEMENT scanCodes EMPTY >
130<!ATTLIST scanCodes codes NMTOKENS #REQUIRED >
131    <!--@MATCH:regex/[0-9a-fA-F]{2}( [0-9a-fA-F]{2})*-->
132    <!--@VALUE-->
133
134<!ELEMENT layers ( import*, layer*, special* ) >
135<!ATTLIST layers formId NMTOKEN #REQUIRED >
136    <!--@MATCH:regex/[A-Za-z0-9][A-Za-z0-9_-]*-->
137<!ATTLIST layers minDeviceWidth CDATA #IMPLIED >
138    <!--@MATCH:range/1~999-->
139
140<!ELEMENT layer ( row+, special* ) >
141<!ATTLIST layer id NMTOKEN #IMPLIED >
142    <!--@MATCH:regex/[A-Za-z0-9][A-Za-z0-9_-]*-->
143<!ATTLIST layer modifiers NMTOKENS #IMPLIED >
144    <!--@MATCH:regex/(none|([A-Za-z0-9]+)( [A-Za-z0-9]+)*)-->
145
146<!ELEMENT row EMPTY >
147    <!--@ORDERED-->
148<!ATTLIST row keys NMTOKENS #REQUIRED >
149    <!--@MATCH:any-->
150    <!--@VALUE-->
151
152<!ELEMENT variables ( import*, string*, set*, uset*, special* ) >
153
154<!ELEMENT string EMPTY >
155<!ATTLIST string id NMTOKEN #REQUIRED >
156    <!--@MATCH:regex/[0-9A-Za-z_]{1,32}-->
157<!ATTLIST string value CDATA #REQUIRED >
158    <!--@MATCH:any-->
159    <!--@VALUE-->
160    <!--@ALLOWS_UESC-->
161
162<!ELEMENT set EMPTY >
163<!ATTLIST set id NMTOKEN #REQUIRED >
164    <!--@MATCH:regex/[0-9A-Za-z_]{1,32}-->
165<!ATTLIST set value CDATA #REQUIRED >
166    <!--@MATCH:any-->
167    <!--@VALUE-->
168    <!--@ALLOWS_UESC-->
169
170<!ELEMENT uset EMPTY >
171<!ATTLIST uset id NMTOKEN #REQUIRED >
172    <!--@MATCH:regex/[0-9A-Za-z_]{1,32}-->
173<!ATTLIST uset value CDATA #REQUIRED >
174    <!--@MATCH:any-->
175    <!--@VALUE-->
176
177<!ELEMENT transforms ( import*, transformGroup*, special* ) >
178<!ATTLIST transforms type (simple | backspace) #REQUIRED >
179    <!--@MATCH:literal/simple, backspace-->
180
181<!ELEMENT transformGroup ( import*, ( transform* | reorder* ), special* ) >
182
183<!ELEMENT transform EMPTY >
184    <!--@ORDERED-->
185<!ATTLIST transform from CDATA #REQUIRED >
186    <!--@MATCH:any-->
187    <!--@VALUE-->
188    <!--@ALLOWS_UESC-->
189<!ATTLIST transform to CDATA #IMPLIED >
190    <!--@MATCH:any-->
191    <!--@VALUE-->
192    <!--@ALLOWS_UESC-->
193
194<!ELEMENT reorder EMPTY >
195    <!--@ORDERED-->
196<!ATTLIST reorder before CDATA #IMPLIED >
197    <!--@MATCH:any-->
198    <!--@VALUE-->
199    <!--@ALLOWS_UESC-->
200<!ATTLIST reorder from CDATA #REQUIRED >
201    <!--@MATCH:any-->
202    <!--@VALUE-->
203    <!--@ALLOWS_UESC-->
204<!ATTLIST reorder order CDATA #IMPLIED >
205    <!--@MATCH:any-->
206    <!--@VALUE-->
207<!ATTLIST reorder tertiary CDATA #IMPLIED >
208    <!--@MATCH:any-->
209    <!--@VALUE-->
210<!ATTLIST reorder tertiaryBase CDATA #IMPLIED >
211    <!--@MATCH:any-->
212    <!--@VALUE-->
213<!ATTLIST reorder preBase CDATA #IMPLIED >
214    <!--@MATCH:any-->
215    <!--@VALUE-->
216