glaemscribe 1.1.14 → 1.3.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.
Files changed (62) hide show
  1. checksums.yaml +5 -5
  2. data/bin/glaemscribe +21 -17
  3. data/glaemresources/charsets/cirth_ds.cst +540 -0
  4. data/glaemresources/charsets/eldamar.cst +210 -0
  5. data/glaemresources/charsets/sarati_eldamar.cst +256 -0
  6. data/glaemresources/charsets/tengwar_ds_annatar.cst +2868 -0
  7. data/glaemresources/charsets/tengwar_ds_eldamar.cst +2729 -0
  8. data/glaemresources/charsets/tengwar_ds_elfica.cst +2742 -0
  9. data/glaemresources/charsets/tengwar_ds_parmaite.cst +2726 -0
  10. data/glaemresources/charsets/tengwar_ds_sindarin.cst +2722 -0
  11. data/glaemresources/charsets/tengwar_freemono.cst +217 -0
  12. data/glaemresources/charsets/tengwar_guni_annatar.cst +2948 -0
  13. data/glaemresources/charsets/tengwar_guni_eldamar.cst +2809 -0
  14. data/glaemresources/charsets/tengwar_guni_elfica.cst +2809 -0
  15. data/glaemresources/charsets/tengwar_guni_parmaite.cst +2813 -0
  16. data/glaemresources/charsets/tengwar_guni_sindarin.cst +2808 -0
  17. data/glaemresources/charsets/tengwar_telcontar.cst +225 -0
  18. data/glaemresources/charsets/unicode_gothic.cst +64 -0
  19. data/glaemresources/charsets/unicode_runes.cst +121 -0
  20. data/glaemresources/modes/{adunaic.glaem → adunaic-tengwar-glaemscrafu.glaem} +14 -2
  21. data/glaemresources/modes/{blackspeech.glaem → blackspeech-tengwar-general_use.glaem} +13 -3
  22. data/glaemresources/modes/english-cirth-espeak.glaem +687 -0
  23. data/glaemresources/modes/english-tengwar-espeak.glaem +814 -0
  24. data/glaemresources/modes/japanese-tengwar.glaem +776 -0
  25. data/glaemresources/modes/{khuzdul.glaem → khuzdul-cirth-moria.glaem} +4 -1
  26. data/glaemresources/modes/lang_belta-tengwar-dadef.glaem +248 -0
  27. data/glaemresources/modes/{futhorc.glaem → old_english-futhorc.glaem} +0 -0
  28. data/glaemresources/modes/{mercian.glaem → old_english-tengwar-mercian.glaem} +22 -12
  29. data/glaemresources/modes/{westsaxon.glaem → old_english-tengwar-westsaxon.glaem} +20 -11
  30. data/glaemresources/modes/{futhark-runicus.glaem → old_norse-futhark-runicus.glaem} +0 -0
  31. data/glaemresources/modes/{futhark-younger.glaem → old_norse-futhark-younger.glaem} +0 -0
  32. data/glaemresources/modes/{quenya.glaem → quenya-tengwar-classical.glaem} +32 -50
  33. data/glaemresources/modes/raw-cirth.glaem +154 -0
  34. data/glaemresources/modes/raw-tengwar.glaem +46 -23
  35. data/glaemresources/modes/{rlyehian.glaem → rlyehian-tengwar.glaem} +14 -3
  36. data/glaemresources/modes/{sindarin-daeron.glaem → sindarin-cirth-daeron.glaem} +55 -14
  37. data/glaemresources/modes/{sindarin-beleriand.glaem → sindarin-tengwar-beleriand.glaem} +154 -28
  38. data/glaemresources/modes/{sindarin.glaem → sindarin-tengwar-general_use.glaem} +86 -25
  39. data/glaemresources/modes/{telerin.glaem → telerin-tengwar-glaemscrafu.glaem} +16 -6
  40. data/glaemresources/modes/{westron.glaem → westron-tengwar-glaemscrafu.glaem} +18 -8
  41. data/lib/api/charset.rb +67 -7
  42. data/lib/api/charset_parser.rb +14 -1
  43. data/lib/api/constants.rb +3 -4
  44. data/lib/api/fragment.rb +26 -5
  45. data/lib/api/if_tree.rb +70 -8
  46. data/lib/api/macro.rb +40 -0
  47. data/lib/api/mode.rb +66 -19
  48. data/lib/api/mode_parser.rb +117 -14
  49. data/lib/api/object_additions.rb +23 -1
  50. data/lib/api/option.rb +17 -2
  51. data/lib/api/post_processor/outspace.rb +44 -0
  52. data/lib/api/post_processor/resolve_virtuals.rb +25 -9
  53. data/lib/api/resource_manager.rb +1 -0
  54. data/lib/api/rule_group.rb +170 -26
  55. data/lib/api/sheaf_chain_iterator.rb +1 -1
  56. data/lib/api/transcription_pre_post_processor.rb +8 -5
  57. data/lib/api/transcription_processor.rb +15 -12
  58. data/lib/api/tts.rb +51 -0
  59. data/lib/glaemscribe.rb +36 -31
  60. data/lib_espeak/espeakng.for.glaemscribe.nowasm.sync.js +35 -0
  61. data/lib_espeak/glaemscribe_tts.js +505 -0
  62. metadata +76 -24
@@ -0,0 +1,776 @@
1
+ \**
2
+
3
+ Glǽmscribe (also written Glaemscribe) is a software dedicated to
4
+ the transcription of texts between writing systems, and more
5
+ specifically dedicated to the transcription of J.R.R. Tolkien's
6
+ invented languages to some of his devised writing systems.
7
+
8
+ Copyright (C) 2015 Benjamin Babut (Talagan).
9
+
10
+ This program is free software: you can redistribute it and/or modify
11
+ it under the terms of the GNU Affero General Public License as published by
12
+ the Free Software Foundation, either version 3 of the License, or
13
+ any later version.
14
+
15
+ This program is distributed in the hope that it will be useful,
16
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ GNU Affero General Public License for more details.
19
+
20
+ You should have received a copy of the GNU Affero General Public License
21
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
22
+
23
+ **\
24
+
25
+ \beg changelog
26
+ \entry "0.0.1" "Initial version"
27
+ \entry "0.0.2" "Corrected 億 to 10^8, added support for セィ and ゼィ. Thanks to Roman Rausch for this feedback!"
28
+ \end
29
+
30
+ \language "Japanese"
31
+ \writing "Tengwar"
32
+ \mode "Japanese Tengwar - G*"
33
+ \authors "Talagan (Benjamin Babut)"
34
+ \version "0.0.2"
35
+
36
+ \world primary
37
+ \invention experimental
38
+
39
+ \raw_mode "raw-tengwar"
40
+
41
+ \charset tengwar_ds_sindarin false
42
+ \charset tengwar_ds_parmaite false
43
+ \charset tengwar_ds_eldamar false
44
+ \charset tengwar_ds_annatar true
45
+ \charset tengwar_ds_elfica false
46
+
47
+ \charset tengwar_guni_sindarin false
48
+ \charset tengwar_guni_parmaite false
49
+ \charset tengwar_guni_eldamar false
50
+ \charset tengwar_guni_annatar false
51
+ \charset tengwar_guni_elfica false
52
+
53
+ \charset tengwar_freemono false
54
+ \charset tengwar_telcontar false
55
+
56
+ \beg options
57
+
58
+ \** Vowel options **\
59
+ \beg option choon_long_vowels CHOON_CONFLATE
60
+ \value CHOON_CONFLATE 0
61
+ \value CHOON_KEEP_SEPARATE 1
62
+ \end
63
+ \** Yoon options **\
64
+ \beg option palatal_sign PALATAL_SIGN_UNUTIXE
65
+ \value PALATAL_SIGN_UNUTIXE 0
66
+ \value PALATAL_SIGN_DOUBLE_UNUTIXE 1
67
+ \end
68
+
69
+ \** Palatal **\
70
+ \beg option gojuon_y GOJUON_Y_USE_YANTA
71
+ \value GOJUON_Y_USE_TELCO 0
72
+ \value GOJUON_Y_USE_YANTA 1
73
+ \end
74
+
75
+ \** labial **\
76
+ \beg option gojuon_w GOJUON_W_USE_URE
77
+ \value GOJUON_W_USE_TELCO 0
78
+ \value GOJUON_W_USE_URE 1
79
+ \end
80
+
81
+ \** Consonant options **\
82
+ \beg option isolated_n ISOLATED_N_USE_NOLDO
83
+ \value ISOLATED_N_USE_NOLDO 0
84
+ \value ISOLATED_N_USE_MODIFIER 1
85
+ \end
86
+
87
+ \beg option geminates GEMINATES_USE_HALLA
88
+ \value GEMINATES_USE_HALLA 0
89
+ \value GEMINATES_USE_MODIFIER 1
90
+ \value GEMINATES_DOUBLE_TENGWA 2
91
+ \end
92
+
93
+ \beg option dakuten_h_p_b DAKUTEN_THK
94
+ \value DAKUTEN_THK 0 \** JP STYLE **\
95
+ \value DAKUTEN_TPK 1 \** ELVISH STYLE **\
96
+ \end
97
+
98
+ \** Foreign otpions **\
99
+ \beg option foreign_labialized FOREIGN_LABIALIZED_DOWN_TEHTA
100
+ \value FOREIGN_LABIALIZED_DOWN_TEHTA 0
101
+ \value FOREIGN_LABIALIZED_QUESSETEMA 1
102
+ \end
103
+
104
+ \beg option foreign_f_v FOREIGN_F_V_XTD
105
+ \value FOREIGN_F_V_XTD 0
106
+ \value FOREIGN_F_V_OVERSTEM 1
107
+ \end
108
+
109
+ \** Graphical style options **\
110
+ \beg option consonant_modification_style CONSONANT_MODIFICATION_STYLE_WAVE
111
+ \value CONSONANT_MODIFICATION_STYLE_WAVE 0
112
+ \value CONSONANT_MODIFICATION_STYLE_BAR 1
113
+ \end
114
+
115
+ \end
116
+
117
+ \beg preprocessor
118
+
119
+ \downcase
120
+
121
+ \** Normalize explicitly written long vowels **\
122
+ \rxsubstitute "[āâàá]" "aー"
123
+ \rxsubstitute "[īîíì]" "iー"
124
+ \rxsubstitute "[ūûúù]" "uー"
125
+ \rxsubstitute "[ēêéè]" "eー"
126
+ \rxsubstitute "[ōôóò]" "oー"
127
+
128
+ \** Normalize elvish bizarrerie **\
129
+ \substitute "ä" "a"
130
+ \substitute "ï" "i"
131
+ \substitute "ü" "u"
132
+ \substitute "ë" "e"
133
+ \substitute "ö" "o"
134
+
135
+ \if "choon_long_vowels == CHOON_CONFLATE"
136
+
137
+ \** ================== **\
138
+ \** Gojûon **\
139
+ \** ================== **\
140
+
141
+ \rxsubstitute "([あアカかさサたタなナはハまマらラがガざザだダばバぱパやヤわワ])[あアー]" "\\1ー"
142
+ \rxsubstitute "([いイきキしシちチにニひヒみミりリぎギじジぢヂびビぴピゐヰ])[いイー]" "\\1ー"
143
+ \rxsubstitute "([うウくクすスつツぬヌふフむムるルぐグずズづヅぶブぷプゆユ])[うウー]" "\\1ー"
144
+ \rxsubstitute "([えエけケせセてテねネへヘめメれレげゲぜゼでデべベぺペゑヱ])[いイー]" "\\1ー"
145
+ \rxsubstitute "([おオこコそソとトのノほホもモろロごゴぞゾどドぼボぽポよヨをヲ])[うウー]" "\\1ー"
146
+
147
+ \** too, oo . E.G. ookami, too **\
148
+ \rxsubstitute "([とトおオ])[おオ]" "\\1ー"
149
+ \** nee, ee . E.G. oneesan, nee, ee **\
150
+ \rxsubstitute "([ねネえエ])[えエ]" "\\1ー"
151
+
152
+ \** ================== **\
153
+ \** Yôon **\
154
+ \** ================== **\
155
+
156
+ \** Normalization of long vowels : yoon .yâ, .yû, .yô **\
157
+ \rxsubstitute "([ゃャ])[あアー]" "\\1ー"
158
+ \rxsubstitute "([ゅュ])[うウー]" "\\1ー"
159
+ \rxsubstitute "([ょョ])[うウー]" "\\1ー"
160
+
161
+ \** ================== **\
162
+ \** Rômaji equivalents **\
163
+ \** ================== **\
164
+
165
+ \**
166
+ a ka sa ta na ha ma ra ga za da ba pa ya wa + a = .â (k|s|t|n|h|m|r|g|z|d|b|p|y|w)
167
+ i ki shi chi ni hi mi ri gi ji dji bi pi - wi + i = .î (k|sh|ch|n|h|m|r|g|j|dj|b|p|w)
168
+ u ku su tsu nu fu mu ru gu ju dju bu pu yu - + u = .û (k|s|ts|n|f|m|r|g|j|dj|b|p|y)
169
+ e ke se te ne he me re ge ze de be pe - we + i = .ê (k|s|t|n|h|m|r|g|z|d|b|p|w)
170
+ o ko so to no ho mo ro go zo do bo po yo wo + u = .ô (k|s|t|n|h|m|r|g|z|d|b|p|y|w)
171
+ **\
172
+
173
+ \** Note : this additionally does handle the Yôon through y **\
174
+ \rxsubstitute "aa" "aー"
175
+ \rxsubstitute "ii" "iー"
176
+ \rxsubstitute "uu" "uー"
177
+ \rxsubstitute "ei" "eー"
178
+ \rxsubstitute "ou" "oー"
179
+
180
+ \** nee, ee . E.G. oneesan, nee, ee. Avoid breaking things like kee. **\
181
+ \rxsubstitute "(k|s|t|h|m|r|g|z|d|b|p|w)ee" "\\1e'e" \** Removed n for nee **\
182
+ \rxsubstitute "(k|s|n|h|m|r|g|z|d|b|p|y|w)oo" "\\1o'o" \** Removed t for too **\
183
+ \rxsubstitute "oo" "oー"
184
+ \rxsubstitute "ee" "eー"
185
+
186
+ \** Foreign additional stuff should always use macrons or accents to denote long vowels **\
187
+ \endif
188
+
189
+ \** Normalization of geminates. Simply introduce っ in romanisation ;) **\
190
+ \rxsubstitute "([tpkcs])\\1" "っ\\1"
191
+ \rxsubstitute "tch" "っch"
192
+
193
+ \** Far less common, maybe even impossible **\
194
+ \rxsubstitute "([h])\\1" "っ\\1"
195
+ \rxsubstitute "([dbgz])\\1" "っ\\1"
196
+ \rxsubstitute "([fvl])\\1" "っ\\1"
197
+ \rxsubstitute "([rwy])\\1" "っ\\1"
198
+
199
+ \** Normalization of isolated nasalizer n (&m). Simply introduce ん in romanisation :) **\
200
+ \rxsubstitute "(n|m)([^aeiouy]|$)" "ん\\2"
201
+
202
+ \end
203
+
204
+ \beg processor
205
+ \beg rules litteral
206
+
207
+ \** ================================ **\
208
+ \** PREREQUISITES **\
209
+ \** ================================ **\
210
+
211
+ \if "consonant_modification_style == CONSONANT_MODIFICATION_STYLE_WAVE"
212
+ {GEMINATE} === GEMINATE_SIGN_TILD
213
+ {NASAL} === NASALIZE_SIGN_TILD
214
+ \else
215
+ {GEMINATE} === GEMINATE_SIGN
216
+ {NASAL} === NASALIZE_SIGN
217
+ \endif
218
+
219
+ \** Dakuten / Handakuten resolution **\
220
+ \if "dakuten_h_p_b == DAKUTEN_THK"
221
+ {_P_TENGWA_} === VALA
222
+ {_H_TENGWA_} === PARMA
223
+ \else
224
+ {_P_TENGWA_} === PARMA
225
+ {_H_TENGWA_} === VALA
226
+ \endif
227
+
228
+ {MORAIC_NASAL} === (ん,ン)
229
+ {SOKUON} === (っ,ッ)
230
+
231
+ {_A_} === A_TEHTA
232
+ {_I_} === I_TEHTA
233
+ {_U_} === U_TEHTA
234
+ {_E_} === E_TEHTA
235
+ {_O_} === O_TEHTA
236
+
237
+ {_AA_} === A_TEHTA_REVERSED
238
+ {_II_} === I_TEHTA_DOUBLE
239
+ {_UU_} === U_TEHTA_DOUBLE
240
+ {_EE_} === E_TEHTA_DOUBLE
241
+ {_OO_} === O_TEHTA_DOUBLE
242
+
243
+ {_SHORT_VOWELS_} === [{_A_} * {_I_} * {_U_} * {_E_} * {_O_}]
244
+ {_LONG_VOWELS_} === [{_AA_} * {_II_} * {_UU_} * {_EE_} * {_OO_}]
245
+
246
+ {_SHORT_VOWELS_YON_} === [{_A_} * {_U_} * {_O_}]
247
+ {_LONG_VOWELS_YON_} === [{_AA_} * {_UU_} * {_OO_}]
248
+
249
+ {NASAL_OR_NOT} === [{NULL} * {MORAIC_NASAL}]
250
+ {GEMINATE_OR_NOT} === [{NULL} * {SOKUON}]
251
+ {MODS} === {NASAL_OR_NOT} {GEMINATE_OR_NOT}
252
+
253
+ \if "palatal_sign == PALATAL_SIGN_UNUTIXE"
254
+ {_PALATAL_} === UNUTIXE
255
+ \else
256
+ {_PALATAL_} === I_TEHTA_DOUBLE_INF
257
+ \endif
258
+
259
+ {_NASAL_} === {NASAL}
260
+ {_GEMINATE_} === {GEMINATE}
261
+ {_LABIAL_} === U_TEHTA_INF
262
+ {_CANCELLER_} === THINNAS
263
+ {_SIBILANT_} === SARINCE
264
+ {_CANCEL_THEN_PALATAL_} === CIRC_TEHTA_INF
265
+
266
+ \** THIS IS OUR GENERAL MACRO FOR JAPANESE. Will be used almost everywhere **\
267
+ \beg macro serie ARG_SERIE _ARG_MAIN_TENGWA_ _ARG_SERIE_MODIFIERS_ _ARG_SHORT_VOWELS_ _ARG_LONG_VOWELS_ _ARG_SIB_
268
+ {_PREMODS_} === {NULL}
269
+ {_POSTMODS_} === {NULL}
270
+ {__X__} === identity
271
+ \if "isolated_n == ISOLATED_N_USE_NOLDO"
272
+ \if "geminates == GEMINATES_USE_HALLA"
273
+ {_PREMODS_} === [{NULL} * NOLDO][{NULL} * HALLA]
274
+ \elsif "geminates == GEMINATES_DOUBLE_TENGWA"
275
+ {_PREMODS_} === [{NULL} * NOLDO][{NULL} * {_ARG_MAIN_TENGWA_}]
276
+ \else
277
+ {_PREMODS_} === [{NULL} * NOLDO]
278
+ {_POSTMODS_} === [{NULL} * {_GEMINATE_}]
279
+ \endif
280
+ \else
281
+ \if "geminates == GEMINATES_USE_HALLA"
282
+ {_PREMODS_} === [{NULL} * HALLA]
283
+ {_POSTMODS_} === [{NULL} * {_NASAL_}]
284
+ \** The nasal mark is before the geminate, but their position is reversed at the arrival, so cross rule here **\
285
+ {__X__} === 2,1,3
286
+ \elsif "geminates == GEMINATES_DOUBLE_TENGWA"
287
+ \** This case is the most complex because we want : (Teng Nasal) Teng **/
288
+ \** But it can be factorized by cheating because ; **\
289
+ \** (Teng Nasal) Teng = Teng (Nasal Teng) **\
290
+ {_POSTMODS_} === [{NULL} * {_NASAL_}][{NULL} * {_ARG_MAIN_TENGWA_}]
291
+ \else
292
+ {_POSTMODS_} === [{NULL} * {_NASAL_}][{NULL} * {_GEMINATE_}]
293
+ \endif
294
+ \endif
295
+ {MODS}{ARG_SERIE} --> {__X__} --> {_PREMODS_} {_ARG_MAIN_TENGWA_} {_POSTMODS_} {_ARG_SERIE_MODIFIERS_} {_ARG_SHORT_VOWELS_} {_ARG_SIB_}
296
+ {MODS}{ARG_SERIE}ー --> {__X__} --> {_PREMODS_} {_ARG_MAIN_TENGWA_} {_POSTMODS_} {_ARG_SERIE_MODIFIERS_} {_ARG_LONG_VOWELS_} {_ARG_SIB_}
297
+ \end
298
+
299
+ \** ================================ **\
300
+ \** START OF RULES **\
301
+ \** ================================ **\
302
+
303
+ \** Isolated vowels **\
304
+ {GOJUON} === [(あ,ア,a) * (い,イ,i) * (う,ウ,u) * (え,エ,e) * (お,オ,o)]
305
+ {YOON} === [(や,ヤ,ya) * (ゆ,ユ,yu) * (よ,ヨ,yo)]
306
+ {GOJUON} --> TELCO {_SHORT_VOWELS_}
307
+ {GOJUON}ー --> TELCO {_LONG_VOWELS_}
308
+
309
+ \** Isolated Y serie **\
310
+ \if "gojuon_y == GOJUON_Y_USE_YANTA"
311
+ {TENGWA} === YANTA
312
+ \else
313
+ {TENGWA} === TELCO {_PALATAL_}
314
+ \endif
315
+ {YOON} --> {TENGWA} {_SHORT_VOWELS_YON_}
316
+ {YOON}ー --> {TENGWA} {_LONG_VOWELS_YON_}
317
+
318
+ \** T serie **\
319
+ {GOJUON} === [(た,タ,ta) * (ち,チ,chi) * (つ,ツ,tsu) * (て,テ,te) * (と,ト,to)]
320
+ {YOON} === [(ちゃ,チャ,cha) * (ちゅ,チュ,chu) * (ちょ,チョ,cho)]
321
+ {TENGWA} === TINCO
322
+
323
+ \deploy serie {GOJUON} {TENGWA} {NULL} {_SHORT_VOWELS_} {_LONG_VOWELS_} {NULL}
324
+ \deploy serie {YOON} {TENGWA} {_PALATAL_} {_SHORT_VOWELS_YON_} {_LONG_VOWELS_YON_} {NULL}
325
+
326
+ \** P serie **\
327
+ {GOJUON} === [(ぱ,パ,pa) * (ぴ,ピ,pi) * (ぷ,プ,pu) * (ぺ,ペ,pe) * (ぽ,ポ,po)]
328
+ {YOON} === [(ぴゃ,ピャ,pya) * (ぴゅ,ピュ,pyu) * (ぴょ,ピョ,pyo)]
329
+ {TENGWA} === {_P_TENGWA_}
330
+
331
+ \deploy serie {GOJUON} {TENGWA} {NULL} {_SHORT_VOWELS_} {_LONG_VOWELS_} {NULL}
332
+ \deploy serie {YOON} {TENGWA} {_PALATAL_} {_SHORT_VOWELS_YON_} {_LONG_VOWELS_YON_} {NULL}
333
+
334
+ \** K serie **\
335
+ {GOJUON} === [(か,カ,ka) * (き,キ,ki) * (く,ク,ku) * (け,ケ,ke) * (こ,コ,ko)]
336
+ {YOON} === [(きゃ,キャ,kya) * (きゅ,キュ,kyu) * (きょ,キョ,kyo)]
337
+ {TENGWA} === CALMA
338
+
339
+ \deploy serie {GOJUON} {TENGWA} {NULL} {_SHORT_VOWELS_} {_LONG_VOWELS_} {NULL}
340
+ \deploy serie {YOON} {TENGWA} {_PALATAL_} {_SHORT_VOWELS_YON_} {_LONG_VOWELS_YON_} {NULL}
341
+
342
+ \** D serie **\
343
+ {GOJUON} === [(だ,ダ,da) * (ぢ,ヂ,dji) * (づ,ヅ,dzu) * (で,デ,de) * (ど,ド,do)]
344
+ {YOON} === [(ぢゃ,ヂャ,dja) * (ぢゅ,ヂュ,dju) * (ぢょ,ヂョ,djo)]
345
+ {TENGWA} === ANDO
346
+
347
+ \deploy serie {GOJUON} {TENGWA} {NULL} {_SHORT_VOWELS_} {_LONG_VOWELS_} {NULL}
348
+ \deploy serie {YOON} {TENGWA} {_PALATAL_} {_SHORT_VOWELS_YON_} {_LONG_VOWELS_YON_} {NULL}
349
+
350
+ \** B serie **\
351
+ {GOJUON} === [(ば,バ,ba) * (び,ビ,bi) * (ぶ,ブ,bu) * (べ,ベ,be) * (ぼ,ボ,bo)]
352
+ {YOON} === [(びゃ,ビャ,bya) * (びゅ,ビュ,byu) * (びょ,ビョ,byo)]
353
+ {TENGWA} === UMBAR
354
+
355
+ \deploy serie {GOJUON} {TENGWA} {NULL} {_SHORT_VOWELS_} {_LONG_VOWELS_} {NULL}
356
+ \deploy serie {YOON} {TENGWA} {_PALATAL_} {_SHORT_VOWELS_YON_} {_LONG_VOWELS_YON_} {NULL}
357
+
358
+ \** G Serie **\
359
+ {GOJUON} === [(が,ガ,ga) * (ぎ,ギ,gi) * (ぐ,グ,gu) * (げ,ゲ,ge) * (ご,ゴ,go)]
360
+ {YOON} === [(ぎゃ,ギャ,gya) * (ぎゅ,ギュ,gyu) * (ぎょ,ギョ,gyo)]
361
+ {TENGWA} === ANGA
362
+
363
+ \deploy serie {GOJUON} {TENGWA} {NULL} {_SHORT_VOWELS_} {_LONG_VOWELS_} {NULL}
364
+ \deploy serie {YOON} {TENGWA} {_PALATAL_} {_SHORT_VOWELS_YON_} {_LONG_VOWELS_YON_} {NULL}
365
+
366
+ \** N serie **\
367
+ {GOJUON} === [(な,ナ,na) * (に,ニ,ni) * (ぬ,ヌ,nu) * (ね,ネ,ne) * (の,ノ,no)]
368
+ {YOON} === [(にゃ,ニャ,nya) * (にゅ,ニュ,nyu) * (にょ,ニョ,nyo)]
369
+ {TENGWA} === NUMEN
370
+
371
+ \deploy serie {GOJUON} {TENGWA} {NULL} {_SHORT_VOWELS_} {_LONG_VOWELS_} {NULL}
372
+ \deploy serie {YOON} {TENGWA} {_PALATAL_} {_SHORT_VOWELS_YON_} {_LONG_VOWELS_YON_} {NULL}
373
+ {MORAIC_NASAL} --> NOLDO
374
+
375
+ \** M serie **\
376
+ {GOJUON} === [(ま,マ,ma) * (み,ミ,mi) * (む,ム,mu) * (め,メ,me) * (も,モ,mo)]
377
+ {YOON} === [(みゃ,ミャ,mya) * (みゅ,ミュ,myu) * (みょ,ミョ,myo)]
378
+ {TENGWA} === MALTA
379
+
380
+ \deploy serie {GOJUON} {TENGWA} {NULL} {_SHORT_VOWELS_} {_LONG_VOWELS_} {NULL}
381
+ \deploy serie {YOON} {TENGWA} {_PALATAL_} {_SHORT_VOWELS_YON_} {_LONG_VOWELS_YON_} {NULL}
382
+
383
+ \** H serie **\
384
+ {GOJUON} === [(は,ハ,ha) * (ひ,ヒ,hi) * (ふ,フ,fu) * (へ,ヘ,he) * (ほ,ホ,ho)]
385
+ {YOON} === [(ひゃ,ヒャ,hya) * (ひゅ,ヒュ,hyu) * (ひょ,ヒョ,hyo)]
386
+ {TENGWA} === {_H_TENGWA_}
387
+
388
+ \deploy serie {GOJUON} {TENGWA} {NULL} {_SHORT_VOWELS_} {_LONG_VOWELS_} {NULL}
389
+ \deploy serie {YOON} {TENGWA} {_PALATAL_} {_SHORT_VOWELS_YON_} {_LONG_VOWELS_YON_} {NULL}
390
+
391
+ \** S serie **\
392
+ {GOJUON} === [(さ,サ,sa) * (し,シ,shi) * (す,ス,su) * (せ,セ,se) * (そ,ソ,so)]
393
+ {YOON} === [(しゃ,シャ,sha) * (しゅ,シュ,shu) * (しょ,ショ,sho)]
394
+ {TENGWA} === SILME_NUQUERNA
395
+
396
+ \deploy serie {GOJUON} {TENGWA} {NULL} {_SHORT_VOWELS_} {_LONG_VOWELS_} {NULL}
397
+ \deploy serie {YOON} {TENGWA} {_PALATAL_} {_SHORT_VOWELS_YON_} {_LONG_VOWELS_YON_} {NULL}
398
+
399
+ \** Z serie **\
400
+ {GOJUON} === [(ざ,ザ,za) * (じ,ジ,ji) * (ず,ズ,zu) * (ぜ,ゼ,ze) * (ぞ,ゾ,zo)]
401
+ {YOON} === [(じゃ,ジャ,ja) * (じゅ,ジュ,ju) * (じょ,ジョ,jo)]
402
+ {TENGWA} === ESSE_NUQUERNA
403
+
404
+ \deploy serie {GOJUON} {TENGWA} {NULL} {_SHORT_VOWELS_} {_LONG_VOWELS_} {NULL}
405
+ \deploy serie {YOON} {TENGWA} {_PALATAL_} {_SHORT_VOWELS_YON_} {_LONG_VOWELS_YON_} {NULL}
406
+
407
+ \** R serie **\
408
+ {GOJUON} === [(ら,ラ,ra) * (り,リ,ri) * (る,ル,ru) * (れ,レ,re) * (ろ,ロ,ro)]
409
+ {YOON} === [(りゃ,リャ,rya) * (りゅ,リュ,ryu) * (りょ,リョ,ryo)]
410
+ {TENGWA} === ROMEN
411
+
412
+ \deploy serie {GOJUON} {TENGWA} {NULL} {_SHORT_VOWELS_} {_LONG_VOWELS_} {NULL}
413
+ \deploy serie {YOON} {TENGWA} {_PALATAL_} {_SHORT_VOWELS_YON_} {_LONG_VOWELS_YON_} {NULL}
414
+
415
+ \** W serie **\
416
+ {GOJUON} === [(わ,ワ,wa) * (ゐ,ヰ,wi) * (ゑ,ヱ,we) ]
417
+ \if "gojuon_w == GOJUON_W_USE_URE"
418
+ {TENGWA} === URE
419
+ \else
420
+ {TENGWA} === TELCO {_LABIAL_}
421
+ \endif
422
+
423
+ {__SV__} === [{_A_} * {_I_} * {_E_}]
424
+ {__LV__} === [{_AA_} * {_II_} * {_EE_}]
425
+ \deploy serie {GOJUON} {TENGWA} {NULL} {__SV__} {__LV__} {NULL}
426
+
427
+ \** SPECIALS **\
428
+ (へ,he,e){ASTERISK} --> NUM_12
429
+ (は,ha,wa){ASTERISK} --> HWESTA_SINDARINWA
430
+ (を,ヲ,wo,を{ASTERISK},ヲ{ASTERISK},wo{ASTERISK},o{ASTERISK}) --> VAIA
431
+ {ASTERISK} --> {NULL}
432
+
433
+ \** ***************** **\
434
+ \** Extended katakana **\
435
+ \** ***************** **\
436
+
437
+ \if "foreign_f_v == FOREIGN_F_V_XTD"
438
+ {_FOREIGN_F_} === TW_EXT_12
439
+ {_FOREIGN_V_} === TW_EXT_22
440
+ \else
441
+ {_FOREIGN_F_} === FORMEN
442
+ {_FOREIGN_V_} === AMPA
443
+ \endif
444
+
445
+ {SERIE} === [(イィ,yi) * (イェ,ye)]
446
+ \if "gojuon_y == GOJUON_Y_USE_YANTA"
447
+ {TENGWA} === YANTA
448
+ \else
449
+ {TENGWA} === TELCO {_PALATAL_}
450
+ \endif
451
+ {SERIE} --> {TENGWA} [{_I_} * {_E_}]
452
+ {SERIE}ー --> {TENGWA} [{_II_} * {_EE_}]
453
+
454
+ \** wa, wi, wu, we, wo **\
455
+ \** wa, wi, we - these latin combinations where already defined above **\
456
+ {SERIE} === [(ウァ,wa) * (ウィ,wi) * (ウゥ,wu) * (ウェ,we) * (ウォ,wo)]
457
+ \if "gojuon_w == GOJUON_W_USE_URE"
458
+ {TENGWA} === URE
459
+ \else
460
+ {TENGWA} === TELCO {_LABIAL_}
461
+ \endif
462
+
463
+ \deploy serie {SERIE} {TENGWA} {NULL} {_SHORT_VOWELS_} {_LONG_VOWELS_} {NULL}
464
+
465
+ {SERIE} === [(ウュ,wyu)]
466
+ {TENGWA} === URE \** only possibility : palatal + labial interfere so telco + labial + palatal will not work **\
467
+ {__SV__} === [{_U_}]
468
+ {__LV__} === [{_UU_}]
469
+ \deploy serie {SERIE} {TENGWA} {_PALATAL_} {__SV__} {__LV__} {NULL}
470
+
471
+ \** va vi vu ve vo **\
472
+ {SERIE} === [(ヴァ,ヷ,va) * (ヴィ,ヸ,vi) * (ヴ,vu) * (ヴェ,ヹ,ve) * (ヴォ,ヺ,vo)]
473
+ {TENGWA} === {_FOREIGN_V_}
474
+ \deploy serie {SERIE} {TENGWA} {NULL} {_SHORT_VOWELS_} {_LONG_VOWELS_} {NULL}
475
+
476
+
477
+ \** v yon : vya vyu vye vyo **\
478
+ {SERIE} === [(ヴャ,vya) * (ヴュ,vyu) * (ヴィェ,vye) * (ヴョ,vyo)]
479
+ {TENGWA} === {_FOREIGN_V_}
480
+ {__SV__} === [{_A_} * {_U_} * {_E_} * {_O_}]
481
+ {__LV__} === [{_AA_} * {_UU_} * {_EE_} * {_OO_}]
482
+ \deploy serie {SERIE} {TENGWA} {_PALATAL_} {__SV__} {__LV__} {NULL}
483
+
484
+ \** kye **\
485
+ {SERIE} === [(キェ,kye)]
486
+ {TENGWA} === CALMA
487
+ {__SV__} === [{_E_}]
488
+ {__LV__} === [{_EE_}]
489
+ \deploy serie {SERIE} {TENGWA} {_PALATAL_} {__SV__} {__LV__} {NULL}
490
+
491
+ \** gye **\
492
+ {SERIE} === [(ギェ,gye)]
493
+ {TENGWA} === ANGA
494
+ {__SV__} === [{_E_}]
495
+ {__LV__} === [{_EE_}]
496
+ \deploy serie {SERIE} {TENGWA} {_PALATAL_} {__SV__} {__LV__} {NULL}
497
+
498
+ \if "foreign_labialized == FOREIGN_LABIALIZED_DOWN_TEHTA"
499
+ {_FOREIGN_KW_} === CALMA
500
+ {_FOREIGN_GW_} === ANGA
501
+ {_FOREIGN_LABIALIZED_DIACRITIC_} === {_LABIAL_}
502
+ \else
503
+ {_FOREIGN_KW_} === QUESSE
504
+ {_FOREIGN_GW_} === UNGWE
505
+ {_FOREIGN_LABIALIZED_DIACRITIC_} === {NULL}
506
+ \endif
507
+
508
+ \** kWa, kWa, kwi, kwe, kwo **\
509
+ {SERIE} === [(クァ,クヮ,kwa) * (クィ,kwi) * (クェ,kwe) * (クォ,kwo)]
510
+ {TENGWA} === {_FOREIGN_KW_}
511
+ {__SV__} === [{_A_} * {_I_} * {_E_} * {_O_}]
512
+ {__LV__} === [{_AA_} * {_II_} * {_EE_} * {_OO_}]
513
+ \deploy serie {SERIE} {TENGWA} {_FOREIGN_LABIALIZED_DIACRITIC_} {__SV__} {__LV__} {NULL}
514
+
515
+
516
+ \** gwa, gWa, gwi, gwe, gwo **\
517
+ {SERIE} === [(グァ,グヮ,gwa) * (グィ,gwi) * (グェ,gwe) * (グォ,gwo)]
518
+ {TENGWA} === {_FOREIGN_GW_}
519
+ {__SV__} === [{_A_} * {_I_} * {_E_} * {_O_}]
520
+ {__LV__} === [{_AA_} * {_II_} * {_EE_} * {_OO_}]
521
+ \deploy serie {SERIE} {TENGWA} {_FOREIGN_LABIALIZED_DIACRITIC_} {__SV__} {__LV__} {NULL}
522
+
523
+ \** she **\
524
+ {SERIE} === [(シェ,she)]
525
+ {TENGWA} === SILME_NUQUERNA
526
+ {__SV__} === [{_E_}]
527
+ {__LV__} === [{_EE_}]
528
+ \deploy serie {SERIE} {TENGWA} {_PALATAL_} {__SV__} {__LV__} {NULL}
529
+
530
+
531
+ \** je **\
532
+ {SERIE} === [(ジェ,je)]
533
+ {TENGWA} === ESSE_NUQUERNA
534
+ {__SV__} === [{_E_}]
535
+ {__LV__} === [{_EE_}]
536
+ \deploy serie {SERIE} {TENGWA} {_PALATAL_} {__SV__} {__LV__} {NULL}
537
+
538
+ \** si **\
539
+ {SERIE} === [(スィ,セィ,si)]
540
+ {TENGWA} === SILME_NUQUERNA
541
+ {__SV__} === [{_I_}]
542
+ {__LV__} === [{_II_}]
543
+ \deploy serie {SERIE} {TENGWA} {_CANCELLER_} {__SV__} {__LV__} {NULL}
544
+
545
+ \** zi **\
546
+ {SERIE} === [(ズィ,ゼィ,zi)]
547
+ {TENGWA} === ESSE_NUQUERNA
548
+ {__SV__} === [{_I_}]
549
+ {__LV__} === [{_II_}]
550
+ \deploy serie {SERIE} {TENGWA} {_CANCELLER_} {__SV__} {__LV__} {NULL}
551
+
552
+ \** che **\
553
+ {SERIE} === [(チェ,che)]
554
+ {TENGWA} === TINCO
555
+ {__SV__} === [{_E_}]
556
+ {__LV__} === [{_EE_}]
557
+ \deploy serie {SERIE} {TENGWA} {_PALATAL_} {__SV__} {__LV__} {NULL}
558
+
559
+ \** tsa, tsi, tse, tso **\
560
+ {SERIE} === [(ツァ,tsa) * (ツィ,tsi) * (ツェ,tse) * (ツォ,tso)]
561
+ {TENGWA} === TINCO
562
+ {__SV__} === [{_A_} * {_I_} * {_E_} * {_O_}]
563
+ {__LV__} === [{_AA_} * {_II_} * {_EE_} * {_OO_}]
564
+ \deploy serie {SERIE} {TENGWA} {NULL} {__SV__} {__LV__} {_SIBILANT_}
565
+
566
+ \** tsyu = t sibilant + palatale + u **\
567
+ {SERIE} === [(ツュ,tsyu)]
568
+ {TENGWA} === TINCO
569
+ {__SV__} === [{_U_}]
570
+ {__LV__} === [{_UU_}]
571
+ \deploy serie {SERIE} {TENGWA} {_PALATAL_} {__SV__} {__LV__} {_SIBILANT_}
572
+
573
+
574
+ \** ti, tu **\
575
+ {SERIE} === [(ティ,ti) * (トゥ,tu)]
576
+ {TENGWA} === TINCO
577
+ {__SV__} === [{_I_} * {_U_}]
578
+ {__LV__} === [{_II_} * {_UU_}]
579
+ \deploy serie {SERIE} {TENGWA} {_CANCELLER_} {__SV__} {__LV__} {NULL}
580
+
581
+ \** tyu **\
582
+ {SERIE} === [(テュ,tyu)]
583
+ {TENGWA} === TINCO
584
+ {__SV__} === [{_U_}]
585
+ {__LV__} === [{_UU_}]
586
+ \deploy serie {SERIE} {TENGWA} {_CANCEL_THEN_PALATAL_} {__SV__} {__LV__} {NULL}
587
+
588
+ \** di, du **\
589
+ {SERIE} === [(ディ,di) * (ドゥ,du)]
590
+ {TENGWA} === ANDO
591
+ {__SV__} === [{_I_} * {_U_}]
592
+ {__LV__} === [{_II_} * {_UU_}]
593
+ \deploy serie {SERIE} {TENGWA} {_CANCELLER_} {__SV__} {__LV__} {NULL}
594
+
595
+ \** dyu **\
596
+ {SERIE} === [(デュ,dyu)]
597
+ {TENGWA} === ANDO
598
+ {__SV__} === [{_U_}]
599
+ {__LV__} === [{_UU_}]
600
+ \deploy serie {SERIE} {TENGWA} {_CANCEL_THEN_PALATAL_} {__SV__} {__LV__} {NULL}
601
+
602
+ \** nye **\
603
+ {SERIE} === [(ニェ,nye)]
604
+ {TENGWA} === NUMEN
605
+ {__SV__} === [{_E_}]
606
+ {__LV__} === [{_EE_}]
607
+ \deploy serie {SERIE} {TENGWA} {_PALATAL_} {__SV__} {__LV__} {NULL}
608
+
609
+ \** hye **\
610
+ {SERIE} === [(ヒェ,hye)]
611
+ {TENGWA} === {_H_TENGWA_}
612
+ {__SV__} === [{_E_}]
613
+ {__LV__} === [{_EE_}]
614
+ \deploy serie {SERIE} {TENGWA} {_PALATAL_} {__SV__} {__LV__} {NULL}
615
+
616
+ \** bye **\
617
+ {SERIE} === [(ビェ,bye)]
618
+ {TENGWA} === UMBAR
619
+ {__SV__} === [{_E_}]
620
+ {__LV__} === [{_EE_}]
621
+ \deploy serie {SERIE} {TENGWA} {_PALATAL_} {__SV__} {__LV__} {NULL}
622
+
623
+ \** pye **\
624
+ {SERIE} === [(ピェ,pye)]
625
+ {TENGWA} === {_P_TENGWA_}
626
+ {__SV__} === [{_E_}]
627
+ {__LV__} === [{_EE_}]
628
+ \deploy serie {SERIE} {TENGWA} {_PALATAL_} {__SV__} {__LV__} {NULL}
629
+
630
+ \** fa, fi, fu, fe, fo **\
631
+ {SERIE} === [(ファ,fa) * (フィ,fi) * (フェ,fe) * (フォ,fo)]
632
+ {TENGWA} === {_FOREIGN_F_}
633
+ {__SV__} === [{_A_} * {_I_} * {_E_} * {_O_}]
634
+ {__LV__} === [{_AA_} * {_II_} * {_EE_} * {_OO_}]
635
+ \deploy serie {SERIE} {TENGWA} {NULL} {__SV__} {__LV__} {NULL}
636
+
637
+ \** fya, fyu, fye, fyo **\
638
+ {SERIE} === [(フャ,fya) * (フュ,fyu) * (フィェ,fye) * (フョ,fyo)]
639
+ {TENGWA} === {_FOREIGN_F_}
640
+ {__SV__} === [{_A_} * {_U_} * {_E_} * {_O_}]
641
+ {__LV__} === [{_AA_} * {_UU_} * {_EE_} * {_OO_}]
642
+ \deploy serie {SERIE} {TENGWA} {_PALATAL_} {__SV__} {__LV__} {NULL}
643
+
644
+ \** hu **\
645
+ {SERIE} === [(ホゥ,hu)]
646
+ {TENGWA} === {_H_TENGWA_}
647
+ {__SV__} === [{_U_}]
648
+ {__LV__} === [{_UU_}]
649
+ \deploy serie {SERIE} {TENGWA} {_CANCELLER_} {__SV__} {__LV__} {NULL}
650
+
651
+ \** mye **\
652
+ {SERIE} === [(ミェ,mye)]
653
+ {TENGWA} === MALTA
654
+ {__SV__} === [{_E_}]
655
+ {__LV__} === [{_EE_}]
656
+ \deploy serie {SERIE} {TENGWA} {_PALATAL_} {__SV__} {__LV__} {NULL}
657
+
658
+ \** rye **\
659
+ {SERIE} === [(リェ,rye)]
660
+ {TENGWA} === ROMEN
661
+ {__SV__} === [{_E_}]
662
+ {__LV__} === [{_EE_}]
663
+ \deploy serie {SERIE} {TENGWA} {_PALATAL_} {__SV__} {__LV__} {NULL}
664
+
665
+ \** la, li, lu, le, lo / sons of the patriots **\
666
+ {SERIE} === [(ラ゜,la) * (リ゜,li) * (ル゜ ,lu) * (レ゜,le) * (ロ゜,lo)]
667
+ {TENGWA} === LAMBE
668
+ \deploy serie {SERIE} {TENGWA} {NULL} {_SHORT_VOWELS_} {_LONG_VOWELS_} {NULL}
669
+
670
+ \end
671
+
672
+ \beg rules punctuation
673
+ . --> PUNCT_DDOT
674
+ 。 --> PUNCT_DDOT
675
+ .. --> PUNCT_DOT PUNCT_DDOT PUNCT_DOT
676
+ … --> PUNCT_TILD
677
+ ‥ --> PUNCT_TILD \** JP tensen **\
678
+ ... --> PUNCT_TILD
679
+ .... --> PUNCT_TILD
680
+ ..... --> PUNCT_TILD
681
+ ...... --> PUNCT_TILD
682
+ ....... --> PUNCT_TILD
683
+
684
+ , --> PUNCT_DOT
685
+ 、 --> PUNCT_DOT
686
+ : --> PUNCT_DOT
687
+ ; --> PUNCT_DOT
688
+ ! --> PUNCT_EXCLAM
689
+ ? --> PUNCT_INTERR
690
+ · --> PUNCT_DOT
691
+ ・ --> {NULL} \** JP middle dot **\
692
+ ゠ --> {NULL} \** JP daburu haifun **\
693
+
694
+ \** Apostrophe **\
695
+
696
+ ' --> {NULL}
697
+ ’ --> {NULL}
698
+
699
+ \** NBSP **\
700
+ {NBSP} --> NBSP
701
+
702
+ \** Quotes **\
703
+
704
+ “ --> DQUOT_OPEN
705
+ ” --> DQUOT_CLOSE
706
+ « --> DQUOT_OPEN
707
+ » --> DQUOT_CLOSE
708
+
709
+ \** JP Quotes **\
710
+ 「 --> DQUOT_OPEN
711
+ 」 --> DQUOT_CLOSE
712
+
713
+ - --> {NULL}
714
+ – --> PUNCT_TILD
715
+ — --> PUNCT_TILD
716
+
717
+ 〜 --> PUNCT_TILD \** JP Tild **\
718
+ ~ --> PUNCT_TILD \** JP Tild **\
719
+
720
+ [ --> PUNCT_PAREN_L
721
+ ] --> PUNCT_PAREN_R
722
+ ( --> PUNCT_PAREN_L
723
+ ) --> PUNCT_PAREN_R
724
+ { --> PUNCT_PAREN_L
725
+ } --> PUNCT_PAREN_R
726
+ < --> PUNCT_PAREN_L
727
+ > --> PUNCT_PAREN_R
728
+
729
+ \** JP Paren **\
730
+ ( --> PUNCT_PAREN_L
731
+ ) --> PUNCT_PAREN_R
732
+ ([,〔,{,⦅,〈,《,【,〖,〘,〚) --> PUNCT_PAREN_L
733
+ (],〕,},⦆,〉,》,】,〗,〙,〛) --> PUNCT_PAREN_R
734
+
735
+ \** Not universal between fonts ... **\
736
+ $ --> ELVISH_PAREN
737
+ ≤ --> RING_MARK_L \** Ring inscription left beautiful stuff **\
738
+ ≥ --> RING_MARK_R \** Ring inscription right beautiful stuff **\
739
+
740
+ \end
741
+
742
+ \beg rules "numbers"
743
+ (〇,零) --> NUM_0
744
+ 一 --> NUM_1
745
+ 二 --> NUM_2
746
+ 三 --> NUM_3
747
+ 四 --> NUM_4
748
+ 五 --> NUM_5
749
+ 六 --> NUM_6
750
+ 七 --> NUM_7
751
+ 八 --> NUM_8
752
+ 九 --> NUM_9
753
+ 十 --> NUM_1 CIRC_TEHTA_INF
754
+ 百 --> NUM_2 CIRC_TEHTA_INF
755
+ 千 --> NUM_3 CIRC_TEHTA_INF
756
+ 万 --> NUM_4 CIRC_TEHTA_INF
757
+ 億 --> NUM_8 CIRC_TEHTA_INF
758
+ 0 --> NUM_0
759
+ 1 --> NUM_1
760
+ 2 --> NUM_2
761
+ 3 --> NUM_3
762
+ 4 --> NUM_4
763
+ 5 --> NUM_5
764
+ 6 --> NUM_6
765
+ 7 --> NUM_7
766
+ 8 --> NUM_8
767
+ 9 --> NUM_9
768
+ \end
769
+
770
+ \end
771
+
772
+
773
+
774
+ \beg postprocessor
775
+ \resolve_virtuals
776
+ \end