@keymanapp/kmc-ldml 17.0.300-beta → 17.0.302-beta
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/compiler/compiler.js +309 -308
- package/build/src/compiler/compiler.js.map +1 -1
- package/build/src/compiler/disp.js +84 -83
- package/build/src/compiler/disp.js.map +1 -1
- package/build/src/compiler/empty-compiler.js +116 -115
- package/build/src/compiler/empty-compiler.js.map +1 -1
- package/build/src/compiler/keymanweb-compiler.js +97 -96
- package/build/src/compiler/keymanweb-compiler.js.map +1 -1
- package/build/src/compiler/keys.js +419 -418
- package/build/src/compiler/keys.js.map +1 -1
- package/build/src/compiler/layr.js +83 -82
- package/build/src/compiler/layr.js.map +1 -1
- package/build/src/compiler/ldml-compiler-options.js +5 -4
- package/build/src/compiler/ldml-compiler-options.js.map +1 -1
- package/build/src/compiler/loca.js +61 -60
- package/build/src/compiler/loca.js.map +1 -1
- package/build/src/compiler/messages.js +120 -119
- package/build/src/compiler/messages.js.map +1 -1
- package/build/src/compiler/meta.js +57 -56
- package/build/src/compiler/meta.js.map +1 -1
- package/build/src/compiler/metadata-compiler.js +49 -48
- package/build/src/compiler/metadata-compiler.js.map +1 -1
- package/build/src/compiler/section-compiler.js +42 -41
- package/build/src/compiler/section-compiler.js.map +1 -1
- package/build/src/compiler/substitution-tracker.js +105 -104
- package/build/src/compiler/substitution-tracker.js.map +1 -1
- package/build/src/compiler/touch-layout-compiler.js +93 -92
- package/build/src/compiler/touch-layout-compiler.js.map +1 -1
- package/build/src/compiler/tran.js +382 -381
- package/build/src/compiler/tran.js.map +1 -1
- package/build/src/compiler/vars.js +236 -235
- package/build/src/compiler/vars.js.map +1 -1
- package/build/src/compiler/visual-keyboard-compiler.js +70 -69
- package/build/src/compiler/visual-keyboard-compiler.js.map +1 -1
- package/build/src/main.js +5 -4
- package/build/src/main.js.map +1 -1
- package/build/src/util/util.js +185 -184
- package/build/src/util/util.js.map +1 -1
- package/package.json +6 -6
|
@@ -1,70 +1,71 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
result.header.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
result.header.
|
|
18
|
-
result.header.
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
|
|
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]="20fe0858-b127-57f9-8acf-05baa436395b")}catch(e){}}();
|
|
3
|
+
import { VisualKeyboard } from "@keymanapp/common-types";
|
|
4
|
+
import { KeysCompiler } from "./keys.js";
|
|
5
|
+
import { CompilerMessages } from "./messages.js";
|
|
6
|
+
export class LdmlKeyboardVisualKeyboardCompiler {
|
|
7
|
+
callbacks;
|
|
8
|
+
constructor(callbacks) {
|
|
9
|
+
this.callbacks = callbacks;
|
|
10
|
+
}
|
|
11
|
+
compile(source) {
|
|
12
|
+
let result = new VisualKeyboard.VisualKeyboard();
|
|
13
|
+
/* TODO-LDML: consider VisualKeyboardHeaderFlags.kvkhUseUnderlying kvkhDisplayUnderlying kvkhAltGr kvkh102 */
|
|
14
|
+
result.header.flags = 0;
|
|
15
|
+
result.header.version = 0x0600;
|
|
16
|
+
/* TODO-LDML: consider associatedKeyboard: this _must_ be set to id (aka basename sans ext) of keyboard .kmx file */
|
|
17
|
+
result.header.associatedKeyboard = '';
|
|
18
|
+
result.header.ansiFont = { ...VisualKeyboard.DEFAULT_KVK_FONT };
|
|
19
|
+
result.header.unicodeFont = { ...VisualKeyboard.DEFAULT_KVK_FONT };
|
|
20
|
+
for (let layers of source.keyboard3.layers) {
|
|
21
|
+
const { formId } = layers;
|
|
22
|
+
for (let layer of layers.layer) {
|
|
23
|
+
this.compileHardwareLayer(source, result, layer, formId);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
compileHardwareLayer(source, vk, layer, hardware) {
|
|
29
|
+
const layerId = layer.id;
|
|
30
|
+
if (hardware === 'touch') {
|
|
31
|
+
hardware = 'us'; // TODO-LDML: US Only. Do something different here?
|
|
32
|
+
}
|
|
33
|
+
const keymap = KeysCompiler.getKeymapFromForms(source.keyboard3?.forms?.form, hardware);
|
|
34
|
+
if (!keymap) {
|
|
35
|
+
this.callbacks.reportMessage(CompilerMessages.Error_InvalidHardware({ formId: hardware }));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const shift = this.translateLayerIdToVisualKeyboardShift(layer.id);
|
|
39
|
+
let y = -1;
|
|
40
|
+
for (let row of layer.row) {
|
|
41
|
+
y++;
|
|
42
|
+
const keys = row.keys.split(' ');
|
|
43
|
+
let x = -1;
|
|
44
|
+
for (let key of keys) {
|
|
45
|
+
const keyId = key;
|
|
46
|
+
x++;
|
|
47
|
+
let keydef = source.keyboard3.keys?.key?.find(x => x.id == key);
|
|
48
|
+
if (!keydef) {
|
|
49
|
+
this.callbacks.reportMessage(CompilerMessages.Error_KeyNotFoundInKeyBag({ keyId, layer: layerId, row: y, col: x, form: hardware }));
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
vk.keys.push({
|
|
53
|
+
flags: 2 /* VisualKeyboard.VisualKeyboardKeyFlags.kvkkUnicode */,
|
|
54
|
+
shift: shift,
|
|
55
|
+
text: keydef.output,
|
|
56
|
+
vkey: keymap[y][x],
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
translateLayerIdToVisualKeyboardShift(id) {
|
|
63
|
+
if (id == 'base') {
|
|
64
|
+
return 0;
|
|
65
|
+
}
|
|
66
|
+
// TODO-LDML: other modifiers
|
|
67
|
+
return 0;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
70
|
//# sourceMappingURL=visual-keyboard-compiler.js.map
|
|
71
|
+
//# debugId=20fe0858-b127-57f9-8acf-05baa436395b
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"version":3,"file":"visual-keyboard-compiler.js","sources":["../../../src/compiler/visual-keyboard-compiler.ts"],"sourceRoot":"","names":[],"mappings":"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","debug_id":"20fe0858-b127-57f9-8acf-05baa436395b"}
|
package/build/src/main.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export {
|
|
4
|
-
|
|
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]="473a60eb-f332-5e3d-bf08-69b6693d2f74")}catch(e){}}();
|
|
3
|
+
export { LdmlKeyboardCompiler } from './compiler/compiler.js';
|
|
4
|
+
export { CompilerMessages as LdmlKeyboardCompilerMessages } from './compiler/messages.js'; // TODO: rename messages.js and CompilerMessages
|
|
5
5
|
//# sourceMappingURL=main.js.map
|
|
6
|
+
//# debugId=473a60eb-f332-5e3d-bf08-69b6693d2f74
|
package/build/src/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"version":3,"file":"main.js","sources":["../../src/main.ts"],"sourceRoot":"","names":[],"mappings":";;AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,gBAAgB,IAAI,4BAA4B,EAAE,MAAM,wBAAwB,CAAC,CAAC,gDAAgD","debug_id":"473a60eb-f332-5e3d-bf08-69b6693d2f74"}
|
package/build/src/util/util.js
CHANGED
|
@@ -1,185 +1,186 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* @
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
* @
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
*
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
addKeys(
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
* @param
|
|
110
|
-
* @param
|
|
111
|
-
* @param
|
|
112
|
-
* @
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
const
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
*
|
|
143
|
-
* @
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
* @
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
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]="92c01187-7818-5f35-9ffc-8e06975000b5")}catch(e){}}();
|
|
3
|
+
import { constants } from "@keymanapp/ldml-keyboard-constants";
|
|
4
|
+
/**
|
|
5
|
+
* Verifies that value is an item in the enumeration.
|
|
6
|
+
*/
|
|
7
|
+
export function isValidEnumValue(enu, value) {
|
|
8
|
+
return Object.values(enu).includes(value);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Returns unique LKKeys only, preserving later ones
|
|
12
|
+
* in case of conflict. (i.e. later overrides)
|
|
13
|
+
* @param keys list of keys to consider. (mutated)
|
|
14
|
+
* @returns Array of unique keys. Order is not specified.
|
|
15
|
+
*/
|
|
16
|
+
export function calculateUniqueKeys(keys) {
|
|
17
|
+
if (!keys) {
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
// Need 'newer' (later) keys to override older ones.
|
|
21
|
+
const reverseKeys = keys.reverse(); // newest to oldest
|
|
22
|
+
const alreadySeen = new Set();
|
|
23
|
+
// filter out only the keys that haven't already been seen
|
|
24
|
+
const uniqueKeys = reverseKeys.filter(({ id }) => {
|
|
25
|
+
if (!alreadySeen.has(id)) {
|
|
26
|
+
alreadySeen.add(id);
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
return false;
|
|
30
|
+
});
|
|
31
|
+
return uniqueKeys;
|
|
32
|
+
}
|
|
33
|
+
/** Convert an array of keys to a hash */
|
|
34
|
+
export function hashKeys(keys) {
|
|
35
|
+
const m = new Map();
|
|
36
|
+
for (const k of keys ?? []) {
|
|
37
|
+
m.set(k.id, k);
|
|
38
|
+
}
|
|
39
|
+
return m;
|
|
40
|
+
}
|
|
41
|
+
export function hashFlicks(flicks) {
|
|
42
|
+
const m = new Map();
|
|
43
|
+
for (const k of flicks ?? []) {
|
|
44
|
+
m.set(k.id, k);
|
|
45
|
+
}
|
|
46
|
+
return m;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* @param layersList list of layers elements, from `keyboard?.layers`
|
|
50
|
+
* @returns set of key IDs
|
|
51
|
+
*/
|
|
52
|
+
export function allUsedKeyIdsInLayers(layersList) {
|
|
53
|
+
const s = new Set();
|
|
54
|
+
if (layersList) {
|
|
55
|
+
for (const layers of layersList || []) {
|
|
56
|
+
for (const layer of layers.layer || []) {
|
|
57
|
+
for (const row of layer.row || []) {
|
|
58
|
+
if (row.keys) {
|
|
59
|
+
for (const k of row.keys.split(" ")) {
|
|
60
|
+
s.add(k);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return s;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Extract all of the key ids that this key refers to, not counting flicks
|
|
71
|
+
* @returns map from the key id to a set of attribute names (such as `multiTapDefaultKeyId` etc.) used by that key.
|
|
72
|
+
*/
|
|
73
|
+
export function allUsedKeyIdsInKey(key) {
|
|
74
|
+
const m = new Map();
|
|
75
|
+
/** add one key */
|
|
76
|
+
function addKey(keyId, attr) {
|
|
77
|
+
if (!keyId)
|
|
78
|
+
return;
|
|
79
|
+
if (!m.has(keyId))
|
|
80
|
+
m.set(keyId, []);
|
|
81
|
+
m.get(keyId).push(attr);
|
|
82
|
+
}
|
|
83
|
+
/** add a set of keys */
|
|
84
|
+
function addKeys(keyIds, attr) {
|
|
85
|
+
if (!keyIds)
|
|
86
|
+
return;
|
|
87
|
+
for (const keyId of keyIds?.split(' ')) {
|
|
88
|
+
addKey(keyId, attr);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const { longPressKeyIds, longPressDefaultKeyId, multiTapKeyIds } = key;
|
|
92
|
+
addKey(longPressDefaultKeyId, 'longPressDefaultKeyId');
|
|
93
|
+
addKeys(longPressKeyIds, 'longPressKeyIds');
|
|
94
|
+
addKeys(multiTapKeyIds, 'multiTapKeyIds');
|
|
95
|
+
return m;
|
|
96
|
+
}
|
|
97
|
+
export function allUsedKeyIdsInFlick(flick) {
|
|
98
|
+
const s = new Set();
|
|
99
|
+
if (flick) {
|
|
100
|
+
for (const { keyId } of flick.flickSegment) {
|
|
101
|
+
s.add(keyId);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return s;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Helper function for validating child elements. Written for the convenience of message passing functions.
|
|
108
|
+
*
|
|
109
|
+
* @param values array of values to check
|
|
110
|
+
* @param onDuplicate callback with array of duplicate values, deduped
|
|
111
|
+
* @param allowed optional set of valid values
|
|
112
|
+
* @param onInvalid callback with array of invalid values, deduped
|
|
113
|
+
* @returns true if all OK
|
|
114
|
+
*/
|
|
115
|
+
export function verifyValidAndUnique(values, onDuplicate, allowed, onInvalid) {
|
|
116
|
+
const dups = [];
|
|
117
|
+
const invalids = [];
|
|
118
|
+
const seen = new Set();
|
|
119
|
+
for (const value of values) {
|
|
120
|
+
if (allowed && !allowed.has(value)) {
|
|
121
|
+
invalids.push(value);
|
|
122
|
+
}
|
|
123
|
+
if (seen.has(value)) {
|
|
124
|
+
dups.push(value);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
seen.add(value);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function dedupedSortedArray(values) {
|
|
131
|
+
return Array.from(new Set(values)).sort();
|
|
132
|
+
}
|
|
133
|
+
if (dups.length > 0 && onDuplicate) {
|
|
134
|
+
onDuplicate(dedupedSortedArray(dups));
|
|
135
|
+
}
|
|
136
|
+
if (invalids.length > 0 && onInvalid) {
|
|
137
|
+
onInvalid(dedupedSortedArray(invalids));
|
|
138
|
+
}
|
|
139
|
+
return (!dups.length && !invalids.length);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Determine modifier from layer info
|
|
143
|
+
* @param layer layer obj
|
|
144
|
+
* @returns modifier array
|
|
145
|
+
*/
|
|
146
|
+
export function translateLayerAttrToModifier(layer) {
|
|
147
|
+
const { modifiers } = layer;
|
|
148
|
+
if (!modifiers)
|
|
149
|
+
return [constants.keys_mod_none];
|
|
150
|
+
return modifiers.split(',').map(m => translateModifierSubsetToLayer(m)).sort();
|
|
151
|
+
}
|
|
152
|
+
function translateModifierSubsetToLayer(modifiers) {
|
|
153
|
+
// TODO-LDML: Default #11072
|
|
154
|
+
if (modifiers) {
|
|
155
|
+
if (modifiers.indexOf(',') !== -1) {
|
|
156
|
+
throw Error(`translateModifierSubsetToLayer only takes a single subset of the modifiers`);
|
|
157
|
+
}
|
|
158
|
+
let mod = constants.keys_mod_none;
|
|
159
|
+
for (let str of modifiers.split(' ')) {
|
|
160
|
+
const submod = constants.keys_mod_map.get(str);
|
|
161
|
+
mod |= submod;
|
|
162
|
+
}
|
|
163
|
+
return mod;
|
|
164
|
+
}
|
|
165
|
+
// TODO-LDML: other modifiers, other ids?
|
|
166
|
+
return constants.keys_mod_none;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* @param modifier modifier sequence such as undefined, "none", "shift altR" etc
|
|
170
|
+
* @returns true if valid
|
|
171
|
+
*/
|
|
172
|
+
export function validModifier(modifier) {
|
|
173
|
+
if (!modifier)
|
|
174
|
+
return true; // valid to have no modifier, == none
|
|
175
|
+
// TODO-LDML: enforce illegal combinations per spec.
|
|
176
|
+
for (let sub of modifier.trim().split(',')) {
|
|
177
|
+
for (let str of sub.trim().split(' ')) {
|
|
178
|
+
if (!constants.keys_mod_map.has(str)) {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
185
|
//# sourceMappingURL=util.js.map
|
|
186
|
+
//# debugId=92c01187-7818-5f35-9ffc-8e06975000b5
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"version":3,"file":"util.js","sources":["../../../src/util/util.ts"],"sourceRoot":"","names":[],"mappings":"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","debug_id":"92c01187-7818-5f35-9ffc-8e06975000b5"}
|
package/package.json
CHANGED
|
@@ -25,15 +25,15 @@
|
|
|
25
25
|
"url": "https://github.com/keymanapp/keyman/issues"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@keymanapp/keyman-version": "17.0.
|
|
29
|
-
"@keymanapp/kmc-kmn": "17.0.
|
|
30
|
-
"@keymanapp/ldml-keyboard-constants": "17.0.
|
|
28
|
+
"@keymanapp/keyman-version": "17.0.302-beta",
|
|
29
|
+
"@keymanapp/kmc-kmn": "17.0.302-beta",
|
|
30
|
+
"@keymanapp/ldml-keyboard-constants": "17.0.302-beta",
|
|
31
31
|
"restructure": "git+https://github.com/keymanapp/dependency-restructure.git#7a188a1e26f8f36a175d95b67ffece8702363dfc",
|
|
32
32
|
"semver": "^7.5.2"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@keymanapp/developer-test-helpers": "17.0.
|
|
36
|
-
"@keymanapp/resources-gosh": "17.0.
|
|
35
|
+
"@keymanapp/developer-test-helpers": "17.0.302-beta",
|
|
36
|
+
"@keymanapp/resources-gosh": "17.0.302-beta",
|
|
37
37
|
"@types/chai": "^4.1.7",
|
|
38
38
|
"@types/mocha": "^5.2.7",
|
|
39
39
|
"@types/node": "^20.4.1",
|
|
@@ -65,5 +65,5 @@
|
|
|
65
65
|
"type": "git",
|
|
66
66
|
"url": "git+https://github.com/keymanapp/keyman.git"
|
|
67
67
|
},
|
|
68
|
-
"version": "17.0.
|
|
68
|
+
"version": "17.0.302-beta"
|
|
69
69
|
}
|