@keymanapp/kmc-model 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 (180) hide show
  1. package/.nyc_output/coverage-10524-1681239236645-0.json +1 -0
  2. package/Makefile +38 -0
  3. package/build/cjs-src/lexical-model-compiler.cjs +152688 -0
  4. package/build/src/build-trie.d.ts +40 -0
  5. package/build/src/build-trie.d.ts.map +1 -0
  6. package/build/src/build-trie.js +362 -0
  7. package/build/src/build-trie.js.map +1 -0
  8. package/build/src/join-word-breaker-decorator.d.ts +10 -0
  9. package/build/src/join-word-breaker-decorator.d.ts.map +1 -0
  10. package/build/src/join-word-breaker-decorator.js +121 -0
  11. package/build/src/join-word-breaker-decorator.js.map +1 -0
  12. package/build/src/lexical-model-compiler.d.ts +19 -0
  13. package/build/src/lexical-model-compiler.d.ts.map +1 -0
  14. package/build/src/lexical-model-compiler.js +155 -0
  15. package/build/src/lexical-model-compiler.js.map +1 -0
  16. package/build/src/lexical-model.d.ts +135 -0
  17. package/build/src/lexical-model.d.ts.map +1 -0
  18. package/build/src/lexical-model.js +6 -0
  19. package/build/src/lexical-model.js.map +1 -0
  20. package/build/src/main.d.ts +15 -0
  21. package/build/src/main.d.ts.map +1 -0
  22. package/build/src/main.js +46 -0
  23. package/build/src/main.js.map +1 -0
  24. package/build/src/model-compiler-errors.d.ts +77 -0
  25. package/build/src/model-compiler-errors.d.ts.map +1 -0
  26. package/build/src/model-compiler-errors.js +156 -0
  27. package/build/src/model-compiler-errors.js.map +1 -0
  28. package/build/src/model-defaults.d.ts +56 -0
  29. package/build/src/model-defaults.d.ts.map +1 -0
  30. package/build/src/model-defaults.js +106 -0
  31. package/build/src/model-defaults.js.map +1 -0
  32. package/build/src/model-definitions.d.ts +71 -0
  33. package/build/src/model-definitions.d.ts.map +1 -0
  34. package/build/src/model-definitions.js +189 -0
  35. package/build/src/model-definitions.js.map +1 -0
  36. package/build/src/script-overrides-decorator.d.ts +4 -0
  37. package/build/src/script-overrides-decorator.d.ts.map +1 -0
  38. package/build/src/script-overrides-decorator.js +63 -0
  39. package/build/src/script-overrides-decorator.js.map +1 -0
  40. package/build/test/helpers/index.d.ts +69 -0
  41. package/build/test/helpers/index.d.ts.map +1 -0
  42. package/build/test/helpers/index.js +160 -0
  43. package/build/test/helpers/index.js.map +1 -0
  44. package/build/test/test-compile-model-with-pseudoclosure.d.ts +2 -0
  45. package/build/test/test-compile-model-with-pseudoclosure.d.ts.map +1 -0
  46. package/build/test/test-compile-model-with-pseudoclosure.js +200 -0
  47. package/build/test/test-compile-model-with-pseudoclosure.js.map +1 -0
  48. package/build/test/test-compile-model.d.ts +2 -0
  49. package/build/test/test-compile-model.d.ts.map +1 -0
  50. package/build/test/test-compile-model.js +30 -0
  51. package/build/test/test-compile-model.js.map +1 -0
  52. package/build/test/test-compile-trie.d.ts +2 -0
  53. package/build/test/test-compile-trie.d.ts.map +1 -0
  54. package/build/test/test-compile-trie.js +125 -0
  55. package/build/test/test-compile-trie.js.map +1 -0
  56. package/build/test/test-default-apply-case.d.ts +2 -0
  57. package/build/test/test-default-apply-case.d.ts.map +1 -0
  58. package/build/test/test-default-apply-case.js +105 -0
  59. package/build/test/test-default-apply-case.js.map +1 -0
  60. package/build/test/test-default-search-term-to-key.d.ts +2 -0
  61. package/build/test/test-default-search-term-to-key.d.ts.map +1 -0
  62. package/build/test/test-default-search-term-to-key.js +148 -0
  63. package/build/test/test-default-search-term-to-key.js.map +1 -0
  64. package/build/test/test-error-logger.d.ts +2 -0
  65. package/build/test/test-error-logger.d.ts.map +1 -0
  66. package/build/test/test-error-logger.js +26 -0
  67. package/build/test/test-error-logger.js.map +1 -0
  68. package/build/test/test-join-word-breaker.d.ts +2 -0
  69. package/build/test/test-join-word-breaker.d.ts.map +1 -0
  70. package/build/test/test-join-word-breaker.js +84 -0
  71. package/build/test/test-join-word-breaker.js.map +1 -0
  72. package/build/test/test-model-definitions.d.ts +2 -0
  73. package/build/test/test-model-definitions.d.ts.map +1 -0
  74. package/build/test/test-model-definitions.js +165 -0
  75. package/build/test/test-model-definitions.js.map +1 -0
  76. package/build/test/test-override-script-defaults.d.ts +2 -0
  77. package/build/test/test-override-script-defaults.d.ts.map +1 -0
  78. package/build/test/test-override-script-defaults.js +28 -0
  79. package/build/test/test-override-script-defaults.js.map +1 -0
  80. package/build/test/test-parse-wordlist.d.ts +2 -0
  81. package/build/test/test-parse-wordlist.d.ts.map +1 -0
  82. package/build/test/test-parse-wordlist.js +110 -0
  83. package/build/test/test-parse-wordlist.js.map +1 -0
  84. package/build/test/test-punctuation.d.ts +2 -0
  85. package/build/test/test-punctuation.d.ts.map +1 -0
  86. package/build/test/test-punctuation.js +31 -0
  87. package/build/test/test-punctuation.js.map +1 -0
  88. package/build/test/tsconfig.tsbuildinfo +1 -0
  89. package/build/test/wordbreakers/data.d.ts +35 -0
  90. package/build/test/wordbreakers/data.d.ts.map +1 -0
  91. package/build/test/wordbreakers/data.js +1778 -0
  92. package/build/test/wordbreakers/data.js.map +1 -0
  93. package/build/test/wordbreakers/default-wordbreaker-esm.d.ts +10 -0
  94. package/build/test/wordbreakers/default-wordbreaker-esm.d.ts.map +1 -0
  95. package/build/test/wordbreakers/default-wordbreaker-esm.js +354 -0
  96. package/build/test/wordbreakers/default-wordbreaker-esm.js.map +1 -0
  97. package/build/tsconfig.tsbuildinfo +1 -0
  98. package/build.sh +73 -0
  99. package/coverage/lcov-report/base.css +224 -0
  100. package/coverage/lcov-report/block-navigation.js +87 -0
  101. package/coverage/lcov-report/favicon.png +0 -0
  102. package/coverage/lcov-report/index.html +161 -0
  103. package/coverage/lcov-report/prettify.css +1 -0
  104. package/coverage/lcov-report/prettify.js +2 -0
  105. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  106. package/coverage/lcov-report/sorter.js +196 -0
  107. package/coverage/lcov-report/src/build-trie.ts.html +1618 -0
  108. package/coverage/lcov-report/src/index.html +221 -0
  109. package/coverage/lcov-report/src/join-word-breaker-decorator.ts.html +487 -0
  110. package/coverage/lcov-report/src/lexical-model-compiler.ts.html +622 -0
  111. package/coverage/lcov-report/src/main.ts.html +271 -0
  112. package/coverage/lcov-report/src/model-compiler-errors.ts.html +691 -0
  113. package/coverage/lcov-report/src/model-defaults.ts.html +415 -0
  114. package/coverage/lcov-report/src/model-definitions.ts.html +748 -0
  115. package/coverage/lcov-report/src/script-overrides-decorator.ts.html +310 -0
  116. package/coverage/lcov-report/test/helpers/index.html +116 -0
  117. package/coverage/lcov-report/test/helpers/index.ts.html +646 -0
  118. package/coverage/lcov-report/test/index.html +266 -0
  119. package/coverage/lcov-report/test/test-compile-model-with-pseudoclosure.ts.html +802 -0
  120. package/coverage/lcov-report/test/test-compile-model.ts.html +187 -0
  121. package/coverage/lcov-report/test/test-compile-trie.ts.html +541 -0
  122. package/coverage/lcov-report/test/test-default-apply-case.ts.html +466 -0
  123. package/coverage/lcov-report/test/test-default-search-term-to-key.ts.html +628 -0
  124. package/coverage/lcov-report/test/test-error-logger.ts.html +196 -0
  125. package/coverage/lcov-report/test/test-join-word-breaker.ts.html +376 -0
  126. package/coverage/lcov-report/test/test-model-definitions.ts.html +676 -0
  127. package/coverage/lcov-report/test/test-override-script-defaults.ts.html +184 -0
  128. package/coverage/lcov-report/test/test-parse-wordlist.ts.html +466 -0
  129. package/coverage/lcov-report/test/test-punctuation.ts.html +190 -0
  130. package/coverage/lcov-report/test/wordbreakers/data.ts.html +5413 -0
  131. package/coverage/lcov-report/test/wordbreakers/default-wordbreaker-esm.ts.html +1234 -0
  132. package/coverage/lcov-report/test/wordbreakers/index.html +131 -0
  133. package/coverage/lcov.info +5969 -0
  134. package/package.json +61 -0
  135. package/src/build-trie.ts +511 -0
  136. package/src/join-word-breaker-decorator.ts +134 -0
  137. package/src/lexical-model-compiler.ts +179 -0
  138. package/src/lexical-model.ts +150 -0
  139. package/src/main.ts +62 -0
  140. package/src/model-compiler-errors.ts +203 -0
  141. package/src/model-defaults.ts +111 -0
  142. package/src/model-definitions.ts +222 -0
  143. package/src/script-overrides-decorator.ts +75 -0
  144. package/test/README.md +15 -0
  145. package/test/fixtures/example.qaa.joinwordbreaker/example.qaa.joinwordbreaker.model.ts +10 -0
  146. package/test/fixtures/example.qaa.joinwordbreaker/wordlist.tsv +3 -0
  147. package/test/fixtures/example.qaa.scriptusesspaces/example.qaa.scriptusesspaces.model.ts +10 -0
  148. package/test/fixtures/example.qaa.scriptusesspaces/wordlist.tsv +8 -0
  149. package/test/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.kmp.json +45 -0
  150. package/test/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.kps +35 -0
  151. package/test/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.ts +6 -0
  152. package/test/fixtures/example.qaa.sencoten/wordlist.tsv +10 -0
  153. package/test/fixtures/example.qaa.smp/example.qaa.smp.model.ts +6 -0
  154. package/test/fixtures/example.qaa.smp/wordlist.tsv +5 -0
  155. package/test/fixtures/example.qaa.trivial/example.qaa.trivial.model.ts +5 -0
  156. package/test/fixtures/example.qaa.trivial/wordlist.tsv +3 -0
  157. package/test/fixtures/example.qaa.utf16be/example.qaa.utf16be.model.ts +5 -0
  158. package/test/fixtures/example.qaa.utf16be/wordlist.txt +0 -0
  159. package/test/fixtures/example.qaa.utf16le/example.qaa.utf16le.model.ts +5 -0
  160. package/test/fixtures/example.qaa.utf16le/wordlist.txt +0 -0
  161. package/test/fixtures/example.qaa.wordbreaker/example.qaa.wordbreaker.model.ts +9 -0
  162. package/test/fixtures/example.qaa.wordbreaker/wordlist.tsv +3 -0
  163. package/test/helpers/index.ts +187 -0
  164. package/test/test-compile-model-with-pseudoclosure.ts +239 -0
  165. package/test/test-compile-model.ts +34 -0
  166. package/test/test-compile-trie.ts +152 -0
  167. package/test/test-default-apply-case.ts +128 -0
  168. package/test/test-default-search-term-to-key.ts +181 -0
  169. package/test/test-error-logger.ts +38 -0
  170. package/test/test-join-word-breaker.ts +97 -0
  171. package/test/test-model-definitions.ts +198 -0
  172. package/test/test-override-script-defaults.ts +33 -0
  173. package/test/test-parse-wordlist.ts +127 -0
  174. package/test/test-punctuation.ts +35 -0
  175. package/test/tsconfig.json +22 -0
  176. package/test/wordbreakers/README.md +3 -0
  177. package/test/wordbreakers/data.ts +1776 -0
  178. package/test/wordbreakers/default-wordbreaker-esm.ts +383 -0
  179. package/tools/create-override-script-regexp.ts +145 -0
  180. package/tsconfig.json +17 -0
@@ -0,0 +1,105 @@
1
+ import 'mocha';
2
+ import { assert } from 'chai';
3
+ import { defaultApplyCasing } from '../src/model-defaults.js';
4
+ describe('The default applyCasing() function', function () {
5
+ // // --------
6
+ // // Definitions toward SMP testing.
7
+ // // Ref: https://unicode.org/charts/nameslist/n_1D400.html
8
+ // // Useful for tests related to strings with supplementary pairs.
9
+ // let u = function(code: number): string {
10
+ // var H = Math.floor((code - 0x10000) / 0x400) + 0xD800;
11
+ // var L = (code - 0x10000) % 0x400 + 0xDC00;
12
+ // return String.fromCharCode(H, L);
13
+ // }
14
+ // Are there any known default-handled SMP cases?
15
+ // If not... we could make the defaultApplyCase function simpler by not worrying about SMP.
16
+ //
17
+ // let smp_a = u(0x1d5ba); // MATHEMATICAL SANS-SERIF SMALL A
18
+ // let smp_p = u(0x1d5c9);
19
+ // let smp_l = u(0x1d5c5);
20
+ // let smp_e = u(0x1d5be);
21
+ // let smp_A = u(0x1d5a0); // MATHEMATICAL SANS_SERIF CAPITAL A
22
+ // let smp_P = u(0x1d5af);
23
+ // let smp_L = u(0x1d5ab);
24
+ // let smp_E = u(0x1d5a4);
25
+ // // Unfortunately... the default JS .toUpperCase() implementation doesn't actually
26
+ // // map the 'SMALL' versions to the 'CAPITAL' versions.
27
+ // // ---------
28
+ describe('case: \'lower\'', function () {
29
+ const testCases = [
30
+ // Note: not written the Turkish way. Turns out 'İ'.toLowerCase() decomposes the result,
31
+ // which would have made for a fairly yucky test.
32
+ ['Istanbul', 'istanbul'],
33
+ // The DEFAULT function is NOT responsible for understanding the Turkish
34
+ // case regarding the lowercasing of:
35
+ // 'I' U+0048 LATIN CAPITAL LETTER I to 'ı' U+0131 LATIN SMALL LETTER DOTLESS I
36
+ // For Turkic languages, the recommendation is to make a
37
+ // custom applyCasing function:
38
+ ['DİYARBAKIR', 'di̇yarbakir'],
39
+ // full-width romaji has corresponding capitalized versions:
40
+ ['AESTHETIC', 'aesthetic'],
41
+ // "skýlos" is Greek for dog 🇬🇷🐶
42
+ // starts with an 's' and ends with an 's'
43
+ // which are DIFFERENT CHARACTERS in lowercased Greek!
44
+ ['ΣΚΥΛΟΣ', 'σκυλος'],
45
+ // Uncased syntax and numbers should pass through unscathed:
46
+ ['1234.?!', '1234.?!']
47
+ ];
48
+ for (let [input, expected] of testCases) {
49
+ it(`should lowercase '${input}' as '${expected}'`, function () {
50
+ assert.equal(defaultApplyCasing('lower', input), expected);
51
+ });
52
+ }
53
+ });
54
+ describe('case: \'upper\'', function () {
55
+ const testCases = [
56
+ // Inverse of the corresponding 'lower' test.
57
+ ['istanbul', 'ISTANBUL'],
58
+ // The DEFAULT function is NOT responsible for understanding the Turkish
59
+ // case regarding the uppercasing of:
60
+ // 'ı' U+0131 LATIN SMALL LETTER DOTLESS I to 'I' U+0048 LATIN CAPITAL LETTER I
61
+ // For Turkic languages, the recommendation is to make a
62
+ // custom applyCasing function:
63
+ ['diyarbakır', 'DIYARBAKIR'],
64
+ // full-width romaji has corresponding capitalized versions:
65
+ ['aesthetic', 'AESTHETIC'],
66
+ // "skýlos" is Greek for dog 🇬🇷🐶
67
+ // starts with an 's' and ends with an 's'
68
+ // which are DIFFERENT CHARACTERS in lowercased Greek!
69
+ ['σκυλος', 'ΣΚΥΛΟΣ'],
70
+ // Uncased syntax and numbers should pass through unscathed:
71
+ ['1234.?!', '1234.?!']
72
+ ];
73
+ for (let [input, expected] of testCases) {
74
+ it(`should uppercase '${input}' as '${expected}'`, function () {
75
+ assert.equal(defaultApplyCasing('upper', input), expected);
76
+ });
77
+ }
78
+ });
79
+ describe('case: \'initial\'', function () {
80
+ const testCases = [
81
+ // Inverse of the corresponding 'lower' test.
82
+ ['istanbul', 'Istanbul'],
83
+ // The DEFAULT function is NOT responsible for understanding the Turkish
84
+ // case regarding the uppercasing of:
85
+ // 'ı' U+0131 LATIN SMALL LETTER DOTLESS I to 'I' U+0048 LATIN CAPITAL LETTER I
86
+ // For Turkic languages, the recommendation is to make a
87
+ // custom applyCasing function:
88
+ ['diyarbakır', 'Diyarbakır'],
89
+ // full-width romaji has corresponding capitalized versions:
90
+ ['aesthetic', 'Aesthetic'],
91
+ // "skýlos" is Greek for dog 🇬🇷🐶
92
+ // starts with an 's' and ends with an 's'
93
+ // which are DIFFERENT CHARACTERS in lowercased Greek!
94
+ ['σκυλος', 'Σκυλος'],
95
+ // Uncased syntax and numbers should pass through unscathed:
96
+ ['1234.?!', '1234.?!']
97
+ ];
98
+ for (let [input, expected] of testCases) {
99
+ it(`should initial-case '${input}' as '${expected}'`, function () {
100
+ assert.equal(defaultApplyCasing('initial', input), expected);
101
+ });
102
+ }
103
+ });
104
+ });
105
+ //# sourceMappingURL=test-default-apply-case.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-default-apply-case.js","sourceRoot":"","sources":["../../test/test-default-apply-case.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import 'mocha';
2
+ //# sourceMappingURL=test-default-search-term-to-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-default-search-term-to-key.d.ts","sourceRoot":"","sources":["../../test/test-default-search-term-to-key.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,CAAC"}
@@ -0,0 +1,148 @@
1
+ import 'mocha';
2
+ import { assert } from 'chai';
3
+ import { defaultSearchTermToKey, defaultCasedSearchTermToKey, defaultApplyCasing } from '../src/model-defaults.js';
4
+ describe('The default searchTermToKey() function', function () {
5
+ describe('languageUsesCasing: false', function () {
6
+ const testCases = [
7
+ // "İstanbul" has a U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE.
8
+ // Without any casing operations, only the I should be altered.
9
+ ['İstanbul', 'Istanbul'],
10
+ // Similarly...
11
+ ['DİYARBAKIR', 'DIYARBAKIR'],
12
+ // "skýlos" is Greek for dog 🇬🇷🐶
13
+ // starts with an 's' and ends with an 's'
14
+ // which are DIFFERENT CHARACTERS in lowercased Greek!
15
+ ['σκύλος', 'σκυλος'],
16
+ ['ΣΚΥΛΟΣ', 'ΣΚΥΛΟΣ'],
17
+ // full-width romaji is compatibility-canonical with ASCII characters:
18
+ ['aesthetic', 'aesthetic'],
19
+ // U+212B ANGSTROM SIGN (Å)
20
+ // U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE (Å)
21
+ // and should both normalize to 'A'
22
+ ['\u212B', 'A'],
23
+ ['\u00C5', 'A'],
24
+ // We should not fall for U+037E GREEK QUESTION MARK's trolling:
25
+ ['\u037e', ';'],
26
+ // Test presentational forms of Arabic:
27
+ // U+FE8D ARABIC LETTER ALEF ISOLATED FORM -> U+0627 ARABIC LETTER ALEF
28
+ // U+FEDF ARABIC LETTER LAM INITIAL FORM -> U+0644 ARABIC LETTER LAM
29
+ // U+FED8 ARABIC LETTER QAF MEDIAL FORM -> U+0642 ARABIC LETTER QAF
30
+ // U+FEEC ARABIC LETTER HEH MEDIAL FORM -> U+0647 ARABIC LETTER HEH
31
+ // U+FEEE ARABIC LETTER WAW FINAL FORM -> U+0648 ARABIC LETTER WAW
32
+ // U+FE93 ARABIC LETTER TEH MARBUTA ISOLATED FORM -> U+0629 ARABIC LETTER TEH MARBUTA
33
+ ['\uFE8D\uFEDF\uFED8\uFEEC\uFEEE\uFE93', '\u0627\u0644\u0642\u0647\u0648\u0629'],
34
+ // Combine both NFKD **AND** knocking off diacritics:
35
+ // U+01C4 LATIN CAPITAL LETTER DZ WITH CARON (DŽ) -> <U+0064, U+007A> (dz)
36
+ ['DŽ', 'DZ'],
37
+ ];
38
+ for (let [input, expected] of testCases) {
39
+ it(`should normalize '${input}' to '${expected}'`, function () {
40
+ assert.equal(defaultSearchTermToKey(input), expected);
41
+ });
42
+ }
43
+ });
44
+ describe('languageUsesCasing: true (custom applyCasing, inverts lower- & upper- casing)', function () {
45
+ const testCases = [
46
+ // The DEFAULT function is NOT responsible for understanding the Turkish
47
+ // distinction between U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE and
48
+ // 'I' U+0048 LATIN CAPITAL LETTER I.
49
+ // For Turkic languages, the recommendation is thus to make a
50
+ // custom searchTermToKey function.
51
+ ['İstanbul', 'ISTANBUL'],
52
+ ['DİYARBAKIR', 'DIYARBAKIR'],
53
+ // "skýlos" is Greek for dog 🇬🇷🐶
54
+ // starts with an 's' and ends with an 's'
55
+ // which are DIFFERENT CHARACTERS in lowercased Greek!
56
+ ['σκύλος', 'ΣΚΥΛΟΣ'],
57
+ ['σκυλοσ', 'ΣΚΥΛΟΣ'],
58
+ // full-width romaji is compatibility-canonical with ASCII characters:
59
+ ['aesthetic', 'AESTHETIC'],
60
+ // U+212B ANGSTROM SIGN (Å)
61
+ // U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE (Å)
62
+ // and should both normalize to 'a'
63
+ ['\u212B', 'A'],
64
+ ['\u00C5', 'A'],
65
+ // We should not fall for U+037E GREEK QUESTION MARK's trolling:
66
+ ['\u037e', ';'],
67
+ // Test presentational forms of Arabic:
68
+ // U+FE8D ARABIC LETTER ALEF ISOLATED FORM -> U+0627 ARABIC LETTER ALEF
69
+ // U+FEDF ARABIC LETTER LAM INITIAL FORM -> U+0644 ARABIC LETTER LAM
70
+ // U+FED8 ARABIC LETTER QAF MEDIAL FORM -> U+0642 ARABIC LETTER QAF
71
+ // U+FEEC ARABIC LETTER HEH MEDIAL FORM -> U+0647 ARABIC LETTER HEH
72
+ // U+FEEE ARABIC LETTER WAW FINAL FORM -> U+0648 ARABIC LETTER WAW
73
+ // U+FE93 ARABIC LETTER TEH MARBUTA ISOLATED FORM -> U+0629 ARABIC LETTER TEH MARBUTA
74
+ ['\uFE8D\uFEDF\uFED8\uFEEC\uFEEE\uFE93', '\u0627\u0644\u0642\u0647\u0648\u0629'],
75
+ // Combine both NFKD **AND** knocking off diacritics:
76
+ // U+01C4 LATIN CAPITAL LETTER DZ WITH CARON (DŽ) -> <U+0064, U+007A> (dz)
77
+ ['DŽ', 'DZ'],
78
+ ];
79
+ // While a Turkish-based test would be nice, Turkish needs custom keying,
80
+ // as U+0130's default handling is... not ideal in Turkish.
81
+ //
82
+ // Instead, we can get a simple-enough test with inverted casing.
83
+ let customCasing = function (caseToApply, text, defaultApplyCasing) {
84
+ switch (caseToApply) {
85
+ case 'lower':
86
+ return text.toUpperCase();
87
+ case 'upper':
88
+ return text.toLowerCase();
89
+ case 'initial':
90
+ return customCasing('upper', text.charAt(0), defaultApplyCasing) + text.substr(1);
91
+ default:
92
+ return text;
93
+ }
94
+ };
95
+ let customCasingClosure = function (caseToApply, text) {
96
+ return customCasing(caseToApply, text, defaultApplyCasing);
97
+ };
98
+ for (let [input, expected] of testCases) {
99
+ it(`should normalize '${input}' to '${expected}'`, function () {
100
+ assert.equal(defaultCasedSearchTermToKey(input, customCasingClosure), expected);
101
+ });
102
+ }
103
+ });
104
+ describe('languageUsesCasing: undefined (legacy 12.0 / 13.0 mode, uses `defaultApplyCasing`)', function () {
105
+ const testCases = [
106
+ // "İstanbul" has a U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE.
107
+ // This should be lowercased.
108
+ ['İstanbul', 'istanbul'],
109
+ // The DEFAULT function is NOT responsible for understanding the Turkish
110
+ // case regarding the lowercasing of:
111
+ // 'I' U+0048 LATIN CAPITAL LETTER I to 'ı' U+0131 LATIN SMALL LETTER DOTLESS I
112
+ // For Turkic languages, the recommendation is to make a
113
+ // custom searchTermToKey function:
114
+ ['DİYARBAKIR', 'diyarbakir'],
115
+ // "skýlos" is Greek for dog 🇬🇷🐶
116
+ // starts with an 's' and ends with an 's'
117
+ // which are DIFFERENT CHARACTERS in lowercased Greek!
118
+ ['σκύλος', 'σκυλος'],
119
+ ['ΣΚΥΛΟΣ', 'σκυλοσ'],
120
+ // full-width romaji is compatibility-canonical with ASCII characters:
121
+ ['aesthetic', 'aesthetic'],
122
+ // U+212B ANGSTROM SIGN (Å)
123
+ // U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE (Å)
124
+ // and should both normalize to 'a'
125
+ ['\u212B', 'a'],
126
+ ['\u00C5', 'a'],
127
+ // We should not fall for U+037E GREEK QUESTION MARK's trolling:
128
+ ['\u037e', ';'],
129
+ // Test presentational forms of Arabic:
130
+ // U+FE8D ARABIC LETTER ALEF ISOLATED FORM -> U+0627 ARABIC LETTER ALEF
131
+ // U+FEDF ARABIC LETTER LAM INITIAL FORM -> U+0644 ARABIC LETTER LAM
132
+ // U+FED8 ARABIC LETTER QAF MEDIAL FORM -> U+0642 ARABIC LETTER QAF
133
+ // U+FEEC ARABIC LETTER HEH MEDIAL FORM -> U+0647 ARABIC LETTER HEH
134
+ // U+FEEE ARABIC LETTER WAW FINAL FORM -> U+0648 ARABIC LETTER WAW
135
+ // U+FE93 ARABIC LETTER TEH MARBUTA ISOLATED FORM -> U+0629 ARABIC LETTER TEH MARBUTA
136
+ ['\uFE8D\uFEDF\uFED8\uFEEC\uFEEE\uFE93', '\u0627\u0644\u0642\u0647\u0648\u0629'],
137
+ // Combine both NFKD **AND** knocking off diacritics:
138
+ // U+01C4 LATIN CAPITAL LETTER DZ WITH CARON (DŽ) -> <U+0064, U+007A> (dz)
139
+ ['DŽ', 'dz'],
140
+ ];
141
+ for (let [input, expected] of testCases) {
142
+ it(`should normalize '${input}' to '${expected}'`, function () {
143
+ assert.equal(defaultCasedSearchTermToKey(input, defaultApplyCasing), expected);
144
+ });
145
+ }
146
+ });
147
+ });
148
+ //# sourceMappingURL=test-default-search-term-to-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-default-search-term-to-key.js","sourceRoot":"","sources":["../../test/test-default-search-term-to-key.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test-error-logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-error-logger.d.ts","sourceRoot":"","sources":["../../test/test-error-logger.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import { MAX_MESSAGES, KeymanCompilerError, log } from "../src/model-compiler-errors.js";
2
+ import { LogHoarder } from "./helpers/index.js";
3
+ import { assert } from "chai";
4
+ describe('error logger', function () {
5
+ beforeEach(function () {
6
+ this.logHoarder = (new LogHoarder).install();
7
+ });
8
+ afterEach(function () {
9
+ this.logHoarder.uninstall();
10
+ delete this.logHoarder;
11
+ });
12
+ it('should stop logging messages **after** a maximum', function () {
13
+ for (let i = 0; i < MAX_MESSAGES; i++) {
14
+ log(KeymanCompilerError.CWARN_DuplicateWordInSameFile, "fake error");
15
+ }
16
+ // We've logged *just enough messages. This error should not be found:
17
+ assert.isFalse(this.logHoarder.hasSeenCode(KeymanCompilerError.CWARN_TooManyErrorsOrWarnings));
18
+ // Log just one too many:
19
+ log(KeymanCompilerError.CWARN_DuplicateWordInSameFile, "fake error");
20
+ assert.isTrue(this.logHoarder.hasSeenCode(KeymanCompilerError.CWARN_TooManyErrorsOrWarnings));
21
+ // Log a DIFFERENT error -- it should not appear in the log
22
+ log(KeymanCompilerError.CWARN_MixedNormalizationForms, "fake error");
23
+ assert.isFalse(this.logHoarder.hasSeenCode(KeymanCompilerError.CWARN_MixedNormalizationForms));
24
+ });
25
+ });
26
+ //# sourceMappingURL=test-error-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-error-logger.js","sourceRoot":"","sources":["../../test/test-error-logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,GAAG,EAAE,MAAM,iCAAiC,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,QAAQ,CAAC,cAAc,EAAE;IACvB,UAAU,CAAC;QACT,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,OAAO,EAAE,CAAA;IAC9C,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC;QACR,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kDAAkD,EAAE;QACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;YACrC,GAAG,CAAC,mBAAmB,CAAC,6BAA6B,EAAE,YAAY,CAAC,CAAC;SACtE;QAED,sEAAsE;QACtE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CACxC,mBAAmB,CAAC,6BAA6B,CAClD,CAAC,CAAC;QAEH,yBAAyB;QACzB,GAAG,CAAC,mBAAmB,CAAC,6BAA6B,EAAE,YAAY,CAAC,CAAC;QAErE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CACvC,mBAAmB,CAAC,6BAA6B,CAClD,CAAC,CAAC;QAEH,2DAA2D;QAC3D,GAAG,CAAC,mBAAmB,CAAC,6BAA6B,EAAE,YAAY,CAAC,CAAC;QACrE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CACxC,mBAAmB,CAAC,6BAA6B,CAClD,CAAC,CAAC;IACL,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test-join-word-breaker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-join-word-breaker.d.ts","sourceRoot":"","sources":["../../test/test-join-word-breaker.ts"],"names":[],"mappings":""}
@@ -0,0 +1,84 @@
1
+ import { assert } from "chai";
2
+ import defaultWordBreaker from './wordbreakers/default-wordbreaker-esm.js';
3
+ import { decorateWithJoin } from '../src/join-word-breaker-decorator.js';
4
+ describe('The join word breaker decorator', function () {
5
+ it('should decorate an existing word breaker', function () {
6
+ let breakWords = decorateWithJoin(defaultWordBreaker, ['-']);
7
+ assert.isFunction(breakWords);
8
+ });
9
+ const TEST_CASES = [
10
+ /* input, joiners, default breaks, breaks with joins */
11
+ // Original test case from https://github.com/keymanapp/keyman/issues/2753
12
+ ['khui-chhùi', ['-'], ["khui", "-", "chhùi"], ["khui-chhùi"]],
13
+ // Plains Cree SRO:
14
+ ['ê-kotiskâwêyâhk', ['-'], ['ê', '-', 'kotiskâwêyâhk'], ['ê-kotiskâwêyâhk']],
15
+ // Edge cases:
16
+ // Joiner alone:
17
+ ['-', ['-'], ['-'], ['-']],
18
+ // Joiner at the end:
19
+ ['ni-', ['-'], ['ni', '-'], ['ni-']],
20
+ // Joiner at the end:
21
+ ['-ân', ['-'], ['-', 'ân'], ['-ân']],
22
+ // This was my guiding test case:
23
+ [
24
+ "-yâhk ê-nitawi-kotiskâwêyâhk ni-",
25
+ ["-"],
26
+ ["-", "yâhk", "ê", "-", "nitawi", "-", "kotiskâwêyâhk", "ni", "-"],
27
+ ["-yâhk", "ê-nitawi-kotiskâwêyâhk", "ni-"]
28
+ ],
29
+ // Do not perform any joins:
30
+ ["hello world", ["-"], ["hello", "world"], ["hello", "world"]],
31
+ // Joining using multiple joiners
32
+ [
33
+ "Email: no-body@example.com",
34
+ ["@", "-"],
35
+ ["Email", ":", "no", "-", "body", "@", "example.com"],
36
+ ["Email", ":", "no-body@example.com"]
37
+ ],
38
+ // Joining with two or more joiners in a row
39
+ [
40
+ "nobody@@example.com",
41
+ ["@"],
42
+ ["nobody", "@", "@", "example.com"],
43
+ ["nobody@@example.com"]
44
+ ],
45
+ // it should NOT join non-contiguous spans:
46
+ [
47
+ "this- is -bad",
48
+ ["-"],
49
+ ["this", "-", "is", "-", "bad"],
50
+ ["this-", "is", "-bad"]
51
+ ],
52
+ // different but adjacent joiners
53
+ [
54
+ "I made the kawé:-conjugator.",
55
+ ["-", ":"],
56
+ ["I", "made", "the", "kawé", ":", "-", "conjugator", "."],
57
+ ["I", "made", "the", "kawé:-conjugator", "."]
58
+ ],
59
+ // 3+ joiners in a row
60
+ [
61
+ // NB: – is U+2001 EN DASH
62
+ "This language is nut–=💠¤~ty!",
63
+ ["~", "–", "¤", "=", "💠"],
64
+ ["This", "language", "is", "nut", "–", "=", "💠", "¤", "~", "ty", "!"],
65
+ ["This", "language", "is", "nut–=💠¤~ty", "!"],
66
+ ],
67
+ ];
68
+ for (let [phrase, joiners, unjoined, expected] of TEST_CASES) {
69
+ it(`should break «${[phrase]}» as [${expected.join(' ;; ')}]`, function () {
70
+ let breakWords = decorateWithJoin(defaultWordBreaker, joiners);
71
+ let unjoinedResult = defaultWordBreaker(phrase).map(onlyText);
72
+ assert.deepEqual(unjoinedResult, unjoined);
73
+ let actualResult = breakWords(phrase).map(onlyText);
74
+ assert.deepEqual(actualResult, expected);
75
+ });
76
+ }
77
+ /**
78
+ * Get just the text from a span.
79
+ */
80
+ function onlyText(span) {
81
+ return span.text;
82
+ }
83
+ });
84
+ //# sourceMappingURL=test-join-word-breaker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-join-word-breaker.js","sourceRoot":"","sources":["../../test/test-join-word-breaker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import 'mocha';
2
+ //# sourceMappingURL=test-model-definitions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-model-definitions.d.ts","sourceRoot":"","sources":["../../test/test-model-definitions.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,CAAC"}
@@ -0,0 +1,165 @@
1
+ import 'mocha';
2
+ import { assert } from 'chai';
3
+ import { ModelDefinitions } from '../src/model-definitions.js';
4
+ describe('Model definition pseudoclosures', function () {
5
+ describe('14.0 defaults', function () {
6
+ describe('languageUsesCasing == true', function () {
7
+ // We don't need a complete spec for this, given the (currently) limited range of what
8
+ // the ModelPseudoclosure covers.
9
+ let modelSource = {
10
+ languageUsesCasing: true,
11
+ sources: [],
12
+ format: 'trie-1.0'
13
+ };
14
+ let pseudoclosure = new ModelDefinitions(modelSource);
15
+ const testCases = [
16
+ // Note: not written the Turkish way. Turns out 'İ'.toLowerCase() decomposes the result,
17
+ // which would have made for a fairly yucky test.
18
+ ['Istanbul', 'istanbul', 'istanbul'],
19
+ // The DEFAULT function is NOT responsible for understanding the Turkish
20
+ // case regarding the lowercasing of:
21
+ // 'I' U+0048 LATIN CAPITAL LETTER I to 'ı' U+0131 LATIN SMALL LETTER DOTLESS I
22
+ // For Turkic languages, the recommendation is to make a
23
+ // custom applyCasing function:
24
+ ['DİYARBAKIR', 'di̇yarbakir', 'diyarbakir'],
25
+ // full-width romaji has corresponding lowercased versions:
26
+ ['AESTHETIC', 'aesthetic', 'aesthetic'],
27
+ // "skýlos" is Greek for dog 🇬🇷🐶
28
+ // starts with an 's' and ends with an 's'
29
+ // which are DIFFERENT CHARACTERS in lowercased Greek!
30
+ ['σκύλος', 'σκύλος', 'σκυλος'],
31
+ ['ΣΚΥΛΟΣ', 'σκυλος', 'σκυλοσ'],
32
+ // to make the distinction. Both 'Σ's have the same char-code.
33
+ // Uncased syntax and numbers should pass through unscathed:
34
+ ['1234.?!', '1234.?!', '1234.?!'],
35
+ ['”', '”', '"'],
36
+ ["‘", "‘", "'"]
37
+ ];
38
+ for (let [input, cased, keyed] of testCases) {
39
+ it(`should case '${input}' as '${cased}'`, function () {
40
+ assert.equal(pseudoclosure.applyCasing('lower', input), cased);
41
+ });
42
+ it(`should key '${input}' as '${keyed}'`, function () {
43
+ assert.equal(pseudoclosure.searchTermToKey(input), keyed);
44
+ });
45
+ }
46
+ });
47
+ describe('languageUsesCasing == false', function () {
48
+ // We don't need a complete spec for this, given the (currently) limited range of what
49
+ // the ModelPseudoclosure covers.
50
+ let modelSource = {
51
+ languageUsesCasing: false,
52
+ sources: [],
53
+ format: 'trie-1.0'
54
+ };
55
+ let pseudoclosure = new ModelDefinitions(modelSource);
56
+ const testCases = [
57
+ // Note: not written the Turkish way. Turns out 'İ'.toLowerCase() decomposes the result,
58
+ // which would have made for a fairly yucky test.
59
+ ['Istanbul', 'Istanbul'],
60
+ ['DİYARBAKIR', 'DIYARBAKIR'],
61
+ // full-width romaji has corresponding capitalized versions:
62
+ ['AESTHETIC', 'AESTHETIC'],
63
+ // "skýlos" is Greek for dog 🇬🇷🐶
64
+ // starts with an 's' and ends with an 's'
65
+ // which are DIFFERENT CHARACTERS in lowercased Greek!
66
+ ['σκύλος', 'σκυλος'],
67
+ ['ΣΚΥΛΟΣ', 'ΣΚΥΛΟΣ'],
68
+ // to make the distinction. Both 'Σ's have the same char-code.
69
+ // Uncased syntax and numbers should pass through unscathed:
70
+ ['1234.?!', '1234.?!'],
71
+ ['”', '"'],
72
+ ["‘", "'"]
73
+ ];
74
+ for (let [input, keyed] of testCases) {
75
+ it(`should key '${input}' as '${keyed}'`, function () {
76
+ assert.equal(pseudoclosure.searchTermToKey(input), keyed);
77
+ });
78
+ }
79
+ });
80
+ });
81
+ describe('Pre 14.0 defaults (languageUsesCasing == undefined)', function () {
82
+ // We don't need a complete spec for this, given the (currently) limited range of what
83
+ // the ModelPseudoclosure covers.
84
+ let modelSource = {
85
+ sources: [],
86
+ format: 'trie-1.0'
87
+ };
88
+ let pseudoclosure = new ModelDefinitions(modelSource);
89
+ const testCases = [
90
+ // Note: not written the Turkish way. Turns out 'İ'.toLowerCase() decomposes the result,
91
+ // which would have made for a fairly yucky test.
92
+ ['Istanbul', 'istanbul'],
93
+ ['DİYARBAKIR', 'diyarbakir'],
94
+ // full-width romaji has corresponding capitalized versions:
95
+ ['AESTHETIC', 'aesthetic'],
96
+ // "skýlos" is Greek for dog 🇬🇷🐶
97
+ // starts with an 's' and ends with an 's'
98
+ // which are DIFFERENT CHARACTERS in lowercased Greek!
99
+ ['σκύλος', 'σκυλος'],
100
+ ['ΣΚΥΛΟΣ', 'σκυλοσ'],
101
+ // to make the distinction. Both 'Σ's have the same char-code.
102
+ // Uncased syntax and numbers should pass through unscathed:
103
+ ['1234.?!', '1234.?!']
104
+ ];
105
+ for (let [input, keyed] of testCases) {
106
+ it(`should key '${input}' as '${keyed}'`, function () {
107
+ assert.equal(pseudoclosure.searchTermToKey(input), keyed);
108
+ });
109
+ }
110
+ });
111
+ describe('Model-defined applyCasing + (dependent) searchTermToKey', function () {
112
+ // Note: this test only implements enough Turkish-related stuff to facilitate
113
+ // a functional test. Not guaranteed to be sufficient for actual Turkish use.
114
+ let turkishCasing = function (form, text, defaultApplyCasing) {
115
+ switch (form) {
116
+ case 'lower':
117
+ return defaultApplyCasing(form, text
118
+ .replace(/I/g, 'ı')
119
+ .replace(/İ/g, 'i'));
120
+ case 'upper':
121
+ return defaultApplyCasing(form, text
122
+ .replace(/ı/g, 'I')
123
+ .replace(/i/g, 'İ'));
124
+ case 'initial':
125
+ return turkishCasing('upper', text.charAt(0), defaultApplyCasing) + text.substr(1);
126
+ default:
127
+ return text;
128
+ }
129
+ };
130
+ let modelSource = {
131
+ languageUsesCasing: true,
132
+ applyCasing: turkishCasing,
133
+ searchTermToKey: function (wordform, applyCasing) {
134
+ return Array.from(wordform
135
+ .normalize('NFC') // Mostly to avoid decomposing 'İ'
136
+ ) // end of `Array.from`
137
+ .map(function (c) { return applyCasing('lower', c); }) // Will use custom `applyCasing` definition!
138
+ .join('');
139
+ },
140
+ sources: [],
141
+ format: 'trie-1.0'
142
+ };
143
+ let pseudoclosure = new ModelDefinitions(modelSource);
144
+ const testCases = [
145
+ ['İstanbul', 'istanbul', 'istanbul'],
146
+ // The DEFAULT function is NOT responsible for understanding the Turkish
147
+ // case regarding the lowercasing of:
148
+ // 'I' U+0048 LATIN CAPITAL LETTER I to 'ı' U+0131 LATIN SMALL LETTER DOTLESS I
149
+ // For Turkic languages, the recommendation is to make a
150
+ // custom applyCasing function:
151
+ ['DİYARBAKIR', 'diyarbakır', 'diyarbakır'],
152
+ // Uncased syntax and numbers should pass through unscathed:
153
+ ['1234.?!', '1234.?!', '1234.?!']
154
+ ];
155
+ for (let [input, cased, keyed] of testCases) {
156
+ it(`should case '${input}' as '${cased}'`, function () {
157
+ assert.equal(pseudoclosure.applyCasing('lower', input), cased);
158
+ });
159
+ it(`should key '${input}' as '${keyed}'`, function () {
160
+ assert.equal(pseudoclosure.searchTermToKey(input), keyed);
161
+ });
162
+ }
163
+ });
164
+ });
165
+ //# sourceMappingURL=test-model-definitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-model-definitions.js","sourceRoot":"","sources":["../../test/test-model-definitions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test-override-script-defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-override-script-defaults.d.ts","sourceRoot":"","sources":["../../test/test-override-script-defaults.ts"],"names":[],"mappings":""}