@keymanapp/common-types 17.0.85-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) hide show
  1. package/build/src/consts/virtual-key-constants.d.ts +131 -0
  2. package/build/src/consts/virtual-key-constants.d.ts.map +1 -0
  3. package/build/src/consts/virtual-key-constants.js +245 -0
  4. package/build/src/consts/virtual-key-constants.js.map +1 -0
  5. package/build/src/import/techpreview/cldr_info.json +5 -0
  6. package/build/src/import/techpreview/keys-Latn-implied.xml +80 -0
  7. package/build/src/import/techpreview/keys-Zyyy-currency.xml +22 -0
  8. package/build/src/import/techpreview/keys-Zyyy-punctuation.xml +46 -0
  9. package/build/src/keyman-touch-layout/keyman-touch-layout-file-reader.d.ts +7 -0
  10. package/build/src/keyman-touch-layout/keyman-touch-layout-file-reader.d.ts.map +1 -0
  11. package/build/src/keyman-touch-layout/keyman-touch-layout-file-reader.js +74 -0
  12. package/build/src/keyman-touch-layout/keyman-touch-layout-file-reader.js.map +1 -0
  13. package/build/src/keyman-touch-layout/keyman-touch-layout-file-writer.d.ts +24 -0
  14. package/build/src/keyman-touch-layout/keyman-touch-layout-file-writer.d.ts.map +1 -0
  15. package/build/src/keyman-touch-layout/keyman-touch-layout-file-writer.js +75 -0
  16. package/build/src/keyman-touch-layout/keyman-touch-layout-file-writer.js.map +1 -0
  17. package/build/src/keyman-touch-layout/keyman-touch-layout-file.d.ts +76 -0
  18. package/build/src/keyman-touch-layout/keyman-touch-layout-file.d.ts.map +1 -0
  19. package/build/src/keyman-touch-layout/keyman-touch-layout-file.js +26 -0
  20. package/build/src/keyman-touch-layout/keyman-touch-layout-file.js.map +1 -0
  21. package/build/src/keyman-touch-layout.clean.spec.json +170 -0
  22. package/build/src/kmx/element-string.d.ts +19 -0
  23. package/build/src/kmx/element-string.d.ts.map +1 -0
  24. package/build/src/kmx/element-string.js +72 -0
  25. package/build/src/kmx/element-string.js.map +1 -0
  26. package/build/src/kmx/kmx-builder.d.ts +77 -0
  27. package/build/src/kmx/kmx-builder.d.ts.map +1 -0
  28. package/build/src/kmx/kmx-builder.js +193 -0
  29. package/build/src/kmx/kmx-builder.js.map +1 -0
  30. package/build/src/kmx/kmx-plus-builder/build-disp.d.ts +18 -0
  31. package/build/src/kmx/kmx-plus-builder/build-disp.d.ts.map +1 -0
  32. package/build/src/kmx/kmx-plus-builder/build-disp.js +25 -0
  33. package/build/src/kmx/kmx-plus-builder/build-disp.js.map +1 -0
  34. package/build/src/kmx/kmx-plus-builder/build-elem.d.ts +26 -0
  35. package/build/src/kmx/kmx-plus-builder/build-elem.d.ts.map +1 -0
  36. package/build/src/kmx/kmx-plus-builder/build-elem.js +78 -0
  37. package/build/src/kmx/kmx-plus-builder/build-elem.js.map +1 -0
  38. package/build/src/kmx/kmx-plus-builder/build-keys.d.ts +60 -0
  39. package/build/src/kmx/kmx-plus-builder/build-keys.d.ts.map +1 -0
  40. package/build/src/kmx/kmx-plus-builder/build-keys.js +107 -0
  41. package/build/src/kmx/kmx-plus-builder/build-keys.js.map +1 -0
  42. package/build/src/kmx/kmx-plus-builder/build-layr.d.ts +54 -0
  43. package/build/src/kmx/kmx-plus-builder/build-layr.d.ts.map +1 -0
  44. package/build/src/kmx/kmx-plus-builder/build-layr.js +99 -0
  45. package/build/src/kmx/kmx-plus-builder/build-layr.js.map +1 -0
  46. package/build/src/kmx/kmx-plus-builder/build-list.d.ts +34 -0
  47. package/build/src/kmx/kmx-plus-builder/build-list.d.ts.map +1 -0
  48. package/build/src/kmx/kmx-plus-builder/build-list.js +62 -0
  49. package/build/src/kmx/kmx-plus-builder/build-list.js.map +1 -0
  50. package/build/src/kmx/kmx-plus-builder/build-loca.d.ts +12 -0
  51. package/build/src/kmx/kmx-plus-builder/build-loca.d.ts.map +1 -0
  52. package/build/src/kmx/kmx-plus-builder/build-loca.js +20 -0
  53. package/build/src/kmx/kmx-plus-builder/build-loca.js.map +1 -0
  54. package/build/src/kmx/kmx-plus-builder/build-meta.d.ts +17 -0
  55. package/build/src/kmx/kmx-plus-builder/build-meta.d.ts.map +1 -0
  56. package/build/src/kmx/kmx-plus-builder/build-meta.js +21 -0
  57. package/build/src/kmx/kmx-plus-builder/build-meta.js.map +1 -0
  58. package/build/src/kmx/kmx-plus-builder/build-name.d.ts +12 -0
  59. package/build/src/kmx/kmx-plus-builder/build-name.d.ts.map +1 -0
  60. package/build/src/kmx/kmx-plus-builder/build-name.js +23 -0
  61. package/build/src/kmx/kmx-plus-builder/build-name.js.map +1 -0
  62. package/build/src/kmx/kmx-plus-builder/build-ordr.d.ts +18 -0
  63. package/build/src/kmx/kmx-plus-builder/build-ordr.d.ts.map +1 -0
  64. package/build/src/kmx/kmx-plus-builder/build-ordr.js +27 -0
  65. package/build/src/kmx/kmx-plus-builder/build-ordr.js.map +1 -0
  66. package/build/src/kmx/kmx-plus-builder/build-sect.d.ts +16 -0
  67. package/build/src/kmx/kmx-plus-builder/build-sect.d.ts.map +1 -0
  68. package/build/src/kmx/kmx-plus-builder/build-sect.js +14 -0
  69. package/build/src/kmx/kmx-plus-builder/build-sect.js.map +1 -0
  70. package/build/src/kmx/kmx-plus-builder/build-strs.d.ts +18 -0
  71. package/build/src/kmx/kmx-plus-builder/build-strs.d.ts.map +1 -0
  72. package/build/src/kmx/kmx-plus-builder/build-strs.js +34 -0
  73. package/build/src/kmx/kmx-plus-builder/build-strs.js.map +1 -0
  74. package/build/src/kmx/kmx-plus-builder/build-tran.d.ts +20 -0
  75. package/build/src/kmx/kmx-plus-builder/build-tran.d.ts.map +1 -0
  76. package/build/src/kmx/kmx-plus-builder/build-tran.js +30 -0
  77. package/build/src/kmx/kmx-plus-builder/build-tran.js.map +1 -0
  78. package/build/src/kmx/kmx-plus-builder/build-vkey.d.ts +16 -0
  79. package/build/src/kmx/kmx-plus-builder/build-vkey.d.ts.map +1 -0
  80. package/build/src/kmx/kmx-plus-builder/build-vkey.js +23 -0
  81. package/build/src/kmx/kmx-plus-builder/build-vkey.js.map +1 -0
  82. package/build/src/kmx/kmx-plus-builder/builder-section.d.ts +6 -0
  83. package/build/src/kmx/kmx-plus-builder/builder-section.d.ts.map +1 -0
  84. package/build/src/kmx/kmx-plus-builder/builder-section.js +3 -0
  85. package/build/src/kmx/kmx-plus-builder/builder-section.js.map +1 -0
  86. package/build/src/kmx/kmx-plus-builder/kmx-plus-builder.d.ts +47 -0
  87. package/build/src/kmx/kmx-plus-builder/kmx-plus-builder.d.ts.map +1 -0
  88. package/build/src/kmx/kmx-plus-builder/kmx-plus-builder.js +143 -0
  89. package/build/src/kmx/kmx-plus-builder/kmx-plus-builder.js.map +1 -0
  90. package/build/src/kmx/kmx-plus.d.ts +259 -0
  91. package/build/src/kmx/kmx-plus.d.ts.map +1 -0
  92. package/build/src/kmx/kmx-plus.js +594 -0
  93. package/build/src/kmx/kmx-plus.js.map +1 -0
  94. package/build/src/kmx/kmx.d.ts +166 -0
  95. package/build/src/kmx/kmx.d.ts.map +1 -0
  96. package/build/src/kmx/kmx.js +271 -0
  97. package/build/src/kmx/kmx.js.map +1 -0
  98. package/build/src/kmx/string-list.d.ts +29 -0
  99. package/build/src/kmx/string-list.d.ts.map +1 -0
  100. package/build/src/kmx/string-list.js +75 -0
  101. package/build/src/kmx/string-list.js.map +1 -0
  102. package/build/src/kpj/keyman-developer-project.d.ts +58 -0
  103. package/build/src/kpj/keyman-developer-project.d.ts.map +1 -0
  104. package/build/src/kpj/keyman-developer-project.js +141 -0
  105. package/build/src/kpj/keyman-developer-project.js.map +1 -0
  106. package/build/src/kpj/kpj-file-reader.d.ts +17 -0
  107. package/build/src/kpj/kpj-file-reader.d.ts.map +1 -0
  108. package/build/src/kpj/kpj-file-reader.js +92 -0
  109. package/build/src/kpj/kpj-file-reader.js.map +1 -0
  110. package/build/src/kpj/kpj-file.d.ts +39 -0
  111. package/build/src/kpj/kpj-file.d.ts.map +1 -0
  112. package/build/src/kpj/kpj-file.js +11 -0
  113. package/build/src/kpj/kpj-file.js.map +1 -0
  114. package/build/src/kpj.schema.json +127 -0
  115. package/build/src/kvk/kvk-file-reader.d.ts +5 -0
  116. package/build/src/kvk/kvk-file-reader.d.ts.map +1 -0
  117. package/build/src/kvk/kvk-file-reader.js +35 -0
  118. package/build/src/kvk/kvk-file-reader.js.map +1 -0
  119. package/build/src/kvk/kvk-file-writer.d.ts +20 -0
  120. package/build/src/kvk/kvk-file-writer.d.ts.map +1 -0
  121. package/build/src/kvk/kvk-file-writer.js +67 -0
  122. package/build/src/kvk/kvk-file-writer.js.map +1 -0
  123. package/build/src/kvk/kvk-file.d.ts +64 -0
  124. package/build/src/kvk/kvk-file.d.ts.map +1 -0
  125. package/build/src/kvk/kvk-file.js +63 -0
  126. package/build/src/kvk/kvk-file.js.map +1 -0
  127. package/build/src/kvk/kvks-file-reader.d.ts +30 -0
  128. package/build/src/kvk/kvks-file-reader.d.ts.map +1 -0
  129. package/build/src/kvk/kvks-file-reader.js +154 -0
  130. package/build/src/kvk/kvks-file-reader.js.map +1 -0
  131. package/build/src/kvk/kvks-file-writer.d.ts +6 -0
  132. package/build/src/kvk/kvks-file-writer.d.ts.map +1 -0
  133. package/build/src/kvk/kvks-file-writer.js +99 -0
  134. package/build/src/kvk/kvks-file-writer.js.map +1 -0
  135. package/build/src/kvk/kvks-file.d.ts +44 -0
  136. package/build/src/kvk/kvks-file.d.ts.map +1 -0
  137. package/build/src/kvk/kvks-file.js +10 -0
  138. package/build/src/kvk/kvks-file.js.map +1 -0
  139. package/build/src/kvk/visual-keyboard.d.ts +35 -0
  140. package/build/src/kvk/visual-keyboard.d.ts.map +1 -0
  141. package/build/src/kvk/visual-keyboard.js +61 -0
  142. package/build/src/kvk/visual-keyboard.js.map +1 -0
  143. package/build/src/kvks.schema.json +182 -0
  144. package/build/src/ldml-keyboard/ldml-keyboard-testdata-xml.d.ts +56 -0
  145. package/build/src/ldml-keyboard/ldml-keyboard-testdata-xml.d.ts.map +1 -0
  146. package/build/src/ldml-keyboard/ldml-keyboard-testdata-xml.js +20 -0
  147. package/build/src/ldml-keyboard/ldml-keyboard-testdata-xml.js.map +1 -0
  148. package/build/src/ldml-keyboard/ldml-keyboard-xml-reader.d.ts +91 -0
  149. package/build/src/ldml-keyboard/ldml-keyboard-xml-reader.d.ts.map +1 -0
  150. package/build/src/ldml-keyboard/ldml-keyboard-xml-reader.js +370 -0
  151. package/build/src/ldml-keyboard/ldml-keyboard-xml-reader.js.map +1 -0
  152. package/build/src/ldml-keyboard/ldml-keyboard-xml.d.ts +143 -0
  153. package/build/src/ldml-keyboard/ldml-keyboard-xml.d.ts.map +1 -0
  154. package/build/src/ldml-keyboard/ldml-keyboard-xml.js +34 -0
  155. package/build/src/ldml-keyboard/ldml-keyboard-xml.js.map +1 -0
  156. package/build/src/ldml-keyboard.schema.json +634 -0
  157. package/build/src/ldml-keyboardtest.schema.json +221 -0
  158. package/build/src/main.d.ts +21 -0
  159. package/build/src/main.d.ts.map +1 -0
  160. package/build/src/main.js +20 -0
  161. package/build/src/main.js.map +1 -0
  162. package/build/src/util/common-events.d.ts +49 -0
  163. package/build/src/util/common-events.d.ts.map +1 -0
  164. package/build/src/util/common-events.js +29 -0
  165. package/build/src/util/common-events.js.map +1 -0
  166. package/build/src/util/compiler-interfaces.d.ts +51 -0
  167. package/build/src/util/compiler-interfaces.d.ts.map +1 -0
  168. package/build/src/util/compiler-interfaces.js +33 -0
  169. package/build/src/util/compiler-interfaces.js.map +1 -0
  170. package/build/src/util/util.d.ts +17 -0
  171. package/build/src/util/util.d.ts.map +1 -0
  172. package/build/src/util/util.js +67 -0
  173. package/build/src/util/util.js.map +1 -0
  174. package/build/tsconfig.tsbuildinfo +1 -0
  175. package/build.sh +86 -0
  176. package/package.json +58 -0
  177. package/src/consts/virtual-key-constants.ts +257 -0
  178. package/src/keyman-touch-layout/keyman-touch-layout-file-reader.ts +81 -0
  179. package/src/keyman-touch-layout/keyman-touch-layout-file-writer.ts +84 -0
  180. package/src/keyman-touch-layout/keyman-touch-layout-file.ts +87 -0
  181. package/src/kmx/element-string.ts +79 -0
  182. package/src/kmx/kmx-builder.ts +287 -0
  183. package/src/kmx/kmx-plus-builder/build-disp.ts +46 -0
  184. package/src/kmx/kmx-plus-builder/build-elem.ts +103 -0
  185. package/src/kmx/kmx-plus-builder/build-keys.ts +175 -0
  186. package/src/kmx/kmx-plus-builder/build-layr.ts +154 -0
  187. package/src/kmx/kmx-plus-builder/build-list.ts +95 -0
  188. package/src/kmx/kmx-plus-builder/build-loca.ts +34 -0
  189. package/src/kmx/kmx-plus-builder/build-meta.ts +37 -0
  190. package/src/kmx/kmx-plus-builder/build-name.ts +37 -0
  191. package/src/kmx/kmx-plus-builder/build-ordr.ts +45 -0
  192. package/src/kmx/kmx-plus-builder/build-sect.ts +31 -0
  193. package/src/kmx/kmx-plus-builder/build-strs.ts +58 -0
  194. package/src/kmx/kmx-plus-builder/build-tran.ts +50 -0
  195. package/src/kmx/kmx-plus-builder/build-vkey.ts +43 -0
  196. package/src/kmx/kmx-plus-builder/builder-section.ts +6 -0
  197. package/src/kmx/kmx-plus-builder/kmx-plus-builder.ts +190 -0
  198. package/src/kmx/kmx-plus.ts +692 -0
  199. package/src/kmx/kmx.ts +360 -0
  200. package/src/kmx/string-list.ts +74 -0
  201. package/src/kpj/keyman-developer-project.ts +155 -0
  202. package/src/kpj/kpj-file-reader.ts +103 -0
  203. package/src/kpj/kpj-file.ts +52 -0
  204. package/src/kvk/kvk-file-reader.ts +34 -0
  205. package/src/kvk/kvk-file-writer.ts +72 -0
  206. package/src/kvk/kvk-file.ts +122 -0
  207. package/src/kvk/kvks-file-reader.ts +164 -0
  208. package/src/kvk/kvks-file-writer.ts +113 -0
  209. package/src/kvk/kvks-file.ts +53 -0
  210. package/src/kvk/visual-keyboard.ts +80 -0
  211. package/src/ldml-keyboard/ldml-keyboard-testdata-xml.ts +74 -0
  212. package/src/ldml-keyboard/ldml-keyboard-xml-reader.ts +387 -0
  213. package/src/ldml-keyboard/ldml-keyboard-xml.ts +177 -0
  214. package/src/main.ts +27 -0
  215. package/src/restructure.d.ts +2 -0
  216. package/src/util/common-events.ts +50 -0
  217. package/src/util/compiler-interfaces.ts +54 -0
  218. package/src/util/util.ts +68 -0
  219. package/test/fixtures/import-minimal.xml +8 -0
  220. package/test/fixtures/import-minimal1.xml +11 -0
  221. package/test/fixtures/import-minimal2.xml +11 -0
  222. package/test/fixtures/import-symbols.xml +13 -0
  223. package/test/fixtures/invalid-conforms-to.xml +19 -0
  224. package/test/fixtures/invalid-import-base.xml +16 -0
  225. package/test/fixtures/invalid-import-path.xml +16 -0
  226. package/test/fixtures/invalid-import-readfail.xml +16 -0
  227. package/test/fixtures/invalid-import-wrongroot.xml +16 -0
  228. package/test/fixtures/invalid-structure-per-dtd.xml +8 -0
  229. package/test/fixtures/keyman-touch-layout/khmer_angkor.keyman-touch-layout +1950 -0
  230. package/test/fixtures/keyman-touch-layout/legacy.keyman-touch-layout +36 -0
  231. package/test/fixtures/kpj/khmer_angkor.kpj +187 -0
  232. package/test/fixtures/kvk/khmer_angkor.kvk +0 -0
  233. package/test/fixtures/kvk/khmer_angkor.kvks +206 -0
  234. package/test/fixtures/test-fr.xml +22 -0
  235. package/test/helpers/index.ts +39 -0
  236. package/test/helpers/reader-callback-test.ts +199 -0
  237. package/test/keyman-touch-layout/test-keyman-touch-layout-file-reader.ts +71 -0
  238. package/test/keyman-touch-layout/test-keyman-touch-layout-round-trip.ts +35 -0
  239. package/test/kpj/test-kpj-file-reader.ts +123 -0
  240. package/test/kvk/test-kvk-file.ts +15 -0
  241. package/test/kvk/test-kvk-round-trip.ts +87 -0
  242. package/test/kvk/test-kvk-utils.ts +24 -0
  243. package/test/kvk/test-kvks-file.ts +45 -0
  244. package/test/ldml-keyboard/test-ldml-keyboard-testdata-reader.ts +51 -0
  245. package/test/ldml-keyboard/test-ldml-keyboard-xml-reader.ts +131 -0
  246. package/test/tsconfig.json +21 -0
  247. package/test/util/test-unescape.ts +38 -0
  248. package/tsconfig.json +17 -0
@@ -0,0 +1,370 @@
1
+ import * as xml2js from 'xml2js';
2
+ import { default as AjvModule } from 'ajv';
3
+ const Ajv = AjvModule.default; // The actual expected Ajv type.
4
+ import { boxXmlArray } from '../util/util.js';
5
+ import { constants } from '@keymanapp/ldml-keyboard-constants';
6
+ import { CommonTypesMessages } from '../util/common-events.js';
7
+ ;
8
+ export default class LDMLKeyboardXMLSourceFileReader {
9
+ callbacks;
10
+ constructor(callbacks) {
11
+ this.callbacks = callbacks;
12
+ }
13
+ readImportFile(version, subpath) {
14
+ // TODO-LDML: sanitize input string
15
+ let importPath = new URL(`../import/${version}/${subpath}`, import.meta.url);
16
+ // TODO-LDML: support baseFileName?
17
+ return this.callbacks.loadFile(importPath.pathname, importPath);
18
+ }
19
+ /**
20
+ * xml2js will not place single-entry objects into arrays.
21
+ * Easiest way to fix this is to box them ourselves as needed
22
+ * @param source any
23
+ * @returns true on success, false on failure
24
+ */
25
+ boxArrays(source) {
26
+ if (source?.keyboard) {
27
+ if (!source.keyboard.keys) {
28
+ source.keyboard.keys = {
29
+ key: [],
30
+ flicks: [],
31
+ };
32
+ }
33
+ if (!source.keyboard.keys.import) {
34
+ source.keyboard.keys.import = [];
35
+ }
36
+ }
37
+ boxXmlArray(source?.keyboard, 'layers');
38
+ boxXmlArray(source?.keyboard?.displays, 'display');
39
+ boxXmlArray(source?.keyboard?.names, 'name');
40
+ boxXmlArray(source?.keyboard?.vkeys, 'vkey');
41
+ boxXmlArray(source?.keyboard?.keys, 'key');
42
+ boxXmlArray(source?.keyboard?.keys, 'flicks');
43
+ boxXmlArray(source?.keyboard?.locales, 'locale');
44
+ boxXmlArray(source?.keyboard, 'transforms');
45
+ if (source?.keyboard?.layers) {
46
+ for (let layers of source?.keyboard?.layers) {
47
+ boxXmlArray(layers, 'layer');
48
+ if (layers?.layer) {
49
+ for (let layer of layers?.layer) {
50
+ boxXmlArray(layer, 'row');
51
+ }
52
+ }
53
+ }
54
+ }
55
+ if (source?.keyboard?.keys?.flicks) {
56
+ for (let flicks of source?.keyboard?.keys?.flicks) {
57
+ boxXmlArray(flicks, 'flick');
58
+ }
59
+ }
60
+ if (source?.keyboard?.transforms) {
61
+ for (let transform of source.keyboard.transforms) {
62
+ boxXmlArray(transform, 'transform');
63
+ }
64
+ }
65
+ boxXmlArray(source?.keyboard?.reorders, 'reorder');
66
+ return this.boxImportsAndSpecials(source, 'keyboard');
67
+ }
68
+ /**
69
+ * Recurse over object, boxing up any specials or imports
70
+ * @param obj any object to be traversed
71
+ * @param subtag the leafmost enclosing tag such as 'keyboard'
72
+ * @returns true on success, false on failure
73
+ */
74
+ boxImportsAndSpecials(obj, subtag) {
75
+ if (!obj)
76
+ return true;
77
+ if (Array.isArray(obj)) {
78
+ for (const sub of obj) {
79
+ // retain the same subtag
80
+ if (!this.boxImportsAndSpecials(sub, subtag)) {
81
+ return false;
82
+ }
83
+ }
84
+ }
85
+ else if (typeof obj === 'object') {
86
+ for (const key of Object.keys(obj)) {
87
+ if (key === 'special') {
88
+ boxXmlArray(obj, key);
89
+ }
90
+ else if (key === 'import') {
91
+ // Need to 'box it up' first for processing
92
+ boxXmlArray(obj, key);
93
+ // Now, resolve the import
94
+ if (!this.resolveImports(obj, subtag)) {
95
+ return false;
96
+ }
97
+ // now delete the import array we so carefully constructed, the caller does not
98
+ // want to see it.
99
+ delete obj['import'];
100
+ }
101
+ else {
102
+ if (!this.boxImportsAndSpecials(obj[key], key)) {
103
+ return false;
104
+ }
105
+ }
106
+ }
107
+ }
108
+ return true;
109
+ }
110
+ /**
111
+ *
112
+ * @param obj object to be imported into
113
+ * @param subtag obj's element tag, e.g. `keys`
114
+ * @returns true on success, false on failure
115
+ */
116
+ resolveImports(obj, subtag) {
117
+ // These are in reverse order, because the imports insert at the beginning of the array.
118
+ // first, the explicit imports
119
+ for (const asImport of ([...obj['import']].reverse())) {
120
+ if (!this.resolveOneImport(obj, subtag, asImport)) {
121
+ return false;
122
+ }
123
+ }
124
+ // then, the implied imports
125
+ if (subtag === 'keys') {
126
+ // <import base="cldr" path="techpreview/keys-Latn-implied.xml"/>
127
+ if (!this.resolveOneImport(obj, subtag, {
128
+ base: constants.cldr_import_base,
129
+ path: constants.cldr_implied_keys_import
130
+ })) {
131
+ return false;
132
+ }
133
+ }
134
+ return true;
135
+ }
136
+ /**
137
+ * @param obj the object being imported into
138
+ * @param subtag obj's element tag, e.g. `keys`
139
+ * @param asImport the import structure
140
+ * @returns true on success, false on failure
141
+ */
142
+ resolveOneImport(obj, subtag, asImport) {
143
+ const { base, path } = asImport;
144
+ if (base !== constants.cldr_import_base) {
145
+ this.callbacks.reportMessage(CommonTypesMessages.Error_ImportInvalidBase({ base, path, subtag }));
146
+ return false;
147
+ }
148
+ const paths = path.split('/');
149
+ if (paths[0] == '' || paths[1] == '' || paths.length !== 2) {
150
+ this.callbacks.reportMessage(CommonTypesMessages.Error_ImportInvalidPath({ base, path, subtag }));
151
+ return false;
152
+ }
153
+ const importData = this.readImportFile(paths[0], paths[1]);
154
+ if (!importData || !importData.length) {
155
+ this.callbacks.reportMessage(CommonTypesMessages.Error_ImportReadFail({ base, path, subtag }));
156
+ return false;
157
+ }
158
+ const importXml = this.loadUnboxed(importData); // TODO-LDML: have to load as any because it is an arbitrary part
159
+ const importRootNode = importXml[subtag]; // e.g. <keys/>
160
+ // importXml will have one property: the root element.
161
+ if (!importRootNode) {
162
+ this.callbacks.reportMessage(CommonTypesMessages.Error_ImportWrongRoot({ base, path, subtag }));
163
+ return false;
164
+ }
165
+ // pull all children of importXml[subtag] into obj
166
+ for (const subsubtag of Object.keys(importRootNode).reverse()) { // e.g. <key/>
167
+ const subsubval = importRootNode[subsubtag];
168
+ if (!Array.isArray(subsubval)) {
169
+ // This is somewhat of an internal error, indicating that a non-mergeable XML file was imported
170
+ // Not exercisable with the standard LDML imports.
171
+ this.callbacks.reportMessage(CommonTypesMessages.Error_ImportMergeFail({ base, path, subtag, subsubtag }));
172
+ return false;
173
+ }
174
+ if (!obj[subsubtag]) {
175
+ obj[subsubtag] = []; // start with empty array
176
+ }
177
+ obj[subsubtag] = [...subsubval, ...obj[subsubtag]];
178
+ }
179
+ return true;
180
+ }
181
+ /**
182
+ * @returns true if valid, false if invalid
183
+ */
184
+ validate(source, schemaSource) {
185
+ const schema = JSON.parse(schemaSource.toString('utf8'));
186
+ const ajv = new Ajv();
187
+ if (!ajv.validate(schema, source)) {
188
+ for (let err of ajv.errors) {
189
+ this.callbacks.reportMessage(CommonTypesMessages.Error_SchemaValidationError({
190
+ instancePath: err.instancePath,
191
+ keyword: err.keyword,
192
+ message: err.message || 'Unknown AJV Error',
193
+ params: Object.entries(err.params || {}).sort().map(([k, v]) => `${k}="${v}"`).join(' '),
194
+ }));
195
+ }
196
+ return false;
197
+ }
198
+ return true;
199
+ }
200
+ loadUnboxed(file) {
201
+ let source = (() => {
202
+ let a;
203
+ let parser = new xml2js.Parser({
204
+ explicitArray: false,
205
+ mergeAttrs: true,
206
+ includeWhiteChars: false,
207
+ emptyTag: {}
208
+ // Why "as any"? xml2js is broken:
209
+ // https://github.com/Leonidas-from-XIV/node-xml2js/issues/648 means
210
+ // that an old version of `emptyTag` is used which doesn't support
211
+ // functions, but DefinitelyTyped is requiring use of function or a
212
+ // string. See also notes at
213
+ // https://github.com/DefinitelyTyped/DefinitelyTyped/pull/59259#issuecomment-1254405470
214
+ // An alternative fix would be to pull xml2js directly from github
215
+ // rather than using the version tagged on npmjs.com.
216
+ });
217
+ parser.parseString(file, (e, r) => { a = r; }); // TODO-LDML: isn't 'e' the error?
218
+ return a;
219
+ })();
220
+ return source;
221
+ }
222
+ /**
223
+ * @param file
224
+ * @returns source on success, otherwise null
225
+ */
226
+ load(file) {
227
+ if (!file) {
228
+ return null;
229
+ }
230
+ const source = this.loadUnboxed(file);
231
+ if (this.boxArrays(source)) {
232
+ return source;
233
+ }
234
+ else {
235
+ return null;
236
+ }
237
+ }
238
+ loadTestDataUnboxed(file) {
239
+ let source = (() => {
240
+ let a;
241
+ let parser = new xml2js.Parser({
242
+ // explicitArray: false,
243
+ preserveChildrenOrder: true,
244
+ explicitChildren: true, // needed for test data
245
+ // mergeAttrs: true,
246
+ // includeWhiteChars: false,
247
+ // emptyTag: {} as any
248
+ // Why "as any"? xml2js is broken:
249
+ // https://github.com/Leonidas-from-XIV/node-xml2js/issues/648 means
250
+ // that an old version of `emptyTag` is used which doesn't support
251
+ // functions, but DefinitelyTyped is requiring use of function or a
252
+ // string. See also notes at
253
+ // https://github.com/DefinitelyTyped/DefinitelyTyped/pull/59259#issuecomment-1254405470
254
+ // An alternative fix would be to pull xml2js directly from github
255
+ // rather than using the version tagged on npmjs.com.
256
+ });
257
+ parser.parseString(file, (e, r) => { a = r; }); // TODO-LDML: isn't 'e' the error?
258
+ return a; // Why 'any'? Because we need to box up the $'s into proper properties.
259
+ })();
260
+ return source;
261
+ }
262
+ /**
263
+ * Filter the obj array for a subtag
264
+ * @param source array of source objs
265
+ * @param subtag subtag to filter on
266
+ * @returns
267
+ */
268
+ findSubtagArray(source, subtag) {
269
+ return source?.filter(o => o['#name'] === subtag);
270
+ }
271
+ /**
272
+ * Get exactly one element
273
+ * @param source
274
+ * @param subtag
275
+ * @returns
276
+ */
277
+ findSubtag(source, subtag) {
278
+ const r = this.findSubtagArray(source, subtag);
279
+ if (!r || r.length === 0) {
280
+ return null;
281
+ }
282
+ else if (r.length === 1) {
283
+ return r[0];
284
+ }
285
+ else {
286
+ this.callbacks.reportMessage(CommonTypesMessages.Error_TestDataUnexpectedArray({ subtag }));
287
+ return null; // ERROR
288
+ }
289
+ }
290
+ /**
291
+ * The default test data stuffer.
292
+ * Just gets $ (the attrs) as the body.
293
+ * Override to use something more complex, such as including child nodes.
294
+ * @param o object to map
295
+ * @param r back ref to reader
296
+ */
297
+ static defaultMapper = ((o, r) => o?.$);
298
+ /**
299
+ *
300
+ * @param obj target object
301
+ * @param source array of $/#name strings
302
+ * @param subtag name to extract
303
+ * @param mapper custom mapper function
304
+ */
305
+ stuffBoxes(obj, source, subtag, asArray, mapper) {
306
+ if (!mapper) {
307
+ mapper = LDMLKeyboardXMLSourceFileReader.defaultMapper;
308
+ }
309
+ if (asArray) {
310
+ const r = this;
311
+ obj[subtag] = this.findSubtagArray(source, subtag)?.map((v) => mapper(v, r)); // extract contents only
312
+ }
313
+ else {
314
+ obj[subtag] = mapper(this.findSubtag(source, subtag), this); // run the mapper once
315
+ }
316
+ }
317
+ boxTestDataArrays(raw) {
318
+ if (!raw)
319
+ return null;
320
+ const a = {
321
+ keyboardTest: {
322
+ conformsTo: raw?.keyboardTest?.$?.conformsTo,
323
+ }
324
+ };
325
+ const $$ = raw?.keyboardTest?.$$;
326
+ this.stuffBoxes(a.keyboardTest, $$, 'info');
327
+ this.stuffBoxes(a.keyboardTest, $$, 'repertoire', true);
328
+ this.stuffBoxes(a.keyboardTest, $$, 'tests', true, (o, r) => {
329
+ // start with basic unpack
330
+ const tests = LDMLKeyboardXMLSourceFileReader.defaultMapper(o, r);
331
+ // add ingredients
332
+ r.stuffBoxes(tests, o.$$, 'test', true, (o, r) => {
333
+ // start with basic unpack
334
+ const test = LDMLKeyboardXMLSourceFileReader.defaultMapper(o, r);
335
+ // add ingredients
336
+ const $$ = o.$$;
337
+ r.stuffBoxes(test, $$, 'startContext'); // singleton
338
+ // now the actions
339
+ test.actions = $$.map(v => {
340
+ const subtag = v['#name'];
341
+ const subv = LDMLKeyboardXMLSourceFileReader.defaultMapper(v, r);
342
+ switch (subtag) {
343
+ case 'keystroke': return { keystroke: subv };
344
+ case 'check': return { check: subv };
345
+ case 'emit': return { emit: subv };
346
+ case 'startContext': return null; // handled above
347
+ default:
348
+ this.callbacks.reportMessage(CommonTypesMessages.Error_TestDataUnexpectedAction({ subtag }));
349
+ return null;
350
+ }
351
+ }).filter(v => v !== null);
352
+ return test;
353
+ });
354
+ return tests;
355
+ });
356
+ return a;
357
+ }
358
+ /**
359
+ * @param file test file
360
+ * @returns source on success, otherwise null
361
+ */
362
+ loadTestData(file) {
363
+ if (!file) {
364
+ return null;
365
+ }
366
+ const source = this.loadTestDataUnboxed(file);
367
+ return this.boxTestDataArrays(source);
368
+ }
369
+ }
370
+ //# sourceMappingURL=ldml-keyboard-xml-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ldml-keyboard-xml-reader.js","sourceRoot":"","sources":["../../../src/ldml-keyboard/ldml-keyboard-xml-reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,143 @@
1
+ export interface LDMLKeyboardXMLSourceFile {
2
+ /**
3
+ * <keyboard> -- the root element.
4
+ */
5
+ keyboard: LKKeyboard;
6
+ }
7
+ export interface LKKeyboard {
8
+ locale?: string;
9
+ conformsTo?: string;
10
+ locales?: LKLocales;
11
+ version?: LKVersion;
12
+ info?: LKInfo;
13
+ names?: LKNames;
14
+ settings?: LKSettings;
15
+ keys?: LKKeys;
16
+ displays?: LKDisplays;
17
+ layers?: LKLayers[];
18
+ vkeys?: LKVkeys;
19
+ transforms?: LKTransforms[];
20
+ reorders?: LKReorders;
21
+ }
22
+ /**
23
+ * This is defined as an interface, but actually is resolved during the reading phase
24
+ */
25
+ export interface LKImport {
26
+ /**
27
+ * import base, currently `cldr` is supported
28
+ */
29
+ base: string;
30
+ /**
31
+ * path to imported resource, of the form `techpreview/*.xml`
32
+ */
33
+ path: string;
34
+ }
35
+ export interface LKLocales {
36
+ locale: LKLocale[];
37
+ }
38
+ export interface LKLocale {
39
+ id?: string;
40
+ }
41
+ export interface LKVersion {
42
+ number: string;
43
+ }
44
+ export interface LKInfo {
45
+ author?: string;
46
+ indicator?: string;
47
+ layout?: string;
48
+ normalization?: string;
49
+ }
50
+ export interface LKNames {
51
+ name: LKName[];
52
+ }
53
+ export interface LKName {
54
+ value?: string;
55
+ }
56
+ export interface LKSettings {
57
+ fallback: "omit";
58
+ transformFailure: "omit";
59
+ transformPartial: "hide";
60
+ }
61
+ export interface LKKeys {
62
+ key: LKKey[];
63
+ flicks: LKFlicks[];
64
+ }
65
+ export interface LKKey {
66
+ id?: string;
67
+ flicks?: string;
68
+ to?: string;
69
+ gap?: boolean;
70
+ switch?: string;
71
+ longPress?: string;
72
+ longPressDefault?: string;
73
+ multiTap?: string;
74
+ transform?: "no";
75
+ width?: number;
76
+ }
77
+ export interface LKFlicks {
78
+ id?: string;
79
+ flick?: LKFlick[];
80
+ }
81
+ export interface LKFlick {
82
+ directions?: string;
83
+ to?: string;
84
+ }
85
+ export interface LKLayers {
86
+ /**
87
+ * `touch`, or hardware `us`, `iso`, `jis`, `abnt2`
88
+ */
89
+ form?: string;
90
+ /**
91
+ * Minimum width in millimeters
92
+ */
93
+ minDeviceWidth?: number;
94
+ layer?: LKLayer[];
95
+ }
96
+ export interface LKLayer {
97
+ id?: string;
98
+ modifier?: string;
99
+ row?: LKRow[];
100
+ }
101
+ export interface LKRow {
102
+ keys?: string;
103
+ }
104
+ export interface LKVkeys {
105
+ vkey?: LKVkey[];
106
+ }
107
+ export interface LKVkey {
108
+ from?: string;
109
+ to?: string;
110
+ }
111
+ export interface LKTransforms {
112
+ type?: "simple" | "final";
113
+ transform: LKTransform[];
114
+ }
115
+ export interface LKTransform {
116
+ from?: string;
117
+ to?: string;
118
+ before?: string;
119
+ error?: "fail";
120
+ }
121
+ export interface LKReorders {
122
+ reorder: LKReorder[];
123
+ }
124
+ export interface LKReorder {
125
+ from?: string;
126
+ before?: string;
127
+ order?: string;
128
+ tertiary?: string;
129
+ tertiary_base?: string;
130
+ prebase?: string;
131
+ }
132
+ export interface LKDisplayOptions {
133
+ baseCharacter?: string;
134
+ }
135
+ export interface LKDisplay {
136
+ to?: string;
137
+ display?: string;
138
+ }
139
+ export interface LKDisplays {
140
+ display?: LKDisplay[];
141
+ displayOptions?: LKDisplayOptions;
142
+ }
143
+ //# sourceMappingURL=ldml-keyboard-xml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ldml-keyboard-xml.d.ts","sourceRoot":"","sources":["../../../src/ldml-keyboard/ldml-keyboard-xml.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ //
2
+ // Conforms to techpreview
3
+ //
4
+ // The interfaces in this file are designed with reference to the mapped
5
+ // structures produced by xml2js when passed a LDML keyboard .xml file.
6
+ //
7
+ // Using prefix LK for LDML Keyboard
8
+ //
9
+ ;
10
+ ;
11
+ ;
12
+ ;
13
+ ;
14
+ ;
15
+ ;
16
+ ;
17
+ ;
18
+ ;
19
+ ;
20
+ ;
21
+ ;
22
+ ;
23
+ ;
24
+ ;
25
+ ;
26
+ ;
27
+ ;
28
+ ;
29
+ ;
30
+ ;
31
+ ;
32
+ ;
33
+ export {};
34
+ //# sourceMappingURL=ldml-keyboard-xml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ldml-keyboard-xml.js","sourceRoot":"","sources":["../../../src/ldml-keyboard/ldml-keyboard-xml.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AACF,wEAAwE;AACxE,uEAAuE;AACvE,EAAE;AACF,oCAAoC;AACpC,EAAE;AAwBD,CAAC;AAcD,CAAC;AAID,CAAC;AAID,CAAC;AAWD,CAAC;AAID,CAAC;AAID,CAAC;AAMD,CAAC;AAKD,CAAC;AAaD,CAAC;AAKD,CAAC;AAKD,CAAC;AAYD,CAAC;AAMD,CAAC;AAID,CAAC;AAID,CAAC;AAKD,CAAC;AAKD,CAAC;AAOD,CAAC;AAID,CAAC;AASD,CAAC;AAID,CAAC;AAKD,CAAC;AAKD,CAAC"}