glaemscribe 1.0.19 → 1.1.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 +4 -4
- data/glaemresources/charsets/tengwar_ds_annatar.cst +509 -0
- data/glaemresources/charsets/tengwar_ds_eldamar.cst +22 -16
- data/glaemresources/charsets/tengwar_ds_elfica.cst +461 -0
- data/glaemresources/charsets/tengwar_ds_parmaite.cst +500 -0
- data/glaemresources/charsets/{tengwar_ds.cst → tengwar_ds_sindarin.cst} +59 -62
- data/glaemresources/charsets/tengwar_freemono.cst +176 -0
- data/glaemresources/charsets/unicode_runes.cst +1 -0
- data/glaemresources/modes/adunaic.glaem +50 -28
- data/glaemresources/modes/blackspeech.glaem +156 -82
- data/glaemresources/modes/english-ipa.glaem +49 -0
- data/glaemresources/modes/french-ipa.glaem +49 -0
- data/glaemresources/modes/{oldnorse-medieval.glaem → futhark-runicus.glaem} +4 -4
- data/glaemresources/modes/futhark-younger.glaem +129 -0
- data/glaemresources/modes/{futhorc.glaem.disabled → futhorc.glaem} +76 -38
- data/glaemresources/modes/gothic.glaem +1 -1
- data/glaemresources/modes/khuzdul.glaem +1 -1
- data/glaemresources/modes/mercian.glaem +31 -16
- data/glaemresources/modes/quenya-sarati.glaem +5 -3
- data/glaemresources/modes/quenya.glaem +168 -77
- data/glaemresources/modes/rlyehian.glaem +41 -43
- data/glaemresources/modes/sindarin-beleriand.glaem +39 -17
- data/glaemresources/modes/sindarin-daeron.glaem +1 -1
- data/glaemresources/modes/{sindarin-classical.glaem → sindarin.glaem} +73 -37
- data/glaemresources/modes/telerin.glaem +161 -64
- data/glaemresources/modes/valarin-sarati.glaem +1 -1
- data/glaemresources/modes/westron.glaem +83 -44
- data/glaemresources/modes/westsaxon.glaem +30 -13
- data/lib/api/charset.rb +29 -11
- data/lib/api/charset_parser.rb +15 -3
- data/lib/api/mode.rb +15 -3
- data/lib/api/mode_parser.rb +7 -2
- data/lib/api/option.rb +15 -1
- data/lib/api/post_processor/resolve_virtuals.rb +35 -24
- data/lib/api/transcription_pre_post_processor.rb +2 -1
- metadata +15 -11
- data/glaemresources/modes/blackspeech-annatar.glaem +0 -320
- data/glaemresources/modes/futhark-long-branch.glaem.disabled +0 -101
- data/glaemresources/modes/futhark-short-twig.glaem.disabled +0 -101
@@ -28,7 +28,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
28
28
|
\writing "Sarati"
|
29
29
|
\mode "Glaemscrafu"
|
30
30
|
\version "0.0.1"
|
31
|
-
\authors "Talagan (Benjamin Babut)"
|
31
|
+
\authors "Talagan (Benjamin Babut), based on J.R.R. Tolkien"
|
32
32
|
|
33
33
|
\charset sarati_eldamar true
|
34
34
|
|
@@ -23,26 +23,44 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
23
23
|
**\
|
24
24
|
|
25
25
|
\beg changelog
|
26
|
-
\entry 0.0.2 "Correcting ts/ps sequences to work better with eldamar"
|
27
|
-
\entry 0.0.3 "Porting to virtual chars"
|
26
|
+
\entry "0.0.2" "Correcting ts/ps sequences to work better with eldamar"
|
27
|
+
\entry "0.0.3" "Porting to virtual chars"
|
28
|
+
\entry "0.0.4" "Added charset support for Annatar"
|
29
|
+
\entry "0.0.5" "Added support for the FreeMonoTengwar font"
|
30
|
+
\entry "0.1.0" "Added support for the Tengwar Elfica font"
|
28
31
|
\end
|
29
32
|
|
30
33
|
\** Westron mode for glaemscribe (MAY BE INCOMPLETE) **\
|
31
34
|
\language Westron
|
32
35
|
\writing Tengwar
|
33
36
|
\mode Glaemscrafu
|
34
|
-
\version 0.0
|
35
|
-
\authors "Talagan (Benjamin Babut)"
|
37
|
+
\version "0.1.0"
|
38
|
+
\authors "Talagan (Benjamin Babut), based on J.R.R. Tolkien"
|
36
39
|
|
37
|
-
\charset
|
38
|
-
\charset
|
40
|
+
\charset tengwar_ds_sindarin true
|
41
|
+
\charset tengwar_ds_parmaite false
|
42
|
+
\charset tengwar_ds_eldamar false
|
43
|
+
\charset tengwar_ds_annatar false
|
44
|
+
\charset tengwar_ds_elfica false
|
45
|
+
\charset tengwar_freemono false
|
39
46
|
|
40
47
|
\beg options
|
48
|
+
|
49
|
+
\beg option reverse_o_u_tehtar U_UP_O_DOWN
|
50
|
+
\value O_UP_U_DOWN 1
|
51
|
+
\value U_UP_O_DOWN 2
|
52
|
+
\end
|
53
|
+
\beg option consonant_modification_style CONSONANT_MODIFICATION_STYLE_BAR
|
54
|
+
\value CONSONANT_MODIFICATION_STYLE_WAVE 0
|
55
|
+
\value CONSONANT_MODIFICATION_STYLE_BAR 1
|
56
|
+
\end
|
57
|
+
|
41
58
|
\option reverse_numbers true
|
42
59
|
\beg option numbers_base BASE_12
|
43
60
|
\value BASE_10 10
|
44
61
|
\value BASE_12 12
|
45
62
|
\end
|
63
|
+
|
46
64
|
\end
|
47
65
|
|
48
66
|
\beg preprocessor
|
@@ -72,6 +90,27 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
72
90
|
\beg processor
|
73
91
|
|
74
92
|
\beg rules litteral
|
93
|
+
|
94
|
+
\if "consonant_modification_style == CONSONANT_MODIFICATION_STYLE_WAVE"
|
95
|
+
{GEMINATE} === GEMINATE_SIGN_TILD
|
96
|
+
{NASAL} === NASALIZE_SIGN_TILD
|
97
|
+
\else
|
98
|
+
{GEMINATE} === GEMINATE_SIGN
|
99
|
+
{NASAL} === NASALIZE_SIGN
|
100
|
+
\endif
|
101
|
+
|
102
|
+
\if "reverse_o_u_tehtar == U_UP_O_DOWN"
|
103
|
+
{O_LOOP} === O_TEHTA
|
104
|
+
{O_LOOP_DOUBLE} === O_TEHTA_DOUBLE
|
105
|
+
{U_LOOP} === U_TEHTA
|
106
|
+
{U_LOOP_DOUBLE} === U_TEHTA_DOUBLE
|
107
|
+
\else
|
108
|
+
{O_LOOP} === U_TEHTA
|
109
|
+
{O_LOOP_DOUBLE} === U_TEHTA_DOUBLE
|
110
|
+
{U_LOOP} === O_TEHTA
|
111
|
+
{U_LOOP_DOUBLE} === O_TEHTA_DOUBLE
|
112
|
+
\endif
|
113
|
+
|
75
114
|
{A} === a
|
76
115
|
{AA} === á
|
77
116
|
{E} === e
|
@@ -102,16 +141,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
102
141
|
{OOU} === {OO}{U} \** ôu **\
|
103
142
|
|
104
143
|
{SDIPHTHONGS} === {AI} * {AU} * {EI} * {EU} * {IU} * {OI} * {OU} * {UI}
|
105
|
-
{_SDIPHTONGS_} === YANTA A_TEHTA * URE A_TEHTA * YANTA E_TEHTA * URE E_TEHTA * URE I_TEHTA * YANTA
|
144
|
+
{_SDIPHTONGS_} === YANTA A_TEHTA * URE A_TEHTA * YANTA E_TEHTA * URE E_TEHTA * URE I_TEHTA * YANTA {O_LOOP} * URE {O_LOOP} * YANTA {U_LOOP}
|
106
145
|
|
107
146
|
{LDIPHTHONGS} === {AAI} * {AAU} * {EEI} * {EEU} * {OOI} * {OOU}
|
108
|
-
{_LDIPHTONGS_} === ARA A_TEHTA YANTA * ARA A_TEHTA URE * ARA E_TEHTA YANTA * ARA E_TEHTA URE * ARA
|
147
|
+
{_LDIPHTONGS_} === ARA A_TEHTA YANTA * ARA A_TEHTA URE * ARA E_TEHTA YANTA * ARA E_TEHTA URE * ARA {O_LOOP} YANTA * ARA {O_LOOP} URE
|
109
148
|
|
110
149
|
{VOWELS} === {A} * {E} * {I} * {O} * {U}
|
111
|
-
{TEHTAR} === A_TEHTA * E_TEHTA * I_TEHTA *
|
150
|
+
{TEHTAR} === A_TEHTA * E_TEHTA * I_TEHTA * {O_LOOP} * {U_LOOP}
|
112
151
|
|
113
152
|
{LVOWELS} === {AA} * {EE} * {II} * {OO} * {UU}
|
114
|
-
{LTETHAR} === ARA A_TEHTA * ARA E_TEHTA * ARA I_TEHTA * ARA
|
153
|
+
{LTETHAR} === ARA A_TEHTA * ARA E_TEHTA * ARA I_TEHTA * ARA {O_LOOP} * ARA {U_LOOP}
|
115
154
|
|
116
155
|
\** Let' put all vowels/diphthongs in the same basket **\
|
117
156
|
{V_D} === [ {VOWELS} * {LVOWELS} * {SDIPHTHONGS} * {LDIPHTHONGS} ]
|
@@ -133,14 +172,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
133
172
|
[{L1_S}] --> [ {L1_T} ]
|
134
173
|
[{L1_S}]{V_D} --> [ {L1_T} ]{_V_D_}
|
135
174
|
|
136
|
-
{L1_G_S} === tt
|
137
|
-
{L1_G_T} === TINCO
|
175
|
+
{L1_G_S} === tt * pp * cch * (c,k)(c,k)
|
176
|
+
{L1_G_T} === TINCO {GEMINATE} * PARMA {GEMINATE} * CALMA {GEMINATE} * QUESSE {GEMINATE}
|
138
177
|
|
139
178
|
[{L1_G_S}] --> [ {L1_G_T} ]
|
140
179
|
[{L1_G_S}]{V_D} --> [ {L1_G_T} ]{_V_D_}
|
141
180
|
|
142
|
-
{L1_N_S} === nt
|
143
|
-
{L1_N_T} === TINCO
|
181
|
+
{L1_N_S} === nt * mp * nch * (n,ñ)(c,k)
|
182
|
+
{L1_N_T} === TINCO {NASAL} * PARMA {NASAL} * CALMA {NASAL} * QUESSE {NASAL}
|
144
183
|
|
145
184
|
[{L1_N_S}] --> [ {L1_N_T} ]
|
146
185
|
[{L1_N_S}]{V_D} --> [ {L1_N_T} ]{_V_D_}
|
@@ -151,14 +190,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
151
190
|
[{L2_S}] --> [{L2_T}]
|
152
191
|
[{L2_S}]{V_D} --> [{L2_T}]{_V_D_}
|
153
192
|
|
154
|
-
{L2_G_S} === dd
|
155
|
-
{L2_G_T} === ANDO
|
193
|
+
{L2_G_S} === dd * bb * jj * gg
|
194
|
+
{L2_G_T} === ANDO {GEMINATE} * UMBAR {GEMINATE} * ANGA {GEMINATE} * UNGWE {GEMINATE}
|
156
195
|
|
157
196
|
[{L2_G_S}] --> [{L2_G_T}]
|
158
197
|
[{L2_G_S}]{V_D} --> [{L2_G_T}]{_V_D_}
|
159
198
|
|
160
|
-
{L2_N_S} === nd
|
161
|
-
{L2_N_T} === ANDO
|
199
|
+
{L2_N_S} === nd * mb * nj * (n,ñ)g
|
200
|
+
{L2_N_T} === ANDO {NASAL} * UMBAR {NASAL} * ANGA {NASAL} * UNGWE {NASAL}
|
162
201
|
|
163
202
|
[{L2_N_S}] --> [{L2_N_T}]
|
164
203
|
[{L2_N_S}]{V_D} --> [{L2_N_T}]{_V_D_}
|
@@ -176,22 +215,22 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
176
215
|
[{L3_2_S}] --> [{L3_2_T}]
|
177
216
|
[{L3_2_S}]{V_D} --> [{L3_2_T}]{_V_D_}
|
178
217
|
|
179
|
-
{L3_1G_S} === (thth,tth,þþ)
|
180
|
-
{L3_1G_T} === SULE
|
218
|
+
{L3_1G_S} === (thth,tth,þþ) * (ff,phph,pph)
|
219
|
+
{L3_1G_T} === SULE {GEMINATE} * FORMEN {GEMINATE}
|
181
220
|
|
182
|
-
{L3_2G_S} === (shsh,ssh)
|
183
|
-
{L3_2G_T} === AHA
|
221
|
+
{L3_2G_S} === (shsh,ssh) * (k,kh)kh
|
222
|
+
{L3_2G_T} === AHA {GEMINATE} * HWESTA {GEMINATE}
|
184
223
|
|
185
224
|
[{L3_1G_S}] --> [{L3_1G_T}]
|
186
225
|
[{L3_1G_S}]{V_D} --> [{L3_1G_T}]{_V_D_}
|
187
226
|
[{L3_2G_S}] --> [{L3_2G_T}]
|
188
227
|
[{L3_2G_S}]{V_D} --> [{L3_2G_T}]{_V_D_}
|
189
228
|
|
190
|
-
{L3_1N_S} === (nth,nþ)
|
191
|
-
{L3_1N_T} === SULE
|
229
|
+
{L3_1N_S} === (nth,nþ) * (nf,mf,mph)
|
230
|
+
{L3_1N_T} === SULE {NASAL} * FORMEN {NASAL}
|
192
231
|
|
193
|
-
{L3_2N_S} === nsh
|
194
|
-
{L3_2N_T} === AHA
|
232
|
+
{L3_2N_S} === nsh * (n,ñ)kh
|
233
|
+
{L3_2N_T} === AHA {NASAL} * HWESTA {NASAL}
|
195
234
|
|
196
235
|
[{L3_1N_S}] --> [{L3_1N_T}]
|
197
236
|
[{L3_1N_S}]{V_D} --> [{L3_1N_T}]{_V_D_}
|
@@ -204,14 +243,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
204
243
|
[{L4_S}] --> [{L4_T}]
|
205
244
|
[{L4_S}]{V_D} --> [{L4_T}]{_V_D_}
|
206
245
|
|
207
|
-
{L4_G_S} === (dh,ð)(dh,ð)
|
208
|
-
{L4_G_T} === ANTO
|
246
|
+
{L4_G_S} === (dh,ð)(dh,ð) * vv * (zhzh,zzh) * (ghgh,ggh)
|
247
|
+
{L4_G_T} === ANTO {GEMINATE} * AMPA {GEMINATE} * ANCA {GEMINATE} * UNQUE {GEMINATE}
|
209
248
|
|
210
249
|
[{L4_G_S}] --> [{L4_G_T}]
|
211
250
|
[{L4_G_S}]{V_D} --> [{L4_G_T}]{_V_D_}
|
212
251
|
|
213
|
-
{L4_N_S} === n(dh,ð)
|
214
|
-
{L4_N_T} === ANTO
|
252
|
+
{L4_N_S} === n(dh,ð) * (mv,nv) * nzh * (n,ñ)gh
|
253
|
+
{L4_N_T} === ANTO {NASAL} * AMPA {NASAL} * ANCA {NASAL} * UNQUE {NASAL}
|
215
254
|
|
216
255
|
[{L4_N_S}] --> [{L4_N_T}]
|
217
256
|
[{L4_N_S}]{V_D} --> [{L4_N_T}]{_V_D_}
|
@@ -228,8 +267,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
228
267
|
[{L5_G_S}] --> [{L5_G_T}]
|
229
268
|
[{L5_G_S}]{V_D} --> [{L5_G_T}]{_V_D_}
|
230
269
|
|
231
|
-
{L6_S} === w * y * rr
|
232
|
-
{L6_T} === VALA * ANNA * ROMEN
|
270
|
+
{L6_S} === w * y * rr * ww * yy
|
271
|
+
{L6_T} === VALA * ANNA * ROMEN {GEMINATE} * VALA {GEMINATE} * ANNA {GEMINATE}
|
233
272
|
[r * {L6_S}] --> [ ORE * {L6_T}]
|
234
273
|
[r * {L6_S}]{V_D} --> [ ROMEN * {L6_T}]{_V_D_}
|
235
274
|
|
@@ -242,29 +281,29 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
242
281
|
z{V_D} --> ESSE_NUQUERNA {_V_D_} \** Before a vowel goes down **\
|
243
282
|
z --> ESSE \** Any other pos, up **\
|
244
283
|
|
245
|
-
ns{V_D} --> SILME_NUQUERNA
|
246
|
-
ns --> SILME_NUQUERNA
|
247
|
-
nz{V_D} --> ESSE_NUQUERNA
|
248
|
-
nz --> ESSE_NUQUERNA
|
284
|
+
ns{V_D} --> SILME_NUQUERNA {NASAL} {_V_D_}
|
285
|
+
ns --> SILME_NUQUERNA {NASAL}
|
286
|
+
nz{V_D} --> ESSE_NUQUERNA {NASAL} {_V_D_}
|
287
|
+
nz --> ESSE_NUQUERNA {NASAL}
|
249
288
|
|
250
289
|
ts --> TINCO ALVEOLAR_SIGN
|
251
290
|
ps --> PARMA ALVEOLAR_SIGN
|
252
291
|
(ks,cs,x) --> QUESSE ALVEOLAR_SIGN
|
253
292
|
|
254
|
-
ts{V_D} --> TINCO {_V_D_}
|
255
|
-
ps{V_D} --> PARMA {_V_D_}
|
293
|
+
ts{V_D} --> TINCO ALVEOLAR_SIGN {_V_D_}
|
294
|
+
ps{V_D} --> PARMA ALVEOLAR_SIGN {_V_D_}
|
256
295
|
(ks,cs,x){V_D} --> QUESSE ALVEOLAR_SIGN {_V_D_}
|
257
296
|
|
258
297
|
h{V_D} --> HYARMEN {_V_D_}
|
259
298
|
h --> HYARMEN
|
260
|
-
hh{V_D} --> HYARMEN
|
261
|
-
hh --> HYARMEN
|
299
|
+
hh{V_D} --> HYARMEN {GEMINATE} {_V_D_}
|
300
|
+
hh --> HYARMEN {GEMINATE}
|
262
301
|
|
263
302
|
l{V_D} --> LAMBE {_V_D_}
|
264
303
|
l --> LAMBE
|
265
304
|
|
266
|
-
ll{V_D} --> LAMBE
|
267
|
-
ll --> LAMBE
|
305
|
+
ll{V_D} --> LAMBE {GEMINATE} {_V_D_}
|
306
|
+
ll --> LAMBE {GEMINATE}
|
268
307
|
|
269
308
|
(hl,lh){V_D} --> ALDA {_V_D_}
|
270
309
|
(hl,lh) --> ALDA
|
@@ -304,8 +343,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
304
343
|
» --> DQUOT_CLOSE
|
305
344
|
|
306
345
|
- --> PUNCT_DOT
|
307
|
-
– -->
|
308
|
-
— -->
|
346
|
+
– --> PUNCT_TILD
|
347
|
+
— --> PUNCT_DTILD
|
309
348
|
|
310
349
|
[ --> PUNCT_PAREN_L
|
311
350
|
] --> PUNCT_PAREN_R
|
@@ -29,10 +29,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
29
29
|
\language "Old English"
|
30
30
|
\writing "Tengwar"
|
31
31
|
\mode "West Saxon"
|
32
|
-
\version "0.0
|
33
|
-
\authors "Talagan (Benjamin Babut)"
|
32
|
+
\version "0.1.0"
|
33
|
+
\authors "J.R.R. Tolkien, impl. Talagan (Benjamin Babut)"
|
34
34
|
|
35
35
|
\charset tengwar_ds_eldamar true
|
36
|
+
\** Other charsets cannot handle all diacritics we are using here ... **\
|
37
|
+
|
38
|
+
\beg options
|
39
|
+
\beg option consonant_modification_style CONSONANT_MODIFICATION_STYLE_WAVE
|
40
|
+
\value CONSONANT_MODIFICATION_STYLE_WAVE 0
|
41
|
+
\value CONSONANT_MODIFICATION_STYLE_BAR 1
|
42
|
+
\end
|
43
|
+
\end
|
36
44
|
|
37
45
|
\beg preprocessor
|
38
46
|
\** Work exclusively downcase **\
|
@@ -65,6 +73,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
65
73
|
\beg processor
|
66
74
|
|
67
75
|
\beg rules litteral
|
76
|
+
|
77
|
+
\if "consonant_modification_style == CONSONANT_MODIFICATION_STYLE_WAVE"
|
78
|
+
{GEMINATE} === GEMINATE_SIGN_TILD
|
79
|
+
{NASAL} === NASALIZE_SIGN_TILD
|
80
|
+
\else
|
81
|
+
{GEMINATE} === GEMINATE_SIGN
|
82
|
+
{NASAL} === NASALIZE_SIGN
|
83
|
+
\endif
|
84
|
+
|
68
85
|
{A} === a
|
69
86
|
{AA} === á
|
70
87
|
{E} === e
|
@@ -134,16 +151,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
134
151
|
{L1_KER_2} === ċ * c * k
|
135
152
|
{L1_IMG_2} === CALMA * QUESSE * QUESSE
|
136
153
|
|
137
|
-
{L1_KER_1_GEMS} === tt
|
154
|
+
{L1_KER_1_GEMS} === tt * pp
|
138
155
|
{L1_IMG_1_GEMS} === TINCO GEMINATE_DOUBLE * PARMA GEMINATE_DOUBLE
|
139
|
-
{L1_KER_2_GEMS} === ċċ
|
156
|
+
{L1_KER_2_GEMS} === ċċ * cc * kk
|
140
157
|
{L1_IMG_2_GEMS} === CALMA GEMINATE_DOUBLE * QUESSE GEMINATE_DOUBLE * QUESSE GEMINATE_DOUBLE
|
141
158
|
|
142
159
|
|
143
160
|
{S_VOWELS_WN}[{L1_KER_1}]{S_VOWELS_WN} --> 2,1,3 --> [{L1_IMG_1}]{_S_VOWELS_UP_WN_}{_S_VOWELS_DN_WN_}
|
144
|
-
{S_VOWELS_WN}[{L1_KER_1_GEMS}]
|
161
|
+
{S_VOWELS_WN}[{L1_KER_1_GEMS}] --> 2,1 --> [{L1_IMG_1_GEMS}]{_S_VOWELS_UP_WN_}
|
145
162
|
{S_VOWELS_WN}[{L1_KER_2}]{S_VOWELS_WN} --> 2,1,3 --> [{L1_IMG_2}]{_S_VOWELS_UP_WN_}{_S_VOWELS_DN_WN_}
|
146
|
-
{S_VOWELS_WN}[{L1_KER_2_GEMS}]
|
163
|
+
{S_VOWELS_WN}[{L1_KER_2_GEMS}] --> 2,1 --> [{L1_IMG_2_GEMS}]{_S_VOWELS_UP_WN_}
|
147
164
|
|
148
165
|
{S_VOWELS_WN}[ nt * mp ]{S_VOWELS_WN} --> 2,1,3 --> [ TINCO TILD_SUP_S * PARMA TILD_SUP_S ]{_S_VOWELS_UP_WN_}{_S_VOWELS_DN_WN_}
|
149
166
|
{S_VOWELS_WN}[ nċ * nc ]{S_VOWELS_WN} --> 2,1,3 --> [ CALMA TILD_SUP_S * QUESSE TILD_SUP_S ]{_S_VOWELS_UP_WN_}{_S_VOWELS_DN_WN_}
|
@@ -159,7 +176,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
159
176
|
|
160
177
|
|
161
178
|
{S_VOWELS_WN}[{L2_KER}]{S_VOWELS_WN} --> 2,1,3 --> [{L2_IMG}]{_S_VOWELS_UP_WN_}{_S_VOWELS_DN_WN_}
|
162
|
-
{S_VOWELS_WN}[{L2_KER_GEMS}]
|
179
|
+
{S_VOWELS_WN}[{L2_KER_GEMS}] --> 2,1 --> [{L2_IMG_GEMS}]{_S_VOWELS_UP_WN_}
|
163
180
|
|
164
181
|
{S_VOWELS_WN}[ nd * mb * nġ * ng ]{S_VOWELS_WN} --> 2,1,3 --> [ ANDO TILD_SUP_L * UMBAR TILD_SUP_L * ANGA TILD_SUP_L * UNGWE TILD_SUP_L ]{_S_VOWELS_UP_WN_}{_S_VOWELS_DN_WN_}
|
165
182
|
|
@@ -177,9 +194,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
177
194
|
{L3_IMG_2_GEMS} === AHA GEMINATE_DOUBLE * HWESTA GEMINATE_DOUBLE
|
178
195
|
|
179
196
|
{S_VOWELS_WN}[{L3_KER_1}]{S_VOWELS_WN} --> 2,1,3 --> [{L3_IMG_1}]{_S_VOWELS_UP_WN_}{_S_VOWELS_DN_WN_}
|
180
|
-
{S_VOWELS_WN}[{L3_KER_1_GEMS}]
|
197
|
+
{S_VOWELS_WN}[{L3_KER_1_GEMS}] --> 2,1 --> [{L3_IMG_1_GEMS}]{_S_VOWELS_UP_WN_}
|
181
198
|
{S_VOWELS_WN}[{L3_KER_2}]{S_VOWELS_WN} --> 2,1,3 --> [{L3_IMG_2}]{_S_VOWELS_UP_WN_}{_S_VOWELS_DN_WN_}
|
182
|
-
{S_VOWELS_WN}[{L3_KER_2_GEMS}]
|
199
|
+
{S_VOWELS_WN}[{L3_KER_2_GEMS}] --> 2,1 --> [{L3_IMG_2_GEMS}]{_S_VOWELS_UP_WN_}
|
183
200
|
|
184
201
|
|
185
202
|
\** ## 4th Line (Voiced fricatives) **\
|
@@ -193,7 +210,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
193
210
|
|
194
211
|
|
195
212
|
{S_VOWELS_WN}[{L4_KER}]{S_VOWELS_WN} --> 2,1,3 --> [{L4_IMG}]{_S_VOWELS_UP_WN_}{_S_VOWELS_DN_WN_}
|
196
|
-
{S_VOWELS_WN}[{L4_KER_GEMS}]
|
213
|
+
{S_VOWELS_WN}[{L4_KER_GEMS}] --> 2,1 --> [{L4_IMG_GEMS}]{_S_VOWELS_UP_WN_}
|
197
214
|
|
198
215
|
|
199
216
|
\** ## 5th Line (Nasals) **\
|
@@ -203,7 +220,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
203
220
|
{L5_IMG} === NUMEN * MALTA
|
204
221
|
|
205
222
|
{S_VOWELS_WN}[{L5_KER}]{S_VOWELS_WN} --> 2,1,3 --> [{L5_IMG}]{_S_VOWELS_UP_WN_}{_S_VOWELS_DN_WN_}
|
206
|
-
{S_VOWELS_WN}[ nn * mm ]{S_VOWELS_WN}
|
223
|
+
{S_VOWELS_WN}[ nn * mm ]{S_VOWELS_WN} --> 2,1,3 --> [ NUMEN TILD_SUP_L * MALTA TILD_SUP_L ]{_S_VOWELS_UP_WN_}{_S_VOWELS_DN_WN_}
|
207
224
|
|
208
225
|
|
209
226
|
\** ## 6th Line (Approximants == fr : Spirantes) **\
|
@@ -215,7 +232,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
215
232
|
{L6_IMG_GEMS} === ORE GEMINATE_DOUBLE * ANNA GEMINATE_DOUBLE
|
216
233
|
|
217
234
|
{S_VOWELS_WN}[{L6_KER}]{S_VOWELS_WN} --> 2,1,3 --> [{L6_IMG}]{_S_VOWELS_UP_WN_}{_S_VOWELS_DN_WN_}
|
218
|
-
{S_VOWELS_WN}[{L6_KER_GEMS}]
|
235
|
+
{S_VOWELS_WN}[{L6_KER_GEMS}] --> 2,1 --> [{L6_IMG_GEMS}]{_S_VOWELS_UP_WN_}
|
219
236
|
|
220
237
|
|
221
238
|
\** ## Liquids **\
|
@@ -261,7 +278,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
261
278
|
\** ## Various **\
|
262
279
|
\** ## **\
|
263
280
|
{S_VOWELS_WN}h{S_VOWELS_WN} --> 2,1,3 --> HYARMEN {_S_VOWELS_UP_WN_}{_S_VOWELS_DN_WN_}
|
264
|
-
{S_VOWELS_WN}hh
|
281
|
+
{S_VOWELS_WN}hh --> 2,1 --> HYARMEN GEMINATE_DOUBLE {_S_VOWELS_UP_WN_}
|
265
282
|
|
266
283
|
|
267
284
|
\** ## X **\
|
data/lib/api/charset.rb
CHANGED
@@ -50,6 +50,8 @@ module Glaemscribe
|
|
50
50
|
attr_accessor :names
|
51
51
|
attr_accessor :classes
|
52
52
|
attr_accessor :charset
|
53
|
+
attr_accessor :reversed
|
54
|
+
attr_accessor :default
|
53
55
|
|
54
56
|
class VirtualClass
|
55
57
|
attr_accessor :target
|
@@ -57,12 +59,20 @@ module Glaemscribe
|
|
57
59
|
end
|
58
60
|
|
59
61
|
def initialize
|
60
|
-
@classes
|
62
|
+
@classes = {} # result_char_1 => [trigger_char_1, trigger_char_2 ...] , result_char_1 => ...
|
61
63
|
@lookup_table = {}
|
64
|
+
@reversed = false
|
65
|
+
@default = nil
|
62
66
|
end
|
63
67
|
|
64
68
|
def str
|
65
|
-
|
69
|
+
|
70
|
+
# Will be called if the virtual char could not be replaced and still exists at the end of the transcription chain
|
71
|
+
if @default
|
72
|
+
@charset[@default].str
|
73
|
+
else
|
74
|
+
VIRTUAL_CHAR_OUTPUT
|
75
|
+
end
|
66
76
|
end
|
67
77
|
|
68
78
|
def finalize
|
@@ -83,9 +93,7 @@ module Glaemscribe
|
|
83
93
|
if rc.nil?
|
84
94
|
@charset.errors << Glaeml::Error.new(@line, "Trigger char #{trigger_char} points to unknown result char #{result_char}.")
|
85
95
|
elsif tc.nil?
|
86
|
-
@charset.errors << Glaeml::Error.new(@line, "Unknown trigger char #{trigger_char}.")
|
87
|
-
elsif tc.class == VirtualChar
|
88
|
-
@charset.errors << Glaeml::Error.new(@line, "Trigger char #{trigger_char} is virtual. This is not supported!")
|
96
|
+
@charset.errors << Glaeml::Error.new(@line, "Unknown trigger char #{trigger_char}.")
|
89
97
|
elsif rc.class == VirtualChar
|
90
98
|
@charset.errors << Glaeml::Error.new(@line, "Trigger char #{trigger_char} points to another virtual char #{result_char}. This is not supported!")
|
91
99
|
else
|
@@ -96,6 +104,14 @@ module Glaemscribe
|
|
96
104
|
end
|
97
105
|
}
|
98
106
|
}
|
107
|
+
if @default
|
108
|
+
c = @charset[@default]
|
109
|
+
if !c
|
110
|
+
@charset.errors << Glaeml::Error.new(@line, "Default char #{@default} does not match any real character in the charset.")
|
111
|
+
elsif c.virtual?
|
112
|
+
@charset.errors << Glaeml::Error.new(@line, "Default char #{@default} is virtual, it should be real only.")
|
113
|
+
end
|
114
|
+
end
|
99
115
|
end
|
100
116
|
|
101
117
|
def [](trigger_char_name)
|
@@ -127,14 +143,16 @@ module Glaemscribe
|
|
127
143
|
@chars << c
|
128
144
|
end
|
129
145
|
|
130
|
-
def add_virtual_char(line, classes, names)
|
146
|
+
def add_virtual_char(line, classes, names, reversed = false, default = nil)
|
131
147
|
return if names.empty? || names.include?("?") # Ignore characters with '?'
|
132
148
|
|
133
|
-
c
|
134
|
-
c.line
|
135
|
-
c.names
|
136
|
-
c.classes
|
137
|
-
c.charset
|
149
|
+
c = VirtualChar.new
|
150
|
+
c.line = line
|
151
|
+
c.names = names
|
152
|
+
c.classes = classes # We'll check errors in finalize
|
153
|
+
c.charset = self
|
154
|
+
c.reversed = reversed
|
155
|
+
c.default = default
|
138
156
|
@chars << c
|
139
157
|
end
|
140
158
|
|
data/lib/api/charset_parser.rb
CHANGED
@@ -40,6 +40,8 @@ module Glaemscribe
|
|
40
40
|
return @charset
|
41
41
|
end
|
42
42
|
|
43
|
+
# TODO : verify charset glaeml like we do with modes
|
44
|
+
|
43
45
|
doc.root_node.gpath("char").each { |char_element|
|
44
46
|
code = char_element.args[0].hex
|
45
47
|
names = char_element.args[1..-1].map{|cname| cname.strip }.reject{ |cname| cname.empty? }
|
@@ -47,15 +49,25 @@ module Glaemscribe
|
|
47
49
|
}
|
48
50
|
|
49
51
|
doc.root_node.gpath("virtual").each { |virtual_element|
|
50
|
-
names
|
51
|
-
|
52
|
+
names = virtual_element.args
|
53
|
+
reversed = false
|
54
|
+
default = nil
|
55
|
+
classes = []
|
56
|
+
|
52
57
|
virtual_element.gpath("class").each { |class_element|
|
53
58
|
vc = Charset::VirtualChar::VirtualClass.new
|
54
59
|
vc.target = class_element.args[0]
|
55
60
|
vc.triggers = class_element.args[1..-1].map{|cname| cname.strip }.reject{ |cname| cname.empty? }
|
56
61
|
classes << vc
|
57
62
|
}
|
58
|
-
|
63
|
+
virtual_element.gpath("reversed").each { |reversed_element|
|
64
|
+
reversed = true
|
65
|
+
}
|
66
|
+
virtual_element.gpath("default").each { |default_element|
|
67
|
+
default = default_element.args[0]
|
68
|
+
}
|
69
|
+
|
70
|
+
@charset.add_virtual_char(virtual_element.line,classes,names,reversed,default)
|
59
71
|
}
|
60
72
|
|
61
73
|
@charset.finalize
|