Skip to content

Commit 144669f

Browse files
authored
feat: add ArabicShaping table (Joining_Type) (#102)
Fixes #101.
1 parent 104c1a5 commit 144669f

5 files changed

Lines changed: 89 additions & 0 deletions

File tree

‎data/resources.mjs‎

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ const resources = [
115115
'special-casing':
116116
'https://unicode.org/Public/3.2-Update/SpecialCasing-3.2.0.txt',
117117
'line-break': 'https://unicode.org/Public/3.2-Update/LineBreak-3.2.0.txt',
118+
'arabic-shaping':
119+
'https://unicode.org/Public/3.2-Update/ArabicShaping-3.2.0.txt',
118120
},
119121
{
120122
version: '4.0.0',
@@ -135,6 +137,8 @@ const resources = [
135137
'special-casing':
136138
'https://unicode.org/Public/4.0-Update/SpecialCasing-4.0.0.txt',
137139
'line-break': 'https://unicode.org/Public/4.0-Update/LineBreak-4.0.0.txt',
140+
'arabic-shaping':
141+
'https://unicode.org/Public/4.0-Update/ArabicShaping-4.0.0.txt',
138142
},
139143
{
140144
version: '4.0.1',
@@ -155,6 +159,8 @@ const resources = [
155159
'special-casing':
156160
'https://unicode.org/Public/4.0-Update1/SpecialCasing-4.0.1.txt',
157161
'line-break': 'https://unicode.org/Public/4.0-Update1/LineBreak-4.0.1.txt',
162+
'arabic-shaping':
163+
'https://unicode.org/Public/4.0-Update1/ArabicShaping-4.0.1.txt',
158164
},
159165
{
160166
version: '4.1.0',
@@ -176,6 +182,8 @@ const resources = [
176182
'special-casing': 'https://unicode.org/Public/4.1.0/ucd/SpecialCasing.txt',
177183
'bidi-mirroring': 'https://unicode.org/Public/4.1.0/ucd/BidiMirroring.txt',
178184
'line-break': 'https://unicode.org/Public/4.1.0/ucd/LineBreak.txt',
185+
'arabic-shaping':
186+
'https://unicode.org/Public/4.1.0/ucd/ArabicShaping.txt',
179187
'grapheme-cluster-break':
180188
'https://unicode.org/Public/4.1.0/ucd/auxiliary/GraphemeBreakProperty.txt',
181189
'word-break':
@@ -203,6 +211,8 @@ const resources = [
203211
'special-casing': 'https://unicode.org/Public/5.0.0/ucd/SpecialCasing.txt',
204212
'bidi-mirroring': 'https://unicode.org/Public/5.0.0/ucd/BidiMirroring.txt',
205213
'line-break': 'https://unicode.org/Public/5.0.0/ucd/LineBreak.txt',
214+
'arabic-shaping':
215+
'https://unicode.org/Public/5.0.0/ucd/ArabicShaping.txt',
206216
'grapheme-cluster-break':
207217
'https://unicode.org/Public/5.0.0/ucd/auxiliary/GraphemeBreakProperty.txt',
208218
'word-break':
@@ -230,6 +240,8 @@ const resources = [
230240
'special-casing': 'https://unicode.org/Public/5.1.0/ucd/SpecialCasing.txt',
231241
'bidi-mirroring': 'https://unicode.org/Public/5.1.0/ucd/BidiMirroring.txt',
232242
'line-break': 'https://unicode.org/Public/5.1.0/ucd/LineBreak.txt',
243+
'arabic-shaping':
244+
'https://unicode.org/Public/5.1.0/ucd/ArabicShaping.txt',
233245
'grapheme-cluster-break':
234246
'https://unicode.org/Public/5.1.0/ucd/auxiliary/GraphemeBreakProperty.txt',
235247
'word-break':
@@ -257,6 +269,8 @@ const resources = [
257269
'special-casing': 'https://unicode.org/Public/5.2.0/ucd/SpecialCasing.txt',
258270
'bidi-mirroring': 'https://unicode.org/Public/5.2.0/ucd/BidiMirroring.txt',
259271
'line-break': 'https://unicode.org/Public/5.2.0/ucd/LineBreak.txt',
272+
'arabic-shaping':
273+
'https://unicode.org/Public/5.2.0/ucd/ArabicShaping.txt',
260274
'grapheme-cluster-break':
261275
'https://unicode.org/Public/5.2.0/ucd/auxiliary/GraphemeBreakProperty.txt',
262276
'word-break':
@@ -290,6 +304,8 @@ const resources = [
290304
'indic-syllabic-category':
291305
'https://unicode.org/Public/6.0.0/ucd/IndicSyllabicCategory.txt',
292306
'line-break': 'https://unicode.org/Public/6.0.0/ucd/LineBreak.txt',
307+
'arabic-shaping':
308+
'https://unicode.org/Public/6.0.0/ucd/ArabicShaping.txt',
293309
'grapheme-cluster-break':
294310
'https://unicode.org/Public/6.0.0/ucd/auxiliary/GraphemeBreakProperty.txt',
295311
'word-break':
@@ -324,6 +340,8 @@ const resources = [
324340
'indic-syllabic-category':
325341
'https://unicode.org/Public/6.1.0/ucd/IndicSyllabicCategory.txt',
326342
'line-break': 'https://unicode.org/Public/6.1.0/ucd/LineBreak.txt',
343+
'arabic-shaping':
344+
'https://unicode.org/Public/6.1.0/ucd/ArabicShaping.txt',
327345
'grapheme-cluster-break':
328346
'https://unicode.org/Public/6.1.0/ucd/auxiliary/GraphemeBreakProperty.txt',
329347
'word-break':
@@ -358,6 +376,8 @@ const resources = [
358376
'indic-syllabic-category':
359377
'https://unicode.org/Public/6.2.0/ucd/IndicSyllabicCategory.txt',
360378
'line-break': 'https://unicode.org/Public/6.2.0/ucd/LineBreak.txt',
379+
'arabic-shaping':
380+
'https://unicode.org/Public/6.2.0/ucd/ArabicShaping.txt',
361381
'grapheme-cluster-break':
362382
'https://unicode.org/Public/6.2.0/ucd/auxiliary/GraphemeBreakProperty.txt',
363383
'word-break':
@@ -393,6 +413,8 @@ const resources = [
393413
'indic-syllabic-category':
394414
'https://unicode.org/Public/6.3.0/ucd/IndicSyllabicCategory.txt',
395415
'line-break': 'https://unicode.org/Public/6.3.0/ucd/LineBreak.txt',
416+
'arabic-shaping':
417+
'https://unicode.org/Public/6.3.0/ucd/ArabicShaping.txt',
396418
'grapheme-cluster-break':
397419
'https://unicode.org/Public/6.3.0/ucd/auxiliary/GraphemeBreakProperty.txt',
398420
'word-break':
@@ -428,6 +450,8 @@ const resources = [
428450
'bidi-mirroring': 'https://unicode.org/Public/7.0.0/ucd/BidiMirroring.txt',
429451
'bidi-brackets': 'https://unicode.org/Public/7.0.0/ucd/BidiBrackets.txt',
430452
'line-break': 'https://unicode.org/Public/7.0.0/ucd/LineBreak.txt',
453+
'arabic-shaping':
454+
'https://unicode.org/Public/7.0.0/ucd/ArabicShaping.txt',
431455
'grapheme-cluster-break':
432456
'https://unicode.org/Public/7.0.0/ucd/auxiliary/GraphemeBreakProperty.txt',
433457
'word-break':
@@ -463,6 +487,8 @@ const resources = [
463487
'indic-syllabic-category':
464488
'https://unicode.org/Public/8.0.0/ucd/IndicSyllabicCategory.txt',
465489
'line-break': 'https://unicode.org/Public/8.0.0/ucd/LineBreak.txt',
490+
'arabic-shaping':
491+
'https://unicode.org/Public/8.0.0/ucd/ArabicShaping.txt',
466492
'grapheme-cluster-break':
467493
'https://unicode.org/Public/8.0.0/ucd/auxiliary/GraphemeBreakProperty.txt',
468494
'word-break':
@@ -498,6 +524,8 @@ const resources = [
498524
'indic-syllabic-category':
499525
'https://unicode.org/Public/9.0.0/ucd/IndicSyllabicCategory.txt',
500526
'line-break': 'https://unicode.org/Public/9.0.0/ucd/LineBreak.txt',
527+
'arabic-shaping':
528+
'https://unicode.org/Public/9.0.0/ucd/ArabicShaping.txt',
501529
'grapheme-cluster-break':
502530
'https://unicode.org/Public/9.0.0/ucd/auxiliary/GraphemeBreakProperty.txt',
503531
'word-break':
@@ -533,6 +561,8 @@ const resources = [
533561
'indic-syllabic-category':
534562
'https://unicode.org/Public/10.0.0/ucd/IndicSyllabicCategory.txt',
535563
'line-break': 'https://unicode.org/Public/10.0.0/ucd/LineBreak.txt',
564+
'arabic-shaping':
565+
'https://unicode.org/Public/10.0.0/ucd/ArabicShaping.txt',
536566
'grapheme-cluster-break':
537567
'https://unicode.org/Public/10.0.0/ucd/auxiliary/GraphemeBreakProperty.txt',
538568
'word-break':
@@ -570,6 +600,8 @@ const resources = [
570600
'indic-syllabic-category':
571601
'https://unicode.org/Public/11.0.0/ucd/IndicSyllabicCategory.txt',
572602
'line-break': 'https://unicode.org/Public/11.0.0/ucd/LineBreak.txt',
603+
'arabic-shaping':
604+
'https://unicode.org/Public/11.0.0/ucd/ArabicShaping.txt',
573605
'grapheme-cluster-break':
574606
'https://unicode.org/Public/11.0.0/ucd/auxiliary/GraphemeBreakProperty.txt',
575607
'word-break':
@@ -617,6 +649,8 @@ const resources = [
617649
'indic-syllabic-category':
618650
'https://unicode.org/Public/12.0.0/ucd/IndicSyllabicCategory.txt',
619651
'line-break': 'https://unicode.org/Public/12.0.0/ucd/LineBreak.txt',
652+
'arabic-shaping':
653+
'https://unicode.org/Public/12.0.0/ucd/ArabicShaping.txt',
620654
'grapheme-cluster-break':
621655
'https://unicode.org/Public/12.0.0/ucd/auxiliary/GraphemeBreakProperty.txt',
622656
'word-break':
@@ -664,6 +698,8 @@ const resources = [
664698
'indic-syllabic-category':
665699
'https://unicode.org/Public/12.1.0/ucd/IndicSyllabicCategory.txt',
666700
'line-break': 'https://unicode.org/Public/12.1.0/ucd/LineBreak.txt',
701+
'arabic-shaping':
702+
'https://unicode.org/Public/12.1.0/ucd/ArabicShaping.txt',
667703
'grapheme-cluster-break':
668704
'https://unicode.org/Public/12.1.0/ucd/auxiliary/GraphemeBreakProperty.txt',
669705
'word-break':
@@ -711,6 +747,8 @@ const resources = [
711747
'indic-syllabic-category':
712748
'https://unicode.org/Public/13.0.0/ucd/IndicSyllabicCategory.txt',
713749
'line-break': 'https://unicode.org/Public/13.0.0/ucd/LineBreak.txt',
750+
'arabic-shaping':
751+
'https://unicode.org/Public/13.0.0/ucd/ArabicShaping.txt',
714752
'grapheme-cluster-break':
715753
'https://unicode.org/Public/13.0.0/ucd/auxiliary/GraphemeBreakProperty.txt',
716754
'word-break':
@@ -758,6 +796,8 @@ const resources = [
758796
'indic-syllabic-category':
759797
'https://unicode.org/Public/14.0.0/ucd/IndicSyllabicCategory.txt',
760798
'line-break': 'https://unicode.org/Public/14.0.0/ucd/LineBreak.txt',
799+
'arabic-shaping':
800+
'https://unicode.org/Public/14.0.0/ucd/ArabicShaping.txt',
761801
'grapheme-cluster-break':
762802
'https://unicode.org/Public/14.0.0/ucd/auxiliary/GraphemeBreakProperty.txt',
763803
'word-break':
@@ -805,6 +845,8 @@ const resources = [
805845
'indic-syllabic-category':
806846
'https://unicode.org/Public/15.0.0/ucd/IndicSyllabicCategory.txt',
807847
'line-break': 'https://unicode.org/Public/15.0.0/ucd/LineBreak.txt',
848+
'arabic-shaping':
849+
'https://unicode.org/Public/15.0.0/ucd/ArabicShaping.txt',
808850
'grapheme-cluster-break':
809851
'https://unicode.org/Public/15.0.0/ucd/auxiliary/GraphemeBreakProperty.txt',
810852
'word-break':
@@ -852,6 +894,8 @@ const resources = [
852894
'indic-syllabic-category':
853895
'https://unicode.org/Public/15.1.0/ucd/IndicSyllabicCategory.txt',
854896
'line-break': 'https://unicode.org/Public/15.1.0/ucd/LineBreak.txt',
897+
'arabic-shaping':
898+
'https://unicode.org/Public/15.1.0/ucd/ArabicShaping.txt',
855899
'grapheme-cluster-break':
856900
'https://unicode.org/Public/15.1.0/ucd/auxiliary/GraphemeBreakProperty.txt',
857901
'word-break':
@@ -899,6 +943,8 @@ const resources = [
899943
'indic-syllabic-category':
900944
'https://unicode.org/Public/16.0.0/ucd/IndicSyllabicCategory.txt',
901945
'line-break': 'https://unicode.org/Public/16.0.0/ucd/LineBreak.txt',
946+
'arabic-shaping':
947+
'https://unicode.org/Public/16.0.0/ucd/ArabicShaping.txt',
902948
'grapheme-cluster-break':
903949
'https://unicode.org/Public/16.0.0/ucd/auxiliary/GraphemeBreakProperty.txt',
904950
'word-break':
@@ -946,6 +992,8 @@ const resources = [
946992
'indic-syllabic-category':
947993
'https://unicode.org/Public/17.0.0/ucd/IndicSyllabicCategory.txt',
948994
'line-break': 'https://unicode.org/Public/17.0.0/ucd/LineBreak.txt',
995+
'arabic-shaping':
996+
'https://unicode.org/Public/17.0.0/ucd/ArabicShaping.txt',
949997
'grapheme-cluster-break':
950998
'https://unicode.org/Public/17.0.0/ucd/auxiliary/GraphemeBreakProperty.txt',
951999
'word-break':
@@ -993,6 +1041,8 @@ const resources = [
9931041
'indic-syllabic-category':
9941042
'https://unicode.org/Public/18.0.0/ucd/IndicSyllabicCategory.txt',
9951043
'line-break': 'https://unicode.org/Public/18.0.0/ucd/LineBreak.txt',
1044+
'arabic-shaping':
1045+
'https://unicode.org/Public/18.0.0/ucd/ArabicShaping.txt',
9961046
'grapheme-cluster-break':
9971047
'https://unicode.org/Public/18.0.0/ucd/auxiliary/GraphemeBreakProperty.txt',
9981048
'word-break':

‎index.mjs‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import parseSpecialCasing from './scripts/parse-special-casing.mjs';
1717
import parseSimpleCaseMapping from './scripts/parse-simple-case-mapping.mjs';
1818
import parseGraphemeWordSentenceBreak from './scripts/parse-grapheme-word-sentence-break.mjs';
1919
import parseVerticalOrientation from './scripts/parse-vertical-orientation.mjs';
20+
import parseArabicShaping from './scripts/parse-arabic-shaping.mjs';
2021
import parseEmoji from './scripts/parse-emoji.mjs';
2122
import parseEmojiSequences from './scripts/parse-emoji-sequences.mjs';
2223
import parseNames from './scripts/parse-names.mjs';
@@ -169,6 +170,12 @@ const generateData = async (version) => {
169170
'map': await parseVerticalOrientation(version),
170171
'type': 'Vertical_Orientation',
171172
}));
173+
console.log('Parsing Unicode v%s `Joining_Type`…', version);
174+
utils.extend(dirMap, await utils.writeFiles({
175+
'version': version,
176+
'map': await parseArabicShaping(version),
177+
'type': 'Joining_Type',
178+
}));
172179
console.log('Parsing Unicode v%s binary emoji properties…', version);
173180
utils.extend(dirMap, await utils.writeFiles({
174181
'version': version,

‎scripts/download.mjs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ const TYPES = [
6464
'word-break',
6565
'sentence-break',
6666
'vertical-orientation',
67+
'arabic-shaping',
6768
'emoji',
6869
'emoji-sequences',
6970
'emoji-test',

‎scripts/parse-arabic-shaping.mjs‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import utils from './utils.mjs';
2+
import regenerate from 'regenerate';
3+
4+
const parseArabicShaping = async (version) => {
5+
const source = await utils.readDataFile(version, 'arabic-shaping');
6+
if (!source) {
7+
return;
8+
}
9+
const map = {};
10+
const lines = source.split('\n');
11+
for (const line of lines) {
12+
if (!line || /^#/.test(line)) {
13+
continue;
14+
}
15+
// Format: `0600; ARABIC NUMBER SIGN; U; No_Joining_Group`.
16+
// Field 1 (schematic name) is a comment; field 2 is the
17+
// Joining_Type value; field 3 (Joining_Group) is out of scope.
18+
const data = line.trim().split(';');
19+
const codePoint = parseInt(data[0].trim(), 16);
20+
const joiningType = data[2].trim();
21+
map[joiningType] ??= regenerate();
22+
map[joiningType].add(codePoint);
23+
}
24+
return map;
25+
};
26+
27+
export default parseArabicShaping;

‎tests/tests.mjs‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,5 +66,9 @@ suite(`The generated latest Unicode js`, () => {
6666
[...map.entries()]
6767
);
6868
});
69+
test('Joining_Type/Dual_Joining should match the snapshot', async (t) => {
70+
const { default: data } = await import(`../output/unicode-${newest}/Joining_Type/Dual_Joining/ranges.mjs`);
71+
t.assert.snapshot(data);
72+
});
6973
});
7074

0 commit comments

Comments
 (0)