@keymanapp/kmc-analyze 17.0.156-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.
- package/build/src/index.d.ts +8 -0
- package/build/src/index.d.ts.map +1 -0
- package/build/src/index.js +8 -0
- package/build/src/index.js.map +1 -0
- package/build/src/messages.d.ts +14 -0
- package/build/src/messages.d.ts.map +1 -0
- package/build/src/messages.js +17 -0
- package/build/src/messages.js.map +1 -0
- package/build/src/osk-character-use/index.d.ts +29 -0
- package/build/src/osk-character-use/index.d.ts.map +1 -0
- package/build/src/osk-character-use/index.js +249 -0
- package/build/src/osk-character-use/index.js.map +1 -0
- package/build/src/osk-rewrite-pua/index.d.ts +17 -0
- package/build/src/osk-rewrite-pua/index.d.ts.map +1 -0
- package/build/src/osk-rewrite-pua/index.js +106 -0
- package/build/src/osk-rewrite-pua/index.js.map +1 -0
- package/build/src/util/get-osk-from-kmn-file.d.ts +8 -0
- package/build/src/util/get-osk-from-kmn-file.d.ts.map +1 -0
- package/build/src/util/get-osk-from-kmn-file.js +34 -0
- package/build/src/util/get-osk-from-kmn-file.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,8 @@
|
|
|
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]="6c5c028c-1154-5e8a-b548-319b58bf96c0")}catch(e){}}();
|
|
2
|
+
/**
|
|
3
|
+
* osk-char-use - get list of characters used in on screen keyboard + touch layout
|
|
4
|
+
*/
|
|
5
|
+
export { AnalyzeOskCharacterUse } from './osk-character-use/index.js';
|
|
6
|
+
export { AnalyzeOskRewritePua } from './osk-rewrite-pua/index.js';
|
|
7
|
+
//# debugId=6c5c028c-1154-5e8a-b548-319b58bf96c0
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"debug_id":"6c5c028c-1154-5e8a-b548-319b58bf96c0","file":"index.d.ts","mappings":";AAAA;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC","names":[],"sourceRoot":"","sources":["../../src/index.ts"],"version":3}
|
|
@@ -0,0 +1,8 @@
|
|
|
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]="3cd00283-b123-5923-bbf7-9ed617bb60cd")}catch(e){}}();
|
|
2
|
+
/**
|
|
3
|
+
* osk-char-use - get list of characters used in on screen keyboard + touch layout
|
|
4
|
+
*/
|
|
5
|
+
export { AnalyzeOskCharacterUse } from './osk-character-use/index.js';
|
|
6
|
+
export { AnalyzeOskRewritePua } from './osk-rewrite-pua/index.js';
|
|
7
|
+
//# debugId=3cd00283-b123-5923-bbf7-9ed617bb60cd
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"debug_id":"3cd00283-b123-5923-bbf7-9ed617bb60cd","file":"index.js","mappings":";AAAA;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC","names":[],"sourceRoot":"","sources":["../../src/index.ts"],"version":3}
|
|
@@ -0,0 +1,14 @@
|
|
|
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]="edaa7430-3729-52d1-aef2-541b7d4adc0f")}catch(e){}}();
|
|
2
|
+
export declare class AnalyzerMessages {
|
|
3
|
+
static Fatal_UnexpectedException: (o: {
|
|
4
|
+
e: any;
|
|
5
|
+
}) => import("@keymanapp/common-types").CompilerEvent;
|
|
6
|
+
static FATAL_UnexpectedException: number;
|
|
7
|
+
static Info_ScanningFile: (o: {
|
|
8
|
+
type: string;
|
|
9
|
+
name: string;
|
|
10
|
+
}) => import("@keymanapp/common-types").CompilerEvent;
|
|
11
|
+
static INFO_ScanningFile: number;
|
|
12
|
+
}
|
|
13
|
+
//# debugId=edaa7430-3729-52d1-aef2-541b7d4adc0f
|
|
14
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"debug_id":"edaa7430-3729-52d1-aef2-541b7d4adc0f","file":"messages.d.ts","mappings":";AASA,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,yBAAyB,MAAM;QAAC,CAAC,EAAE,GAAG,CAAA;KAAC,qDAA4E;IAC1H,MAAM,CAAC,yBAAyB,SAAqB;IAErD,MAAM,CAAC,iBAAiB,MAAM;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,MAAM,CAAA;KAAC,qDACnB;IACvC,MAAM,CAAC,iBAAiB,SAAoB;CAC7C","names":[],"sourceRoot":"","sources":["../../src/messages.ts"],"version":3}
|
|
@@ -0,0 +1,17 @@
|
|
|
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]="32575934-5669-52e2-b179-0793e193c973")}catch(e){}}();
|
|
2
|
+
import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, compilerExceptionToString as exc } from "@keymanapp/common-types";
|
|
3
|
+
const Namespace = CompilerErrorNamespace.Analyzer;
|
|
4
|
+
const SevInfo = CompilerErrorSeverity.Info | Namespace;
|
|
5
|
+
// const SevHint = CompilerErrorSeverity.Hint | Namespace;
|
|
6
|
+
// const SevWarn = CompilerErrorSeverity.Warn | Namespace;
|
|
7
|
+
// const SevError = CompilerErrorSeverity.Error | Namespace;
|
|
8
|
+
const SevFatal = CompilerErrorSeverity.Fatal | Namespace;
|
|
9
|
+
export class AnalyzerMessages {
|
|
10
|
+
static Fatal_UnexpectedException = (o) => m(this.FATAL_UnexpectedException, `Unexpected exception: ${exc(o.e)}`);
|
|
11
|
+
static FATAL_UnexpectedException = SevFatal | 0x0001;
|
|
12
|
+
static Info_ScanningFile = (o) => m(this.INFO_ScanningFile, `Scanning ${o.type} file ${o.name}`);
|
|
13
|
+
static INFO_ScanningFile = SevInfo | 0x0002;
|
|
14
|
+
}
|
|
15
|
+
;
|
|
16
|
+
//# debugId=32575934-5669-52e2-b179-0793e193c973
|
|
17
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"debug_id":"32575934-5669-52e2-b179-0793e193c973","file":"messages.js","mappings":";AAAA,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,mBAAmB,IAAI,CAAC,EAAE,yBAAyB,IAAI,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAEpJ,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,MAAM,OAAO,gBAAgB;IAC3B,MAAM,CAAC,yBAAyB,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,yBAAyB,EAAE,yBAAyB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1H,MAAM,CAAC,yBAAyB,GAAG,QAAQ,GAAG,MAAM,CAAC;IAErD,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAA8B,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,EACrF,YAAY,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,iBAAiB,GAAG,OAAO,GAAG,MAAM,CAAC;;AAC7C,CAAC","names":[],"sourceRoot":"","sources":["../../src/messages.ts"],"version":3}
|
|
@@ -0,0 +1,29 @@
|
|
|
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]="8bc2c9cc-a512-5536-8e6a-4c1348adc8d8")}catch(e){}}();
|
|
2
|
+
import { CompilerCallbacks } from "@keymanapp/common-types";
|
|
3
|
+
export interface AnalyzeOskCharacterUseOptions {
|
|
4
|
+
puaBase?: number;
|
|
5
|
+
stripDottedCircle?: boolean;
|
|
6
|
+
includeCounts?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare class AnalyzeOskCharacterUse {
|
|
9
|
+
private callbacks;
|
|
10
|
+
private _strings;
|
|
11
|
+
private options;
|
|
12
|
+
constructor(callbacks: CompilerCallbacks, options?: AnalyzeOskCharacterUseOptions);
|
|
13
|
+
clear(): void;
|
|
14
|
+
analyze(file: string): Promise<boolean>;
|
|
15
|
+
private analyzeKmnKeyboard;
|
|
16
|
+
private addStrings;
|
|
17
|
+
private cleanString;
|
|
18
|
+
private scanVisualKeyboard;
|
|
19
|
+
private scanTouchLayout;
|
|
20
|
+
private prepareResults;
|
|
21
|
+
getStrings(format?: '.txt' | '.md' | '.json'): string[];
|
|
22
|
+
private static getStringsAsText;
|
|
23
|
+
private static getStringsAsMarkdown;
|
|
24
|
+
private static getStringsAsJson;
|
|
25
|
+
private static escapeMarkdownChar;
|
|
26
|
+
private static stringToUnicodeSequence;
|
|
27
|
+
}
|
|
28
|
+
//# debugId=8bc2c9cc-a512-5536-8e6a-4c1348adc8d8
|
|
29
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"debug_id":"8bc2c9cc-a512-5536-8e6a-4c1348adc8d8","file":"index.d.ts","mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAsF,MAAM,yBAAyB,CAAC;AAQhJ,MAAM,WAAW,6BAA6B;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAQD,qBAAa,sBAAsB;IAIrB,OAAO,CAAC,SAAS;IAH7B,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,OAAO,CAAgC;gBAE3B,SAAS,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,6BAA6B;IAIlF,KAAK;IAQC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAwCtC,kBAAkB;IAuBhC,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,eAAe;IAiDvB,OAAO,CAAC,cAAc;IAef,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAC,KAAK,GAAC,OAAO,GAAG,MAAM,EAAE;IAc1D,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAU/B,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAYnC,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAM/B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAcjC,OAAO,CAAC,MAAM,CAAC,uBAAuB;CAUvC","names":[],"sourceRoot":"","sources":["../../../src/osk-character-use/index.ts"],"version":3}
|
|
@@ -0,0 +1,249 @@
|
|
|
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]="4f60f810-4a50-5fab-bff2-51f393970336")}catch(e){}}();
|
|
2
|
+
import { KeymanFileTypes, KvksFileReader, TouchLayoutFileReader } from "@keymanapp/common-types";
|
|
3
|
+
import { CompilerMessages } from '@keymanapp/kmc-kmn';
|
|
4
|
+
import { getOskFromKmnFile } from "../util/get-osk-from-kmn-file.js";
|
|
5
|
+
import { AnalyzerMessages } from "../messages.js";
|
|
6
|
+
const defaultOptions = {
|
|
7
|
+
puaBase: 0xF100,
|
|
8
|
+
stripDottedCircle: false,
|
|
9
|
+
includeCounts: false,
|
|
10
|
+
};
|
|
11
|
+
export class AnalyzeOskCharacterUse {
|
|
12
|
+
callbacks;
|
|
13
|
+
_strings = {};
|
|
14
|
+
options;
|
|
15
|
+
constructor(callbacks, options) {
|
|
16
|
+
this.callbacks = callbacks;
|
|
17
|
+
this.options = { ...defaultOptions, ...options };
|
|
18
|
+
}
|
|
19
|
+
clear() {
|
|
20
|
+
this._strings = {};
|
|
21
|
+
}
|
|
22
|
+
//
|
|
23
|
+
// Analyze a single file
|
|
24
|
+
//
|
|
25
|
+
async analyze(file) {
|
|
26
|
+
switch (KeymanFileTypes.sourceTypeFromFilename(file)) {
|
|
27
|
+
case ".kvks" /* KeymanFileTypes.Source.VisualKeyboard */: {
|
|
28
|
+
let strings = this.scanVisualKeyboard(file);
|
|
29
|
+
if (!strings) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
this.addStrings(strings, file);
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
case ".keyman-touch-layout" /* KeymanFileTypes.Source.TouchLayout */: {
|
|
36
|
+
let strings = this.scanTouchLayout(file);
|
|
37
|
+
if (!strings) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
this.addStrings(strings, file);
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
case ".kpj" /* KeymanFileTypes.Source.Project */:
|
|
44
|
+
throw new Error('Passing a project to analyze is not permitted');
|
|
45
|
+
break;
|
|
46
|
+
case ".kmn" /* KeymanFileTypes.Source.KeymanKeyboard */:
|
|
47
|
+
// The cleanest way to do this is to compile the .kmn to find the .kvks
|
|
48
|
+
// and .keyman-touch-layout from the &VISUALKEYBOARD and &LAYOUTFILE
|
|
49
|
+
// system stores
|
|
50
|
+
if (!await this.analyzeKmnKeyboard(file)) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
break;
|
|
54
|
+
case ".xml" /* KeymanFileTypes.Source.LdmlKeyboard */:
|
|
55
|
+
// TODO: await this.analyzeLdmlKeyboard(file);
|
|
56
|
+
// note, will need to skip .xml files that are not ldml keyboards
|
|
57
|
+
break;
|
|
58
|
+
default:
|
|
59
|
+
// Ignore any other file types; this way we can analyze project files/folders
|
|
60
|
+
// easily also
|
|
61
|
+
}
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
async analyzeKmnKeyboard(filename) {
|
|
65
|
+
this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'keyboard source', name: filename }));
|
|
66
|
+
let osk = await getOskFromKmnFile(this.callbacks, filename);
|
|
67
|
+
if (osk.kvksFilename) {
|
|
68
|
+
let strings = this.scanVisualKeyboard(osk.kvksFilename);
|
|
69
|
+
if (!strings) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
this.addStrings(strings, osk.kvksFilename);
|
|
73
|
+
}
|
|
74
|
+
if (osk.touchLayoutFilename) {
|
|
75
|
+
let strings = this.scanTouchLayout(osk.touchLayoutFilename);
|
|
76
|
+
if (!strings) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
this.addStrings(strings, osk.touchLayoutFilename);
|
|
80
|
+
}
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
addStrings(strings, filename) {
|
|
84
|
+
// Reduce all references to get usage count per file
|
|
85
|
+
let reducedStrings = [...new Set(strings)].map(e => ({
|
|
86
|
+
str: e,
|
|
87
|
+
usages: [{ filename: this.callbacks.path.basename(filename), count: strings.filter(n => n === e).length }]
|
|
88
|
+
}));
|
|
89
|
+
// Merge result with existing found strings
|
|
90
|
+
for (let e of reducedStrings) {
|
|
91
|
+
this._strings[e.str] = [].concat(this._strings[e.str] ?? [], ...e.usages);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
cleanString(s) {
|
|
95
|
+
if (this.options.stripDottedCircle) {
|
|
96
|
+
s = s.replace(/\u25cc/g, '');
|
|
97
|
+
}
|
|
98
|
+
return s.trim();
|
|
99
|
+
}
|
|
100
|
+
//
|
|
101
|
+
// On Screen Keyboard file scanning
|
|
102
|
+
//
|
|
103
|
+
scanVisualKeyboard(filename) {
|
|
104
|
+
this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'visual keyboard', name: filename }));
|
|
105
|
+
let strings = [];
|
|
106
|
+
const reader = new KvksFileReader();
|
|
107
|
+
let source;
|
|
108
|
+
try {
|
|
109
|
+
source = reader.read(this.callbacks.loadFile(filename));
|
|
110
|
+
}
|
|
111
|
+
catch (e) {
|
|
112
|
+
this.callbacks.reportMessage(CompilerMessages.Error_InvalidKvksFile({ filename, e }));
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
let invalidKeys = [];
|
|
116
|
+
const vk = reader.transform(source, invalidKeys);
|
|
117
|
+
if (!vk) {
|
|
118
|
+
this.callbacks.reportMessage(CompilerMessages.Error_InvalidKvksFile({ filename, e: null }));
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
for (let key of vk.keys) {
|
|
122
|
+
if (key.text) {
|
|
123
|
+
strings.push(this.cleanString(key.text));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return strings;
|
|
127
|
+
}
|
|
128
|
+
scanTouchLayout(filename) {
|
|
129
|
+
this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'touch layout', name: filename }));
|
|
130
|
+
let strings = [];
|
|
131
|
+
const reader = new TouchLayoutFileReader();
|
|
132
|
+
const source = reader.read(this.callbacks.loadFile(filename));
|
|
133
|
+
const scanKey = (key) => {
|
|
134
|
+
if (!key.text) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (key.text.length > 2 && key.text[0] == '*' && key.text[key.text.length - 1] == '*') {
|
|
138
|
+
// Don't add '*special*' key captions
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
strings.push(this.cleanString(key.text));
|
|
142
|
+
};
|
|
143
|
+
const scanPlatform = (platform) => {
|
|
144
|
+
if (!platform) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
for (let layer of platform.layer) {
|
|
148
|
+
for (let row of layer.row) {
|
|
149
|
+
for (let key of row.key) {
|
|
150
|
+
scanKey(key);
|
|
151
|
+
let f;
|
|
152
|
+
for (f in key.flick ?? {}) {
|
|
153
|
+
scanKey(key.flick[f]);
|
|
154
|
+
}
|
|
155
|
+
for (let sk of key.sk ?? []) {
|
|
156
|
+
scanKey(sk);
|
|
157
|
+
}
|
|
158
|
+
for (let mt of key.multitap ?? []) {
|
|
159
|
+
scanKey(mt);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
scanPlatform(source.desktop);
|
|
166
|
+
scanPlatform(source.phone);
|
|
167
|
+
scanPlatform(source.tablet);
|
|
168
|
+
return strings;
|
|
169
|
+
}
|
|
170
|
+
//
|
|
171
|
+
// Results reporting
|
|
172
|
+
//
|
|
173
|
+
prepareResults(strings) {
|
|
174
|
+
let result = [];
|
|
175
|
+
let pua = this.options.puaBase;
|
|
176
|
+
for (let str of Object.keys(strings)) {
|
|
177
|
+
result.push({
|
|
178
|
+
pua: pua.toString(16).toUpperCase(),
|
|
179
|
+
str,
|
|
180
|
+
unicode: AnalyzeOskCharacterUse.stringToUnicodeSequence(str, false),
|
|
181
|
+
usages: this.options.includeCounts ? strings[str] : strings[str].map(item => item.filename)
|
|
182
|
+
});
|
|
183
|
+
pua++;
|
|
184
|
+
}
|
|
185
|
+
return result;
|
|
186
|
+
}
|
|
187
|
+
getStrings(format) {
|
|
188
|
+
const final = this.prepareResults(this._strings);
|
|
189
|
+
switch (format) {
|
|
190
|
+
case '.md':
|
|
191
|
+
return AnalyzeOskCharacterUse.getStringsAsMarkdown(final);
|
|
192
|
+
case '.json':
|
|
193
|
+
return AnalyzeOskCharacterUse.getStringsAsJson(final);
|
|
194
|
+
}
|
|
195
|
+
return AnalyzeOskCharacterUse.getStringsAsText(final);
|
|
196
|
+
}
|
|
197
|
+
// Following functions are static so that we can keep them pure
|
|
198
|
+
// and potentially refactor into separate reporting class later
|
|
199
|
+
static getStringsAsText(strings) {
|
|
200
|
+
// Text result only returns PUA, unicode sequence, and plain string
|
|
201
|
+
let lines = [];
|
|
202
|
+
for (let s of strings) {
|
|
203
|
+
const ux = this.stringToUnicodeSequence(s.str);
|
|
204
|
+
lines.push('U+' + s.pua + '\t' + ux + '\t' + s.str);
|
|
205
|
+
}
|
|
206
|
+
return lines;
|
|
207
|
+
}
|
|
208
|
+
static getStringsAsMarkdown(strings) {
|
|
209
|
+
// Markdown result only returns PUA, unicode sequence, and plain string
|
|
210
|
+
let lines = [];
|
|
211
|
+
lines.push('PUA | Code Points | Key Caps');
|
|
212
|
+
lines.push('-------|-------------|---------');
|
|
213
|
+
for (let s of strings) {
|
|
214
|
+
const ux = this.stringToUnicodeSequence(s.str);
|
|
215
|
+
lines.push('U+' + s.pua + ' | ' + ux + ' | ' + this.escapeMarkdownChar(s.str));
|
|
216
|
+
}
|
|
217
|
+
return lines;
|
|
218
|
+
}
|
|
219
|
+
static getStringsAsJson(strings) {
|
|
220
|
+
// For future expansion, we wrap the array in a 'map' property
|
|
221
|
+
let map = { "map": strings };
|
|
222
|
+
return JSON.stringify(map, null, 2).split('\n');
|
|
223
|
+
}
|
|
224
|
+
static escapeMarkdownChar(s) {
|
|
225
|
+
// note: could replace with a common lib but too much baggage to be worth it for now
|
|
226
|
+
// commonmark 2.4: all punct can be escaped
|
|
227
|
+
// const punct = '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~';
|
|
228
|
+
s = s.replace(/[!"#$%&'()*+,-./:;<=>?@\[\\\]^_`{|}~]/g, '\\$0');
|
|
229
|
+
// replace whitepsace
|
|
230
|
+
s = s.replace(/[\n]/g, '\\n');
|
|
231
|
+
s = s.replace(/[\r]/g, '\\r');
|
|
232
|
+
s = s.replace(/[\t]/g, '\\t');
|
|
233
|
+
s = s.replace(/ /g, ' ');
|
|
234
|
+
s = s.replace(/\u00a0/g, ' ');
|
|
235
|
+
return s;
|
|
236
|
+
}
|
|
237
|
+
static stringToUnicodeSequence(s, addUPlusPrefix = true) {
|
|
238
|
+
let result = [];
|
|
239
|
+
for (let ch of s) {
|
|
240
|
+
let c = ch.codePointAt(0).toString(16).toUpperCase();
|
|
241
|
+
if (c.length < 4)
|
|
242
|
+
c = '0'.repeat(4 - c.length) + c;
|
|
243
|
+
result.push((addUPlusPrefix ? 'U+' : '') + c);
|
|
244
|
+
}
|
|
245
|
+
return result.join(' ');
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
//# debugId=4f60f810-4a50-5fab-bff2-51f393970336
|
|
249
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"debug_id":"4f60f810-4a50-5fab-bff2-51f393970336","file":"index.js","mappings":"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","names":[],"sourceRoot":"","sources":["../../../src/osk-character-use/index.ts"],"version":3}
|
|
@@ -0,0 +1,17 @@
|
|
|
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]="90f593d1-df21-5a9b-a37e-cc80fb11ba65")}catch(e){}}();
|
|
2
|
+
import { CompilerCallbacks, Osk } from "@keymanapp/common-types";
|
|
3
|
+
export declare class AnalyzeOskRewritePua {
|
|
4
|
+
private callbacks;
|
|
5
|
+
private _data;
|
|
6
|
+
constructor(callbacks: CompilerCallbacks);
|
|
7
|
+
clear(): void;
|
|
8
|
+
analyze(file: string, mapping: Osk.StringResult[]): Promise<boolean>;
|
|
9
|
+
get data(): {
|
|
10
|
+
[index: string]: Uint8Array;
|
|
11
|
+
};
|
|
12
|
+
private analyzeKmnKeyboard;
|
|
13
|
+
private analyzeVisualKeyboard;
|
|
14
|
+
private analyzeTouchLayout;
|
|
15
|
+
}
|
|
16
|
+
//# debugId=90f593d1-df21-5a9b-a37e-cc80fb11ba65
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"debug_id":"90f593d1-df21-5a9b-a37e-cc80fb11ba65","file":"index.d.ts","mappings":";AAAA,OAAO,EAAE,iBAAiB,EAA6D,GAAG,EAAgD,MAAM,yBAAyB,CAAC;AAK1K,qBAAa,oBAAoB;IAGnB,OAAO,CAAC,SAAS;IAF7B,OAAO,CAAC,KAAK,CAAoC;gBAE7B,SAAS,EAAE,iBAAiB;IAGzC,KAAK;IAQC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,YAAY,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAgCjF,IAAW,IAAI;;MAEd;YAEa,kBAAkB;IAqBhC,OAAO,CAAC,qBAAqB;IA6B7B,OAAO,CAAC,kBAAkB;CAe3B","names":[],"sourceRoot":"","sources":["../../../src/osk-rewrite-pua/index.ts"],"version":3}
|
|
@@ -0,0 +1,106 @@
|
|
|
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]="ed8f36e3-17bc-57b1-9366-311992323cab")}catch(e){}}();
|
|
2
|
+
import { KeymanFileTypes, KvksFileReader, KvksFileWriter, Osk, TouchLayoutFileReader, TouchLayoutFileWriter } from "@keymanapp/common-types";
|
|
3
|
+
import { CompilerMessages } from '@keymanapp/kmc-kmn';
|
|
4
|
+
import { getOskFromKmnFile } from "../util/get-osk-from-kmn-file.js";
|
|
5
|
+
import { AnalyzerMessages } from "../messages.js";
|
|
6
|
+
export class AnalyzeOskRewritePua {
|
|
7
|
+
callbacks;
|
|
8
|
+
_data = {};
|
|
9
|
+
constructor(callbacks) {
|
|
10
|
+
this.callbacks = callbacks;
|
|
11
|
+
}
|
|
12
|
+
clear() {
|
|
13
|
+
this._data = {};
|
|
14
|
+
}
|
|
15
|
+
//
|
|
16
|
+
// Analyze a single file
|
|
17
|
+
//
|
|
18
|
+
async analyze(file, mapping) {
|
|
19
|
+
let map = Osk.parseMapping(mapping);
|
|
20
|
+
switch (KeymanFileTypes.sourceTypeFromFilename(file)) {
|
|
21
|
+
case ".kvks" /* KeymanFileTypes.Source.VisualKeyboard */:
|
|
22
|
+
this._data[file] = this.analyzeVisualKeyboard(file, map);
|
|
23
|
+
break;
|
|
24
|
+
case ".keyman-touch-layout" /* KeymanFileTypes.Source.TouchLayout */:
|
|
25
|
+
this._data[file] = this.analyzeTouchLayout(file, map);
|
|
26
|
+
break;
|
|
27
|
+
case ".kpj" /* KeymanFileTypes.Source.Project */:
|
|
28
|
+
throw new Error('Passing a project to analyze is not permitted');
|
|
29
|
+
break;
|
|
30
|
+
case ".kmn" /* KeymanFileTypes.Source.KeymanKeyboard */:
|
|
31
|
+
// The cleanest way to do this is to compile the .kmn to find the .kvks
|
|
32
|
+
// and .keyman-touch-layout from the &VISUALKEYBOARD and &LAYOUTFILE
|
|
33
|
+
// system stores
|
|
34
|
+
if (!await this.analyzeKmnKeyboard(file, map)) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
break;
|
|
38
|
+
case ".xml" /* KeymanFileTypes.Source.LdmlKeyboard */:
|
|
39
|
+
// TODO: await this.analyzeLdmlKeyboard(file);
|
|
40
|
+
// note, will need to skip .xml files that are not ldml keyboards
|
|
41
|
+
break;
|
|
42
|
+
default:
|
|
43
|
+
// Ignore any other file types; this way we can analyze project files/folders
|
|
44
|
+
// easily also
|
|
45
|
+
}
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
get data() {
|
|
49
|
+
return this._data;
|
|
50
|
+
}
|
|
51
|
+
async analyzeKmnKeyboard(filename, map) {
|
|
52
|
+
this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'keyboard source', name: filename }));
|
|
53
|
+
let osk = await getOskFromKmnFile(this.callbacks, filename);
|
|
54
|
+
if (osk.kvksFilename) {
|
|
55
|
+
this._data[osk.kvksFilename] = this.analyzeVisualKeyboard(osk.kvksFilename, map);
|
|
56
|
+
}
|
|
57
|
+
if (osk.touchLayoutFilename) {
|
|
58
|
+
this._data[osk.touchLayoutFilename] = this.analyzeTouchLayout(osk.touchLayoutFilename, map);
|
|
59
|
+
}
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
//
|
|
63
|
+
// On Screen Keyboard file scanning
|
|
64
|
+
//
|
|
65
|
+
analyzeVisualKeyboard(filename, map) {
|
|
66
|
+
this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'visual keyboard', name: filename }));
|
|
67
|
+
const reader = new KvksFileReader();
|
|
68
|
+
let source;
|
|
69
|
+
try {
|
|
70
|
+
source = reader.read(this.callbacks.loadFile(filename));
|
|
71
|
+
}
|
|
72
|
+
catch (e) {
|
|
73
|
+
this.callbacks.reportMessage(CompilerMessages.Error_InvalidKvksFile({ filename, e }));
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
let invalidKeys = [];
|
|
77
|
+
const vk = reader.transform(source, invalidKeys);
|
|
78
|
+
if (!vk) {
|
|
79
|
+
this.callbacks.reportMessage(CompilerMessages.Error_InvalidKvksFile({ filename, e: null }));
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
const dirty = Osk.remapVisualKeyboard(vk, map);
|
|
83
|
+
if (!dirty) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
const writer = new KvksFileWriter();
|
|
87
|
+
const data = writer.write(vk);
|
|
88
|
+
// TODO: the encoder probably needs to go into KvksFileWRiter
|
|
89
|
+
const enc = new TextEncoder();
|
|
90
|
+
return enc.encode(data);
|
|
91
|
+
}
|
|
92
|
+
analyzeTouchLayout(filename, map) {
|
|
93
|
+
this.callbacks.reportMessage(AnalyzerMessages.Info_ScanningFile({ type: 'touch layout', name: filename }));
|
|
94
|
+
const reader = new TouchLayoutFileReader();
|
|
95
|
+
const source = reader.read(this.callbacks.loadFile(filename));
|
|
96
|
+
let dirty = Osk.remapTouchLayout(source, map);
|
|
97
|
+
if (!dirty) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
const writer = new TouchLayoutFileWriter({ formatted: true });
|
|
101
|
+
const data = writer.write(source);
|
|
102
|
+
return data;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# debugId=ed8f36e3-17bc-57b1-9366-311992323cab
|
|
106
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"debug_id":"ed8f36e3-17bc-57b1-9366-311992323cab","file":"index.js","mappings":";AAAA,OAAO,EAAqB,eAAe,EAAY,cAAc,EAAE,cAAc,EAAE,GAAG,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC1K,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,OAAO,oBAAoB;IAGX;IAFZ,KAAK,GAAiC,EAAE,CAAC;IAEjD,YAAoB,SAA4B;QAA5B,cAAS,GAAT,SAAS,CAAmB;IAChD,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,EAAE;IACF,wBAAwB;IACxB,EAAE;IAEK,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,OAA2B;QAC5D,IAAI,GAAG,GAAe,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAEhD,QAAO,eAAe,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE;YACnD;gBACE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACzD,MAAM;YACR;gBACE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACtD,MAAM;YACR;gBACE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;gBACjE,MAAM;YACR;gBACE,uEAAuE;gBACvE,oEAAoE;gBACpE,gBAAgB;gBAChB,IAAG,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;oBAC5C,OAAO,KAAK,CAAC;iBACd;gBACD,MAAM;YACR;gBACE,8CAA8C;gBAC9C,iEAAiE;gBACjE,MAAM;YACR,QAAQ;YACN,6EAA6E;YAC7E,cAAc;SACjB;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,QAAgB,EAAE,GAAe;QAChE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAC,IAAI,EAAC,iBAAiB,EAAE,IAAI,EAAC,QAAQ,EAAC,CAAC,CAAC,CAAC;QAE1G,IAAI,GAAG,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAE5D,IAAG,GAAG,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;SAClF;QACD,IAAG,GAAG,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;SAC7F;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,EAAE;IACF,mCAAmC;IACnC,EAAE;IAGM,qBAAqB,CAAC,QAAgB,EAAE,GAAe;QAC7D,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAC,IAAI,EAAC,iBAAiB,EAAE,IAAI,EAAC,QAAQ,EAAC,CAAC,CAAC,CAAC;QAC1G,MAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACpC,IAAI,MAAwB,CAAC;QAC7B,IAAI;YACF,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;SACzD;QAAC,OAAM,CAAC,EAAE;YACT,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,EAAC,QAAQ,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;YACpF,OAAO,IAAI,CAAC;SACb;QACD,IAAI,WAAW,GAAa,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACjD,IAAG,CAAC,EAAE,EAAE;YACN,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,EAAC,QAAQ,EAAE,CAAC,EAAC,IAAI,EAAC,CAAC,CAAC,CAAC;YACzF,OAAO,IAAI,CAAC;SACb;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,mBAAmB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/C,IAAG,CAAC,KAAK,EAAE;YACT,OAAO,IAAI,CAAC;SACb;QACD,MAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9B,6DAA6D;QAC7D,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAIO,kBAAkB,CAAC,QAAgB,EAAE,GAAe;QAC1D,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAC,IAAI,EAAC,cAAc,EAAE,IAAI,EAAC,QAAQ,EAAC,CAAC,CAAC,CAAC;QACvG,MAAM,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE9D,IAAI,KAAK,GAAG,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAE9C,IAAG,CAAC,KAAK,EAAE;YACT,OAAO,IAAI,CAAC;SACb;QAED,MAAM,MAAM,GAAG,IAAI,qBAAqB,CAAC,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;CACF","names":[],"sourceRoot":"","sources":["../../../src/osk-rewrite-pua/index.ts"],"version":3}
|
|
@@ -0,0 +1,8 @@
|
|
|
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]="fb4640fc-21b0-5e8c-931a-3f2957ccd462")}catch(e){}}();
|
|
2
|
+
import { CompilerCallbacks } from "@keymanapp/common-types";
|
|
3
|
+
export declare function getOskFromKmnFile(callbacks: CompilerCallbacks, filename: string): Promise<{
|
|
4
|
+
kvksFilename?: string;
|
|
5
|
+
touchLayoutFilename?: string;
|
|
6
|
+
}>;
|
|
7
|
+
//# debugId=fb4640fc-21b0-5e8c-931a-3f2957ccd462
|
|
8
|
+
//# sourceMappingURL=get-osk-from-kmn-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"debug_id":"fb4640fc-21b0-5e8c-931a-3f2957ccd462","file":"get-osk-from-kmn-file.d.ts","mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAsB,MAAM,yBAAyB,CAAC;AAGhF,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B,CAAC,CAmCD","names":[],"sourceRoot":"","sources":["../../../src/util/get-osk-from-kmn-file.ts"],"version":3}
|
|
@@ -0,0 +1,34 @@
|
|
|
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]="51dd88c5-9bec-5bf5-9b76-94fa100ecb99")}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
|
+
// kmnCompiler will report errors
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
// Note, output filename here is just to provide path data,
|
|
13
|
+
// as nothing is written to disk
|
|
14
|
+
let result = kmnCompiler.runCompiler(filename, filename + '.tmp', {
|
|
15
|
+
shouldAddCompilerVersion: false,
|
|
16
|
+
saveDebug: false,
|
|
17
|
+
});
|
|
18
|
+
if (!result) {
|
|
19
|
+
// kmnCompiler will report any errors
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
if (result.extra.kvksFilename) {
|
|
23
|
+
kvksFilename = callbacks.resolveFilename(filename, result.extra.kvksFilename);
|
|
24
|
+
}
|
|
25
|
+
const reader = new KmxFileReader();
|
|
26
|
+
const keyboard = reader.read(result.kmx.data);
|
|
27
|
+
const touchLayoutStore = keyboard.stores.find(store => store.dwSystemID == KMX.KMXFile.TSS_LAYOUTFILE);
|
|
28
|
+
if (touchLayoutStore) {
|
|
29
|
+
touchLayoutFilename = callbacks.resolveFilename(filename, touchLayoutStore.dpString);
|
|
30
|
+
}
|
|
31
|
+
return { kvksFilename, touchLayoutFilename };
|
|
32
|
+
}
|
|
33
|
+
//# debugId=51dd88c5-9bec-5bf5-9b76-94fa100ecb99
|
|
34
|
+
//# sourceMappingURL=get-osk-from-kmn-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"debug_id":"51dd88c5-9bec-5bf5-9b76-94fa100ecb99","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,CAAC,EAAE;QACrC,iCAAiC;QACjC,OAAO,IAAI,CAAC;KACb;IAED,2DAA2D;IAC3D,gCAAgC;IAChC,IAAI,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE;QAChE,wBAAwB,EAAE,KAAK;QAC/B,SAAS,EAAE,KAAK;KACjB,CAAC,CAAC;IAEH,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,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5D,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}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@keymanapp/kmc-analyze",
|
|
3
|
+
"description": "Keyman Developer Compiler Module - keyboard analysis tools",
|
|
4
|
+
"keywords": [
|
|
5
|
+
"keyboard",
|
|
6
|
+
"keyman",
|
|
7
|
+
"unicode"
|
|
8
|
+
],
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "gosh ./build.sh build",
|
|
11
|
+
"test": "gosh ./build.sh test"
|
|
12
|
+
},
|
|
13
|
+
"type": "module",
|
|
14
|
+
"author": "Marc Durdin <marc@keyman.com> (https://github.com/mcdurdin)",
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"bugs": {
|
|
17
|
+
"url": "https://github.com/keymanapp/keyman/issues"
|
|
18
|
+
},
|
|
19
|
+
"main": "build/src/index.js",
|
|
20
|
+
"files": [
|
|
21
|
+
"build/src/"
|
|
22
|
+
],
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@keymanapp/common-types": "17.0.156-alpha",
|
|
25
|
+
"@keymanapp/kmc-kmn": "17.0.156-alpha",
|
|
26
|
+
"commander": "^10.0.0"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@keymanapp/resources-gosh": "17.0.156-alpha",
|
|
30
|
+
"@types/chai": "^4.1.7",
|
|
31
|
+
"@types/mocha": "^5.2.7",
|
|
32
|
+
"@types/node": "^20.4.1",
|
|
33
|
+
"@types/xml2js": "^0.4.5",
|
|
34
|
+
"c8": "^7.12.0",
|
|
35
|
+
"chai": "^4.3.4",
|
|
36
|
+
"chalk": "^2.4.2",
|
|
37
|
+
"esbuild": "^0.15.8",
|
|
38
|
+
"mocha": "^8.4.0",
|
|
39
|
+
"ts-node": "^9.1.1",
|
|
40
|
+
"typescript": "^4.9.5"
|
|
41
|
+
},
|
|
42
|
+
"repository": {
|
|
43
|
+
"type": "git",
|
|
44
|
+
"url": "git+https://github.com/keymanapp/keyman.git"
|
|
45
|
+
},
|
|
46
|
+
"version": "17.0.156-alpha"
|
|
47
|
+
}
|