@keymanapp/kmc-analyze 18.0.17-alpha → 18.0.19-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.
@@ -1,10 +1,11 @@
1
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="4c9393bf-f417-5abb-8feb-4d080e0b6401")}catch(e){}}();
2
- /**
3
- * @packageDocumentation
4
- * kmc-analyze - keyboard analysis classes, including tools for `&displayMap`.
5
- */
6
- export { AnalyzeOskCharacterUse } from './osk-character-use/index.js';
7
- export { AnalyzeOskRewritePua } from './osk-rewrite-pua/index.js';
8
- export { AnalyzerMessages } from './messages.js';
9
- //# debugId=4c9393bf-f417-5abb-8feb-4d080e0b6401
1
+ /**
2
+ * @packageDocumentation
3
+ * kmc-analyze - keyboard analysis classes, including tools for `&displayMap`.
4
+ */
5
+
6
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="d57ffaf0-e420-5344-91d2-a3515a8e86eb")}catch(e){}}();
7
+ export { AnalyzeOskCharacterUse } from './osk-character-use/index.js';
8
+ export { AnalyzeOskRewritePua } from './osk-rewrite-pua/index.js';
9
+ export { AnalyzerMessages } from './messages.js';
10
10
  //# sourceMappingURL=index.js.map
11
+ //# debugId=d57ffaf0-e420-5344-91d2-a3515a8e86eb
@@ -1 +1 @@
1
- {"debug_id":"4c9393bf-f417-5abb-8feb-4d080e0b6401","file":"index.js","mappings":";AAAA;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAiC,MAAM,8BAA8B,CAAC;AACrG,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC","names":[],"sourceRoot":"","sources":["../../src/index.ts"],"version":3}
1
+ {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourceRoot":"","names":[],"mappings":"AAAA;;;GAGG;;;AAEH,OAAO,EAAE,sBAAsB,EAAiC,MAAM,8BAA8B,CAAC;AACrG,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC","debug_id":"d57ffaf0-e420-5344-91d2-a3515a8e86eb"}
@@ -1,24 +1,25 @@
1
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="88aed078-279a-590a-bbcf-d1788392e7a5")}catch(e){}}();
2
- import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageDef as def, CompilerMessageSpecWithException } from "@keymanapp/common-types";
3
- import { KeymanUrls } from "@keymanapp/developer-utils";
4
- const Namespace = CompilerErrorNamespace.Analyzer;
5
- const SevInfo = CompilerErrorSeverity.Info | Namespace;
6
- // const SevHint = CompilerErrorSeverity.Hint | Namespace;
7
- // const SevWarn = CompilerErrorSeverity.Warn | Namespace;
8
- // const SevError = CompilerErrorSeverity.Error | Namespace;
9
- const SevFatal = CompilerErrorSeverity.Fatal | Namespace;
10
- /**
11
- * @internal
12
- * Compiler messages for `kmc analyze`
13
- */
14
- export class AnalyzerMessages {
15
- static FATAL_UnexpectedException = SevFatal | 0x0001;
16
- static Fatal_UnexpectedException = (o) => CompilerMessageSpecWithException(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error', `Raised when an analysis components has an internal error. If you
17
- experience this error, it should be reported to the Keyman team for
18
- resolution via ${KeymanUrls.NEW_KEYMAN_ISSUE()}`);
19
- static INFO_ScanningFile = SevInfo | 0x0002;
20
- static Info_ScanningFile = (o) => m(this.INFO_ScanningFile, `Scanning ${def(o.type)} file ${def(o.name)}`, `Informative message reporting on the current file being scanned`);
21
- }
22
- ;
23
- //# debugId=88aed078-279a-590a-bbcf-d1788392e7a5
1
+
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="7aed8e9d-a764-5bbe-bb3d-137414d2b44f")}catch(e){}}();
3
+ import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageDef as def, CompilerMessageSpecWithException } from "@keymanapp/common-types";
4
+ import { KeymanUrls } from "@keymanapp/developer-utils";
5
+ const Namespace = CompilerErrorNamespace.Analyzer;
6
+ const SevInfo = CompilerErrorSeverity.Info | Namespace;
7
+ // const SevHint = CompilerErrorSeverity.Hint | Namespace;
8
+ // const SevWarn = CompilerErrorSeverity.Warn | Namespace;
9
+ // const SevError = CompilerErrorSeverity.Error | Namespace;
10
+ const SevFatal = CompilerErrorSeverity.Fatal | Namespace;
11
+ /**
12
+ * @internal
13
+ * Compiler messages for `kmc analyze`
14
+ */
15
+ export class AnalyzerMessages {
16
+ static FATAL_UnexpectedException = SevFatal | 0x0001;
17
+ static Fatal_UnexpectedException = (o) => CompilerMessageSpecWithException(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error', `Raised when an analysis components has an internal error. If you
18
+ experience this error, it should be reported to the Keyman team for
19
+ resolution via ${KeymanUrls.NEW_KEYMAN_ISSUE()}`);
20
+ static INFO_ScanningFile = SevInfo | 0x0002;
21
+ static Info_ScanningFile = (o) => m(this.INFO_ScanningFile, `Scanning ${def(o.type)} file ${def(o.name)}`, `Informative message reporting on the current file being scanned`);
22
+ }
23
+ ;
24
24
  //# sourceMappingURL=messages.js.map
25
+ //# debugId=7aed8e9d-a764-5bbe-bb3d-137414d2b44f
@@ -1 +1 @@
1
- {"debug_id":"88aed078-279a-590a-bbcf-d1788392e7a5","file":"messages.js","mappings":";AAAA,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,mBAAmB,IAAI,CAAC,EAAE,kBAAkB,IAAI,GAAG,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AAC/K,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,MAAM,SAAS,GAAG,sBAAsB,CAAC,QAAQ,CAAC;AAClD,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,GAAG,SAAS,CAAC;AACvD,0DAA0D;AAC1D,0DAA0D;AAC1D,4DAA4D;AAC5D,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,GAAG,SAAS,CAAC;AAEzD;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IAC3B,MAAM,CAAU,yBAAyB,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC9D,MAAM,CAAU,yBAAyB,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,gCAAgC,CAC1F,IAAI,CAAC,yBAAyB,EAC9B,IAAI,EACJ,CAAC,CAAC,CAAC,IAAI,eAAe,EACtB;;qBAEiB,UAAU,CAAC,gBAAgB,EAAE,EAAE,CACjD,CAAC;IAEF,MAAM,CAAU,iBAAiB,GAAG,OAAO,GAAG,MAAM,CAAC;IACrD,MAAM,CAAU,iBAAiB,GAAG,CAAC,CAA8B,EAAE,EAAE,CAAC,CAAC,CACvE,IAAI,CAAC,iBAAiB,EACtB,YAAY,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAC7C,iEAAiE,CAClE,CAAC;;AACH,CAAC","names":[],"sourceRoot":"","sources":["../../src/messages.ts"],"version":3}
1
+ {"version":3,"file":"messages.js","sources":["../../src/messages.ts"],"sourceRoot":"","names":[],"mappings":";;AAAA,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,mBAAmB,IAAI,CAAC,EAAE,kBAAkB,IAAI,GAAG,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AAC/K,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,MAAM,SAAS,GAAG,sBAAsB,CAAC,QAAQ,CAAC;AAClD,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,GAAG,SAAS,CAAC;AACvD,0DAA0D;AAC1D,0DAA0D;AAC1D,4DAA4D;AAC5D,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,GAAG,SAAS,CAAC;AAEzD;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IAC3B,MAAM,CAAU,yBAAyB,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC9D,MAAM,CAAU,yBAAyB,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,gCAAgC,CAC1F,IAAI,CAAC,yBAAyB,EAC9B,IAAI,EACJ,CAAC,CAAC,CAAC,IAAI,eAAe,EACtB;;qBAEiB,UAAU,CAAC,gBAAgB,EAAE,EAAE,CACjD,CAAC;IAEF,MAAM,CAAU,iBAAiB,GAAG,OAAO,GAAG,MAAM,CAAC;IACrD,MAAM,CAAU,iBAAiB,GAAG,CAAC,CAA8B,EAAE,EAAE,CAAC,CAAC,CACvE,IAAI,CAAC,iBAAiB,EACtB,YAAY,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAC7C,iEAAiE,CAClE,CAAC;;AACH,CAAC","debug_id":"7aed8e9d-a764-5bbe-bb3d-137414d2b44f"}
@@ -1,283 +1,284 @@
1
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="707cfc3f-4dd4-5ae6-bb0e-77b4f2bc48ac")}catch(e){}}();
2
- import { KeymanFileTypes, KvksFileReader, TouchLayoutFileReader } from "@keymanapp/common-types";
3
- import { CompilerMessages } from '@keymanapp/kmc-kmn';
4
- import { escapeMarkdownChar } from '@keymanapp/developer-utils';
5
- import { getOskFromKmnFile } from "../util/get-osk-from-kmn-file.js";
6
- import { AnalyzerMessages } from "../messages.js";
7
- const defaultOptions = {
8
- puaBase: 0xF100,
9
- stripDottedCircle: false,
10
- includeCounts: false,
11
- };
12
- /**
13
- * @public
14
- * Analyze the characters used in On Screen Keyboard files (.kvks,
15
- * .keyman-touch-layout) for use with `&displayMap`.
16
- */
17
- export class AnalyzeOskCharacterUse {
18
- callbacks;
19
- _strings = {};
20
- options;
21
- constructor(callbacks, options) {
22
- this.callbacks = callbacks;
23
- this.options = { ...defaultOptions, ...options };
24
- }
25
- /**
26
- * Clears analysis data collected from previous calls to
27
- * {@link AnalyzeOskCharacterUse.analyze}
28
- */
29
- clear() {
30
- this._strings = {};
31
- }
32
- //
33
- // Analyze a single file
34
- //
35
- /**
36
- * Analyzes a single source file for Unicode character usage. Can parse .kmn,
37
- * .kvks, .keyman-touch-layout file formats. Can be called multiple times to
38
- * collect results from more than one file. Use
39
- * {@link AnalyzeOskCharacterUse.getStrings} to retrieve results.
40
- *
41
- * Note: `analyze()` collects key cap data, so calling this for a .kmn file
42
- * will retrieve the key caps from the .kvks and .keyman-touch-layout files
43
- * that it references, rather than key cap data from the .kmn file itself.
44
- *
45
- * @param file - relative or absolute path to a Keyman source file
46
- * @returns true if the file is successfully loaded and parsed
47
- */
48
- async analyze(file) {
49
- switch (KeymanFileTypes.sourceTypeFromFilename(file)) {
50
- case ".kvks" /* KeymanFileTypes.Source.VisualKeyboard */: {
51
- let strings = this.scanVisualKeyboard(file);
52
- if (!strings) {
53
- return false;
54
- }
55
- this.addStrings(strings, file);
56
- break;
57
- }
58
- case ".keyman-touch-layout" /* KeymanFileTypes.Source.TouchLayout */: {
59
- let strings = this.scanTouchLayout(file);
60
- if (!strings) {
61
- return false;
62
- }
63
- this.addStrings(strings, file);
64
- break;
65
- }
66
- case ".kpj" /* KeymanFileTypes.Source.Project */:
67
- throw new Error('Passing a project to analyze is not permitted');
68
- break;
69
- case ".kmn" /* KeymanFileTypes.Source.KeymanKeyboard */:
70
- // The cleanest way to do this is to compile the .kmn to find the .kvks
71
- // and .keyman-touch-layout from the &VISUALKEYBOARD and &LAYOUTFILE
72
- // system stores
73
- if (!await this.analyzeKmnKeyboard(file)) {
74
- return false;
75
- }
76
- break;
77
- case ".xml" /* KeymanFileTypes.Source.LdmlKeyboard */:
78
- // TODO: await this.analyzeLdmlKeyboard(file);
79
- // note, will need to skip .xml files that are not ldml keyboards
80
- break;
81
- default:
82
- // Ignore any other file types; this way we can analyze project files/folders
83
- // easily also
84
- }
85
- return true;
86
- }
87
- async analyzeKmnKeyboard(filename) {
88
- this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'keyboard source', name: filename }));
89
- let osk = await getOskFromKmnFile(this.callbacks, filename);
90
- if (osk.kvksFilename) {
91
- let strings = this.scanVisualKeyboard(osk.kvksFilename);
92
- if (!strings) {
93
- return false;
94
- }
95
- this.addStrings(strings, osk.kvksFilename);
96
- }
97
- if (osk.touchLayoutFilename) {
98
- let strings = this.scanTouchLayout(osk.touchLayoutFilename);
99
- if (!strings) {
100
- return false;
101
- }
102
- this.addStrings(strings, osk.touchLayoutFilename);
103
- }
104
- return true;
105
- }
106
- addStrings(strings, filename) {
107
- // Reduce all references to get usage count per file
108
- let reducedStrings = [...new Set(strings)].map(e => ({
109
- str: e,
110
- usages: [{ filename: this.callbacks.path.basename(filename), count: strings.filter(n => n === e).length }]
111
- }));
112
- // Merge result with existing found strings
113
- for (let e of reducedStrings) {
114
- this._strings[e.str] = [].concat(this._strings[e.str] ?? [], ...e.usages);
115
- }
116
- }
117
- cleanString(s) {
118
- if (this.options.stripDottedCircle) {
119
- s = s.replace(/\u25cc/g, '');
120
- }
121
- return s.trim();
122
- }
123
- //
124
- // On Screen Keyboard file scanning
125
- //
126
- scanVisualKeyboard(filename) {
127
- this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'visual keyboard', name: filename }));
128
- let strings = [];
129
- const reader = new KvksFileReader();
130
- let source;
131
- try {
132
- source = reader.read(this.callbacks.loadFile(filename));
133
- }
134
- catch (e) {
135
- this.callbacks.reportMessage(CompilerMessages.Error_InvalidKvksFile({ filename, e }));
136
- return null;
137
- }
138
- let invalidKeys = [];
139
- const vk = reader.transform(source, invalidKeys);
140
- if (!vk) {
141
- this.callbacks.reportMessage(CompilerMessages.Error_InvalidKvksFile({ filename, e: null }));
142
- return null;
143
- }
144
- for (let key of vk.keys) {
145
- if (key.text) {
146
- strings.push(this.cleanString(key.text));
147
- }
148
- }
149
- return strings;
150
- }
151
- scanTouchLayout(filename) {
152
- this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'touch layout', name: filename }));
153
- let strings = [];
154
- const reader = new TouchLayoutFileReader();
155
- const source = reader.read(this.callbacks.loadFile(filename));
156
- const scanKey = (key) => {
157
- if (!key.text) {
158
- return;
159
- }
160
- if (key.text.length > 2 && key.text[0] == '*' && key.text[key.text.length - 1] == '*') {
161
- // Don't add '*special*' key captions
162
- return;
163
- }
164
- strings.push(this.cleanString(key.text));
165
- };
166
- const scanPlatform = (platform) => {
167
- if (!platform) {
168
- return;
169
- }
170
- for (let layer of platform.layer) {
171
- for (let row of layer.row) {
172
- for (let key of row.key) {
173
- scanKey(key);
174
- let f;
175
- for (f in key.flick ?? {}) {
176
- scanKey(key.flick[f]);
177
- }
178
- for (let sk of key.sk ?? []) {
179
- scanKey(sk);
180
- }
181
- for (let mt of key.multitap ?? []) {
182
- scanKey(mt);
183
- }
184
- }
185
- }
186
- }
187
- };
188
- scanPlatform(source.desktop);
189
- scanPlatform(source.phone);
190
- scanPlatform(source.tablet);
191
- return strings;
192
- }
193
- //
194
- // Results reporting
195
- //
196
- prepareResults(strings) {
197
- let result = [];
198
- let pua = this.options.puaBase;
199
- for (let str of Object.keys(strings)) {
200
- result.push({
201
- pua: pua.toString(16).toUpperCase(),
202
- str,
203
- unicode: AnalyzeOskCharacterUse.stringToUnicodeSequence(str, false),
204
- usages: this.options.includeCounts ? strings[str] : strings[str].map(item => item.filename)
205
- });
206
- pua++;
207
- }
208
- return result;
209
- }
210
- /**
211
- * Returns the collected results from earlier calls to
212
- * {@link AnalyzeOskCharacterUse.analyze}. This generates a mapping from a key
213
- * cap (one or more characters) to a PUA code, for use with `&displayMap`.
214
- *
215
- * Three output formats are supported:
216
- *
217
- * - .txt: tab-separated string format, with three columns: PUA, Key Cap, and
218
- * plain string. The PUA and Key Cap columns are formatted as Unicode Scalar
219
- * Values, e.g. U+0061, and the plain string is the original key cap string.
220
- *
221
- * - .md: formatted for documentation purposes. Generates a Markdown table
222
- * (GFM) with PUA, Key Cap, and plain string. The PUA and Key Cap columns
223
- * are formatted as Unicode Scalar Values, e.g. U+0061, and the plain string
224
- * is the original key cap string.
225
- *
226
- * - .json: returns the final aggregated data as an array of strings, which
227
- * can be joined to form a JSON blob of an object with a single member,
228
- * `map`, which is an array of {@link Osk.StringResult} objects.
229
- *
230
- * @param format - file format to return - can be '.txt', '.md', or '.json'
231
- * @returns an array of strings, formatted according to the `format`
232
- * parameter.
233
- */
234
- getStrings(format) {
235
- const final = this.prepareResults(this._strings);
236
- switch (format) {
237
- case '.md':
238
- return AnalyzeOskCharacterUse.getStringsAsMarkdown(final);
239
- case '.json':
240
- return AnalyzeOskCharacterUse.getStringsAsJson(final);
241
- }
242
- return AnalyzeOskCharacterUse.getStringsAsText(final);
243
- }
244
- // Following functions are static so that we can keep them pure
245
- // and potentially refactor into separate reporting class later
246
- static getStringsAsText(strings) {
247
- // Text result only returns PUA, unicode sequence, and plain string
248
- let lines = [];
249
- for (let s of strings) {
250
- const ux = this.stringToUnicodeSequence(s.str);
251
- lines.push('U+' + s.pua + '\t' + ux + '\t' + s.str);
252
- }
253
- return lines;
254
- }
255
- static getStringsAsMarkdown(strings) {
256
- // Markdown result only returns PUA, unicode sequence, and plain string
257
- let lines = [];
258
- lines.push('PUA | Code Points | Key Caps');
259
- lines.push('-------|-------------|---------');
260
- for (let s of strings) {
261
- const ux = this.stringToUnicodeSequence(s.str);
262
- lines.push('U+' + s.pua + ' | ' + ux + ' | ' + escapeMarkdownChar(s.str, true));
263
- }
264
- return lines;
265
- }
266
- static getStringsAsJson(strings) {
267
- // For future expansion, we wrap the array in a 'map' property
268
- let map = { "map": strings };
269
- return JSON.stringify(map, null, 2).split('\n');
270
- }
271
- static stringToUnicodeSequence(s, addUPlusPrefix = true) {
272
- let result = [];
273
- for (let ch of s) {
274
- let c = ch.codePointAt(0).toString(16).toUpperCase();
275
- if (c.length < 4)
276
- c = '0'.repeat(4 - c.length) + c;
277
- result.push((addUPlusPrefix ? 'U+' : '') + c);
278
- }
279
- return result.join(' ');
280
- }
281
- }
282
- //# debugId=707cfc3f-4dd4-5ae6-bb0e-77b4f2bc48ac
1
+
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f9a7a0ad-0a19-5873-822c-07a700ee3287")}catch(e){}}();
3
+ import { KeymanFileTypes, KvksFileReader, TouchLayoutFileReader } from "@keymanapp/common-types";
4
+ import { CompilerMessages } from '@keymanapp/kmc-kmn';
5
+ import { escapeMarkdownChar } from '@keymanapp/developer-utils';
6
+ import { getOskFromKmnFile } from "../util/get-osk-from-kmn-file.js";
7
+ import { AnalyzerMessages } from "../messages.js";
8
+ const defaultOptions = {
9
+ puaBase: 0xF100,
10
+ stripDottedCircle: false,
11
+ includeCounts: false,
12
+ };
13
+ /**
14
+ * @public
15
+ * Analyze the characters used in On Screen Keyboard files (.kvks,
16
+ * .keyman-touch-layout) for use with `&displayMap`.
17
+ */
18
+ export class AnalyzeOskCharacterUse {
19
+ callbacks;
20
+ _strings = {};
21
+ options;
22
+ constructor(callbacks, options) {
23
+ this.callbacks = callbacks;
24
+ this.options = { ...defaultOptions, ...options };
25
+ }
26
+ /**
27
+ * Clears analysis data collected from previous calls to
28
+ * {@link AnalyzeOskCharacterUse.analyze}
29
+ */
30
+ clear() {
31
+ this._strings = {};
32
+ }
33
+ //
34
+ // Analyze a single file
35
+ //
36
+ /**
37
+ * Analyzes a single source file for Unicode character usage. Can parse .kmn,
38
+ * .kvks, .keyman-touch-layout file formats. Can be called multiple times to
39
+ * collect results from more than one file. Use
40
+ * {@link AnalyzeOskCharacterUse.getStrings} to retrieve results.
41
+ *
42
+ * Note: `analyze()` collects key cap data, so calling this for a .kmn file
43
+ * will retrieve the key caps from the .kvks and .keyman-touch-layout files
44
+ * that it references, rather than key cap data from the .kmn file itself.
45
+ *
46
+ * @param file - relative or absolute path to a Keyman source file
47
+ * @returns true if the file is successfully loaded and parsed
48
+ */
49
+ async analyze(file) {
50
+ switch (KeymanFileTypes.sourceTypeFromFilename(file)) {
51
+ case ".kvks" /* KeymanFileTypes.Source.VisualKeyboard */: {
52
+ let strings = this.scanVisualKeyboard(file);
53
+ if (!strings) {
54
+ return false;
55
+ }
56
+ this.addStrings(strings, file);
57
+ break;
58
+ }
59
+ case ".keyman-touch-layout" /* KeymanFileTypes.Source.TouchLayout */: {
60
+ let strings = this.scanTouchLayout(file);
61
+ if (!strings) {
62
+ return false;
63
+ }
64
+ this.addStrings(strings, file);
65
+ break;
66
+ }
67
+ case ".kpj" /* KeymanFileTypes.Source.Project */:
68
+ throw new Error('Passing a project to analyze is not permitted');
69
+ break;
70
+ case ".kmn" /* KeymanFileTypes.Source.KeymanKeyboard */:
71
+ // The cleanest way to do this is to compile the .kmn to find the .kvks
72
+ // and .keyman-touch-layout from the &VISUALKEYBOARD and &LAYOUTFILE
73
+ // system stores
74
+ if (!await this.analyzeKmnKeyboard(file)) {
75
+ return false;
76
+ }
77
+ break;
78
+ case ".xml" /* KeymanFileTypes.Source.LdmlKeyboard */:
79
+ // TODO: await this.analyzeLdmlKeyboard(file);
80
+ // note, will need to skip .xml files that are not ldml keyboards
81
+ break;
82
+ default:
83
+ // Ignore any other file types; this way we can analyze project files/folders
84
+ // easily also
85
+ }
86
+ return true;
87
+ }
88
+ async analyzeKmnKeyboard(filename) {
89
+ this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'keyboard source', name: filename }));
90
+ let osk = await getOskFromKmnFile(this.callbacks, filename);
91
+ if (osk.kvksFilename) {
92
+ let strings = this.scanVisualKeyboard(osk.kvksFilename);
93
+ if (!strings) {
94
+ return false;
95
+ }
96
+ this.addStrings(strings, osk.kvksFilename);
97
+ }
98
+ if (osk.touchLayoutFilename) {
99
+ let strings = this.scanTouchLayout(osk.touchLayoutFilename);
100
+ if (!strings) {
101
+ return false;
102
+ }
103
+ this.addStrings(strings, osk.touchLayoutFilename);
104
+ }
105
+ return true;
106
+ }
107
+ addStrings(strings, filename) {
108
+ // Reduce all references to get usage count per file
109
+ let reducedStrings = [...new Set(strings)].map(e => ({
110
+ str: e,
111
+ usages: [{ filename: this.callbacks.path.basename(filename), count: strings.filter(n => n === e).length }]
112
+ }));
113
+ // Merge result with existing found strings
114
+ for (let e of reducedStrings) {
115
+ this._strings[e.str] = [].concat(this._strings[e.str] ?? [], ...e.usages);
116
+ }
117
+ }
118
+ cleanString(s) {
119
+ if (this.options.stripDottedCircle) {
120
+ s = s.replace(/\u25cc/g, '');
121
+ }
122
+ return s.trim();
123
+ }
124
+ //
125
+ // On Screen Keyboard file scanning
126
+ //
127
+ scanVisualKeyboard(filename) {
128
+ this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'visual keyboard', name: filename }));
129
+ let strings = [];
130
+ const reader = new KvksFileReader();
131
+ let source;
132
+ try {
133
+ source = reader.read(this.callbacks.loadFile(filename));
134
+ }
135
+ catch (e) {
136
+ this.callbacks.reportMessage(CompilerMessages.Error_InvalidKvksFile({ filename, e }));
137
+ return null;
138
+ }
139
+ let invalidKeys = [];
140
+ const vk = reader.transform(source, invalidKeys);
141
+ if (!vk) {
142
+ this.callbacks.reportMessage(CompilerMessages.Error_InvalidKvksFile({ filename, e: null }));
143
+ return null;
144
+ }
145
+ for (let key of vk.keys) {
146
+ if (key.text) {
147
+ strings.push(this.cleanString(key.text));
148
+ }
149
+ }
150
+ return strings;
151
+ }
152
+ scanTouchLayout(filename) {
153
+ this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'touch layout', name: filename }));
154
+ let strings = [];
155
+ const reader = new TouchLayoutFileReader();
156
+ const source = reader.read(this.callbacks.loadFile(filename));
157
+ const scanKey = (key) => {
158
+ if (!key.text) {
159
+ return;
160
+ }
161
+ if (key.text.length > 2 && key.text[0] == '*' && key.text[key.text.length - 1] == '*') {
162
+ // Don't add '*special*' key captions
163
+ return;
164
+ }
165
+ strings.push(this.cleanString(key.text));
166
+ };
167
+ const scanPlatform = (platform) => {
168
+ if (!platform) {
169
+ return;
170
+ }
171
+ for (let layer of platform.layer) {
172
+ for (let row of layer.row) {
173
+ for (let key of row.key) {
174
+ scanKey(key);
175
+ let f;
176
+ for (f in key.flick ?? {}) {
177
+ scanKey(key.flick[f]);
178
+ }
179
+ for (let sk of key.sk ?? []) {
180
+ scanKey(sk);
181
+ }
182
+ for (let mt of key.multitap ?? []) {
183
+ scanKey(mt);
184
+ }
185
+ }
186
+ }
187
+ }
188
+ };
189
+ scanPlatform(source.desktop);
190
+ scanPlatform(source.phone);
191
+ scanPlatform(source.tablet);
192
+ return strings;
193
+ }
194
+ //
195
+ // Results reporting
196
+ //
197
+ prepareResults(strings) {
198
+ let result = [];
199
+ let pua = this.options.puaBase;
200
+ for (let str of Object.keys(strings)) {
201
+ result.push({
202
+ pua: pua.toString(16).toUpperCase(),
203
+ str,
204
+ unicode: AnalyzeOskCharacterUse.stringToUnicodeSequence(str, false),
205
+ usages: this.options.includeCounts ? strings[str] : strings[str].map(item => item.filename)
206
+ });
207
+ pua++;
208
+ }
209
+ return result;
210
+ }
211
+ /**
212
+ * Returns the collected results from earlier calls to
213
+ * {@link AnalyzeOskCharacterUse.analyze}. This generates a mapping from a key
214
+ * cap (one or more characters) to a PUA code, for use with `&displayMap`.
215
+ *
216
+ * Three output formats are supported:
217
+ *
218
+ * - .txt: tab-separated string format, with three columns: PUA, Key Cap, and
219
+ * plain string. The PUA and Key Cap columns are formatted as Unicode Scalar
220
+ * Values, e.g. U+0061, and the plain string is the original key cap string.
221
+ *
222
+ * - .md: formatted for documentation purposes. Generates a Markdown table
223
+ * (GFM) with PUA, Key Cap, and plain string. The PUA and Key Cap columns
224
+ * are formatted as Unicode Scalar Values, e.g. U+0061, and the plain string
225
+ * is the original key cap string.
226
+ *
227
+ * - .json: returns the final aggregated data as an array of strings, which
228
+ * can be joined to form a JSON blob of an object with a single member,
229
+ * `map`, which is an array of {@link Osk.StringResult} objects.
230
+ *
231
+ * @param format - file format to return - can be '.txt', '.md', or '.json'
232
+ * @returns an array of strings, formatted according to the `format`
233
+ * parameter.
234
+ */
235
+ getStrings(format) {
236
+ const final = this.prepareResults(this._strings);
237
+ switch (format) {
238
+ case '.md':
239
+ return AnalyzeOskCharacterUse.getStringsAsMarkdown(final);
240
+ case '.json':
241
+ return AnalyzeOskCharacterUse.getStringsAsJson(final);
242
+ }
243
+ return AnalyzeOskCharacterUse.getStringsAsText(final);
244
+ }
245
+ // Following functions are static so that we can keep them pure
246
+ // and potentially refactor into separate reporting class later
247
+ static getStringsAsText(strings) {
248
+ // Text result only returns PUA, unicode sequence, and plain string
249
+ let lines = [];
250
+ for (let s of strings) {
251
+ const ux = this.stringToUnicodeSequence(s.str);
252
+ lines.push('U+' + s.pua + '\t' + ux + '\t' + s.str);
253
+ }
254
+ return lines;
255
+ }
256
+ static getStringsAsMarkdown(strings) {
257
+ // Markdown result only returns PUA, unicode sequence, and plain string
258
+ let lines = [];
259
+ lines.push('PUA | Code Points | Key Caps');
260
+ lines.push('-------|-------------|---------');
261
+ for (let s of strings) {
262
+ const ux = this.stringToUnicodeSequence(s.str);
263
+ lines.push('U+' + s.pua + ' | ' + ux + ' | ' + escapeMarkdownChar(s.str, true));
264
+ }
265
+ return lines;
266
+ }
267
+ static getStringsAsJson(strings) {
268
+ // For future expansion, we wrap the array in a 'map' property
269
+ let map = { "map": strings };
270
+ return JSON.stringify(map, null, 2).split('\n');
271
+ }
272
+ static stringToUnicodeSequence(s, addUPlusPrefix = true) {
273
+ let result = [];
274
+ for (let ch of s) {
275
+ let c = ch.codePointAt(0).toString(16).toUpperCase();
276
+ if (c.length < 4)
277
+ c = '0'.repeat(4 - c.length) + c;
278
+ result.push((addUPlusPrefix ? 'U+' : '') + c);
279
+ }
280
+ return result.join(' ');
281
+ }
282
+ }
283
283
  //# sourceMappingURL=index.js.map
284
+ //# debugId=f9a7a0ad-0a19-5873-822c-07a700ee3287
@@ -1 +1 @@
1
- {"debug_id":"707cfc3f-4dd4-5ae6-bb0e-77b4f2bc48ac","file":"index.js","mappings":"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","names":[],"sourceRoot":"","sources":["../../../src/osk-character-use/index.ts"],"version":3}
1
+ {"version":3,"file":"index.js","sources":["../../../src/osk-character-use/index.ts"],"sourceRoot":"","names":[],"mappings":"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","debug_id":"f9a7a0ad-0a19-5873-822c-07a700ee3287"}
@@ -1,131 +1,132 @@
1
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="79f5a30e-b827-5920-b7da-5e6e25af15bf")}catch(e){}}();
2
- import { KeymanFileTypes, KvksFileReader, KvksFileWriter, TouchLayoutFileReader, TouchLayoutFileWriter } from "@keymanapp/common-types";
3
- import { CompilerMessages, Osk } from '@keymanapp/kmc-kmn';
4
- import { getOskFromKmnFile } from "../util/get-osk-from-kmn-file.js";
5
- import { AnalyzerMessages } from "../messages.js";
6
- /**
7
- * @public
8
- * Rewrite On Screen Keyboard files (.kvks, .keyman-touch-layout) with PUA
9
- * codepoints, based on analysis provided by {@link AnalyzeOskCharacterUse}
10
- * class.
11
- */
12
- export class AnalyzeOskRewritePua {
13
- callbacks;
14
- _data = {};
15
- constructor(callbacks) {
16
- this.callbacks = callbacks;
17
- }
18
- /**
19
- * Clears data collected from previous calls to
20
- * {@link AnalyzeOskRewritePua.analyze}
21
- */
22
- clear() {
23
- this._data = {};
24
- }
25
- //
26
- // Analyze a single file
27
- //
28
- /**
29
- * Analyze a keyboard file or files, and provide a remapped output. Accepts a
30
- * .kmn, .kvks, .keyman-touch-layout file formats. For .kmn, will rewrite
31
- * associated On Screen Keyboard file formats. Can be called multiple times to
32
- * rewrite multiple files. Use the {@link AnalyzeOskRewritePua.data} property
33
- * to retrieve the output file content for writing. This does not modify the
34
- * source file.
35
- * @param file - relative or absolute path to a Keyman source file
36
- * @param mapping - OSK keycap map provided by {@link AnalyzeOskCharacterUse}
37
- * @returns true if the file is successfully loaded and rewritten
38
- */
39
- async analyze(file, mapping) {
40
- let map = Osk.parseMapping(mapping);
41
- switch (KeymanFileTypes.sourceTypeFromFilename(file)) {
42
- case ".kvks" /* KeymanFileTypes.Source.VisualKeyboard */:
43
- this._data[file] = this.analyzeVisualKeyboard(file, map);
44
- break;
45
- case ".keyman-touch-layout" /* KeymanFileTypes.Source.TouchLayout */:
46
- this._data[file] = this.analyzeTouchLayout(file, map);
47
- break;
48
- case ".kpj" /* KeymanFileTypes.Source.Project */:
49
- throw new Error('Passing a project to analyze is not permitted');
50
- break;
51
- case ".kmn" /* KeymanFileTypes.Source.KeymanKeyboard */:
52
- // The cleanest way to do this is to compile the .kmn to find the .kvks
53
- // and .keyman-touch-layout from the &VISUALKEYBOARD and &LAYOUTFILE
54
- // system stores
55
- if (!await this.analyzeKmnKeyboard(file, map)) {
56
- return false;
57
- }
58
- break;
59
- case ".xml" /* KeymanFileTypes.Source.LdmlKeyboard */:
60
- // TODO: await this.analyzeLdmlKeyboard(file);
61
- // note, will need to skip .xml files that are not ldml keyboards
62
- break;
63
- default:
64
- // Ignore any other file types; this way we can analyze project files/folders
65
- // easily also
66
- }
67
- return true;
68
- }
69
- /**
70
- * Returns the file data for OSK files rewritten with PUA characters, for use
71
- * with `&displayMap`.
72
- */
73
- get data() {
74
- return this._data;
75
- }
76
- async analyzeKmnKeyboard(filename, map) {
77
- this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'keyboard source', name: filename }));
78
- let osk = await getOskFromKmnFile(this.callbacks, filename);
79
- if (osk.kvksFilename) {
80
- this._data[osk.kvksFilename] = this.analyzeVisualKeyboard(osk.kvksFilename, map);
81
- }
82
- if (osk.touchLayoutFilename) {
83
- this._data[osk.touchLayoutFilename] = this.analyzeTouchLayout(osk.touchLayoutFilename, map);
84
- }
85
- return true;
86
- }
87
- //
88
- // On Screen Keyboard file scanning
89
- //
90
- analyzeVisualKeyboard(filename, map) {
91
- this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'visual keyboard', name: filename }));
92
- const reader = new KvksFileReader();
93
- let source;
94
- try {
95
- source = reader.read(this.callbacks.loadFile(filename));
96
- }
97
- catch (e) {
98
- this.callbacks.reportMessage(CompilerMessages.Error_InvalidKvksFile({ filename, e }));
99
- return null;
100
- }
101
- let invalidKeys = [];
102
- const vk = reader.transform(source, invalidKeys);
103
- if (!vk) {
104
- this.callbacks.reportMessage(CompilerMessages.Error_InvalidKvksFile({ filename, e: null }));
105
- return null;
106
- }
107
- const dirty = Osk.remapVisualKeyboard(vk, map);
108
- if (!dirty) {
109
- return null;
110
- }
111
- const writer = new KvksFileWriter();
112
- const data = writer.write(vk);
113
- // TODO: the encoder probably needs to go into KvksFileWRiter
114
- const enc = new TextEncoder();
115
- return enc.encode(data);
116
- }
117
- analyzeTouchLayout(filename, map) {
118
- this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'touch layout', name: filename }));
119
- const reader = new TouchLayoutFileReader();
120
- const source = reader.read(this.callbacks.loadFile(filename));
121
- let dirty = Osk.remapTouchLayout(source, map);
122
- if (!dirty) {
123
- return null;
124
- }
125
- const writer = new TouchLayoutFileWriter({ formatted: true });
126
- const data = writer.write(source);
127
- return data;
128
- }
129
- }
130
- //# debugId=79f5a30e-b827-5920-b7da-5e6e25af15bf
1
+
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="afce4aa9-23fc-5726-a96d-3716c9c177a6")}catch(e){}}();
3
+ import { KeymanFileTypes, KvksFileReader, KvksFileWriter, TouchLayoutFileReader, TouchLayoutFileWriter } from "@keymanapp/common-types";
4
+ import { CompilerMessages, Osk } from '@keymanapp/kmc-kmn';
5
+ import { getOskFromKmnFile } from "../util/get-osk-from-kmn-file.js";
6
+ import { AnalyzerMessages } from "../messages.js";
7
+ /**
8
+ * @public
9
+ * Rewrite On Screen Keyboard files (.kvks, .keyman-touch-layout) with PUA
10
+ * codepoints, based on analysis provided by {@link AnalyzeOskCharacterUse}
11
+ * class.
12
+ */
13
+ export class AnalyzeOskRewritePua {
14
+ callbacks;
15
+ _data = {};
16
+ constructor(callbacks) {
17
+ this.callbacks = callbacks;
18
+ }
19
+ /**
20
+ * Clears data collected from previous calls to
21
+ * {@link AnalyzeOskRewritePua.analyze}
22
+ */
23
+ clear() {
24
+ this._data = {};
25
+ }
26
+ //
27
+ // Analyze a single file
28
+ //
29
+ /**
30
+ * Analyze a keyboard file or files, and provide a remapped output. Accepts a
31
+ * .kmn, .kvks, .keyman-touch-layout file formats. For .kmn, will rewrite
32
+ * associated On Screen Keyboard file formats. Can be called multiple times to
33
+ * rewrite multiple files. Use the {@link AnalyzeOskRewritePua.data} property
34
+ * to retrieve the output file content for writing. This does not modify the
35
+ * source file.
36
+ * @param file - relative or absolute path to a Keyman source file
37
+ * @param mapping - OSK keycap map provided by {@link AnalyzeOskCharacterUse}
38
+ * @returns true if the file is successfully loaded and rewritten
39
+ */
40
+ async analyze(file, mapping) {
41
+ let map = Osk.parseMapping(mapping);
42
+ switch (KeymanFileTypes.sourceTypeFromFilename(file)) {
43
+ case ".kvks" /* KeymanFileTypes.Source.VisualKeyboard */:
44
+ this._data[file] = this.analyzeVisualKeyboard(file, map);
45
+ break;
46
+ case ".keyman-touch-layout" /* KeymanFileTypes.Source.TouchLayout */:
47
+ this._data[file] = this.analyzeTouchLayout(file, map);
48
+ break;
49
+ case ".kpj" /* KeymanFileTypes.Source.Project */:
50
+ throw new Error('Passing a project to analyze is not permitted');
51
+ break;
52
+ case ".kmn" /* KeymanFileTypes.Source.KeymanKeyboard */:
53
+ // The cleanest way to do this is to compile the .kmn to find the .kvks
54
+ // and .keyman-touch-layout from the &VISUALKEYBOARD and &LAYOUTFILE
55
+ // system stores
56
+ if (!await this.analyzeKmnKeyboard(file, map)) {
57
+ return false;
58
+ }
59
+ break;
60
+ case ".xml" /* KeymanFileTypes.Source.LdmlKeyboard */:
61
+ // TODO: await this.analyzeLdmlKeyboard(file);
62
+ // note, will need to skip .xml files that are not ldml keyboards
63
+ break;
64
+ default:
65
+ // Ignore any other file types; this way we can analyze project files/folders
66
+ // easily also
67
+ }
68
+ return true;
69
+ }
70
+ /**
71
+ * Returns the file data for OSK files rewritten with PUA characters, for use
72
+ * with `&displayMap`.
73
+ */
74
+ get data() {
75
+ return this._data;
76
+ }
77
+ async analyzeKmnKeyboard(filename, map) {
78
+ this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'keyboard source', name: filename }));
79
+ let osk = await getOskFromKmnFile(this.callbacks, filename);
80
+ if (osk.kvksFilename) {
81
+ this._data[osk.kvksFilename] = this.analyzeVisualKeyboard(osk.kvksFilename, map);
82
+ }
83
+ if (osk.touchLayoutFilename) {
84
+ this._data[osk.touchLayoutFilename] = this.analyzeTouchLayout(osk.touchLayoutFilename, map);
85
+ }
86
+ return true;
87
+ }
88
+ //
89
+ // On Screen Keyboard file scanning
90
+ //
91
+ analyzeVisualKeyboard(filename, map) {
92
+ this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'visual keyboard', name: filename }));
93
+ const reader = new KvksFileReader();
94
+ let source;
95
+ try {
96
+ source = reader.read(this.callbacks.loadFile(filename));
97
+ }
98
+ catch (e) {
99
+ this.callbacks.reportMessage(CompilerMessages.Error_InvalidKvksFile({ filename, e }));
100
+ return null;
101
+ }
102
+ let invalidKeys = [];
103
+ const vk = reader.transform(source, invalidKeys);
104
+ if (!vk) {
105
+ this.callbacks.reportMessage(CompilerMessages.Error_InvalidKvksFile({ filename, e: null }));
106
+ return null;
107
+ }
108
+ const dirty = Osk.remapVisualKeyboard(vk, map);
109
+ if (!dirty) {
110
+ return null;
111
+ }
112
+ const writer = new KvksFileWriter();
113
+ const data = writer.write(vk);
114
+ // TODO: the encoder probably needs to go into KvksFileWRiter
115
+ const enc = new TextEncoder();
116
+ return enc.encode(data);
117
+ }
118
+ analyzeTouchLayout(filename, map) {
119
+ this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'touch layout', name: filename }));
120
+ const reader = new TouchLayoutFileReader();
121
+ const source = reader.read(this.callbacks.loadFile(filename));
122
+ let dirty = Osk.remapTouchLayout(source, map);
123
+ if (!dirty) {
124
+ return null;
125
+ }
126
+ const writer = new TouchLayoutFileWriter({ formatted: true });
127
+ const data = writer.write(source);
128
+ return data;
129
+ }
130
+ }
131
131
  //# sourceMappingURL=index.js.map
132
+ //# debugId=afce4aa9-23fc-5726-a96d-3716c9c177a6
@@ -1 +1 @@
1
- {"debug_id":"79f5a30e-b827-5920-b7da-5e6e25af15bf","file":"index.js","mappings":"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","names":[],"sourceRoot":"","sources":["../../../src/osk-rewrite-pua/index.ts"],"version":3}
1
+ {"version":3,"file":"index.js","sources":["../../../src/osk-rewrite-pua/index.ts"],"sourceRoot":"","names":[],"mappings":"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","debug_id":"afce4aa9-23fc-5726-a96d-3716c9c177a6"}
@@ -1,32 +1,33 @@
1
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="7f4d473e-a952-5494-a743-c25c972953ee")}catch(e){}}();
2
- import { KMX, KmxFileReader } from "@keymanapp/common-types";
3
- import { KmnCompiler } from "@keymanapp/kmc-kmn";
4
- export async function getOskFromKmnFile(callbacks, filename) {
5
- let kvksFilename;
6
- let touchLayoutFilename;
7
- const kmnCompiler = new KmnCompiler();
8
- if (!await kmnCompiler.init(callbacks, {
9
- shouldAddCompilerVersion: false,
10
- saveDebug: false,
11
- })) {
12
- // kmnCompiler will report errors
13
- return null;
14
- }
15
- let result = await kmnCompiler.run(filename, null);
16
- if (!result) {
17
- // kmnCompiler will report any errors
18
- return null;
19
- }
20
- if (result.extra.kvksFilename) {
21
- kvksFilename = callbacks.resolveFilename(filename, result.extra.kvksFilename);
22
- }
23
- const reader = new KmxFileReader();
24
- const keyboard = reader.read(result.artifacts.kmx.data);
25
- const touchLayoutStore = keyboard.stores.find(store => store.dwSystemID == KMX.KMXFile.TSS_LAYOUTFILE);
26
- if (touchLayoutStore) {
27
- touchLayoutFilename = callbacks.resolveFilename(filename, touchLayoutStore.dpString);
28
- }
29
- return { kvksFilename, touchLayoutFilename };
30
- }
31
- //# debugId=7f4d473e-a952-5494-a743-c25c972953ee
1
+
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="a10b6c66-188f-52d4-9055-0f3fbda8317c")}catch(e){}}();
3
+ import { KMX, KmxFileReader } from "@keymanapp/common-types";
4
+ import { KmnCompiler } from "@keymanapp/kmc-kmn";
5
+ export async function getOskFromKmnFile(callbacks, filename) {
6
+ let kvksFilename;
7
+ let touchLayoutFilename;
8
+ const kmnCompiler = new KmnCompiler();
9
+ if (!await kmnCompiler.init(callbacks, {
10
+ shouldAddCompilerVersion: false,
11
+ saveDebug: false,
12
+ })) {
13
+ // kmnCompiler will report errors
14
+ return null;
15
+ }
16
+ let result = await kmnCompiler.run(filename, null);
17
+ if (!result) {
18
+ // kmnCompiler will report any errors
19
+ return null;
20
+ }
21
+ if (result.extra.kvksFilename) {
22
+ kvksFilename = callbacks.resolveFilename(filename, result.extra.kvksFilename);
23
+ }
24
+ const reader = new KmxFileReader();
25
+ const keyboard = reader.read(result.artifacts.kmx.data);
26
+ const touchLayoutStore = keyboard.stores.find(store => store.dwSystemID == KMX.KMXFile.TSS_LAYOUTFILE);
27
+ if (touchLayoutStore) {
28
+ touchLayoutFilename = callbacks.resolveFilename(filename, touchLayoutStore.dpString);
29
+ }
30
+ return { kvksFilename, touchLayoutFilename };
31
+ }
32
32
  //# sourceMappingURL=get-osk-from-kmn-file.js.map
33
+ //# debugId=a10b6c66-188f-52d4-9055-0f3fbda8317c
@@ -1 +1 @@
1
- {"debug_id":"7f4d473e-a952-5494-a743-c25c972953ee","file":"get-osk-from-kmn-file.js","mappings":";AAAA,OAAO,EAAqB,GAAG,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAA4B,EAAE,QAAgB;IAIpF,IAAI,YAAoB,CAAC;IACzB,IAAI,mBAA2B,CAAC;IAEhC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IACtC,IAAG,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE;QACpC,wBAAwB,EAAE,KAAK;QAC/B,SAAS,EAAE,KAAK;KACjB,CAAC,EAAE;QACF,iCAAiC;QACjC,OAAO,IAAI,CAAC;KACb;IAED,IAAI,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAEnD,IAAG,CAAC,MAAM,EAAE;QACV,qCAAqC;QACrC,OAAO,IAAI,CAAC;KACb;IAED,IAAG,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE;QAC5B,YAAY,GAAG,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;KAC/E;IAED,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAiB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtE,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAEvG,IAAG,gBAAgB,EAAE;QACnB,mBAAmB,GAAG,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;KACtF;IAED,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAA;AAC9C,CAAC","names":[],"sourceRoot":"","sources":["../../../src/util/get-osk-from-kmn-file.ts"],"version":3}
1
+ {"version":3,"file":"get-osk-from-kmn-file.js","sources":["../../../src/util/get-osk-from-kmn-file.ts"],"sourceRoot":"","names":[],"mappings":";;AAAA,OAAO,EAAqB,GAAG,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAA4B,EAAE,QAAgB;IAIpF,IAAI,YAAoB,CAAC;IACzB,IAAI,mBAA2B,CAAC;IAEhC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IACtC,IAAG,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE;QACpC,wBAAwB,EAAE,KAAK;QAC/B,SAAS,EAAE,KAAK;KACjB,CAAC,EAAE;QACF,iCAAiC;QACjC,OAAO,IAAI,CAAC;KACb;IAED,IAAI,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAEnD,IAAG,CAAC,MAAM,EAAE;QACV,qCAAqC;QACrC,OAAO,IAAI,CAAC;KACb;IAED,IAAG,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE;QAC5B,YAAY,GAAG,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;KAC/E;IAED,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAiB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtE,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAEvG,IAAG,gBAAgB,EAAE;QACnB,mBAAmB,GAAG,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;KACtF;IAED,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAA;AAC9C,CAAC","debug_id":"a10b6c66-188f-52d4-9055-0f3fbda8317c"}
package/package.json CHANGED
@@ -23,12 +23,12 @@
23
23
  "build/src/"
24
24
  ],
25
25
  "dependencies": {
26
- "@keymanapp/common-types": "18.0.17-alpha",
27
- "@keymanapp/developer-utils": "18.0.17-alpha",
28
- "@keymanapp/kmc-kmn": "18.0.17-alpha"
26
+ "@keymanapp/common-types": "18.0.19-alpha",
27
+ "@keymanapp/developer-utils": "18.0.19-alpha",
28
+ "@keymanapp/kmc-kmn": "18.0.19-alpha"
29
29
  },
30
30
  "devDependencies": {
31
- "@keymanapp/resources-gosh": "18.0.17-alpha",
31
+ "@keymanapp/resources-gosh": "18.0.19-alpha",
32
32
  "@types/chai": "^4.1.7",
33
33
  "@types/mocha": "^5.2.7",
34
34
  "@types/node": "^20.4.1",
@@ -43,5 +43,5 @@
43
43
  "type": "git",
44
44
  "url": "git+https://github.com/keymanapp/keyman.git"
45
45
  },
46
- "version": "18.0.17-alpha"
46
+ "version": "18.0.19-alpha"
47
47
  }