glaemscribe 1.1.14 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +5 -5
  2. data/bin/glaemscribe +19 -15
  3. data/glaemresources/charsets/cirth_ds.cst +205 -0
  4. data/glaemresources/charsets/sarati_eldamar.cst +256 -0
  5. data/glaemresources/charsets/tengwar_ds_annatar.cst +546 -0
  6. data/glaemresources/charsets/tengwar_ds_eldamar.cst +535 -0
  7. data/glaemresources/charsets/tengwar_ds_elfica.cst +551 -0
  8. data/glaemresources/charsets/tengwar_ds_parmaite.cst +534 -0
  9. data/glaemresources/charsets/tengwar_ds_sindarin.cst +531 -0
  10. data/glaemresources/charsets/tengwar_freemono.cst +217 -0
  11. data/glaemresources/charsets/tengwar_guni_annatar.cst +628 -0
  12. data/glaemresources/charsets/tengwar_guni_eldamar.cst +618 -0
  13. data/glaemresources/charsets/tengwar_guni_elfica.cst +620 -0
  14. data/glaemresources/charsets/tengwar_guni_parmaite.cst +621 -0
  15. data/glaemresources/charsets/tengwar_guni_sindarin.cst +617 -0
  16. data/glaemresources/charsets/tengwar_telcontar.cst +218 -0
  17. data/glaemresources/charsets/unicode_gothic.cst +64 -0
  18. data/glaemresources/charsets/unicode_runes.cst +121 -0
  19. data/glaemresources/modes/{adunaic.glaem → adunaic-tengwar-glaemscrafu.glaem} +14 -2
  20. data/glaemresources/modes/{blackspeech.glaem → blackspeech-tengwar-general_use.glaem} +12 -2
  21. data/glaemresources/modes/japanese-tengwar.glaem +771 -0
  22. data/glaemresources/modes/{khuzdul.glaem → khuzdul-cirth-moria.glaem} +4 -1
  23. data/glaemresources/modes/{futhorc.glaem → old_english-futhorc.glaem} +0 -0
  24. data/glaemresources/modes/{mercian.glaem → old_english-tengwar-mercian.glaem} +22 -12
  25. data/glaemresources/modes/{westsaxon.glaem → old_english-tengwar-westsaxon.glaem} +20 -11
  26. data/glaemresources/modes/{futhark-runicus.glaem → old_norse-futhark-runicus.glaem} +0 -0
  27. data/glaemresources/modes/{futhark-younger.glaem → old_norse-futhark-younger.glaem} +0 -0
  28. data/glaemresources/modes/{quenya.glaem → quenya-tengwar-classical.glaem} +32 -50
  29. data/glaemresources/modes/raw-tengwar.glaem +46 -23
  30. data/glaemresources/modes/{rlyehian.glaem → rlyehian-tengwar.glaem} +14 -3
  31. data/glaemresources/modes/{sindarin-daeron.glaem → sindarin-cirth-daeron.glaem} +55 -14
  32. data/glaemresources/modes/{sindarin-beleriand.glaem → sindarin-tengwar-beleriand.glaem} +154 -28
  33. data/glaemresources/modes/{sindarin.glaem → sindarin-tengwar-general_use.glaem} +86 -25
  34. data/glaemresources/modes/{telerin.glaem → telerin-tengwar-glaemscrafu.glaem} +16 -6
  35. data/glaemresources/modes/{westron.glaem → westron-tengwar-glaemscrafu.glaem} +18 -8
  36. data/lib/api/charset.rb +67 -7
  37. data/lib/api/charset_parser.rb +7 -0
  38. data/lib/api/constants.rb +3 -4
  39. data/lib/api/fragment.rb +26 -5
  40. data/lib/api/if_tree.rb +70 -8
  41. data/lib/api/macro.rb +40 -0
  42. data/lib/api/mode.rb +35 -13
  43. data/lib/api/mode_parser.rb +106 -12
  44. data/lib/api/object_additions.rb +23 -1
  45. data/lib/api/option.rb +17 -2
  46. data/lib/api/post_processor/resolve_virtuals.rb +25 -9
  47. data/lib/api/resource_manager.rb +1 -0
  48. data/lib/api/rule_group.rb +170 -26
  49. data/lib/api/sheaf_chain_iterator.rb +1 -1
  50. data/lib/api/transcription_processor.rb +3 -3
  51. data/lib/api/tts.rb +51 -0
  52. data/lib/glaemscribe.rb +34 -31
  53. data/lib_espeak/espeakng.for.glaemscribe.nowasm.sync.js +21 -0
  54. data/lib_espeak/glaemscribe_tts.js +365 -0
  55. metadata +67 -21
@@ -35,12 +35,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
35
35
  \entry "0.0.2" "Ported to virtual chars"
36
36
  \entry "0.0.3" "Ported to various charsets"
37
37
  \entry "0.1.1" "Added support for inlined raw tengwar"
38
+ \entry "0.1.2" "Added support for new unicode charsets"
39
+ \entry "0.1.3" "Added support for the Tengwar Telcontar font"
38
40
  \end
39
41
 
40
42
  \language "R'lyehian"
41
43
  \writing "Tengwar"
42
44
  \mode "R'lyehian Tengwar - G*"
43
- \version "0.1.1"
45
+ \version "0.1.3"
44
46
  \authors "H.P.Lovecraft & The Great Ancient Gods, impl. Fthalagn"
45
47
 
46
48
  \world other_world
@@ -53,7 +55,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
53
55
  \charset tengwar_ds_eldamar false
54
56
  \charset tengwar_ds_annatar false
55
57
  \charset tengwar_ds_elfica false
58
+
59
+ \charset tengwar_guni_sindarin false
60
+ \charset tengwar_guni_parmaite false
61
+ \charset tengwar_guni_eldamar false
62
+ \charset tengwar_guni_annatar false
63
+ \charset tengwar_guni_elfica false
64
+
56
65
  \charset tengwar_freemono false
66
+ \charset tengwar_telcontar false
67
+
57
68
 
58
69
  \beg options
59
70
  \end
@@ -178,7 +189,7 @@ y palatal semi vowel ?
178
189
  {O_LOOP} === O_TEHTA
179
190
  {U_LOOP} === U_TEHTA
180
191
 
181
- {TEHTAR} === A_TEHTA * E_TEHTA * I_TEHTA * O_TEHTA * U_TEHTA * SEV_TEHTA
192
+ {TEHTAR} === A_TEHTA * E_TEHTA * I_TEHTA * O_TEHTA * U_TEHTA * WA_TEHTA
182
193
 
183
194
  [{VOWELS}] --> TELCO [{TEHTAR}] \** Replace isolated short vowels **\
184
195
 
@@ -268,7 +279,7 @@ y palatal semi vowel ?
268
279
  > --> PUNCT_PAREN_R
269
280
 
270
281
  \** Not universal between fonts ... **\
271
- $ --> BOOKMARK_SIGN
282
+ $ --> ELVISH_PAREN
272
283
  ≤ --> RING_MARK_L \** Ring inscription left beautiful stuff **\
273
284
  ≥ --> RING_MARK_R \** Ring inscription right beautiful stuff **\
274
285
  \end
@@ -28,12 +28,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
28
28
  \entry 0.0.2 "Added thorn as equivalent for th"
29
29
  \entry 0.0.3 "Moved out space to general element"
30
30
  \entry 0.0.4 "Fixed wrong ch, hw, h"
31
+ \entry 0.0.5 "Added disambiguations from the tengwar modes. Reworked median point behaviour, and ng."
31
32
  \end
32
33
 
33
34
  \language "Sindarin"
34
35
  \writing "Cirth"
35
36
  \mode "Sindarin Cirth - Angerthas Daeron"
36
- \version "0.0.4"
37
+ \version "0.0.5"
37
38
  \authors "J.R.R. Tolkien, impl. Talagan (Benjamin Babut)"
38
39
 
39
40
  \world arda
@@ -44,10 +45,29 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
44
45
  \** We redefine the output space to have something beautiful, especially with erebor1 and erebor2 **\
45
46
  \outspace CIRTH_SPACE_BIG
46
47
 
48
+ \beg options
49
+ \beg option hyphen HYPHEN_WORD_BREAKER
50
+ \value HYPHEN_WORD_BREAKER 0
51
+ \value HYPHEN_WORD_JOINER 1
52
+ \end
53
+ \end
54
+
55
+
47
56
  \beg preprocessor
48
57
  \** Work exclusively downcase **\
49
58
  \downcase
50
59
 
60
+ \if "hyphen == HYPHEN_WORD_JOINER"
61
+ \** Replace hyphen by median point **\
62
+ \substitute "-" "·"
63
+ \else
64
+ \** Replace hyphen by glaemscribe's word breaker **\
65
+ \substitute "-" "|"
66
+ \endif
67
+
68
+ \** Add keyboard friendly word joiner **\
69
+ \substitute "*" "·"
70
+
51
71
  \** Simplify trema vowels **\
52
72
  \substitute ä a
53
73
  \substitute ë e
@@ -63,6 +83,25 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
63
83
  \rxsubstitute "(ō|ô|oo)" "ó"
64
84
  \rxsubstitute "(ū|û|uu)" "ú"
65
85
  \rxsubstitute "(ȳ|ŷ|yy)" "ý"
86
+
87
+ \** Special case of starting 'i' before vowels, replace i by j **\
88
+ \rxsubstitute "\\bi([aeouyáāâéēêíīîóōôúūûýȳŷ])" "j\\1"
89
+
90
+ \** Special case of diphtong aw. Before vowels, do not treat 'aw' as diphthong,
91
+ since it seems more logical that aw would behave as a semi vowel **\
92
+ \rxsubstitute "aw([aeouyáāâéēêíīîóōôúūûýȳŷ])" "a|w\\1"
93
+
94
+ \** Special case for ng : before the vast majority of consonnants, treat as ŋ **\
95
+ \** Don't include r / l / lh / w **\
96
+ \rxsubstitute "ng([tpckbdfðvnmhs])" "ŋ\\1"
97
+
98
+ \** Avoid mutated ng of being treated as strong middle word n|g (ex : i·ngelaidh [iŋɛlaið] ) **\
99
+ \substitute "·ng" "·ŋ"
100
+ \** But avoid losing the strong g in nasal mutation of g (ex : in·Gelydh [iŋgɛlyð]] ) **\
101
+ \substitute "n·g" "·ŋg"
102
+ \** Use median dot as word joiner **\
103
+ \substitute "·" ""
104
+
66
105
  \end
67
106
 
68
107
  \beg processor
@@ -115,16 +154,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
115
154
  (k,c) --> CIRTH_18
116
155
  (kh,ch) --> CIRTH_20
117
156
 
118
- ghw --> CIRTH_26
119
- gw --> CIRTH_24
120
157
 
121
158
  h --> CIRTH_54 \** 13 is more eng. ch like in chin and 15 is more eng. sh like in shoe **\
122
- hw --> CIRTH_5
123
159
 
124
160
  j --> CIRTH_14
125
161
 
126
- khw --> CIRTH_25
127
- kw --> CIRTH_23
128
162
  l --> CIRTH_31
129
163
  lh --> CIRTH_32
130
164
  m --> CIRTH_6
@@ -133,14 +167,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
133
167
  n --> CIRTH_12
134
168
  nc_ --> CIRTH_22 CIRTH_18 \** equals ŋc **\
135
169
  nd --> CIRTH_38
136
- ng --> CIRTH_33
137
-
138
- _ng --> CIRTH_22
139
- ng_ --> CIRTH_22
140
- ŋ --> CIRTH_22
170
+
171
+ \** Normalisation of ng **\
172
+ (ng,ngg,ŋg,ñg) --> CIRTH_33 \** strong **\
173
+ (ng_,_ng,ŋ,ñ) --> CIRTH_22 \** weak **\
141
174
 
142
- nw --> CIRTH_28
143
- ngw --> CIRTH_27
144
175
  nj --> CIRTH_17
145
176
  r --> CIRTH_29
146
177
  rh --> CIRTH_30
@@ -148,8 +179,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
148
179
  sh --> CIRTH_15
149
180
  ss --> CIRTH_36
150
181
  (þ,th) --> CIRTH_10
151
- w --> CIRTH_44
152
182
  zh --> CIRTH_16
183
+
184
+ \** Labials **\
185
+ hw --> CIRTH_5
186
+ ghw --> CIRTH_26
187
+ gw --> CIRTH_24
188
+ (ng,ngg,ŋg,ñg)w --> CIRTH_27 \** STRONG NG + W **\
189
+ khw --> CIRTH_25
190
+ kw --> CIRTH_23
191
+ nw --> CIRTH_28
192
+ w --> CIRTH_44
193
+
153
194
  \end
154
195
 
155
196
  \beg rules punctuation
@@ -33,12 +33,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
33
33
  \entry "0.1.1" "Added support for inlined raw tengwar"
34
34
  \entry "0.1.2" "Fine tuning handling of the aw diphthong (Thanks to Dmitry Kourmyshov!)"
35
35
  \entry "0.1.3" "Merging au/aw"
36
+ \entry "0.1.4" "Added support for new unicode charsets"
37
+ \entry "0.1.5" "Added support for the Tengwar Telcontar font"
38
+ \entry "0.1.6" "Corrected use of silme_nuquerna in ns / y, added a few exotic combinations. Reworked median point behaviour, and ng."
39
+ \entry "0.1.7" "Added variants with dot for short vowels, added gasdil."
36
40
  \end
37
41
 
38
42
  \language "Sindarin"
39
43
  \writing "Tengwar"
40
44
  \mode "Sindarin Tengwar - Beleriand"
41
- \version "0.1.3"
45
+ \version "0.1.6"
42
46
  \authors "J.R.R. Tolkien, impl. Talagan (Benjamin Babut)"
43
47
 
44
48
  \world arda
@@ -51,10 +55,64 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
51
55
  \charset tengwar_ds_eldamar false
52
56
  \charset tengwar_ds_annatar false
53
57
  \charset tengwar_ds_elfica false
58
+
59
+ \charset tengwar_guni_sindarin false
60
+ \charset tengwar_guni_parmaite false
61
+ \charset tengwar_guni_eldamar false
62
+ \charset tengwar_guni_annatar false
63
+ \charset tengwar_guni_elfica false
64
+
54
65
  \charset tengwar_freemono false
66
+ \charset tengwar_telcontar false
55
67
 
56
68
  \beg options
57
69
 
70
+ \beg option short_a SHORT_A_WITHOUT_DOT
71
+ \radio
72
+ \value SHORT_A_WITHOUT_DOT 0
73
+ \value SHORT_A_WITH_DOT 1
74
+ \end
75
+
76
+ \beg option short_e SHORT_E_WITHOUT_DOT
77
+ \radio
78
+ \value SHORT_E_WITHOUT_DOT 0
79
+ \value SHORT_E_WITH_DOT 1
80
+ \end
81
+
82
+ \beg option short_i SHORT_I_WITHOUT_DOT
83
+ \radio
84
+ \value SHORT_I_WITHOUT_DOT 0
85
+ \value SHORT_I_WITH_DOT 1
86
+ \end
87
+
88
+ \beg option short_o SHORT_O_WITHOUT_DOT
89
+ \radio
90
+ \value SHORT_O_WITHOUT_DOT 0
91
+ \value SHORT_O_WITH_DOT 1
92
+ \end
93
+
94
+ \beg option short_u SHORT_U_WITHOUT_DOT
95
+ \radio
96
+ \value SHORT_U_WITHOUT_DOT 0
97
+ \value SHORT_U_WITH_DOT 1
98
+ \end
99
+
100
+ \beg option short_y SHORT_Y_WITHOUT_DOT
101
+ \radio
102
+ \value SHORT_Y_WITHOUT_DOT 0
103
+ \value SHORT_Y_WITH_DOT 1
104
+ \end
105
+
106
+ \beg option apostrophe APOSTROPHE_IGNORED
107
+ \value APOSTROPHE_IGNORED 0
108
+ \value APOSTROPHE_GASDIL 1
109
+ \end
110
+
111
+ \beg option hyphen HYPHEN_WORD_BREAKER
112
+ \value HYPHEN_WORD_BREAKER 0
113
+ \value HYPHEN_WORD_JOINER 1
114
+ \end
115
+
58
116
  \beg option beleriand_aw_diphthong AW_VILYA_AT_ENDINGS_CURL_ELSE
59
117
  \value AW_VILYA_AT_ENDINGS_CURL_ELSE 0
60
118
  \value AW_ALWAYS_VILYA 1
@@ -79,6 +137,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
79
137
  \** Work exclusively downcase **\
80
138
  \downcase
81
139
 
140
+ \if "hyphen == HYPHEN_WORD_JOINER"
141
+ \** Replace hyphen by median point **\
142
+ \substitute "-" "·"
143
+ \else
144
+ \** Replace hyphen by glaemscribe's word breaker **\
145
+ \substitute "-" "|"
146
+ \endif
147
+
148
+ \** Add keyboard friendly word joiner **\
149
+ \substitute "*" "·"
150
+
82
151
  \** Simplify trema vowels **\
83
152
  \substitute ä a
84
153
  \substitute ë e
@@ -105,6 +174,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
105
174
  since it seems more logical that aw would behave as a semi vowel **\
106
175
  \rxsubstitute "aw([aeouyáāâéēêíīîóōôúūûýȳŷ])" "a|w\\1"
107
176
 
177
+ \** Special case for ng : before the vast majority of consonnants, treat as ŋ **\
178
+ \** Don't include r / l / lh / w **\
179
+ \rxsubstitute "ng([tpckbdfðvnmhs])" "ŋ\\1"
180
+
181
+ \** Avoid mutated ng of being treated as strong middle word n|g (ex : i·ngelaidh [iŋɛlaið] ) **\
182
+ \substitute "·ng" "·ŋ"
183
+ \** But avoid losing the strong g in nasal mutation of g (ex : in·Gelydh [iŋgɛlyð]] ) **\
184
+ \substitute "n·g" "·ŋg"
185
+ \** Use median dot as word joiner **\
186
+ \substitute "·" ""
187
+
108
188
  \** Preprocess numbers **\
109
189
  \elvish_numbers "\\eval numbers_base" "\\eval reverse_numbers"
110
190
  \end
@@ -143,34 +223,62 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
143
223
  {OE} === {O}{E}
144
224
 
145
225
  {K} === (c,k)
146
-
147
- \** RULES **\
148
- {A} --> OSSE
149
- {E} --> YANTA
150
- {I} --> TELCO
151
- {O} --> ANNA
152
- {U} --> URE
153
226
 
154
- {Y} --> SILME_NUQUERNA_ALT
227
+ \if "short_a == SHORT_A_WITH_DOT"
228
+ {A} --> OSSE I_TEHTA
229
+ \else
230
+ {A} --> OSSE
231
+ \endif
232
+
233
+ \if "short_e == SHORT_E_WITH_DOT"
234
+ {E} --> YANTA I_TEHTA
235
+ \else
236
+ {E} --> YANTA
237
+ \endif
238
+
239
+ \if "short_i == SHORT_I_WITH_DOT"
240
+ {I} --> TELCO I_TEHTA
241
+ \else
242
+ {I} --> TELCO
243
+ \endif
244
+
245
+ \if "short_o == SHORT_O_WITH_DOT"
246
+ {O} --> ANNA I_TEHTA
247
+ \else
248
+ {O} --> ANNA
249
+ \endif
250
+
251
+ \if "short_u == SHORT_U_WITH_DOT"
252
+ {U} --> URE I_TEHTA
253
+ \else
254
+ {U} --> URE
255
+ \endif
256
+
257
+ \if "short_y == SHORT_Y_WITH_DOT"
258
+ {Y} --> SILME_NUQUERNA I_TEHTA
259
+ \else
260
+ {Y} --> SILME_NUQUERNA
261
+ \endif
155
262
 
156
263
  {AA} --> OSSE E_TEHTA
157
264
  {EE} --> YANTA E_TEHTA
158
265
  {II} --> TELCO E_TEHTA
159
266
  {OO} --> ANNA E_TEHTA
160
267
  {UU} --> URE E_TEHTA
161
- {YY} --> SILME_NUQUERNA_ALT E_TEHTA
268
+ {YY} --> SILME_NUQUERNA E_TEHTA
162
269
 
163
- {AE} --> OSSE YANTA \** Should chose between OSSE YANTA and OSSE THSUP_TICK_INV_L. Old tengscribe had second one, amanye tenceli has first one. **\
270
+ \** Should chose between OSSE YANTA and OSSE THSUP_TICK_INV. Old tengscribe had second one, amanye tenceli has first one. **\
271
+ {AE} --> OSSE YANTA
164
272
  {AI} --> OSSE Y_TEHTA
165
- {AU} --> OSSE SEV_TEHTA
273
+ {AU} --> OSSE WA_TEHTA
166
274
 
167
275
  \if "beleriand_aw_diphthong == AW_VILYA_AT_ENDINGS_CURL_ELSE"
168
- ({AU},{AW}) --> OSSE SEV_TEHTA
276
+ ({AU},{AW}) --> OSSE WA_TEHTA
169
277
  ({AU},{AW})_ --> OSSE VILYA
170
278
  \elsif "beleriand_aw_diphthong == AW_ALWAYS_VILYA"
171
279
  ({AU},{AW}) --> OSSE VILYA
172
280
  \elsif "beleriand_aw_diphthong == AW_ALWAYS_CURL"
173
- ({AU},{AW}) --> OSSE SEV_TEHTA
281
+ ({AU},{AW}) --> OSSE WA_TEHTA
174
282
  \endif
175
283
 
176
284
  {EI} --> YANTA Y_TEHTA
@@ -197,9 +305,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
197
305
 
198
306
  [{L2}] --> [{_L2_}]
199
307
 
200
- mb --> UMBAR {NASAL}
201
- nd --> ANDO {NASAL}
202
-
308
+ mb --> UMBAR {NASAL}
309
+ nd --> ANDO {NASAL}
310
+
311
+ \** /ŋg/ : this is ng in middle of words + might be found at word start on mutation.
312
+ \** See also final/initial ng_ / _ng below **\
313
+ (ng,ngg,ŋg,ñg) --> ANGA {NASAL}
314
+
203
315
  \** ======== **\
204
316
  \** 3RD LINE **\
205
317
  \** ======== **\
@@ -224,7 +336,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
224
336
  \** ======== **\
225
337
  \** 5TH LINE **\
226
338
  \** ======== **\
227
- {L5} === nn * mm * ng
339
+ {L5} === nn * mm * (ng_,_ng,ŋ,ñ)
228
340
  {_L5_} === NUMEN * MALTA * NOLDO
229
341
 
230
342
  [{L5}] --> [{_L5_}]
@@ -253,7 +365,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
253
365
 
254
366
  [{S_LINE}] --> [{_S_LINE_}]
255
367
 
256
- ns --> SILME_NUQUERNA {NASAL}
368
+ \** REMOVING NEXT ONE WHICH CLASHES WITH Y **\
369
+ \** ns --> SILME_NUQUERNA {NASAL} **\
257
370
 
258
371
  \** ======== **\
259
372
  \** OTHERS **\
@@ -266,12 +379,26 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
266
379
  hw --> HWESTA_SINDARINWA
267
380
 
268
381
  \** labialized consonants **\
269
- dw --> ANDO SEV_TEHTA
270
- gw --> ANGA SEV_TEHTA
271
- lw --> LAMBE SEV_TEHTA
272
- nw --> ORE SEV_TEHTA
273
- rw --> ROMEN SEV_TEHTA
274
-
382
+ bw --> UMBAR WA_TEHTA \** Gnomish **\
383
+ dw --> ANDO WA_TEHTA
384
+ gw --> ANGA WA_TEHTA
385
+ lw --> LAMBE WA_TEHTA
386
+ nw --> ORE WA_TEHTA
387
+ rw --> ROMEN WA_TEHTA
388
+ (ng,ngg,ŋg,ñg)w --> ANGA {NASAL} WA_TEHTA
389
+ (_ng,ng_,ŋ,ñ)w --> NOLDO WA_TEHTA
390
+
391
+ \if "apostrophe == APOSTROPHE_IGNORED"
392
+ ' --> {NULL}
393
+ ’ --> {NULL}
394
+ \else
395
+ \** use gasdil **\
396
+ ' --> HALLA
397
+ ’ --> HALLA
398
+ \endif
399
+
400
+ \** Forced gasdil **\
401
+ ° --> HALLA
275
402
  \end
276
403
 
277
404
  \beg rules punctuation
@@ -297,8 +424,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
297
424
 
298
425
  \** Apostrophe **\
299
426
 
300
- ' --> {NULL}
301
- ’ --> {NULL}
427
+
302
428
 
303
429
  \** NBSP **\
304
430
  {NBSP} --> NBSP
@@ -320,7 +446,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
320
446
  > --> PUNCT_PAREN_R
321
447
 
322
448
  \** Not universal between fonts ... **\
323
- $ --> BOOKMARK_SIGN
449
+ $ --> ELVISH_PAREN
324
450
  ≤ --> RING_MARK_L \** Ring inscription left beautiful stuff **\
325
451
  ≥ --> RING_MARK_R \** Ring inscription right beautiful stuff **\
326
452
  \end