glaemscribe 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +19 -0
  3. data/bin/glaemscribe +307 -0
  4. data/glaemresources/charsets/cirth_ds.cst +205 -0
  5. data/glaemresources/charsets/sarati_eldamar.cst +256 -0
  6. data/glaemresources/charsets/tengwar_ds.cst +318 -0
  7. data/glaemresources/charsets/unicode_gothic.cst +64 -0
  8. data/glaemresources/charsets/unicode_runes.cst +120 -0
  9. data/glaemresources/modes/adunaic.glaem +251 -0
  10. data/glaemresources/modes/blackspeech-annatar.glaem +318 -0
  11. data/glaemresources/modes/blackspeech.glaem +260 -0
  12. data/glaemresources/modes/gothic.glaem +78 -0
  13. data/glaemresources/modes/khuzdul.glaem +141 -0
  14. data/glaemresources/modes/mercian.glaem +419 -0
  15. data/glaemresources/modes/oldnorse-medieval.glaem +127 -0
  16. data/glaemresources/modes/quenya-sarati.glaem +320 -0
  17. data/glaemresources/modes/quenya.glaem +307 -0
  18. data/glaemresources/modes/sindarin-beleriand.glaem +285 -0
  19. data/glaemresources/modes/sindarin-classical.glaem +276 -0
  20. data/glaemresources/modes/sindarin-daeron.glaem +182 -0
  21. data/glaemresources/modes/telerin.glaem +302 -0
  22. data/glaemresources/modes/valarin-sarati.glaem +210 -0
  23. data/glaemresources/modes/westron.glaem +340 -0
  24. data/glaemresources/modes/westsaxon.glaem +342 -0
  25. data/lib/api/charset.rb +84 -0
  26. data/lib/api/charset_parser.rb +55 -0
  27. data/lib/api/constants.rb +29 -0
  28. data/lib/api/debug.rb +36 -0
  29. data/lib/api/eval.rb +268 -0
  30. data/lib/api/fragment.rb +113 -0
  31. data/lib/api/glaeml.rb +200 -0
  32. data/lib/api/if_tree.rb +96 -0
  33. data/lib/api/mode.rb +112 -0
  34. data/lib/api/mode_parser.rb +314 -0
  35. data/lib/api/option.rb +64 -0
  36. data/lib/api/post_processor/reverse.rb +36 -0
  37. data/lib/api/pre_processor/downcase.rb +35 -0
  38. data/lib/api/pre_processor/elvish_numbers.rb +47 -0
  39. data/lib/api/pre_processor/rxsubstitute.rb +40 -0
  40. data/lib/api/pre_processor/substitute.rb +38 -0
  41. data/lib/api/pre_processor/up_down_tehta_split.rb +138 -0
  42. data/lib/api/resource_manager.rb +130 -0
  43. data/lib/api/rule.rb +99 -0
  44. data/lib/api/rule_group.rb +159 -0
  45. data/lib/api/sheaf.rb +70 -0
  46. data/lib/api/sheaf_chain.rb +86 -0
  47. data/lib/api/sheaf_chain_iterator.rb +108 -0
  48. data/lib/api/sub_rule.rb +40 -0
  49. data/lib/api/transcription_pre_post_processor.rb +118 -0
  50. data/lib/api/transcription_processor.rb +137 -0
  51. data/lib/api/transcription_tree_node.rb +91 -0
  52. data/lib/glaemscribe.rb +70 -0
  53. metadata +112 -0
@@ -0,0 +1,210 @@
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
+ \language "Valarin"
26
+ \writing "Sarati"
27
+ \mode "Glaemscrafu"
28
+ \version "0.0.1"
29
+ \authors "Talagan (Benjamin Babut)"
30
+
31
+ \charset sarati_eldamar true
32
+
33
+ \beg preprocessor
34
+ \** Work exclusively downcase **\
35
+ \downcase
36
+
37
+ \** Simplify trema vowels **\
38
+ \substitute ä a
39
+ \substitute ë e
40
+ \substitute ï i
41
+ \substitute ö o
42
+ \substitute ü u
43
+ \substitute ÿ y
44
+
45
+ \** Dis-ambiguate long vowels **\
46
+ \rxsubstitute "(ā|â|aa)" "á"
47
+ \rxsubstitute "(ē|ê|ee)" "é"
48
+ \rxsubstitute "(ī|î|ii)" "í"
49
+ \rxsubstitute "(ō|ô|oo)" "ó"
50
+ \rxsubstitute "(ū|û|uu)" "ú"
51
+ \rxsubstitute "(ȳ|ŷ|yy)" "ý"
52
+
53
+ \substitute "ai" "ay" \** Dis-ambiguate ai **\
54
+ \end
55
+
56
+ \beg processor
57
+
58
+ \outspace SARATI_SPACE
59
+
60
+ \beg rules litteral
61
+
62
+ {A} === a
63
+ {AA} === á
64
+ {E} === e
65
+ {EE} === é
66
+ {I} === i
67
+ {II} === í
68
+ {O} === o
69
+ {OO} === ó
70
+ {U} === u
71
+ {UU} === ú
72
+ {Y} === y
73
+ {YY} === ý
74
+
75
+ {AE} === (æ,ae)
76
+ {AEAE} === (ǽ,ǣ)
77
+
78
+ {OE} === ǫ
79
+ {OEOE} === ǭ
80
+
81
+ \** ################################################# **\
82
+ \** DIPHTHONGS are dis-ambiguated in the preprocessor # **\
83
+ \** ################################################# **\
84
+
85
+ \** ############# **\
86
+ \** DIACRITICS # **\
87
+ \** ############# **\
88
+
89
+ {VOWELS} === {A} * {E} * {I} * {O} * {U} * {AE} * {OE}
90
+ {LVOWELS} === {AA} * {EE} * {II} * {OO} * {UU} * {AEAE} * {OEOE}
91
+ {STEHTAS} === SARATI_QUENYA_A * SARATI_QUENYA_E * SARATI_QUENYA_I * SARATI_QUENYA_O * SARATI_QUENYA_U * SARATI_QUENYA_A_REVERSED * SARATI_DIACRITIC_CIRCLE
92
+
93
+ {V_L_KER_WN} === [ {VOWELS} * {NULL} ]
94
+ {V_IMG_FOR_CONSONNANTS_WN} === [ {STEHTAS} * {NULL} ] \** # No vowel == nothing **\
95
+
96
+ \** ######## **\
97
+ \** RULES # **\
98
+ \** ######## **\
99
+
100
+ [{VOWELS}] --> [{STEHTAS}] SARATI_QUENYA_LONG_VOWEL_CARRIER \** # Isolated vowels : use short carrier (reversed order RTL) **\
101
+ [{LVOWELS}] --> [{STEHTAS}] SARATI_DASH_U SARATI_QUENYA_LONG_VOWEL_CARRIER \** # Long vowels: carrier + dash + tehta **\
102
+
103
+ \** ########### **\
104
+ \** FIRST LINE **\
105
+
106
+ {K} === (c,k) \** # For tolkienian compatibility's sake **\
107
+
108
+ {LINE_1ST_KER} === t * p * {K} \** # * tt * pp * {K}{K} **\
109
+ {LINE_1ST_IMG} === SARATI_T * SARATI_P * SARATI_QUENYA_C \** # * ó" * óq * ó# **\
110
+
111
+ {V_L_KER_WN}[{LINE_1ST_KER}] --> {V_IMG_FOR_CONSONNANTS_WN}[{LINE_1ST_IMG}]
112
+
113
+ \** ########### **\
114
+ \** SECOND LINE **\
115
+
116
+ {LINE_2ND_KER} === d * b * g * gw
117
+ {LINE_2ND_IMG} === SARATI_QUENYA_ND * SARATI_QUENYA_MB * SARATI_NG * SARATI_PHONETIC_GW
118
+
119
+ {V_L_KER_WN}[{LINE_2ND_KER}] --> {V_IMG_FOR_CONSONNANTS_WN}[{LINE_2ND_IMG}]
120
+
121
+ \** ########### **\
122
+ \** THIRD LINE **\
123
+
124
+ {LINE_3RD_KER} === þ * s * š * (χ,x) * h * šš \** # * s_ **\
125
+ {LINE_3RD_IMG} === SARATI_QUENYA_NT * SARATI_QUENYA_S * SARATI_VOICELESS_PALATO_ALVEOLAR_SIBILANT_FRICATIVE * SARATI_VOICELESS_VELAR_FRICATIVE * SARATI_H * SARATI_DASH_D SARATI_VOICELESS_PALATO_ALVEOLAR_SIBILANT_FRICATIVE \** # * ü **\
126
+
127
+ {V_L_KER_WN}[{LINE_3RD_KER}] --> {V_IMG_FOR_CONSONNANTS_WN}[{LINE_3RD_IMG}]
128
+
129
+ \** ########### **\
130
+ \** FOURTH LINE **\
131
+
132
+ {LINE_4TH_KER} === ð * z * ȝ \** # * z_ **\
133
+ {LINE_4TH_IMG} === SARATI_VOICED_DENTAL_FRICATIVE * SARATI_QUENYA_SS_ALT_1 * SARATI_VOICED_VELAR_FRICATIVE \** # * ú **\
134
+
135
+ {V_L_KER_WN}[{LINE_4TH_KER}] --> {V_IMG_FOR_CONSONNANTS_WN}[{LINE_4TH_IMG}]
136
+
137
+ \** ########### **\
138
+ \** FIFTH LINE **\
139
+
140
+ {LINE_5TH_KER} === m * n
141
+ {LINE_5TH_IMG} === SARATI_M * SARATI_N
142
+
143
+ {V_L_KER_WN}[{LINE_5TH_KER}] --> {V_IMG_FOR_CONSONNANTS_WN}[{LINE_5TH_IMG}]
144
+
145
+ \** ########### **\
146
+ \** SIXTH LINE **\
147
+
148
+ {LINE_6TH_KER} === l * ll
149
+ {LINE_6TH_IMG} === SARATI_L * SARATI_DASH_D SARATI_L
150
+
151
+ {V_L_KER_WN}[{LINE_6TH_KER}] --> {V_IMG_FOR_CONSONNANTS_WN}[{LINE_6TH_IMG}]
152
+
153
+ \** ########### **\
154
+ \** SEVENTH LINE **\
155
+
156
+ {LINE_7TH_KER} === r * rr
157
+ {LINE_7TH_IMG} === SARATI_R * SARATI_DASH_D SARATI_R
158
+
159
+ {V_L_KER_WN}[{LINE_7TH_KER}] --> {V_IMG_FOR_CONSONNANTS_WN}[{LINE_7TH_IMG}]
160
+
161
+ \** ########### **\
162
+ \** EIGHTH LINE **\
163
+
164
+ {LINE_8TH_KER} === y * w
165
+ {LINE_8TH_IMG} === SARATI_QUENYA_Y * SARATI_W
166
+
167
+ {V_L_KER_WN}[{LINE_8TH_KER}] --> {V_IMG_FOR_CONSONNANTS_WN}[{LINE_8TH_IMG}]
168
+ \end
169
+
170
+ \beg rules punctuation
171
+ · --> {NULL}
172
+ , --> {NULL}
173
+ ; --> {NULL}
174
+ : --> {NULL}
175
+ . --> SARATI_SPACE
176
+ - --> SARATI_SPACE
177
+ – --> SARATI_SPACE
178
+ ! --> {NULL}
179
+ ? --> {NULL}
180
+ ' --> {NULL}
181
+ [ --> {NULL}
182
+ ] --> {NULL}
183
+ ‘ --> {NULL}
184
+ ’ --> {NULL}
185
+ “ --> {NULL}
186
+ ” --> {NULL}
187
+ \end
188
+ \end
189
+
190
+ \beg postprocessor
191
+ \reverse
192
+ \end
193
+
194
+
195
+ \** # Voyelles : a æ e i o ǫ u / ǭ Ǭ **\
196
+ \** # Diphtongues : ai **\
197
+ \** # **\
198
+ \** # Occlusives aspirées ph th . . . kh . **\
199
+ \** # Occlusives sourdes p t . . . k . **\
200
+ \** # Occlusives sonores b d . . . g . **\
201
+ \** # Fricatives sourdes . þ s š . χ h **\
202
+ \** # Fricatives sonores . ð z . . ȝ . **\
203
+ \** # Nasales m n . . . . . **\
204
+ \** # Latérales . l . . . . . **\
205
+ \** # Vibrantes . r . . . . . **\
206
+ \** # Semi-voyelles w . . . y . . **\
207
+
208
+
209
+
210
+
@@ -0,0 +1,340 @@
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
+ \** Westron mode for glaemscribe (MAY BE INCOMPLETE) **\
26
+ \language Westron
27
+ \writing Tengwar
28
+ \mode Glaemscrafu
29
+ \version 0.0.1
30
+ \authors "Talagan (Benjamin Babut)"
31
+
32
+ \charset tengwar_ds true
33
+
34
+ \beg options
35
+ \option reverse_numbers true
36
+ \beg option numbers_base BASE_12
37
+ \value BASE_10 10
38
+ \value BASE_12 12
39
+ \end
40
+ \end
41
+
42
+ \beg preprocessor
43
+ \** Work exclusively downcase **\
44
+ \downcase
45
+
46
+ \** Simplify trema vowels **\
47
+ \substitute "ä" "a"
48
+ \substitute "ë" "e"
49
+ \substitute "ï" "i"
50
+ \substitute "ö" "o"
51
+ \substitute "ü" "u"
52
+ \substitute "ÿ" "y"
53
+
54
+ \** Dis-ambiguate long vowels **\
55
+ \rxsubstitute "(ā|â|aa)" "á"
56
+ \rxsubstitute "(ē|ê|ee)" "é"
57
+ \rxsubstitute "(ī|î|ii)" "í"
58
+ \rxsubstitute "(ō|ô|oo)" "ó"
59
+ \rxsubstitute "(ū|û|uu)" "ú"
60
+ \rxsubstitute "(ȳ|ŷ|yy)" "ý"
61
+
62
+ \** Preprocess numbers **\
63
+ \elvish_numbers "\\eval numbers_base" "\\eval reverse_numbers"
64
+ \end
65
+
66
+ \beg processor
67
+
68
+ \beg rules litteral
69
+ {A} === a
70
+ {AA} === á
71
+ {E} === e
72
+ {EE} === é
73
+ {I} === i
74
+ {II} === í
75
+ {O} === o
76
+ {OO} === ó
77
+ {U} === u
78
+ {UU} === ú
79
+
80
+ \** Short diphthongs **\
81
+ {AI} === {A}{I}
82
+ {AU} === {A}{U}
83
+ {EI} === {E}{I}
84
+ {EU} === {E}{U}
85
+ {OI} === {O}{I}
86
+ {OU} === {O}{U}
87
+ {UI} === {U}{I}
88
+ {IU} === {I}{U}
89
+
90
+ \** LONG diphthongs **\
91
+ {AAI} === {AA}{I} \** âi **\
92
+ {AAU} === {AA}{U} \** âu **\
93
+ {EEI} === {EE}{I} \** êi **\
94
+ {EEU} === {EE}{U} \** êu **\
95
+ {OOI} === {OO}{I} \** ôi **\
96
+ {OOU} === {OO}{U} \** ôu **\
97
+
98
+ {SDIPHTHONGS} === {AI} * {AU} * {EI} * {EU} * {IU} * {OI} * {OU} * {UI}
99
+ {SDIPHTHENGS} === YANTA A_TEHTA_L * URE A_TEHTA_L * YANTA E_TEHTA_L * URE E_TEHTA_L * URE I_TEHTA_L * YANTA O_TEHTA_L * URE O_TEHTA_L * YANTA U_TEHTA_L
100
+ {LDIPHTHONGS} === {AAI} * {AAU} * {EEI} * {EEU} * {OOI} * {OOU}
101
+ {LDIPHTHENGS} === ARA A_TEHTA_XS YANTA * ARA A_TEHTA_XS URE * ARA E_TEHTA_XS YANTA * ARA E_TEHTA_XS URE * ARA O_TEHTA_XS YANTA * ARA O_TEHTA_XS URE
102
+
103
+ {VOWELS} === {A} * {E} * {I} * {O} * {U}
104
+ {TEHTA_XS} === A_TEHTA_XS * E_TEHTA_XS * I_TEHTA_XS * O_TEHTA_XS * U_TEHTA_XS
105
+ {TEHTA__S} === A_TEHTA_S * E_TEHTA_S * I_TEHTA_S * O_TEHTA_S * U_TEHTA_S
106
+ {TEHTA__L} === A_TEHTA_L * E_TEHTA_L * I_TEHTA_L * O_TEHTA_L * U_TEHTA_L
107
+ {TEHTA_XL} === A_TEHTA_XL * E_TEHTA_XL * I_TEHTA_XL * O_TEHTA_XL * U_TEHTA_XL
108
+
109
+ {LVOWELS} === {AA} * {EE} * {II} * {OO} * {UU}
110
+ {LVOWTNG} === ARA A_TEHTA_XS * ARA E_TEHTA_XS * ARA I_TEHTA_XS * ARA O_TEHTA_XS * ARA U_TEHTA_XS
111
+
112
+ \** Let' put all vowels/diphthongs in the same basket **\
113
+ {V_D} === [ {VOWELS} * {LVOWELS} * {SDIPHTHONGS} * {LDIPHTHONGS} ]
114
+ \** And their images... **\
115
+ {T_XS_D} === [ {TEHTA_XS} * {LVOWTNG} * {SDIPHTHENGS} * {LDIPHTHENGS} ]
116
+ {T_S_D} === [ {TEHTA__S} * {LVOWTNG} * {SDIPHTHENGS} * {LDIPHTHENGS} ]
117
+ {T_L_D} === [ {TEHTA__L} * {LVOWTNG} * {SDIPHTHENGS} * {LDIPHTHENGS} ]
118
+ {T_XL_D} === [ {TEHTA_XL} * {LVOWTNG} * {SDIPHTHENGS} * {LDIPHTHENGS} ]
119
+
120
+ [{VOWELS}] --> TELCO [{TEHTA_XS}] \** Replace isolated short vowels **\
121
+ [{LVOWELS}] --> [{LVOWTNG}] \** Replace long vowels **\
122
+ [{SDIPHTHONGS}] --> [{SDIPHTHENGS}] \** Replace short diphthongs **\
123
+ [{LDIPHTHONGS}] --> [{LDIPHTHENGS}] \** Replace long diphthongs **\
124
+
125
+ \** ================ **\
126
+ \** CONSONANTS **\
127
+ \** ================ **\
128
+
129
+ {L1_S} === t * p * ch * (c,k)
130
+ {L1_T} === TINCO * PARMA * CALMA * QUESSE
131
+
132
+ [{L1_S}] --> [ {L1_T} ]
133
+ [{L1_S}]{V_D} --> [ {L1_T} ]{T_S_D}
134
+
135
+ {L1_G_S} === tt * pp *cch * (c,k)(c,k)
136
+ {L1_G_T} === TINCO DASH_INF_S * PARMA DASH_INF_S *CALMA DASH_INF_S * QUESSE DASH_INF_S
137
+
138
+ [{L1_G_S}] --> [ {L1_G_T} ]
139
+ [{L1_G_S}]{V_D} --> [ {L1_G_T} ]{T_S_D}
140
+
141
+ {L1_N_S} === nt * mp * nch * (n,ñ)(c,k)
142
+ {L1_N_T} === TINCO DASH_SUP_S * PARMA DASH_SUP_S * CALMA DASH_SUP_S * QUESSE DASH_SUP_S
143
+
144
+ [{L1_N_S}] --> [ {L1_N_T} ]
145
+ [{L1_N_S}]{V_D} --> [ {L1_N_T} ]{T_S_D}
146
+
147
+ {L2_S} === d * b * j * g
148
+ {L2_T} === ANDO * UMBAR * ANGA * UNGWE
149
+
150
+ [{L2_S}] --> [{L2_T}]
151
+ [{L2_S}]{V_D} --> [{L2_T}]{T_XL_D}
152
+
153
+ {L2_G_S} === dd * bb * jj * gg
154
+ {L2_G_T} === ANDO DASH_INF_L * UMBAR DASH_INF_L * ANGA DASH_INF_L * UNGWE DASH_INF_L
155
+
156
+ [{L2_G_S}] --> [{L2_G_T}]
157
+ [{L2_G_S}]{V_D} --> [{L2_G_T}]{T_XL_D}
158
+
159
+ {L2_N_S} === nd * Mb * nj * (n,ñ)g
160
+ {L2_N_T} === ANDO DASH_SUP_L * UMBAR DASH_SUP_L * ANGA DASH_SUP_L * UNGWE DASH_SUP_L
161
+
162
+ [{L2_N_S}] --> [{L2_N_T}]
163
+ [{L2_N_S}]{V_D} --> [{L2_N_T}]{T_XL_D}
164
+
165
+ \** Alignment of tehta is not the same in the font **\
166
+ \** So we need to split the third line unfortunately **\
167
+ {L3_1_S} === (th,þ) * (f,ph)
168
+ {L3_1_T} === SULE * FORMEN
169
+
170
+ {L3_2_S} === sh * kh
171
+ {L3_2_T} === AHA * HWESTA
172
+
173
+ [{L3_1_S}] --> [{L3_1_T}]
174
+ [{L3_1_S}]{V_D} --> [{L3_1_T}]{T_S_D}
175
+ [{L3_2_S}] --> [{L3_2_T}]
176
+ [{L3_2_S}]{V_D} --> [{L3_2_T}]{T_L_D}
177
+
178
+ {L3_1G_S} === (thth,tth,þþ) * (ff,phph,pph)
179
+ {L3_1G_T} === SULE DASH_INF_S * FORMEN DASH_INF_S
180
+
181
+ {L3_2G_S} === (shsh,ssh) * (k,kh)kh
182
+ {L3_2G_T} === AHA DASH_INF_S * HWESTA DASH_INF_S
183
+
184
+ [{L3_1G_S}] --> [{L3_1G_T}]
185
+ [{L3_1G_S}]{V_D} --> [{L3_1G_T}]{T_S_D}
186
+ [{L3_2G_S}] --> [{L3_2G_T}]
187
+ [{L3_2G_S}]{V_D} --> [{L3_2G_T}]{T_L_D}
188
+
189
+ {L3_1N_S} === (nth,nþ) * (nf,mf,mph)
190
+ {L3_1N_T} === SULE DASH_SUP_S * FORMEN DASH_SUP_S
191
+
192
+ {L3_2N_S} === nsh * (n,ñ)kh
193
+ {L3_2N_T} === AHA DASH_SUP_S * HWESTA DASH_SUP_S
194
+
195
+ [{L3_1N_S}] --> [{L3_1N_T}]
196
+ [{L3_1N_S}]{V_D} --> [{L3_1N_T}]{T_S_D}
197
+ [{L3_2N_S}] --> [{L3_2N_T}]
198
+ [{L3_2N_S}]{V_D} --> [{L3_2N_T}]{T_L_D}
199
+
200
+ {L4_S} === (dh,ð) * v * zh * gh
201
+ {L4_T} === ANTO * AMPA * ANCA * UNQUE
202
+
203
+ [{L4_S}] --> [{L4_T}]
204
+ [{L4_S}]{V_D} --> [{L4_T}]{T_XL_D}
205
+
206
+ {L4_G_S} === (dh,ð)(dh,ð) * vv * (zhzh,zzh) * (ghgh,ggh)
207
+ {L4_G_T} === ANTO DASH_INF_L * AMPA DASH_INF_L * ANCA DASH_INF_L * UNQUE DASH_INF_L
208
+
209
+ [{L4_G_S}] --> [{L4_G_T}]
210
+ [{L4_G_S}]{V_D} --> [{L4_G_T}]{T_XL_D}
211
+
212
+ {L4_N_S} === n(dh,ð) * (mv,nv) * nzh * (n,ñ)gh
213
+ {L4_N_T} === ANTO DASH_SUP_L * AMPA DASH_SUP_L * ANCA DASH_SUP_L * UNQUE DASH_SUP_L
214
+
215
+ [{L4_N_S}] --> [{L4_N_T}]
216
+ [{L4_N_S}]{V_D} --> [{L4_N_T}]{T_XL_D}
217
+
218
+ {L5_S} === n * m * ny * ñ
219
+ {L5_T} === NUMEN * MALTA * NOLDO * NWALME
220
+
221
+ [{L5_S}] --> [{L5_T}]
222
+ [{L5_S}]{V_D} --> [{L5_T}]{T_XL_D}
223
+
224
+ {L5_G_S} === nn * mn * (nyny,nny) * ññ
225
+ {L5_G_T} === NUMEN * MALTA * NOLDO * NWALME
226
+
227
+ [{L5_G_S}] --> [{L5_G_T}]
228
+ [{L5_G_S}]{V_D} --> [{L5_G_T}]{T_XL_D}
229
+
230
+ {L6_S} === w * y * rr * ww * yy
231
+ {L6_T} === VALA * ANNA * ROMEN DASH_INF_S * VALA DASH_INF_S * ANNA DASH_INF_S
232
+ [r * {L6_S}] --> [ ORE * {L6_T}]
233
+ [r * {L6_S}]{V_D} --> [ ROMEN * {L6_T}]{T_S_D}
234
+
235
+ \** This one is not useful (redundant with higher) **\
236
+ \** Keep it for clarity of mind **\
237
+ r_ --> ORE
238
+
239
+ s{V_D} --> SILME_NUQUERNA {T_S_D} \** Before a vowel goes down **\
240
+ s --> SILME \** Any other pos, up **\
241
+ z{V_D} --> ESSE_NUQUERNA {T_S_D} \** Before a vowel goes down **\
242
+ z --> ESSE \** Any other pos, up **\
243
+
244
+ ns{V_D} --> SILME_NUQUERNA DASH_SUP_S {T_S_D}
245
+ ns --> SILME_NUQUERNA DASH_SUP_S
246
+ nz{V_D} --> ESSE_NUQUERNA DASH_SUP_S {T_S_D}
247
+ nz --> ESSE_NUQUERNA DASH_SUP_S
248
+
249
+ ts --> TINCO SHOOK_RIGHT_L
250
+ ps --> PARMA SHOOK_RIGHT_L
251
+ (ks,cs,x) --> QUESSE SHOOK_LEFT_L
252
+
253
+ ts{V_D} --> TINCO SHOOK_RIGHT_L {T_XL_D}
254
+ ps{V_D} --> PARMA SHOOK_RIGHT_L {T_XL_D}
255
+ (ks,cs,x){V_D} --> QUESSE SHOOK_LEFT_L {T_S_D}
256
+
257
+ h{V_D} --> HYARMEN {T_XS_D}
258
+ h --> HYARMEN
259
+ hh{V_D} --> HYARMEN DASH_INF_L {T_XS_D}
260
+ hh --> HYARMEN DASH_INF_L
261
+
262
+ l{V_D} --> LAMBE {T_L_D}
263
+ l --> LAMBE
264
+
265
+ ll{V_D} --> LAMBE LAMBE_MARK_TILD {T_L_D}
266
+ ll --> LAMBE LAMBE_MARK_TILD
267
+
268
+ (hl,lh){V_D} --> ALDA {T_XL_D}
269
+ (hl,lh) --> ALDA
270
+
271
+ (hr,rh){V_D} --> ARDA {T_XL_D}
272
+ (hr,rh) --> ARDA
273
+
274
+ \end
275
+
276
+ \beg rules punctutation
277
+ . --> PUNCT_DDOT
278
+ .. --> PUNCT_DOT PUNCT_DDOT PUNCT_DOT
279
+ … --> PUNCT_TILD
280
+ ... --> PUNCT_TILD
281
+ .... --> PUNCT_TILD
282
+ ..... --> PUNCT_TILD
283
+ ...... --> PUNCT_TILD
284
+ ....... --> PUNCT_TILD
285
+
286
+ , --> PUNCT_DOT
287
+ : --> PUNCT_DOT
288
+ ; --> PUNCT_DOT
289
+ ! --> PUNCT_EXCLAM
290
+ ? --> PUNCT_INTERR
291
+ · --> PUNCT_DOT
292
+
293
+ \** Apostrophe **\
294
+
295
+ ' --> {NULL}
296
+ ’ --> {NULL}
297
+
298
+ \** Quotes **\
299
+
300
+ “ --> DQUOT_OPEN
301
+ ” --> DQUOT_CLOSE
302
+ « --> DQUOT_OPEN
303
+ » --> DQUOT_CLOSE
304
+
305
+ - --> PUNCT_DOT
306
+ – --> WAVE_MED_SIMPLE
307
+ — --> WAVE_MED_DOUBLE
308
+
309
+ [ --> PUNCT_PAREN_L
310
+ ] --> PUNCT_PAREN_R
311
+ ( --> PUNCT_PAREN_L
312
+ ) --> PUNCT_PAREN_R
313
+ { --> PUNCT_PAREN_L
314
+ } --> PUNCT_PAREN_R
315
+ < --> PUNCT_PAREN_L
316
+ > --> PUNCT_PAREN_R
317
+
318
+ \** Not universal between fonts ... **\
319
+ $ --> BOOKMARK_SIGN
320
+ ≤ --> RING_MARK_L \** Ring inscription left beautiful stuff **\
321
+ ≥ --> RING_MARK_R \** Ring inscription right beautiful stuff **\
322
+ \end
323
+
324
+ \beg rules numbers
325
+ 0 --> NUM_0
326
+ 1 --> NUM_1
327
+ 2 --> NUM_2
328
+ 3 --> NUM_3
329
+ 4 --> NUM_4
330
+ 5 --> NUM_5
331
+ 6 --> NUM_6
332
+ 7 --> NUM_7
333
+ 8 --> NUM_8
334
+ 9 --> NUM_9
335
+ A --> NUM_10
336
+ B --> NUM_11
337
+ \end
338
+
339
+ \end
340
+