@cantoo/fontkit 2.0.4 → 2.0.5
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/dist/browser-module.mjs +28 -28
- package/dist/browser-module.mjs.map +1 -1
- package/dist/browser.cjs +28 -28
- package/dist/browser.cjs.map +1 -1
- package/dist/main.cjs +28 -28
- package/dist/main.cjs.map +1 -1
- package/dist/module.mjs +28 -28
- package/dist/module.mjs.map +1 -1
- package/package.json +2 -1
- package/src/CmapProcessor.js +2 -2
- package/src/DFont.js +5 -5
- package/src/TTFFont.js +11 -15
- package/src/TrueTypeCollection.js +10 -10
- package/src/WOFF2Font.js +0 -6
- package/src/aat/AATFeatureMap.js +21 -22
- package/src/aat/AATLayoutEngine.js +1 -1
- package/src/aat/AATLookupTable.js +2 -2
- package/src/aat/AATMorxProcessor.js +14 -14
- package/src/aat/AATStateMachine.js +3 -3
- package/src/base.js +1 -1
- package/src/cff/CFFDict.js +2 -2
- package/src/cff/CFFFont.js +1 -1
- package/src/cff/CFFIndex.js +4 -4
- package/src/cff/CFFOperand.js +1 -11
- package/src/cff/CFFPrivateDict.js +20 -20
- package/src/cff/CFFStandardStrings.js +67 -67
- package/src/cff/CFFTop.js +58 -58
- package/src/decorators.js +3 -3
- package/src/encodings.js +111 -111
- package/src/glyph/CFFGlyph.js +3 -4
- package/src/glyph/COLRGlyph.js +2 -2
- package/src/glyph/Glyph.js +4 -4
- package/src/glyph/GlyphVariationProcessor.js +23 -28
- package/src/glyph/Path.js +14 -14
- package/src/glyph/SBIXGlyph.js +2 -2
- package/src/glyph/TTFGlyph.js +31 -38
- package/src/glyph/TTFGlyphEncoder.js +26 -26
- package/src/glyph/WOFF2Glyph.js +2 -2
- package/src/layout/GlyphRun.js +3 -3
- package/src/layout/KernProcessor.js +1 -1
- package/src/layout/LayoutEngine.js +13 -14
- package/src/layout/Script.js +25 -25
- package/src/layout/UnicodeLayoutEngine.js +5 -6
- package/src/opentype/GlyphInfo.js +1 -1
- package/src/opentype/GlyphIterator.js +2 -2
- package/src/opentype/OTProcessor.js +8 -8
- package/src/opentype/ShapingPlan.js +1 -2
- package/src/opentype/shapers/ArabicShaper.js +8 -8
- package/src/opentype/shapers/DefaultShaper.js +3 -3
- package/src/opentype/shapers/HangulShaper.js +35 -35
- package/src/opentype/shapers/HebrewShaper.js +5 -5
- package/src/opentype/shapers/IndicShaper.js +20 -20
- package/src/opentype/shapers/ThaiShaper.js +15 -15
- package/src/opentype/shapers/UniversalShaper.js +2 -2
- package/src/opentype/shapers/index.js +33 -33
- package/src/opentype/shapers/indic-data.js +2 -2
- package/src/packages/unicode-properties/data-trie.js +1 -1
- package/src/packages/unicode-properties/data.js +1 -1
- package/src/packages/unicode-properties/dist/index.cjs +1 -1
- package/src/packages/unicode-properties/dist/index.cjs.map +2 -2
- package/src/packages/unicode-properties/dist/index.mjs +1 -1
- package/src/packages/unicode-properties/dist/index.mjs.map +2 -2
- package/src/packages/unicode-properties/generate.js +3 -4
- package/src/packages/unicode-properties/index.js +30 -30
- package/src/packages/unicode-properties/package.json +1 -1
- package/src/packages/unicode-trie/builder.js +18 -22
- package/src/packages/unicode-trie/dist/builder.cjs +6 -9
- package/src/packages/unicode-trie/dist/builder.cjs.map +2 -2
- package/src/packages/unicode-trie/dist/builder.mjs +6 -9
- package/src/packages/unicode-trie/dist/builder.mjs.map +2 -2
- package/src/packages/unicode-trie/dist/index.cjs.map +2 -2
- package/src/packages/unicode-trie/dist/index.mjs.map +2 -2
- package/src/packages/unicode-trie/index.js +1 -2
- package/src/packages/unicode-trie/package.json +1 -1
- package/src/packages/unicode-trie/swap.js +2 -2
- package/src/subset/Subset.js +2 -2
- package/src/subset/TTFSubset.js +5 -5
- package/src/tables/BASE.js +27 -27
- package/src/tables/COLR.js +9 -9
- package/src/tables/CPAL.js +1 -1
- package/src/tables/DSIG.js +7 -7
- package/src/tables/EBDT.js +0 -1
- package/src/tables/EBLC.js +3 -3
- package/src/tables/GDEF.js +17 -17
- package/src/tables/GPOS.js +74 -74
- package/src/tables/GSUB.js +37 -37
- package/src/tables/JSTF.js +16 -16
- package/src/tables/LTSH.js +3 -3
- package/src/tables/OS2.js +49 -49
- package/src/tables/PCLT.js +15 -15
- package/src/tables/VDMX.js +17 -17
- package/src/tables/VORG.js +7 -7
- package/src/tables/WOFF2Directory.js +2 -2
- package/src/tables/WOFFDirectory.js +18 -18
- package/src/tables/aat.js +2 -2
- package/src/tables/cmap.js +63 -63
- package/src/tables/directory.js +14 -14
- package/src/tables/gasp.js +5 -5
- package/src/tables/glyf.js +1 -1
- package/src/tables/hdmx.js +7 -7
- package/src/tables/head.js +16 -16
- package/src/tables/hhea.js +14 -14
- package/src/tables/hmtx.js +2 -2
- package/src/tables/index.js +0 -5
- package/src/tables/just.js +1 -1
- package/src/tables/kern.js +42 -42
- package/src/tables/loca.js +2 -2
- package/src/tables/maxp.js +15 -15
- package/src/tables/morx.js +16 -16
- package/src/tables/name.js +18 -18
- package/src/tables/opentype.js +91 -91
- package/src/tables/post.js +10 -10
- package/src/tables/variations.js +6 -6
- package/src/tables/vhea.js +14 -14
- package/src/tables/vmtx.js +3 -3
|
@@ -38,7 +38,7 @@ export default class HangulShaper extends DefaultShaper {
|
|
|
38
38
|
let code = glyph.codePoints[0];
|
|
39
39
|
let type = getType(code);
|
|
40
40
|
|
|
41
|
-
[
|
|
41
|
+
[action, state] = STATE_TABLE[state][type];
|
|
42
42
|
|
|
43
43
|
switch (action) {
|
|
44
44
|
case DECOMPOSE:
|
|
@@ -69,46 +69,46 @@ export default class HangulShaper extends DefaultShaper {
|
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
const HANGUL_BASE
|
|
73
|
-
const HANGUL_END
|
|
72
|
+
const HANGUL_BASE = 0xac00;
|
|
73
|
+
const HANGUL_END = 0xd7a4;
|
|
74
74
|
const HANGUL_COUNT = HANGUL_END - HANGUL_BASE + 1;
|
|
75
|
-
const L_BASE
|
|
76
|
-
const V_BASE
|
|
77
|
-
const T_BASE
|
|
75
|
+
const L_BASE = 0x1100; // lead
|
|
76
|
+
const V_BASE = 0x1161; // vowel
|
|
77
|
+
const T_BASE = 0x11a7; // trail
|
|
78
78
|
const L_COUNT = 19;
|
|
79
79
|
const V_COUNT = 21;
|
|
80
80
|
const T_COUNT = 28;
|
|
81
|
-
const L_END
|
|
82
|
-
const V_END
|
|
83
|
-
const T_END
|
|
81
|
+
const L_END = L_BASE + L_COUNT - 1;
|
|
82
|
+
const V_END = V_BASE + V_COUNT - 1;
|
|
83
|
+
const T_END = T_BASE + T_COUNT - 1;
|
|
84
84
|
const DOTTED_CIRCLE = 0x25cc;
|
|
85
85
|
|
|
86
|
-
const isL
|
|
87
|
-
const isV
|
|
88
|
-
const isT
|
|
86
|
+
const isL = code => 0x1100 <= code && code <= 0x115f || 0xa960 <= code && code <= 0xa97c;
|
|
87
|
+
const isV = code => 0x1160 <= code && code <= 0x11a7 || 0xd7b0 <= code && code <= 0xd7c6;
|
|
88
|
+
const isT = code => 0x11a8 <= code && code <= 0x11ff || 0xd7cb <= code && code <= 0xd7fb;
|
|
89
89
|
const isTone = code => 0x302e <= code && code <= 0x302f;
|
|
90
|
-
const isLVT
|
|
91
|
-
const isLV
|
|
90
|
+
const isLVT = code => HANGUL_BASE <= code && code <= HANGUL_END;
|
|
91
|
+
const isLV = code => (code - HANGUL_BASE) < HANGUL_COUNT && (code - HANGUL_BASE) % T_COUNT === 0;
|
|
92
92
|
const isCombiningL = code => L_BASE <= code && code <= L_END;
|
|
93
93
|
const isCombiningV = code => V_BASE <= code && code <= V_END;
|
|
94
94
|
const isCombiningT = code => T_BASE + 1 && 1 <= code && code <= T_END;
|
|
95
95
|
|
|
96
96
|
// Character categories
|
|
97
|
-
const X
|
|
98
|
-
const L
|
|
99
|
-
const V
|
|
100
|
-
const T
|
|
101
|
-
const LV
|
|
97
|
+
const X = 0; // Other character
|
|
98
|
+
const L = 1; // Leading consonant
|
|
99
|
+
const V = 2; // Medial vowel
|
|
100
|
+
const T = 3; // Trailing consonant
|
|
101
|
+
const LV = 4; // Composed <LV> syllable
|
|
102
102
|
const LVT = 5; // Composed <LVT> syllable
|
|
103
|
-
const M
|
|
103
|
+
const M = 6; // Tone mark
|
|
104
104
|
|
|
105
105
|
// This function classifies a character using the above categories.
|
|
106
106
|
function getType(code) {
|
|
107
|
-
if (isL(code))
|
|
108
|
-
if (isV(code))
|
|
109
|
-
if (isT(code))
|
|
110
|
-
if (isLV(code))
|
|
111
|
-
if (isLVT(code))
|
|
107
|
+
if (isL(code)) { return L; }
|
|
108
|
+
if (isV(code)) { return V; }
|
|
109
|
+
if (isT(code)) { return T; }
|
|
110
|
+
if (isLV(code)) { return LV; }
|
|
111
|
+
if (isLVT(code)) { return LVT; }
|
|
112
112
|
if (isTone(code)) { return M; }
|
|
113
113
|
return X;
|
|
114
114
|
}
|
|
@@ -116,25 +116,25 @@ function getType(code) {
|
|
|
116
116
|
// State machine actions
|
|
117
117
|
const NO_ACTION = 0;
|
|
118
118
|
const DECOMPOSE = 1;
|
|
119
|
-
const COMPOSE
|
|
119
|
+
const COMPOSE = 2;
|
|
120
120
|
const TONE_MARK = 4;
|
|
121
|
-
const INVALID
|
|
121
|
+
const INVALID = 5;
|
|
122
122
|
|
|
123
123
|
// Build a state machine that accepts valid syllables, and applies actions along the way.
|
|
124
124
|
// The logic this is implementing is documented at the top of the file.
|
|
125
125
|
const STATE_TABLE = [
|
|
126
126
|
// X L V T LV LVT M
|
|
127
127
|
// State 0: start state
|
|
128
|
-
[
|
|
128
|
+
[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [INVALID, 0]],
|
|
129
129
|
|
|
130
130
|
// State 1: <L>
|
|
131
|
-
[
|
|
131
|
+
[[NO_ACTION, 0], [NO_ACTION, 1], [COMPOSE, 2], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [INVALID, 0]],
|
|
132
132
|
|
|
133
133
|
// State 2: <L,V> or <LV>
|
|
134
|
-
[
|
|
134
|
+
[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [COMPOSE, 3], [DECOMPOSE, 2], [DECOMPOSE, 3], [TONE_MARK, 0]],
|
|
135
135
|
|
|
136
136
|
// State 3: <L,V,T> or <LVT>
|
|
137
|
-
[
|
|
137
|
+
[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [TONE_MARK, 0]]
|
|
138
138
|
];
|
|
139
139
|
|
|
140
140
|
function getGlyph(font, code, features) {
|
|
@@ -152,9 +152,9 @@ function decompose(glyphs, i, font) {
|
|
|
152
152
|
let v = V_BASE + s % V_COUNT;
|
|
153
153
|
|
|
154
154
|
// Don't decompose if all of the components are not available
|
|
155
|
-
if (!font.hasGlyphForCodePoint(l)
|
|
156
|
-
|
|
157
|
-
|
|
155
|
+
if (!font.hasGlyphForCodePoint(l)
|
|
156
|
+
|| !font.hasGlyphForCodePoint(v)
|
|
157
|
+
|| (t !== T_BASE && !font.hasGlyphForCodePoint(t))) {
|
|
158
158
|
return i;
|
|
159
159
|
}
|
|
160
160
|
|
|
@@ -166,7 +166,7 @@ function decompose(glyphs, i, font) {
|
|
|
166
166
|
let vjmo = getGlyph(font, v, glyph.features);
|
|
167
167
|
vjmo.features.vjmo = true;
|
|
168
168
|
|
|
169
|
-
let insert = [
|
|
169
|
+
let insert = [ljmo, vjmo];
|
|
170
170
|
|
|
171
171
|
if (t > T_BASE) {
|
|
172
172
|
let tjmo = getGlyph(font, t, glyph.features);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {getCombiningClass} from '../../packages/unicode-properties/index.js';
|
|
1
|
+
import { getCombiningClass } from '../../packages/unicode-properties/index.js';
|
|
2
2
|
import DefaultShaper from './DefaultShaper';
|
|
3
3
|
import GlyphInfo from '../GlyphInfo';
|
|
4
4
|
|
|
@@ -56,7 +56,7 @@ function composeHebrewPair(a, b) {
|
|
|
56
56
|
// Greedily compose adjacent pairs when the font has the glyph
|
|
57
57
|
// (e.g. SHIN + SHIN_DOT → FB2A, then + DAGESH → FB2C).
|
|
58
58
|
function composeHebrew(glyphs, font) {
|
|
59
|
-
for (let i = 0; i + 1 < glyphs.length;
|
|
59
|
+
for (let i = 0; i + 1 < glyphs.length;) {
|
|
60
60
|
let composed = glyphs[i].codePoints[0];
|
|
61
61
|
let consumed = 1;
|
|
62
62
|
while (i + consumed < glyphs.length) {
|
|
@@ -83,9 +83,9 @@ function reorderMarksHebrew(glyphs) {
|
|
|
83
83
|
let c1 = getCombiningClass(glyphs[i - 1].codePoints[0]);
|
|
84
84
|
let c2 = getCombiningClass(glyphs[i].codePoints[0]);
|
|
85
85
|
if (
|
|
86
|
-
(c0 === 'CCC17' || c0 === 'CCC18')
|
|
87
|
-
(c1 === 'CCC10' || c1 === 'CCC14')
|
|
88
|
-
(c2 === 'CCC22' || c2 === 'Below')
|
|
86
|
+
(c0 === 'CCC17' || c0 === 'CCC18')
|
|
87
|
+
&& (c1 === 'CCC10' || c1 === 'CCC14')
|
|
88
|
+
&& (c2 === 'CCC22' || c2 === 'Below')
|
|
89
89
|
) {
|
|
90
90
|
[glyphs[i - 1], glyphs[i]] = [glyphs[i], glyphs[i - 1]];
|
|
91
91
|
break;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import DefaultShaper from './DefaultShaper';
|
|
2
2
|
import StateMachine from 'dfa';
|
|
3
3
|
import UnicodeTrie from '../../packages/unicode-trie/index.js';
|
|
4
|
-
import {getCategory} from '../../packages/unicode-properties/index.js';
|
|
4
|
+
import { getCategory } from '../../packages/unicode-properties/index.js';
|
|
5
5
|
import * as Script from '../../layout/Script';
|
|
6
6
|
import GlyphInfo from '../GlyphInfo';
|
|
7
7
|
import indicMachine from './indic.json';
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
import { decodeBase64 } from '../../utils';
|
|
18
18
|
import indicTrie from './indic.trie';
|
|
19
19
|
|
|
20
|
-
const {decompositions} = useData;
|
|
20
|
+
const { decompositions } = useData;
|
|
21
21
|
const trie = new UnicodeTrie(decodeBase64(indicTrie));
|
|
22
22
|
const stateMachine = new StateMachine(indicMachine);
|
|
23
23
|
|
|
@@ -69,7 +69,7 @@ export default class IndicShaper extends DefaultShaper {
|
|
|
69
69
|
let codepoint = glyphs[i].codePoints[0];
|
|
70
70
|
let d = INDIC_DECOMPOSITIONS[codepoint] || decompositions[codepoint];
|
|
71
71
|
if (d) {
|
|
72
|
-
let decomposed = d.map(c => {
|
|
72
|
+
let decomposed = d.map((c) => {
|
|
73
73
|
let g = plan.font.glyphForCodePoint(c);
|
|
74
74
|
return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);
|
|
75
75
|
});
|
|
@@ -145,7 +145,7 @@ function isHalantOrCoeng(glyph) {
|
|
|
145
145
|
|
|
146
146
|
function wouldSubstitute(glyphs, feature) {
|
|
147
147
|
for (let glyph of glyphs) {
|
|
148
|
-
glyph.features = {[feature]: true};
|
|
148
|
+
glyph.features = { [feature]: true };
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
let GSUB = glyphs[0]._font._layoutEngine.engine.GSUBProcessor;
|
|
@@ -183,7 +183,7 @@ function initialReordering(font, glyphs, plan) {
|
|
|
183
183
|
}
|
|
184
184
|
|
|
185
185
|
for (let start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {
|
|
186
|
-
let {syllableType} = glyphs[start].shaperInfo;
|
|
186
|
+
let { syllableType } = glyphs[start].shaperInfo;
|
|
187
187
|
|
|
188
188
|
if (syllableType === 'symbol_cluster' || syllableType === 'non_indic_cluster') {
|
|
189
189
|
continue;
|
|
@@ -224,12 +224,12 @@ function initialReordering(font, glyphs, plan) {
|
|
|
224
224
|
// If the syllable starts with Ra + Halant (in a script that has Reph)
|
|
225
225
|
// and has more than one consonant, Ra is excluded from candidates for
|
|
226
226
|
// base consonants.
|
|
227
|
-
if (indicConfig.rephPos !== POSITIONS.Ra_To_Become_Reph
|
|
228
|
-
features.rphf
|
|
229
|
-
start + 3 <= end && (
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
227
|
+
if (indicConfig.rephPos !== POSITIONS.Ra_To_Become_Reph
|
|
228
|
+
&& features.rphf
|
|
229
|
+
&& start + 3 <= end && (
|
|
230
|
+
(indicConfig.rephMode === 'Implicit' && !isJoiner(glyphs[start + 2]))
|
|
231
|
+
|| (indicConfig.rephMode === 'Explicit' && glyphs[start + 2].shaperInfo.category === CATEGORIES.ZWJ)
|
|
232
|
+
)
|
|
233
233
|
) {
|
|
234
234
|
// See if it matches the 'rphf' feature.
|
|
235
235
|
let g = [glyphs[start].copy(), glyphs[start + 1].copy(), glyphs[start + 2].copy()];
|
|
@@ -510,9 +510,9 @@ function initialReordering(font, glyphs, plan) {
|
|
|
510
510
|
//
|
|
511
511
|
// Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915
|
|
512
512
|
for (let i = start; i + 1 < base; i++) {
|
|
513
|
-
if (glyphs[i].shaperInfo.category === CATEGORIES.Ra
|
|
514
|
-
glyphs[i + 1].shaperInfo.category === CATEGORIES.H
|
|
515
|
-
(i + 1 === base || glyphs[i + 2].shaperInfo.category === CATEGORIES.ZWJ)
|
|
513
|
+
if (glyphs[i].shaperInfo.category === CATEGORIES.Ra
|
|
514
|
+
&& glyphs[i + 1].shaperInfo.category === CATEGORIES.H
|
|
515
|
+
&& (i + 1 === base || glyphs[i + 2].shaperInfo.category === CATEGORIES.ZWJ)
|
|
516
516
|
) {
|
|
517
517
|
glyphs[i].features.blwf = true;
|
|
518
518
|
glyphs[i + 1].features.blwf = true;
|
|
@@ -715,9 +715,9 @@ function finalReordering(font, glyphs, plan) {
|
|
|
715
715
|
// - If repha is encoded separately and in the logical position, we should only
|
|
716
716
|
// move it if it did NOT ligate. If it ligated, it's probably the font trying
|
|
717
717
|
// to make it work without the reordering.
|
|
718
|
-
if (start + 1 < end
|
|
719
|
-
glyphs[start].shaperInfo.position === POSITIONS.Ra_To_Become_Reph
|
|
720
|
-
(glyphs[start].shaperInfo.category === CATEGORIES.Repha) !== (glyphs[start].isLigated && !glyphs[start].isMultiplied)
|
|
718
|
+
if (start + 1 < end
|
|
719
|
+
&& glyphs[start].shaperInfo.position === POSITIONS.Ra_To_Become_Reph
|
|
720
|
+
&& (glyphs[start].shaperInfo.category === CATEGORIES.Repha) !== (glyphs[start].isLigated && !glyphs[start].isMultiplied)
|
|
721
721
|
) {
|
|
722
722
|
let newRephPos;
|
|
723
723
|
let rephPos = indicConfig.rephPos;
|
|
@@ -838,9 +838,9 @@ function finalReordering(font, glyphs, plan) {
|
|
|
838
838
|
if (tryPref && base + 1 < end) {
|
|
839
839
|
for (let i = base + 1; i < end; i++) {
|
|
840
840
|
if (glyphs[i].features.pref) {
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
841
|
+
// 1. Only reorder a glyph produced by substitution during application
|
|
842
|
+
// of the <pref> feature. (Note that a font may shape a Ra consonant with
|
|
843
|
+
// the feature generally but block it in certain contexts.)
|
|
844
844
|
|
|
845
845
|
// Note: We just check that something got substituted. We don't check that
|
|
846
846
|
// the <pref> feature actually did it...
|
|
@@ -89,7 +89,7 @@ const NOT_CONSONANT = 4;
|
|
|
89
89
|
|
|
90
90
|
const AV = 0; // above-base vowel/mark
|
|
91
91
|
const BV = 1; // below-base vowel/mark
|
|
92
|
-
const T = 2;
|
|
92
|
+
const T = 2; // tone mark
|
|
93
93
|
const NOT_MARK = 3;
|
|
94
94
|
|
|
95
95
|
function getConsonantType(u) {
|
|
@@ -102,10 +102,10 @@ function getConsonantType(u) {
|
|
|
102
102
|
|
|
103
103
|
function getMarkType(u) {
|
|
104
104
|
if (
|
|
105
|
-
u === 0x0E31
|
|
106
|
-
(u >= 0x0E34 && u <= 0x0E37)
|
|
107
|
-
u === 0x0E47
|
|
108
|
-
(u >= 0x0E4D && u <= 0x0E4E)
|
|
105
|
+
u === 0x0E31
|
|
106
|
+
|| (u >= 0x0E34 && u <= 0x0E37)
|
|
107
|
+
|| u === 0x0E47
|
|
108
|
+
|| (u >= 0x0E4D && u <= 0x0E4E)
|
|
109
109
|
) {
|
|
110
110
|
return AV;
|
|
111
111
|
}
|
|
@@ -118,19 +118,19 @@ const T0 = 0, T1 = 1, T2 = 2, T3 = 3;
|
|
|
118
118
|
const ABOVE_START_STATE = [T0, T1, T0, T0, T3]; // NC AC RC DC NOT_CONSONANT
|
|
119
119
|
const ABOVE_STATE_MACHINE = [
|
|
120
120
|
// AV BV T
|
|
121
|
-
[[NOP, T3], [NOP, T0], [SD, T3]],
|
|
122
|
-
[[SL, T2],
|
|
123
|
-
[[NOP, T3], [NOP, T2], [SL, T3]],
|
|
124
|
-
[[NOP, T3], [NOP, T3], [NOP, T3]]
|
|
121
|
+
[[NOP, T3], [NOP, T0], [SD, T3]], // T0
|
|
122
|
+
[[SL, T2], [NOP, T1], [SDL, T2]], // T1
|
|
123
|
+
[[NOP, T3], [NOP, T2], [SL, T3]], // T2
|
|
124
|
+
[[NOP, T3], [NOP, T3], [NOP, T3]] // T3
|
|
125
125
|
];
|
|
126
126
|
|
|
127
127
|
const B0 = 0, B1 = 1, B2 = 2;
|
|
128
128
|
const BELOW_START_STATE = [B0, B0, B1, B2, B2];
|
|
129
129
|
const BELOW_STATE_MACHINE = [
|
|
130
130
|
// AV BV T
|
|
131
|
-
[[NOP, B0], [NOP, B2], [NOP, B0]],
|
|
132
|
-
[[NOP, B1], [RD, B2],
|
|
133
|
-
[[NOP, B2], [SD, B2],
|
|
131
|
+
[[NOP, B0], [NOP, B2], [NOP, B0]], // B0
|
|
132
|
+
[[NOP, B1], [RD, B2], [NOP, B1]], // B1
|
|
133
|
+
[[NOP, B2], [SD, B2], [NOP, B2]] // B2
|
|
134
134
|
];
|
|
135
135
|
|
|
136
136
|
// [original, Windows PUA, Mac PUA] per action
|
|
@@ -143,7 +143,7 @@ const PUA_MAPPINGS = {
|
|
|
143
143
|
[0x0E4C, 0xF70E, 0xF897], // THANTHAKHAT
|
|
144
144
|
[0x0E38, 0xF718, 0xF89B], // SARA U
|
|
145
145
|
[0x0E39, 0xF719, 0xF89C], // SARA UU
|
|
146
|
-
[0x0E3A, 0xF71A, 0xF89D]
|
|
146
|
+
[0x0E3A, 0xF71A, 0xF89D] // PHINTHU
|
|
147
147
|
],
|
|
148
148
|
[SDL]: [
|
|
149
149
|
[0x0E48, 0xF705, 0xF88C],
|
|
@@ -164,11 +164,11 @@ const PUA_MAPPINGS = {
|
|
|
164
164
|
[0x0E36, 0xF703, 0xF887], // SARA UE
|
|
165
165
|
[0x0E37, 0xF704, 0xF888], // SARA UEE
|
|
166
166
|
[0x0E47, 0xF712, 0xF889], // MAITAIKHU
|
|
167
|
-
[0x0E4D, 0xF711, 0xF899]
|
|
167
|
+
[0x0E4D, 0xF711, 0xF899] // NIKHAHIT
|
|
168
168
|
],
|
|
169
169
|
[RD]: [
|
|
170
170
|
[0x0E0D, 0xF70F, 0xF89A], // YO YING
|
|
171
|
-
[0x0E10, 0xF700, 0xF89E]
|
|
171
|
+
[0x0E10, 0xF700, 0xF89E] // THO THAN
|
|
172
172
|
]
|
|
173
173
|
};
|
|
174
174
|
|
|
@@ -6,7 +6,7 @@ import useData from './use.json';
|
|
|
6
6
|
import { decodeBase64 } from '../../utils';
|
|
7
7
|
import useTrie from './use.trie';
|
|
8
8
|
|
|
9
|
-
const {categories, decompositions} = useData;
|
|
9
|
+
const { categories, decompositions } = useData;
|
|
10
10
|
const trie = new UnicodeTrie(decodeBase64(useTrie));
|
|
11
11
|
const stateMachine = new StateMachine(useData);
|
|
12
12
|
|
|
@@ -49,7 +49,7 @@ export default class UniversalShaper extends DefaultShaper {
|
|
|
49
49
|
for (let i = glyphs.length - 1; i >= 0; i--) {
|
|
50
50
|
let codepoint = glyphs[i].codePoints[0];
|
|
51
51
|
if (decompositions[codepoint]) {
|
|
52
|
-
let decomposed = decompositions[codepoint].map(c => {
|
|
52
|
+
let decomposed = decompositions[codepoint].map((c) => {
|
|
53
53
|
let g = plan.font.glyphForCodePoint(c);
|
|
54
54
|
return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);
|
|
55
55
|
});
|
|
@@ -7,41 +7,41 @@ import ThaiShaper from './ThaiShaper';
|
|
|
7
7
|
import UniversalShaper from './UniversalShaper';
|
|
8
8
|
|
|
9
9
|
const SHAPERS = {
|
|
10
|
-
arab: ArabicShaper,
|
|
11
|
-
mong: ArabicShaper,
|
|
12
|
-
syrc: ArabicShaper,
|
|
13
|
-
'nko ': ArabicShaper,
|
|
14
|
-
phag: ArabicShaper,
|
|
15
|
-
mand: ArabicShaper,
|
|
16
|
-
mani: ArabicShaper,
|
|
17
|
-
phlp: ArabicShaper,
|
|
10
|
+
arab: ArabicShaper, // Arabic
|
|
11
|
+
mong: ArabicShaper, // Mongolian
|
|
12
|
+
syrc: ArabicShaper, // Syriac
|
|
13
|
+
'nko ': ArabicShaper, // N'Ko
|
|
14
|
+
phag: ArabicShaper, // Phags Pa
|
|
15
|
+
mand: ArabicShaper, // Mandaic
|
|
16
|
+
mani: ArabicShaper, // Manichaean
|
|
17
|
+
phlp: ArabicShaper, // Psalter Pahlavi
|
|
18
18
|
|
|
19
|
-
hang: HangulShaper,
|
|
19
|
+
hang: HangulShaper, // Hangul
|
|
20
20
|
|
|
21
|
-
hebr: HebrewShaper,
|
|
21
|
+
hebr: HebrewShaper, // Hebrew
|
|
22
22
|
|
|
23
|
-
bng2: IndicShaper,
|
|
24
|
-
beng: IndicShaper,
|
|
25
|
-
dev2: IndicShaper,
|
|
26
|
-
deva: IndicShaper,
|
|
27
|
-
gjr2: IndicShaper,
|
|
28
|
-
gujr: IndicShaper,
|
|
29
|
-
guru: IndicShaper,
|
|
30
|
-
gur2: IndicShaper,
|
|
31
|
-
knda: IndicShaper,
|
|
32
|
-
knd2: IndicShaper,
|
|
33
|
-
mlm2: IndicShaper,
|
|
34
|
-
mlym: IndicShaper,
|
|
35
|
-
ory2: IndicShaper,
|
|
36
|
-
orya: IndicShaper,
|
|
37
|
-
taml: IndicShaper,
|
|
38
|
-
tml2: IndicShaper,
|
|
39
|
-
telu: IndicShaper,
|
|
40
|
-
tel2: IndicShaper,
|
|
41
|
-
khmr: IndicShaper,
|
|
23
|
+
bng2: IndicShaper, // Bengali
|
|
24
|
+
beng: IndicShaper, // Bengali
|
|
25
|
+
dev2: IndicShaper, // Devanagari
|
|
26
|
+
deva: IndicShaper, // Devanagari
|
|
27
|
+
gjr2: IndicShaper, // Gujarati
|
|
28
|
+
gujr: IndicShaper, // Gujarati
|
|
29
|
+
guru: IndicShaper, // Gurmukhi
|
|
30
|
+
gur2: IndicShaper, // Gurmukhi
|
|
31
|
+
knda: IndicShaper, // Kannada
|
|
32
|
+
knd2: IndicShaper, // Kannada
|
|
33
|
+
mlm2: IndicShaper, // Malayalam
|
|
34
|
+
mlym: IndicShaper, // Malayalam
|
|
35
|
+
ory2: IndicShaper, // Oriya
|
|
36
|
+
orya: IndicShaper, // Oriya
|
|
37
|
+
taml: IndicShaper, // Tamil
|
|
38
|
+
tml2: IndicShaper, // Tamil
|
|
39
|
+
telu: IndicShaper, // Telugu
|
|
40
|
+
tel2: IndicShaper, // Telugu
|
|
41
|
+
khmr: IndicShaper, // Khmer
|
|
42
42
|
|
|
43
|
-
thai: ThaiShaper,
|
|
44
|
-
'lao ': ThaiShaper,
|
|
43
|
+
thai: ThaiShaper, // Thai
|
|
44
|
+
'lao ': ThaiShaper, // Lao (4-char OT tag with trailing space)
|
|
45
45
|
|
|
46
46
|
bali: UniversalShaper, // Balinese
|
|
47
47
|
batk: UniversalShaper, // Batak
|
|
@@ -89,8 +89,8 @@ const SHAPERS = {
|
|
|
89
89
|
tfng: UniversalShaper, // Tifinagh
|
|
90
90
|
tirh: UniversalShaper, // Tirhuta
|
|
91
91
|
|
|
92
|
-
latn: DefaultShaper,
|
|
93
|
-
DFLT: DefaultShaper
|
|
92
|
+
latn: DefaultShaper, // Latin
|
|
93
|
+
DFLT: DefaultShaper // Default
|
|
94
94
|
};
|
|
95
95
|
|
|
96
96
|
export function choose(script) {
|
|
@@ -14,11 +14,11 @@ export const CATEGORIES = {
|
|
|
14
14
|
A: 1 << 10,
|
|
15
15
|
Placeholder: 1 << 11,
|
|
16
16
|
Dotted_Circle: 1 << 12,
|
|
17
|
-
RS: 1 << 13,
|
|
17
|
+
RS: 1 << 13, // Register Shifter, used in Khmer OT spec.
|
|
18
18
|
Coeng: 1 << 14, // Khmer-style Virama.
|
|
19
19
|
Repha: 1 << 15, // Atomically-encoded logical or visual repha.
|
|
20
20
|
Ra: 1 << 16,
|
|
21
|
-
CM: 1 << 17,
|
|
21
|
+
CM: 1 << 17, // Consonant-Medial.
|
|
22
22
|
Symbol: 1 << 18 // Avagraha, etc that take marks (SM,A,VD).
|
|
23
23
|
};
|
|
24
24
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export default "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";
|
|
1
|
+
export default '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';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export default {
|
|
1
|
+
export default { categories: ['Cc', 'Zs', 'Po', 'Sc', 'Ps', 'Pe', 'Sm', 'Pd', 'Nd', 'Lu', 'Sk', 'Pc', 'Ll', 'So', 'Lo', 'Pi', 'Cf', 'No', 'Pf', 'Lt', 'Lm', 'Mn', 'Me', 'Mc', 'Nl', 'Zl', 'Zp', 'Cs', 'Co'], combiningClasses: ['Not_Reordered', 'Above', 'Above_Right', 'Below', 'Attached_Above_Right', 'Attached_Below', 'Overlay', 'Iota_Subscript', 'Double_Below', 'Double_Above', 'Below_Right', 'Above_Left', 'CCC10', 'CCC11', 'CCC12', 'CCC13', 'CCC14', 'CCC15', 'CCC16', 'CCC17', 'CCC18', 'CCC19', 'CCC20', 'CCC21', 'CCC22', 'CCC23', 'CCC24', 'CCC25', 'CCC30', 'CCC31', 'CCC32', 'CCC27', 'CCC28', 'CCC29', 'CCC33', 'CCC34', 'CCC35', 'CCC36', 'Nukta', 'Virama', 'CCC84', 'CCC91', 'CCC103', 'CCC107', 'CCC118', 'CCC122', 'CCC129', 'CCC130', 'CCC132', 'Attached_Above', 'Below_Left', 'Left', 'Kana_Voicing', 'CCC26', 'Right'], scripts: ['Common', 'Latin', 'Bopomofo', 'Inherited', 'Greek', 'Coptic', 'Cyrillic', 'Armenian', 'Hebrew', 'Arabic', 'Syriac', 'Thaana', 'Nko', 'Samaritan', 'Mandaic', 'Devanagari', 'Bengali', 'Gurmukhi', 'Gujarati', 'Oriya', 'Tamil', 'Telugu', 'Kannada', 'Malayalam', 'Sinhala', 'Thai', 'Lao', 'Tibetan', 'Myanmar', 'Georgian', 'Hangul', 'Ethiopic', 'Cherokee', 'Canadian_Aboriginal', 'Ogham', 'Runic', 'Tagalog', 'Hanunoo', 'Buhid', 'Tagbanwa', 'Khmer', 'Mongolian', 'Limbu', 'Tai_Le', 'New_Tai_Lue', 'Buginese', 'Tai_Tham', 'Balinese', 'Sundanese', 'Batak', 'Lepcha', 'Ol_Chiki', 'Braille', 'Glagolitic', 'Tifinagh', 'Han', 'Hiragana', 'Katakana', 'Yi', 'Lisu', 'Vai', 'Bamum', 'Syloti_Nagri', 'Phags_Pa', 'Saurashtra', 'Kayah_Li', 'Rejang', 'Javanese', 'Cham', 'Tai_Viet', 'Meetei_Mayek', 'null', 'Linear_B', 'Lycian', 'Carian', 'Old_Italic', 'Gothic', 'Old_Permic', 'Ugaritic', 'Old_Persian', 'Deseret', 'Shavian', 'Osmanya', 'Osage', 'Elbasan', 'Caucasian_Albanian', 'Linear_A', 'Cypriot', 'Imperial_Aramaic', 'Palmyrene', 'Nabataean', 'Hatran', 'Phoenician', 'Lydian', 'Meroitic_Hieroglyphs', 'Meroitic_Cursive', 'Kharoshthi', 'Old_South_Arabian', 'Old_North_Arabian', 'Manichaean', 'Avestan', 'Inscriptional_Parthian', 'Inscriptional_Pahlavi', 'Psalter_Pahlavi', 'Old_Turkic', 'Old_Hungarian', 'Hanifi_Rohingya', 'Old_Sogdian', 'Sogdian', 'Elymaic', 'Brahmi', 'Kaithi', 'Sora_Sompeng', 'Chakma', 'Mahajani', 'Sharada', 'Khojki', 'Multani', 'Khudawadi', 'Grantha', 'Newa', 'Tirhuta', 'Siddham', 'Modi', 'Takri', 'Ahom', 'Dogra', 'Warang_Citi', 'Nandinagari', 'Zanabazar_Square', 'Soyombo', 'Pau_Cin_Hau', 'Bhaiksuki', 'Marchen', 'Masaram_Gondi', 'Gunjala_Gondi', 'Makasar', 'Cuneiform', 'Egyptian_Hieroglyphs', 'Anatolian_Hieroglyphs', 'Mro', 'Bassa_Vah', 'Pahawh_Hmong', 'Medefaidrin', 'Miao', 'Tangut', 'Nushu', 'Duployan', 'SignWriting', 'Nyiakeng_Puachue_Hmong', 'Wancho', 'Mende_Kikakui', 'Adlam'], eaw: ['N', 'Na', 'A', 'W', 'H', 'F'] };
|