unicode-input-toolconverter 0.2.0

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 (123) hide show
  1. package/.babelrc.json +3 -0
  2. package/.editorconfig +16 -0
  3. package/.nojekyll +0 -0
  4. package/.nyc_output/out.json +173804 -0
  5. package/.nyc_output/processinfo/index.json +1 -0
  6. package/CHANGES.md +11 -0
  7. package/COPYING.LESSER.txt +180 -0
  8. package/COPYING.txt +687 -0
  9. package/README.md +65 -0
  10. package/_locales/en-US/messages.json +3126 -0
  11. package/_locales/hu-HU/messages.json +3126 -0
  12. package/_locales/pt-BR/messages.json +3126 -0
  13. package/_locales/sv-SE/messages.json +3126 -0
  14. package/babel.config.json +5 -0
  15. package/browser_action/characterSelection.js +91 -0
  16. package/browser_action/charrefConverters.js +389 -0
  17. package/browser_action/chartBuild.js +155 -0
  18. package/browser_action/encodingBehaviors.js +72 -0
  19. package/browser_action/encodings.js +97 -0
  20. package/browser_action/entities.js +12 -0
  21. package/browser_action/entityBehaviors.js +96 -0
  22. package/browser_action/index-es.html +15 -0
  23. package/browser_action/index-instrumented.html +16 -0
  24. package/browser_action/index-pages.html +16 -0
  25. package/browser_action/index.html +16 -0
  26. package/browser_action/index.iife.min.js +2 -0
  27. package/browser_action/index.iife.min.js.map +1 -0
  28. package/browser_action/index.instrumented.iife.min.js +2 -0
  29. package/browser_action/index.instrumented.iife.min.js.map +1 -0
  30. package/browser_action/index.js +95 -0
  31. package/browser_action/preferences/prefDefaults.js +52 -0
  32. package/browser_action/service-worker/sw-activateCallback.js +53 -0
  33. package/browser_action/service-worker/sw-locales.json +6 -0
  34. package/browser_action/service-worker/sw-resources.json +73 -0
  35. package/browser_action/service-worker/sw-unicode-data.json +3 -0
  36. package/browser_action/styles/unicode-dialog.css +391 -0
  37. package/browser_action/templateUtils/elements.js +12 -0
  38. package/browser_action/templateUtils/fill.js +3 -0
  39. package/browser_action/templateUtils/validation.js +6 -0
  40. package/browser_action/templates/chartBuild.js +185 -0
  41. package/browser_action/templates/index.js +1304 -0
  42. package/browser_action/templatesElementCustomization/widgets.js +56 -0
  43. package/browser_action/unicode/UnicodeConverter.js +793 -0
  44. package/browser_action/unicode/charrefunicodeDb.js +258 -0
  45. package/browser_action/unicode/getScriptInfoForCodePoint.js +646 -0
  46. package/browser_action/unicode/hangul.js +253 -0
  47. package/browser_action/unicode/lastScriptNames.json +5 -0
  48. package/browser_action/unicode/parseUnihanFromTextFileStrings.js +56 -0
  49. package/browser_action/unicode/unicodeFieldInfo.js +120 -0
  50. package/browser_action/unicode/unicodeScripts.js +4912 -0
  51. package/browser_action/unicode/unihan.js +129 -0
  52. package/browser_action/unicode/unihanDbPopulate.js +26 -0
  53. package/browser_action/unicodecharref.js +1480 -0
  54. package/browser_action/utils/DOMUtils.js +122 -0
  55. package/browser_action/utils/FetchUtils.js +19 -0
  56. package/browser_action/utils/TextUtils.js +28 -0
  57. package/browser_action/utils/TypedArrayUtils.js +21 -0
  58. package/browser_action/utils/semicolonSeparatedToArray.js +12 -0
  59. package/browser_action/utils/setupServiceWorker.js +193 -0
  60. package/cypress.config.js +21 -0
  61. package/download/entities/copyright-software-20021231.html +70 -0
  62. package/download/entities/html5-uppercase.ent +54 -0
  63. package/download/entities/htmlmathml-f.ent +2164 -0
  64. package/download/entities/isoamsa.ent +201 -0
  65. package/download/entities/isoamsb.ent +177 -0
  66. package/download/entities/isoamsc.ent +77 -0
  67. package/download/entities/isoamsn.ent +148 -0
  68. package/download/entities/isoamso.ent +107 -0
  69. package/download/entities/isoamsr.ent +238 -0
  70. package/download/entities/isobox.ent +95 -0
  71. package/download/entities/isocyr1.ent +122 -0
  72. package/download/entities/isocyr2.ent +81 -0
  73. package/download/entities/isodia.ent +69 -0
  74. package/download/entities/isogrk1.ent +104 -0
  75. package/download/entities/isogrk2.ent +75 -0
  76. package/download/entities/isogrk3.ent +98 -0
  77. package/download/entities/isogrk4.ent +98 -0
  78. package/download/entities/isolat1.ent +117 -0
  79. package/download/entities/isolat2.ent +176 -0
  80. package/download/entities/isomfrk.ent +107 -0
  81. package/download/entities/isomopf.ent +81 -0
  82. package/download/entities/isomscr.ent +107 -0
  83. package/download/entities/isonum.ent +131 -0
  84. package/download/entities/isopub.ent +140 -0
  85. package/download/entities/isotech.ent +216 -0
  86. package/download/entities/mmlalias.ent +598 -0
  87. package/download/entities/mmlextra.ent +154 -0
  88. package/download/entities/predefined.ent +52 -0
  89. package/download/entities/w3centities-f.ent +2276 -0
  90. package/download/entities/xhtml1-lat1.ent +143 -0
  91. package/download/entities/xhtml1-special.ent +78 -0
  92. package/download/entities/xhtml1-symbol.ent +171 -0
  93. package/eslint.config.js +66 -0
  94. package/icons/openWindow16.png +0 -0
  95. package/icons/openWindow24.png +0 -0
  96. package/lgtm.yml +5 -0
  97. package/lib/background.html +11 -0
  98. package/lib/background.js +13 -0
  99. package/lib/overlay.css +6 -0
  100. package/manifest.json +37 -0
  101. package/package.json +121 -0
  102. package/polyfills/browser-polyfill.min.js +8 -0
  103. package/polyfills/browser-polyfill.min.js.map +1 -0
  104. package/server.js +61 -0
  105. package/sw.js +259 -0
  106. package/tools/entities-import.js +62 -0
  107. package/tools/findEsResources.js +30 -0
  108. package/tools/list-locales.js +17 -0
  109. package/tools/parseUnicodeCharts.js +428 -0
  110. package/tools/ucd-import.js +24 -0
  111. package/tools/unicode-charts.html +596 -0
  112. package/tools/unihan-import.js +72 -0
  113. package/unicode_copyright.txt +46 -0
  114. package/vendor/camelcase/index.js +110 -0
  115. package/vendor/fflate/esm/browser.js +2665 -0
  116. package/vendor/intl-dom/dist/index.esm.js +2962 -0
  117. package/vendor/jamilih/dist/jml-es.js +2359 -0
  118. package/vendor/jquery/dist/jquery.js +10716 -0
  119. package/vendor/json-6/dist/index.mjs +1783 -0
  120. package/vendor/miller-columns/dist/index-es.min.js +1 -0
  121. package/vendor/miller-columns/miller-columns.css +75 -0
  122. package/vendor/simple-prefs/dist/index.esm.js +286 -0
  123. package/web-ext-config.cjs +13 -0
@@ -0,0 +1,258 @@
1
+ // Todo: Review `fromCharCode`, `charCodeAt`, and `charAt` on whether
2
+ // need modern substitutions
3
+
4
+ /**
5
+ *
6
+ */
7
+ class UnicodeDB {
8
+ /**
9
+ * @param {PlainObject} cfg
10
+ * @param {string} cfg.name
11
+ * @param {PositiveInteger} [cfg.version]
12
+ */
13
+ constructor ({name = 'unicode', version = 1} = {}) {
14
+ Object.assign(this, {name, version});
15
+ this.db = null;
16
+ }
17
+
18
+ /**
19
+ * @returns {void}
20
+ */
21
+ close () {
22
+ this.db.close();
23
+ }
24
+
25
+ /**
26
+ * @param {string} storeName
27
+ * @param {string} key
28
+ * @returns {Promise<object>}
29
+ */
30
+ getAll (storeName, key) {
31
+ const tx = this.db.transaction(storeName, 'readonly');
32
+ const store = tx.objectStore(storeName);
33
+
34
+ const req = store.getAll(key);
35
+ // eslint-disable-next-line promise/avoid-new -- No API
36
+ return new Promise((resolve, reject) => {
37
+ req.addEventListener('success', () => {
38
+ resolve(req.result);
39
+ });
40
+
41
+ req.addEventListener('error', () => {
42
+ reject(req.error);
43
+ });
44
+ });
45
+ }
46
+
47
+ /* eslint-disable class-methods-use-this -- Abstract */
48
+ /**
49
+ * @abstract
50
+ */
51
+ upgradeneeded () {
52
+ throw new Error('`UnicodeDB.upgradeneeded` is an abstract method');
53
+ }
54
+ /* eslint-enable class-methods-use-this -- Abstract */
55
+
56
+ /**
57
+ * @param {object} [cfg]
58
+ * @param {JSON} [cfg.updateUnicodeData]
59
+ * @param {GenericFunction} [cfg.versionchange]
60
+ * @returns {Promise<void>}
61
+ */
62
+ connect ({updateUnicodeData, versionchange} = {}) {
63
+ /* eslint-disable promise/avoid-new -- No Promise API */
64
+ return new Promise((resolve, reject) => {
65
+ const req = indexedDB.open(
66
+ this.name, updateUnicodeData ? this.version : undefined
67
+ );
68
+ if (updateUnicodeData) {
69
+ req.addEventListener('upgradeneeded', (e) => {
70
+ const {result: db} = e.target;
71
+ this.db = db;
72
+ this.upgradeneeded({updateUnicodeData});
73
+ });
74
+ }
75
+ req.addEventListener('success', ({target}) => {
76
+ this.db = target.result;
77
+ if (versionchange) {
78
+ this.db.addEventListener('versionchange', (ev) => {
79
+ versionchange(ev);
80
+ });
81
+ }
82
+ resolve(this.db);
83
+ });
84
+ req.addEventListener('error', () => {
85
+ reject(req.error);
86
+ });
87
+ req.addEventListener('blocked', () => {
88
+ reject(new Error('blocked'));
89
+ });
90
+ /* eslint-enable promise/avoid-new -- No Promise API */
91
+ });
92
+ }
93
+ }
94
+
95
+ /**
96
+ *
97
+ */
98
+ export class UnihanDatabase extends UnicodeDB {
99
+ /**
100
+ * @param {PlainObject} cfg
101
+ * @param {PositiveInteger} cfg.version
102
+ */
103
+ constructor ({version} = {}) {
104
+ // We create a separate database so updates do not clobber both databases
105
+ super({name: 'unicode-input-toolconverter-Unihan', version});
106
+ }
107
+ /**
108
+ * @param {string} codePoint
109
+ * @throws {Error}
110
+ * @returns {Promise<string[]>}
111
+ */
112
+ getUnicodeFields (codePoint) {
113
+ const tx = this.db.transaction(['Unihan'], 'readonly');
114
+ const store = tx.objectStore('Unihan');
115
+
116
+ const request = store.get(codePoint);
117
+ // eslint-disable-next-line promise/avoid-new -- No Promise API
118
+ return new Promise((resolve, reject) => {
119
+ request.addEventListener('success', () => {
120
+ resolve(request.result?.columns);
121
+ });
122
+ request.addEventListener('error', () => {
123
+ reject(request.error);
124
+ });
125
+ });
126
+ }
127
+
128
+ /**
129
+ * @param {string} key
130
+ * @returns {Promise<object>}
131
+ */
132
+ getAll (key) {
133
+ return super.getAll('Unihan', key);
134
+ }
135
+
136
+ /**
137
+ * @param {JSON} updateUnicodeData
138
+ * @returns {void}
139
+ */
140
+ upgradeneeded ({updateUnicodeData}) {
141
+ const store = this.db.createObjectStore('Unihan', {
142
+ keyPath: 'codePoint'
143
+ });
144
+ store.createIndex('code-point', 'codePoint', {
145
+ unique: true
146
+ });
147
+
148
+ updateUnicodeData.forEach((
149
+ [codePoint, ...codePointInfoRow]
150
+ ) => {
151
+ store.put({
152
+ codePoint,
153
+ columns: codePointInfoRow
154
+ });
155
+ });
156
+ }
157
+ }
158
+
159
+ /**
160
+ *
161
+ */
162
+ export class UnicodeDatabase extends UnicodeDB {
163
+ /**
164
+ * @param {PlainObject} cfg
165
+ * @param {PositiveInteger} cfg.version
166
+ */
167
+ constructor ({version} = {}) {
168
+ super({name: 'unicode-input-toolconverter', version});
169
+ }
170
+
171
+ /**
172
+ * @param {string} key
173
+ * @returns {Promise<object>}
174
+ */
175
+ getAll (key) {
176
+ return super.getAll('UnicodeData', key);
177
+ }
178
+
179
+ /**
180
+ * @param {JSON} updateUnicodeData
181
+ * @returns {void}
182
+ */
183
+ upgradeneeded ({updateUnicodeData}) {
184
+ const store = this.db.createObjectStore('UnicodeData', {
185
+ keyPath: 'codePoint'
186
+ });
187
+ store.createIndex('code-point', 'codePoint', {
188
+ unique: true
189
+ });
190
+ updateUnicodeData.forEach((codePointInfoRow) => {
191
+ // http://www.unicode.org/reports/tr44/#UnicodeData.txt
192
+ const [
193
+ codePoint, name, generalCategory, canonicalCombiningClass, bidiClass,
194
+ decomposition, numeric6, numeric7, numeric8,
195
+ bidiMirrored, unicode1Name, isoComment,
196
+ simpleUppercaseMapping, simpleLowercaseMapping, simpleTitlecaseMapping
197
+ ] = codePointInfoRow;
198
+ const {groups: {
199
+ decompositionType,
200
+ decompositionMapping
201
+ }} = (
202
+ /<(?<decompositionType>[^>]*)>\s+(?<decompositionMapping>.*)/u
203
+ ).exec(
204
+ decomposition
205
+ ) ?? {groups: {}};
206
+ let numericType = 'None';
207
+ if (numeric6) {
208
+ numericType = 'Decimal';
209
+ } else if (numeric7) {
210
+ numericType = 'Digit';
211
+ } else if (numeric8) {
212
+ numericType = 'Numeric';
213
+ }
214
+ const numericValue = numericType ? numeric8 : Number.NaN;
215
+
216
+ store.put({
217
+ codePoint, name, generalCategory, canonicalCombiningClass, bidiClass,
218
+ decompositionType, decompositionMapping, numericType, numericValue,
219
+ bidiMirrored, unicode1Name, isoComment,
220
+ simpleUppercaseMapping, simpleLowercaseMapping, simpleTitlecaseMapping
221
+ });
222
+ });
223
+ }
224
+
225
+ /**
226
+ * @param {string} codePoint
227
+ * @returns {Promise<string[]>}
228
+ */
229
+ getUnicodeFields (codePoint) {
230
+ // const entityInParentheses = '(' + entity + ') ';
231
+ // Todo: Should this not be padded to 6??
232
+ // const currentStartCharCodeUpperCaseHexPadded =
233
+ // currentStartCharCode.toString(16).toUpperCase().padStart(4, '0');
234
+ const tx = this.db.transaction(['UnicodeData'], 'readonly');
235
+ const store = tx.objectStore('UnicodeData');
236
+ const request = store.get(codePoint);
237
+ // eslint-disable-next-line promise/avoid-new -- No Promise API
238
+ return new Promise((resolve, reject) => {
239
+ request.addEventListener('success', () => {
240
+ if (!request.result) {
241
+ reject(new Error('Unexpected code point'));
242
+ return;
243
+ }
244
+ resolve(request.result);
245
+ });
246
+ request.addEventListener('error', () => {
247
+ reject(request.error);
248
+ });
249
+ });
250
+ }
251
+ }
252
+
253
+ const charrefunicodeDb = new UnicodeDatabase();
254
+ /*
255
+ const unihanDb = new UnihanDatabase();
256
+ */
257
+
258
+ export default charrefunicodeDb;