interscript-maps 3.1.0 → 3.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bdc55bef9d08e9a879308411cdce2570ede10ff0fe986df258f6e6744b33778e
4
- data.tar.gz: c3c026d26865c3827316ac82af260f57f20c30fb8bdf8d6b09a4e2c63081ceac
3
+ metadata.gz: 1b0ef91a3c4a9bb3e96e27ac51abfe7ae3190d47c55fd2d9dd869f5062bc8bcb
4
+ data.tar.gz: 2c920d0eb3509320d2018c92ee8538c4d73d2146013166b699076e1a4e20bac3
5
5
  SHA512:
6
- metadata.gz: e11e930359276474cec3d169024b77553a9fcb8ea6427f5f68a3d0a1f4a8bb7a08c018406c3ced193c61715c709ef57bc2e48533fc6320489254dbcf8e03aab1
7
- data.tar.gz: 673d8e940e3a622c19884cc16c7aad5e843dad05988d308f8b0b8bcda89e8c448b2b54c3b350f0bde278742d0df5e3dccbb4051437de822c88d0811992460b5f
6
+ metadata.gz: 3262737df76250886faee260292e9d5f8afbd37d198eed799b92272bf37c1d858e9c751cc1563ddc00c104456c506c7dc11969c320f8ba9417d394b68ef964f4
7
+ data.tar.gz: 55a888bea4db9f612c817e1df49d53da86fb51427789f92387808711be21859e9d934a6e0ddd0ab34a10ae6368d25d6a4415eb08d481519406b5080e9cc04846
@@ -1,4 +1,4 @@
1
- INTERSCRIPT_MAPS_VERSION = "3.1.0"
1
+ INTERSCRIPT_MAPS_VERSION = "3.2.0"
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "interscript-maps"
@@ -0,0 +1,84 @@
1
+ system "hebr-latn" {
2
+
3
+ # Shared ALA-LC Hebrew-script machinery: rows byte-identical between the
4
+ # Ladino (alalc-lad-Hebr-Latn-2025) and Judeo-Arabic (alalc-jba-Hebr-Latn-2011)
5
+ # romanization tables. The runs are split at every point where either map
6
+ # carries a map-specific row, so each map splices the rulesets at its own
7
+ # document positions; the two tables order he differently (Ladino before
8
+ # bet/gimel/dalet, Judeo-Arabic after), so hebr_common_f is referenced on
9
+ # either side of hebr_common_g.
10
+
11
+ ruleset hebr_common_a {
12
+ # ALA-LC pe with geresh reads f in both the Ladino and the
13
+ # Judeo-Arabic tables
14
+ sub "פ׳" "f"
15
+ sub "ף׳" "f"
16
+ }
17
+
18
+ ruleset hebr_common_b {
19
+ # bet with dagesh (ligature and composed forms)
20
+ sub "בּ" "b"
21
+ sub "בּ" "b"
22
+ }
23
+
24
+ ruleset hebr_common_c {
25
+ # kaf with dagesh, including the final forms
26
+ sub "כּ" "k"
27
+ sub "כּ" "k"
28
+ sub "ךּ" "k"
29
+ sub "ךּ" "k"
30
+ }
31
+
32
+ ruleset hebr_common_d {
33
+ # tav with dagesh (ligature and composed forms)
34
+ sub "תּ" "t"
35
+ sub "תּ" "t"
36
+ }
37
+
38
+ ruleset hebr_common_e {
39
+ # shin with sin dot reads ś in both tables
40
+ sub "שׂ" "ś"
41
+ sub "שׂ" "ś"
42
+ }
43
+
44
+ ruleset hebr_common_f {
45
+ # pointless he reads h; the Ladino word-final -ah reading is a
46
+ # map-local row that runs before this
47
+ sub "ה" "h"
48
+ }
49
+
50
+ ruleset hebr_common_g {
51
+ # plain bet, gimel, dalet
52
+ sub "ב" "b"
53
+ sub "ג" "g"
54
+ sub "ד" "d"
55
+ }
56
+
57
+ ruleset hebr_common_h {
58
+ # zayin, het, tet
59
+ sub "ז" "z"
60
+ sub "ח" "ḥ"
61
+ sub "ט" "ṭ"
62
+ }
63
+
64
+ ruleset hebr_common_i {
65
+ # lamed, mem and nun (with their final forms), samekh
66
+ sub "ל" "l"
67
+ sub "מ" "m"
68
+ sub "ם" "m"
69
+ sub "נ" "n"
70
+ sub "ן" "n"
71
+ sub "ס" "s"
72
+ }
73
+
74
+ ruleset hebr_common_j {
75
+ # resh
76
+ sub "ר" "r"
77
+ }
78
+
79
+ ruleset hebr_common_k {
80
+ # tav
81
+ sub "ת" "t"
82
+ }
83
+
84
+ }
@@ -0,0 +1,110 @@
1
+ system "jawi-latn" {
2
+
3
+ ruleset malay_jawi_common_a {
4
+ # Marked vowels (Vowels and Diphthongs rows)
5
+ sub "وُ" "u"
6
+ sub "وَ" "o"
7
+ sub "يِ" "i"
8
+ sub "يَ" "e"
9
+ # Rule 8 - hamzah
10
+ sub "ٴ" ""
11
+ # the high-hamza separator mark (rule 8b) is not represented
12
+ sub "أ" ""
13
+ # alef-hamza separator (rule 8b)
14
+ sub "ئ" ""
15
+ # yeh-hamza (rule 8b/8c; the elided vowel value is lexical)
16
+ sub "ؤ" "u"
17
+ # waw-hamza
18
+ sub {
19
+ from "ء"
20
+ to "k"
21
+ after boundary
22
+ }
23
+ # rule 8e word-final glottal stop
24
+ sub "ء" "ʼ"
25
+ # rule 8a Arabic reading
26
+ # Rule 5 - alif gantung: the superscript alif marks the final a of the
27
+ # word, which romanizes before the nasal it sits over (tiang); swap the
28
+ # mark order before the letters convert
29
+ sub "ڠٰ" "aڠ"
30
+ sub "ٰ" "a"
31
+ # Marks not represented (rule 11) and leftover vowel signs
32
+ sub "ْ" ""
33
+ sub "ّ" ""
34
+ sub "َ" ""
35
+ sub "ُ" ""
36
+ sub "ِ" ""
37
+ sub "ـ" ""
38
+ # Final-form yad (alef maksura codepoint) joins the yad rules
39
+ sub "ى" "ي"
40
+ # Letters of the alphabet (Malay values)
41
+ sub "ب" "b"
42
+ sub "ت" "t"
43
+ sub "ث" "s"
44
+ sub "ج" "j"
45
+ sub "چ" "c"
46
+ sub "ح" "h"
47
+ sub "خ" "kh"
48
+ sub "د" "d"
49
+ sub "ذ" "z"
50
+ sub "ر" "r"
51
+ sub "ز" "z"
52
+ sub "س" "s"
53
+ sub "ش" "sy"
54
+ sub "ص" "s"
55
+ sub "ض" "d"
56
+ sub "ط" "t"
57
+ sub "ظ" "z"
58
+ sub "ع" ""
59
+ sub "غ" "gh"
60
+ sub "ڠ" "ng"
61
+ sub "ف" "p"
62
+ sub "ق" "k"
63
+ sub "ڤ" "p"
64
+ sub "ك̇" "g"
65
+ sub "ک̇" "g"
66
+ sub "ك" "k"
67
+ sub "ک" "k"
68
+ sub "ل" "l"
69
+ sub "م" "m"
70
+ sub "ن" "n"
71
+ sub "ڽ" "ny"
72
+ }
73
+
74
+ ruleset malay_jawi_common_b {
75
+ sub "ه" "h"
76
+ sub "ة" "h"
77
+ # Rule 4 - bare alif as the vowel a
78
+ sub "ا" "a"
79
+ # Rule 7 - yad: word-initial and inter-vocalic y, else the vowel i
80
+ sub {
81
+ from boundary + "ي"
82
+ to "y"
83
+ }
84
+ sub {
85
+ from "ي"
86
+ to "y"
87
+ before any(["a", "e", "i", "o", "u"])
88
+ after any(["a", "e", "i", "o", "u"])
89
+ }
90
+ sub "ي" "i"
91
+ # Rule 6 - wau: word-initial and post-vocalic w, word-final and
92
+ # post-consonantal u
93
+ sub {
94
+ from boundary + "و"
95
+ to "w"
96
+ }
97
+ sub {
98
+ from "و"
99
+ to "u"
100
+ after boundary
101
+ }
102
+ sub {
103
+ from "و"
104
+ to "w"
105
+ before any(["a", "e", "i", "o", "u"])
106
+ }
107
+ sub "و" "u"
108
+ }
109
+
110
+ }
@@ -138,116 +138,18 @@ tests {
138
138
  "راماي" -> "ramai"
139
139
  }
140
140
 
141
+ dependency "jawi-latn" as jawi
142
+
141
143
  stage main {
144
+ use jawi.malay_jawi_common_a
145
+
142
146
  sequence {
143
- # Marked vowels (Vowels and Diphthongs rows)
144
- sub "وُ" "u"
145
- sub "وَ" "o"
146
- sub "يِ" "i"
147
- sub "يَ" "e"
148
-
149
- # Rule 8 - hamzah
150
- sub "ٴ" "" # the high-hamza separator mark (rule 8b) is not represented
151
- sub "أ" "" # alef-hamza separator (rule 8b)
152
- sub "ئ" "" # yeh-hamza (rule 8b/8c; the elided vowel value is lexical)
153
- sub "ؤ" "u" # waw-hamza
154
- sub {
155
- from "ء"
156
- to "k"
157
- after boundary
158
- } # rule 8e word-final glottal stop
159
- sub "ء" "ʼ" # rule 8a Arabic reading
160
-
161
- # Rule 5 - alif gantung: the superscript alif marks the final a of the
162
- # word, which romanizes before the nasal it sits over (tiang); swap the
163
- # mark order before the letters convert
164
- sub "ڠٰ" "aڠ"
165
- sub "ٰ" "a"
166
-
167
- # Marks not represented (rule 11) and leftover vowel signs
168
- sub "ْ" ""
169
- sub "ّ" ""
170
- sub "َ" ""
171
- sub "ُ" ""
172
- sub "ِ" ""
173
- sub "ـ" ""
174
-
175
- # Final-form yad (alef maksura codepoint) joins the yad rules
176
- sub "ى" "ي"
177
-
178
- # Letters of the alphabet (Malay values)
179
- sub "ب" "b"
180
- sub "ت" "t"
181
- sub "ث" "s"
182
- sub "ج" "j"
183
- sub "چ" "c"
184
- sub "ح" "h"
185
- sub "خ" "kh"
186
- sub "د" "d"
187
- sub "ذ" "z"
188
- sub "ر" "r"
189
- sub "ز" "z"
190
- sub "س" "s"
191
- sub "ش" "sy"
192
- sub "ص" "s"
193
- sub "ض" "d"
194
- sub "ط" "t"
195
- sub "ظ" "z"
196
- sub "ع" ""
197
- sub "غ" "gh"
198
- sub "ڠ" "ng"
199
- sub "ف" "p"
200
- sub "ق" "k"
201
- sub "ڤ" "p"
202
- sub "ك̇" "g"
203
- sub "ک̇" "g"
204
- sub "ك" "k"
205
- sub "ک" "k"
206
- sub "ل" "l"
207
- sub "م" "m"
208
- sub "ن" "n"
209
- sub "ڽ" "ny"
210
147
  sub "ڎ" "dh"
211
148
  sub "ڟ" "th"
212
149
  sub "ۏ" "v"
213
- sub "ه" "h"
214
- sub "ة" "h"
215
-
216
- # Rule 4 - bare alif as the vowel a
217
- sub "ا" "a"
218
-
219
- # Rule 7 - yad: word-initial and inter-vocalic y, else the vowel i
220
- sub {
221
- from boundary + "ي"
222
- to "y"
223
- }
224
- sub {
225
- from "ي"
226
- to "y"
227
- before any(["a", "e", "i", "o", "u"])
228
- after any(["a", "e", "i", "o", "u"])
229
- }
230
- sub "ي" "i"
231
-
232
- # Rule 6 - wau: word-initial and post-vocalic w, word-final and
233
- # post-consonantal u
234
- sub {
235
- from boundary + "و"
236
- to "w"
237
- }
238
- sub {
239
- from "و"
240
- to "u"
241
- after boundary
242
- }
243
- sub {
244
- from "و"
245
- to "w"
246
- before any(["a", "e", "i", "o", "u"])
247
- }
248
- sub "و" "u"
249
150
  }
250
151
 
152
+ use jawi.malay_jawi_common_b
251
153
  }
252
154
 
253
155
  }
@@ -155,71 +155,55 @@ tests {
155
155
  # mechanical: ʼlṭywr)
156
156
  }
157
157
 
158
+ dependency "hebr-latn" as hebr
159
+
158
160
  stage main {
159
- parallel {
160
- # Ligature alef-lamed
161
- sub "ﭏ" "ʼl"
162
-
163
- # Geresh-differentiated letters (note 3)
164
- sub "ג׳" "ḡ"
165
- sub "ד׳" "ḏ"
166
- sub "פ׳" "f"
167
- sub "ף׳" "f"
168
- sub "צ׳" "ṣ̄"
169
- sub "ץ׳" "ṣ̄"
170
-
171
- # Dot-differentiated letters (note 3; kaf per note 12)
172
- sub "גׄ" "g"
173
- sub "ט̇" "ẓ"
174
- sub "ה̈" "ḧ"
175
- sub "כׄ" "k"
176
-
177
- # Presentation and composed forms
178
- sub "בּ" "b"
179
- sub "בּ" "b"
180
- sub "כּ" "k"
181
- sub "כּ" "k"
182
- sub "ךּ" "k"
183
- sub "ךּ" "k"
184
- sub "תּ" "t"
185
- sub "תּ" "t"
186
- sub "שׁ" "š"
187
- sub "שׁ" "š"
188
- sub "שׂ" "ś"
189
- sub "שׂ" "ś"
190
-
191
- # Doubled vav and yod (one-to-one consonant representation, note 1)
192
- sub "וו" "ww"
193
- sub "יי" "yy"
194
-
195
- # Letters
196
- sub "א" "ʼ"
197
- sub "ב" "b"
198
- sub "ג" "g"
199
- sub "ד" "d"
200
- sub "ה" "h"
201
- sub "ו" "w"
202
- sub "ז" "z"
203
- sub "ח" "ḥ"
204
- sub "ט" "ṭ"
205
- sub "י" "y"
206
- sub "כ" "k"
207
- sub "ך" "k"
208
- sub "ל" "l"
209
- sub "מ" "m"
210
- sub "ם" "m"
211
- sub "נ" "n"
212
- sub "ן" "n"
213
- sub "ס" "s"
214
- sub "ע" "‘"
215
- sub "פ" "f"
216
- sub "ף" "f"
217
- sub "צ" "ṣ"
218
- sub "ק" "q"
219
- sub "ר" "r"
220
- sub "ש" "š"
221
- sub "ת" "t"
222
- }
161
+ # Ligature alef-lamed
162
+ sub "ﭏ" "ʼl"
163
+
164
+ # Geresh-differentiated letters (note 3)
165
+ sub "ג׳" "ḡ"
166
+ sub "ד׳" "ḏ"
167
+ use hebr.hebr_common_a
168
+ sub "צ׳" "ṣ̄"
169
+ sub "ץ׳" "ṣ̄"
170
+
171
+ # Dot-differentiated letters (note 3; kaf per note 12)
172
+ sub "גׄ" "g"
173
+ sub "ט̇" "ẓ"
174
+ sub "ה̈" "ḧ"
175
+ sub "כׄ" "k"
176
+
177
+ # Presentation and composed forms
178
+ use hebr.hebr_common_b
179
+ use hebr.hebr_common_c
180
+ use hebr.hebr_common_d
181
+ sub "שׁ" "š"
182
+ sub "שׁ" "š"
183
+ use hebr.hebr_common_e
184
+
185
+ # Doubled vav and yod (one-to-one consonant representation, note 1)
186
+ sub "וו" "ww"
187
+ sub "יי" "yy"
188
+
189
+ # Letters
190
+ sub "א" "ʼ"
191
+ use hebr.hebr_common_g
192
+ use hebr.hebr_common_f
193
+ sub "ו" "w"
194
+ use hebr.hebr_common_h
195
+ sub "י" "y"
196
+ sub "כ" "k"
197
+ sub "ך" "k"
198
+ use hebr.hebr_common_i
199
+ sub "ע" "‘"
200
+ sub "פ" "f"
201
+ sub "ף" "f"
202
+ sub "צ" "ṣ"
203
+ sub "ק" "q"
204
+ use hebr.hebr_common_j
205
+ sub "ש" "š"
206
+ use hebr.hebr_common_k
223
207
 
224
208
  }
225
209
 
@@ -152,141 +152,125 @@ tests {
152
152
  # - source: תּורה, expected: Torah (proper-noun capital)
153
153
  }
154
154
 
155
+ dependency "hebr-latn" as hebr
156
+
155
157
  stage main {
156
- sequence {
157
- # 1. Clusters of yod and vav carrying point marks (the e/i and ey/yi
158
- # distinctions). Both logical and text-extraction byte orders are
159
- # covered for the marked double-yod clusters.
160
- sub "ואִי" "wi"
161
- sub "ייִ" "yi"
162
- sub "יִי" "yi"
163
- sub "ייֵ" "ey"
164
- sub "יֵי" "ey"
165
- sub "יִ" "i"
158
+ # 1. Clusters of yod and vav carrying point marks (the e/i and ey/yi
159
+ # distinctions). Both logical and text-extraction byte orders are
160
+ # covered for the marked double-yod clusters.
161
+ sub "ואִי" "wi"
162
+ sub "ייִ" "yi"
163
+ sub "יִי" "yi"
164
+ sub "ייֵ" "ey"
165
+ sub "יֵי" "ey"
166
+ sub "יִ" "i"
166
167
 
167
- # 2. Geresh and rafe letter forms (rafé/geresh diacritics)
168
- sub "ב׳" "v"
169
- sub "בֿ" "v"
170
- sub "ג׳" "j"
171
- sub "גֿ" "j"
172
- sub "ד׳" "dh"
173
- sub "דֿ" "dh"
174
- sub "ז׳" "zh"
175
- sub "זֿ" "zh"
176
- sub "פ׳" "f"
177
- sub "ף׳" "f"
178
- sub "פֿ" "f"
179
- sub "ףֿ" "f"
168
+ # 2. Geresh and rafe letter forms (rafé/geresh diacritics)
169
+ sub "ב׳" "v"
170
+ sub "בֿ" "v"
171
+ sub "ג׳" "j"
172
+ sub "גֿ" "j"
173
+ sub "ד׳" "dh"
174
+ sub "דֿ" "dh"
175
+ sub "ז׳" "zh"
176
+ sub "זֿ" "zh"
177
+ use hebr.hebr_common_a
178
+ sub "פֿ" "f"
179
+ sub "ףֿ" "f"
180
180
 
181
- # 3. Gimel with the superscript dot (ch)
182
- sub "גׄ" "ch"
181
+ # 3. Gimel with the superscript dot (ch)
182
+ sub "גׄ" "ch"
183
183
 
184
- # 4. Pointed vav (shuruq, holam) - presentation forms and composed
185
- sub "וּ" "u"
186
- sub "וּ" "u"
187
- sub "וֹ" "o"
188
- sub "וֹ" "o"
184
+ # 4. Pointed vav (shuruq, holam) - presentation forms and composed
185
+ sub "וּ" "u"
186
+ sub "וּ" "u"
187
+ sub "וֹ" "o"
188
+ sub "וֹ" "o"
189
189
 
190
- # 5. Dagesh presentation forms and composed spellings
191
- sub "בּ" "b"
192
- sub "בּ" "b"
193
- sub "גּ" "g"
194
- sub "גּ" "g"
195
- sub "דּ" "d"
196
- sub "דּ" "d"
197
- sub "כּ" "k"
198
- sub "כּ" "k"
199
- sub "ךּ" "k"
200
- sub "ךּ" "k"
201
- sub "פּ" "p"
202
- sub "פּ" "p"
203
- sub "תּ" "t"
204
- sub "תּ" "t"
205
- sub "שׂ" "ś"
206
- sub "שׂ" "ś"
207
- sub "ﭏ" "al"
190
+ # 5. Dagesh presentation forms and composed spellings
191
+ use hebr.hebr_common_b
192
+ sub "גּ" "g"
193
+ sub "גּ" "g"
194
+ sub "דּ" "d"
195
+ sub "דּ" "d"
196
+ use hebr.hebr_common_c
197
+ sub "פּ" "p"
198
+ sub "פּ" "p"
199
+ use hebr.hebr_common_d
200
+ use hebr.hebr_common_e
201
+ sub "ﭏ" "al"
208
202
 
209
- # 6. Alef (general note 1): silent between adjacent matres and
210
- # word-initially before a vav/yod; a elsewhere. Word-final alef+he
211
- # carries the vowel cluster together (agwah: the alef is the a,
212
- # the he only h).
213
- sub "אה" "ah"
214
- sub {
203
+ # 6. Alef (general note 1): silent between adjacent matres and
204
+ # word-initially before a vav/yod; a elsewhere. Word-final alef+he
205
+ # carries the vowel cluster together (agwah: the alef is the a,
206
+ # the he only h).
207
+ sub "אה" "ah"
208
+ sub {
215
209
  from "א"
216
210
  to ""
217
211
  before any("יו")
218
212
  after any("יו")
219
213
  }
220
- sub {
214
+ sub {
221
215
  from boundary + "א"
222
216
  to ""
223
217
  after any("יו")
224
218
  }
225
- sub "א" "a"
219
+ sub "א" "a"
226
220
 
227
- # 7. He: word-final -ah (the row value), otherwise h (note 4, the
228
- # Hebrew-table reading of non-final he)
229
- sub {
221
+ # 7. He: word-final -ah (the row value), otherwise h (note 4, the
222
+ # Hebrew-table reading of non-final he)
223
+ sub {
230
224
  from "ה"
231
225
  to "ah"
232
226
  after boundary
233
227
  }
234
- sub "ה" "h"
228
+ use hebr.hebr_common_f
235
229
 
236
- # 8. Consonants with a single reading
237
- sub "ב" "b"
238
- sub "ג" "g"
239
- sub "ד" "d"
240
- sub "ז" "z"
241
- sub "ח" "ḥ"
242
- sub "ט" "ṭ"
243
- sub "כ" "kh"
244
- sub "ך" "kh"
245
- sub "ל" "l"
246
- sub "מ" "m"
247
- sub "ם" "m"
248
- sub "נ" "n"
249
- sub "ן" "n"
250
- sub "ס" "s"
251
- sub "ע" "ʻ"
252
- sub "פ" "p"
253
- sub "ף" "p"
254
- sub "צ" "ts"
255
- sub "ץ" "ts"
256
- sub "ק" "ḳ"
257
- sub "ר" "r"
258
- sub "ש" "sh"
259
- sub "ת" "t"
230
+ # 8. Consonants with a single reading
231
+ use hebr.hebr_common_g
232
+ use hebr.hebr_common_h
233
+ sub "כ" "kh"
234
+ sub "ך" "kh"
235
+ use hebr.hebr_common_i
236
+ sub "ע" "ʻ"
237
+ sub "פ" "p"
238
+ sub "ף" "p"
239
+ sub "צ" "ts"
240
+ sub "ץ" "ts"
241
+ sub "ק" "ḳ"
242
+ use hebr.hebr_common_j
243
+ sub "ש" "sh"
244
+ use hebr.hebr_common_k
260
245
 
261
- # 9. Double yod: ye before a consonant, y otherwise (note 3)
262
- sub {
246
+ # 9. Double yod: ye before a consonant, y otherwise (note 3)
247
+ sub {
263
248
  from "יי"
264
249
  to "ye"
265
250
  after any("bcdfghjklmnpqrstvwxyz")
266
251
  }
267
- sub "יי" "y"
252
+ sub "יי" "y"
268
253
 
269
- # 10. Yod: word-initial consonant y, otherwise the vowel e (the
270
- # unmarked i quality is lexical, see notes)
271
- sub {
254
+ # 10. Yod: word-initial consonant y, otherwise the vowel e (the
255
+ # unmarked i quality is lexical, see notes)
256
+ sub {
272
257
  from boundary + "י"
273
258
  to "y"
274
259
  }
275
- sub "י" "e"
260
+ sub "י" "e"
276
261
 
277
- # 11. Vav: word-initial ṿ (note 4); consonantal w between a consonant
278
- # and a following vowel letter; otherwise the vowel o
279
- sub {
262
+ # 11. Vav: word-initial ṿ (note 4); consonantal w between a consonant
263
+ # and a following vowel letter; otherwise the vowel o
264
+ sub {
280
265
  from boundary + "ו"
281
266
  to "ṿ"
282
267
  }
283
- sub {
268
+ sub {
284
269
  from "ו"
285
270
  to "w"
286
271
  after any(["a", "e", "i", "o", "u", "י", "ו"])
287
272
  }
288
- sub "ו" "o"
289
- }
273
+ sub "ו" "o"
290
274
 
291
275
  }
292
276
 
@@ -56,6 +56,259 @@ tests {
56
56
  "ꗢ" -> "ɛ̃"
57
57
  "ꘋ" -> "ŋ"
58
58
  "ꔀꔤꕉꕱꖕꗡ" -> "eiaouɛ"
59
+
60
+ # Exhaustive per-row tests for alalc-vai-Vaii-Latn-2010, generated from the source
61
+ # document's table.
62
+ # Source: ALA-LC Vai Romanization Table (2010), syllable grid pp. 1-2
63
+ # (https://www.loc.gov/catdir/cpso/romanization/vai.pdf; local source
64
+ # interscript-private-references/alalc/alalc-vai.pdf). Rows are in document
65
+ # order: the grid's column streams, page 1 e i a o series then page 2 u
66
+ # o-open e-open series, top-down within each column. Excludes the syllabic
67
+ # lengthener U+A60C (an instruction, no romanization). The 'fi' ligature
68
+ # glyph (U+FB01) in the PDF text layer is normalized to 'fi'; tilded vowels
69
+ # are NFC-normalized.
70
+ # Provenance artifact: scripts/row-sources/alalc-vai-Vaii-Latn-2010.json (240 rows).
71
+ # generated-by: maps/scripts/gen-row-tests.mjs (2026-11-12); regenerate from the artifact, do not hand-edit.
72
+ "ꔀ" -> "e"
73
+ "ꔁ" -> "ẽ"
74
+ "ꔂ" -> "he"
75
+ "ꔃ" -> "we"
76
+ "ꔄ" -> "wẽ"
77
+ "ꔅ" -> "pe"
78
+ "ꔆ" -> "be"
79
+ "ꔇ" -> "ɓe"
80
+ "ꔈ" -> "mɓe"
81
+ "ꔉ" -> "kpe"
82
+ "ꔊ" -> "mgbe"
83
+ "ꔋ" -> "gbe"
84
+ "ꔌ" -> "fe"
85
+ "ꔍ" -> "ve"
86
+ "ꔎ" -> "te"
87
+ "ꔐ" -> "de"
88
+ "ꔒ" -> "le"
89
+ "ꔓ" -> "re"
90
+ "ꔔ" -> "ɗe"
91
+ "ꔕ" -> "nɗe"
92
+ "ꔖ" -> "se"
93
+ "ꔘ" -> "ze"
94
+ "ꔚ" -> "che"
95
+ "ꔛ" -> "je"
96
+ "ꔜ" -> "nje"
97
+ "ꔝ" -> "ye"
98
+ "ꔞ" -> "ke"
99
+ "ꔟ" -> "ŋge"
100
+ "ꔠ" -> "ge"
101
+ "ꔡ" -> "me"
102
+ "ꔢ" -> "ne"
103
+ "ꔣ" -> "ɲe"
104
+ "ꔤ" -> "i"
105
+ "ꔥ" -> "ĩ"
106
+ "ꔦ" -> "hi"
107
+ "ꔧ" -> "hĩ"
108
+ "ꔨ" -> "wi"
109
+ "ꔩ" -> "wĩ"
110
+ "ꔪ" -> "pi"
111
+ "ꔫ" -> "bi"
112
+ "ꔬ" -> "ɓi"
113
+ "ꔭ" -> "mɓi"
114
+ "ꔮ" -> "kpi"
115
+ "ꔯ" -> "mgbi"
116
+ "ꔰ" -> "gbi"
117
+ "ꔱ" -> "fi"
118
+ "ꔲ" -> "vi"
119
+ "ꔳ" -> "ti"
120
+ "ꔵ" -> "di"
121
+ "ꔷ" -> "li"
122
+ "ꔸ" -> "ri"
123
+ "ꔹ" -> "ɗi"
124
+ "ꔺ" -> "nɗi"
125
+ "ꔻ" -> "si"
126
+ "ꔽ" -> "zi"
127
+ "ꔿ" -> "chi"
128
+ "ꕀ" -> "ji"
129
+ "ꕁ" -> "nji"
130
+ "ꕂ" -> "yi"
131
+ "ꕃ" -> "ki"
132
+ "ꕄ" -> "ŋgi"
133
+ "ꕅ" -> "gi"
134
+ "ꕆ" -> "mi"
135
+ "ꕇ" -> "ni"
136
+ "ꕈ" -> "ɲi"
137
+ "ꕉ" -> "a"
138
+ "ꕊ" -> "ã"
139
+ "ꕋ" -> "ŋã"
140
+ "ꕌ" -> "ha"
141
+ "ꕍ" -> "hã"
142
+ "ꕎ" -> "wa"
143
+ "ꕏ" -> "wã"
144
+ "ꕐ" -> "pa"
145
+ "ꕑ" -> "ba"
146
+ "ꕒ" -> "ɓa"
147
+ "ꕓ" -> "mɓa"
148
+ "ꕔ" -> "kpa"
149
+ "ꕕ" -> "kpã"
150
+ "ꕖ" -> "mgba"
151
+ "ꕗ" -> "gba"
152
+ "ꕘ" -> "fa"
153
+ "ꕙ" -> "va"
154
+ "ꕚ" -> "ta"
155
+ "ꕜ" -> "da"
156
+ "ꕞ" -> "la"
157
+ "ꕟ" -> "ra"
158
+ "ꕠ" -> "ɗa"
159
+ "ꕡ" -> "nɗa"
160
+ "ꕢ" -> "sa"
161
+ "ꕤ" -> "za"
162
+ "ꕦ" -> "cha"
163
+ "ꕨ" -> "ja"
164
+ "ꕧ" -> "nja"
165
+ "ꕩ" -> "ya"
166
+ "ꕪ" -> "ka"
167
+ "ꕫ" -> "kã"
168
+ "ꕬ" -> "ŋga"
169
+ "ꕭ" -> "ga"
170
+ "ꕮ" -> "ma"
171
+ "ꕯ" -> "na"
172
+ "ꕰ" -> "ɲa"
173
+ "ꕱ" -> "o"
174
+ "ꕲ" -> "õ"
175
+ "ꕳ" -> "ho"
176
+ "ꕴ" -> "wo"
177
+ "ꕵ" -> "wõ"
178
+ "ꕶ" -> "po"
179
+ "ꕷ" -> "bo"
180
+ "ꕸ" -> "ɓo"
181
+ "ꕹ" -> "mɓo"
182
+ "ꕺ" -> "kpo"
183
+ "ꕻ" -> "mgbo"
184
+ "ꕼ" -> "gbo"
185
+ "ꕽ" -> "fo"
186
+ "ꕾ" -> "vo"
187
+ "ꕿ" -> "to"
188
+ "ꖁ" -> "do"
189
+ "ꖃ" -> "lo"
190
+ "ꖄ" -> "ro"
191
+ "ꖅ" -> "ɗo"
192
+ "ꖆ" -> "nɗo"
193
+ "ꖇ" -> "so"
194
+ "ꖉ" -> "zo"
195
+ "ꖋ" -> "cho"
196
+ "ꖌ" -> "jo"
197
+ "ꖍ" -> "njo"
198
+ "ꖎ" -> "yo"
199
+ "ꖏ" -> "ko"
200
+ "ꖐ" -> "ŋgo"
201
+ "ꖑ" -> "go"
202
+ "ꖒ" -> "mo"
203
+ "ꖓ" -> "no"
204
+ "ꖔ" -> "ɲo"
205
+ "ꖕ" -> "u"
206
+ "ꖖ" -> "ũ"
207
+ "ꖗ" -> "hu"
208
+ "ꖘ" -> "hũ"
209
+ "ꖙ" -> "wu"
210
+ "ꖚ" -> "wũ"
211
+ "ꖛ" -> "pu"
212
+ "ꖜ" -> "bu"
213
+ "ꖝ" -> "ɓu"
214
+ "ꖞ" -> "mɓu"
215
+ "ꖟ" -> "kpu"
216
+ "ꖠ" -> "mgbu"
217
+ "ꖡ" -> "gbu"
218
+ "ꖢ" -> "fu"
219
+ "ꖣ" -> "vu"
220
+ "ꖤ" -> "tu"
221
+ "ꖦ" -> "du"
222
+ "ꖨ" -> "lu"
223
+ "ꖩ" -> "ru"
224
+ "ꖪ" -> "ɗu"
225
+ "ꖫ" -> "nɗu"
226
+ "ꖬ" -> "su"
227
+ "ꖮ" -> "zu"
228
+ "ꖰ" -> "chu"
229
+ "ꖱ" -> "ju"
230
+ "ꖲ" -> "nju"
231
+ "ꖳ" -> "yu"
232
+ "ꖴ" -> "ku"
233
+ "ꖵ" -> "ŋgu"
234
+ "ꖶ" -> "gu"
235
+ "ꖷ" -> "mu"
236
+ "ꖸ" -> "nu"
237
+ "ꖹ" -> "ɲu"
238
+ "ꘋ" -> "ŋ"
239
+ "ꖺ" -> "ɔ"
240
+ "ꖻ" -> "ɔ̃"
241
+ "ꖼ" -> "ŋɔ̃"
242
+ "ꖽ" -> "hɔ"
243
+ "ꖾ" -> "hɔ̃"
244
+ "ꖿ" -> "wɔ"
245
+ "ꗀ" -> "wɔ̃"
246
+ "ꗁ" -> "pɔ"
247
+ "ꗂ" -> "bɔ"
248
+ "ꗃ" -> "ɓɔ"
249
+ "ꗄ" -> "mɓɔ"
250
+ "ꗅ" -> "kpɔ"
251
+ "ꗆ" -> "mgbɔ"
252
+ "ꗇ" -> "gbɔ"
253
+ "ꗈ" -> "gbɔ̃"
254
+ "ꗉ" -> "fɔ"
255
+ "ꗊ" -> "vɔ"
256
+ "ꗋ" -> "tɔ"
257
+ "ꗍ" -> "dɔ"
258
+ "ꗏ" -> "lɔ"
259
+ "ꗐ" -> "rɔ"
260
+ "ꗑ" -> "ɗɔ"
261
+ "ꗒ" -> "nɗɔ"
262
+ "ꗓ" -> "sɔ"
263
+ "ꗕ" -> "zɔ"
264
+ "ꗗ" -> "chɔ"
265
+ "ꗘ" -> "jɔ"
266
+ "ꗙ" -> "njɔ"
267
+ "ꗚ" -> "yɔ"
268
+ "ꗛ" -> "kɔ"
269
+ "ꗜ" -> "ŋgɔ"
270
+ "ꗝ" -> "gɔ"
271
+ "ꗞ" -> "mɔ"
272
+ "ꗟ" -> "nɔ"
273
+ "ꗠ" -> "ɲɔ"
274
+ "ꗡ" -> "ɛ"
275
+ "ꗢ" -> "ɛ̃"
276
+ "ꗣ" -> "ŋɛ̃"
277
+ "ꗤ" -> "hɛ"
278
+ "ꗥ" -> "hɛ̃"
279
+ "ꗦ" -> "wɛ"
280
+ "ꗧ" -> "wɛ̃"
281
+ "ꗨ" -> "pɛ"
282
+ "ꗩ" -> "bɛ"
283
+ "ꗪ" -> "ɓɛ"
284
+ "ꗫ" -> "mɓɛ"
285
+ "ꗬ" -> "kpɛ"
286
+ "ꗭ" -> "kpɛ̃"
287
+ "ꗮ" -> "mgbɛ"
288
+ "ꗯ" -> "gbɛ"
289
+ "ꗰ" -> "gbɛ̃"
290
+ "ꗱ" -> "fɛ"
291
+ "ꗲ" -> "vɛ"
292
+ "ꗳ" -> "tɛ"
293
+ "ꗵ" -> "dɛ"
294
+ "ꗷ" -> "lɛ"
295
+ "ꗸ" -> "rɛ"
296
+ "ꗹ" -> "ɗɛ"
297
+ "ꗺ" -> "nɗɛ"
298
+ "ꗻ" -> "sɛ"
299
+ "ꗽ" -> "zɛ"
300
+ "ꗿ" -> "chɛ"
301
+ "ꘀ" -> "jɛ"
302
+ "ꘁ" -> "njɛ"
303
+ "ꘂ" -> "yɛ"
304
+ "ꘃ" -> "kɛ"
305
+ "ꘄ" -> "ŋgɛ"
306
+ "ꘅ" -> "ŋgɛ̃"
307
+ "ꘆ" -> "gɛ"
308
+ "ꘇ" -> "gɛ̃"
309
+ "ꘈ" -> "mɛ"
310
+ "ꘉ" -> "nɛ"
311
+ "ꘊ" -> "ɲɛ"
59
312
  }
60
313
 
61
314
  stage main {
@@ -134,113 +134,11 @@ tests {
134
134
  "راماي" -> "ramai"
135
135
  }
136
136
 
137
- stage main {
138
- sequence {
139
- # Marked vowels (Vowels and Diphthongs rows)
140
- sub "وُ" "u"
141
- sub "وَ" "o"
142
- sub "يِ" "i"
143
- sub "يَ" "e"
144
-
145
- # Rule 8 - hamzah
146
- sub "ٴ" "" # the high-hamza separator mark (rule 8b) is not represented
147
- sub "أ" "" # alef-hamza separator (rule 8b)
148
- sub "ئ" "" # yeh-hamza (rule 8b/8c; the elided vowel value is lexical)
149
- sub "ؤ" "u" # waw-hamza
150
- sub {
151
- from "ء"
152
- to "k"
153
- after boundary
154
- } # rule 8e word-final glottal stop
155
- sub "ء" "ʼ" # rule 8a Arabic reading
156
-
157
- # Rule 5 - alif gantung: the superscript alif marks the final a of the
158
- # word, which romanizes before the nasal it sits over (tiang); swap the
159
- # mark order before the letters convert
160
- sub "ڠٰ" "aڠ"
161
- sub "ٰ" "a"
162
-
163
- # Marks not represented (rule 11) and leftover vowel signs
164
- sub "ْ" ""
165
- sub "ّ" ""
166
- sub "َ" ""
167
- sub "ُ" ""
168
- sub "ِ" ""
169
- sub "ـ" ""
170
-
171
- # Final-form yad (alef maksura codepoint) joins the yad rules
172
- sub "ى" "ي"
173
-
174
- # Letters of the alphabet (Malay values)
175
- sub "ب" "b"
176
- sub "ت" "t"
177
- sub "ث" "s"
178
- sub "ج" "j"
179
- sub "چ" "c"
180
- sub "ح" "h"
181
- sub "خ" "kh"
182
- sub "د" "d"
183
- sub "ذ" "z"
184
- sub "ر" "r"
185
- sub "ز" "z"
186
- sub "س" "s"
187
- sub "ش" "sy"
188
- sub "ص" "s"
189
- sub "ض" "d"
190
- sub "ط" "t"
191
- sub "ظ" "z"
192
- sub "ع" ""
193
- sub "غ" "gh"
194
- sub "ڠ" "ng"
195
- sub "ف" "p"
196
- sub "ق" "k"
197
- sub "ڤ" "p"
198
- sub "ك̇" "g"
199
- sub "ک̇" "g"
200
- sub "ك" "k"
201
- sub "ک" "k"
202
- sub "ل" "l"
203
- sub "م" "m"
204
- sub "ن" "n"
205
- sub "ڽ" "ny"
206
- sub "ه" "h"
207
- sub "ة" "h"
208
-
209
- # Rule 4 - bare alif as the vowel a
210
- sub "ا" "a"
211
-
212
- # Rule 7 - yad: word-initial and inter-vocalic y, else the vowel i
213
- sub {
214
- from boundary + "ي"
215
- to "y"
216
- }
217
- sub {
218
- from "ي"
219
- to "y"
220
- before any(["a", "e", "i", "o", "u"])
221
- after any(["a", "e", "i", "o", "u"])
222
- }
223
- sub "ي" "i"
224
-
225
- # Rule 6 - wau: word-initial and post-vocalic w, word-final and
226
- # post-consonantal u
227
- sub {
228
- from boundary + "و"
229
- to "w"
230
- }
231
- sub {
232
- from "و"
233
- to "u"
234
- after boundary
235
- }
236
- sub {
237
- from "و"
238
- to "w"
239
- before any(["a", "e", "i", "o", "u"])
240
- }
241
- sub "و" "u"
242
- }
137
+ dependency "jawi-latn" as jawi
243
138
 
139
+ stage main {
140
+ use jawi.malay_jawi_common_a
141
+ use jawi.malay_jawi_common_b
244
142
  }
245
143
 
246
144
  }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: interscript-maps
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.0
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
@@ -20,6 +20,8 @@ files:
20
20
  - README.adoc
21
21
  - interscript-maps.gemspec
22
22
  - interscript-maps.yaml
23
+ - libs/hebr-latn.isc
24
+ - libs/jawi-latn.isc
23
25
  - libs/posix.iml
24
26
  - libs/posix.isc
25
27
  - libs/thai-latn.isc