glaemscribe 1.0.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 (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,285 @@
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
+ \** Sindarin Beleriand mode 0.5 for jrrtranscribe (MAY BE INCOMPLETE) **\
26
+
27
+ \language "Sindarin"
28
+ \writing "Tengwar"
29
+ \mode "Beleriand"
30
+ \version "0.0.1"
31
+ \authors "Talagan (Benjamin Babut)"
32
+
33
+ \charset tengwar_ds true
34
+
35
+ \beg options
36
+ \option reverse_numbers true
37
+ \beg option numbers_base BASE_12
38
+ \value BASE_10 10
39
+ \value BASE_12 12
40
+ \end
41
+ \end
42
+
43
+ \beg preprocessor
44
+ \** Work exclusively downcase **\
45
+ \downcase
46
+
47
+ \** Simplify trema vowels **\
48
+ \substitute ä a
49
+ \substitute ë e
50
+ \substitute ï i
51
+ \substitute ö o
52
+ \substitute ü u
53
+ \substitute ÿ y
54
+
55
+ \** We should do better for that one (todo) **\
56
+ \substitute œ e
57
+
58
+ \** Dis-ambiguate long vowels **\
59
+ \rxsubstitute "(ā|â|aa)" "á"
60
+ \rxsubstitute "(ē|ê|ee)" "é"
61
+ \rxsubstitute "(ī|î|ii)" "í"
62
+ \rxsubstitute "(ō|ô|oo)" "ó"
63
+ \rxsubstitute "(ū|û|uu)" "ú"
64
+ \rxsubstitute "(ȳ|ŷ|yy)" "ý"
65
+
66
+ \** Special case of starting 'i' before vowels, replace i by j **\
67
+ \rxsubstitute "\\bi([aeouyáāâéēêíīîóōôúūûýȳŷ])" "j\\1"
68
+
69
+ \** Preprocess numbers **\
70
+ \elvish_numbers "\\eval numbers_base" "\\eval reverse_numbers"
71
+ \end
72
+
73
+ \beg processor
74
+
75
+ \beg rules litteral
76
+ {A} === a
77
+ {AA} === á
78
+ {E} === e
79
+ {EE} === é
80
+ {I} === i
81
+ {II} === í
82
+ {O} === o
83
+ {OO} === ó
84
+ {U} === u
85
+ {UU} === ú
86
+ {Y} === y
87
+ {YY} === ý
88
+
89
+ {AE} === {A}{E}
90
+ {AI} === {A}{I}
91
+ {AU} === {A}{U}
92
+ {AW} === {A}w
93
+ {EI} === {E}{I}
94
+ {UI} === {U}{I}
95
+ {OE} === {O}{E}
96
+
97
+ {K} === (c,k)
98
+
99
+ \** RULES **\
100
+ {A} --> OSSE
101
+ {E} --> YANTA
102
+ {I} --> TELCO
103
+ {O} --> ANNA
104
+ {U} --> URE
105
+
106
+ {Y} --> SILME_NUQUERNA_ALT
107
+
108
+ {AA} --> OSSE E_TEHTA_S
109
+ {EE} --> YANTA E_TEHTA_S
110
+ {II} --> TELCO E_TEHTA_XS
111
+ {OO} --> ANNA E_TEHTA_S
112
+ {UU} --> URE E_TEHTA_S
113
+ {YY} --> SILME_NUQUERNA_ALT E_TEHTA_S
114
+
115
+ {AE} --> OSSE YANTA \** Should chose between OSSE YANTA and OSSE THSUP_TICK_INV_L. Old tengscribe had second one, amanye tenceli has first one. **\
116
+ {AI} --> OSSE THSUP_DDOT_L
117
+ {AU} --> OSSE THSUP_SEV_L
118
+ {AW} --> OSSE THSUP_SEV_L
119
+ {EI} --> YANTA THSUP_DDOT_L
120
+ {UI} --> URE THSUP_DDOT_L
121
+ {OE} --> ANNA YANTA
122
+
123
+ \** ======== **\
124
+ \** 1ST LINE **\
125
+ \** ======== **\
126
+ {LINE_1ST_KER_1} === t * p
127
+ {LINE_1ST_IMG_1} === TINCO * PARMA
128
+ {LINE_1ST_KER_2} === {K}
129
+ {LINE_1ST_IMG_2} === CALMA
130
+
131
+ [{LINE_1ST_KER_1}] --> [{LINE_1ST_IMG_1}]
132
+ [{LINE_1ST_KER_2}] --> [{LINE_1ST_IMG_2}]
133
+
134
+ nt --> TINCO DASH_SUP_S
135
+ mp --> PARMA DASH_SUP_S
136
+ n{K} --> CALMA DASH_SUP_S
137
+
138
+ \** ======== **\
139
+ \** 2ND LINE **\
140
+ \** ======== **\
141
+ {LINE_2ND_KER} === d * b * g
142
+ {LINE_2ND_IMG} === ANDO * UMBAR * ANGA
143
+
144
+ [{LINE_2ND_KER}] --> [{LINE_2ND_IMG}]
145
+
146
+ mb --> UMBAR DASH_SUP_L
147
+ nd --> ANDO DASH_SUP_L
148
+
149
+ \** ======== **\
150
+ \** 3RD LINE **\
151
+ \** ======== **\
152
+ {LINE_3RD_KER_1} === th * (f,ph,ff)
153
+ {LINE_3RD_IMG_1} === SULE * FORMEN
154
+ {LINE_3RD_KER_2} === ch
155
+ {LINE_3RD_IMG_2} === AHA
156
+
157
+ [{LINE_3RD_KER_1}] --> [{LINE_3RD_IMG_1}]
158
+ [{LINE_3RD_KER_2}] --> [{LINE_3RD_IMG_2}]
159
+
160
+ nth --> SULE DASH_SUP_S
161
+ mph --> FORMEN DASH_SUP_S
162
+ nf --> FORMEN DASH_SUP_S
163
+ nch --> AHA DASH_SUP_S
164
+
165
+ \** ======== **\
166
+ \** 4TH LINE **\
167
+ \** ======== **\
168
+ {LINE_4TH_KER} === (ð,ðh,dh) * (v,bh,f_)
169
+ {LINE_4TH_IMG} === ANTO * AMPA
170
+
171
+ [{LINE_4TH_KER}] --> [{LINE_4TH_IMG}]
172
+
173
+ \** ======== **\
174
+ \** 5TH LINE **\
175
+ \** ======== **\
176
+ {LINE_5TH_KER} === nn * mm * ng
177
+ {LINE_5TH_IMG} === NUMEN * MALTA * NOLDO
178
+
179
+ [{LINE_5TH_KER}] --> [{LINE_5TH_IMG}]
180
+
181
+ \** ======== **\
182
+ \** 6TH LINE **\
183
+ \** ======== **\
184
+ {LINE_6TH_KER} === n * m * w * _mh
185
+ {LINE_6TH_IMG} === ORE * VALA * VILYA * MALTA_W_HOOK
186
+
187
+ [{LINE_6TH_KER}] --> [{LINE_6TH_IMG}]
188
+
189
+ \** ======== **\
190
+ \** R/L LINE **\
191
+ \** ======== **\
192
+ {LINE_L_KER} === r * _rh * l * _lh
193
+ {LINE_L_IMG} === ROMEN * ARDA * LAMBE * ALDA
194
+
195
+ [{LINE_L_KER}] --> [{LINE_L_IMG}]
196
+
197
+ \** ======== **\
198
+ \** S/Z LINE **\
199
+ \** ======== **\
200
+ {LINE_8TH_KER} === s
201
+ {LINE_8TH_IMG} === SILME
202
+
203
+ [{LINE_8TH_KER}] --> [{LINE_8TH_IMG}]
204
+
205
+ ns --> SILME_NUQUERNA DASH_SUP_S
206
+
207
+ \** ======== **\
208
+ \** OTHERS **\
209
+ \** ======== **\
210
+
211
+ j --> ARA
212
+
213
+ h --> HYARMEN
214
+
215
+ hw --> HWESTA_SINDARINWA
216
+ gw --> ANGA THSUP_SEV_XL
217
+ dw --> ANDO THSUP_SEV_XL
218
+ nw --> ORE THSUP_SEV_L
219
+ rw --> ROMEN THSUP_SEV_L
220
+ \end
221
+
222
+ \beg rules punctuation
223
+ . --> PUNCT_DDOT
224
+ .. --> PUNCT_DOT PUNCT_DDOT PUNCT_DOT
225
+ ... --> PUNCT_TILD
226
+ … --> PUNCT_TILD
227
+ .... --> PUNCT_TILD
228
+ ..... --> PUNCT_TILD
229
+ ...... --> PUNCT_TILD
230
+ ....... --> PUNCT_TILD
231
+
232
+ , --> PUNCT_DOT
233
+ : --> PUNCT_DOT
234
+ ; --> PUNCT_DOT
235
+ ! --> PUNCT_EXCLAM
236
+ ? --> PUNCT_INTERR
237
+ · --> {NULL}
238
+
239
+ - --> {NULL}
240
+ – --> PUNCT_TILD
241
+ — --> PUNCT_TILD
242
+
243
+ \** Apostrophe **\
244
+
245
+ ' --> {NULL}
246
+ ’ --> {NULL}
247
+
248
+ \** Quotes **\
249
+
250
+ “ --> DQUOT_OPEN
251
+ ” --> DQUOT_CLOSE
252
+ « --> DQUOT_OPEN
253
+ » --> DQUOT_CLOSE
254
+
255
+ [ --> PUNCT_PAREN_L
256
+ ] --> PUNCT_PAREN_R
257
+ ( --> PUNCT_PAREN_L
258
+ ) --> PUNCT_PAREN_R
259
+ { --> PUNCT_PAREN_L
260
+ } --> PUNCT_PAREN_R
261
+ < --> PUNCT_PAREN_L
262
+ > --> PUNCT_PAREN_R
263
+
264
+ \** Not universal between fonts ... **\
265
+ $ --> BOOKMARK_SIGN
266
+ ≤ --> RING_MARK_L \** Ring inscription left beautiful stuff **\
267
+ ≥ --> RING_MARK_R \** Ring inscription right beautiful stuff **\
268
+ \end
269
+
270
+ \beg rules numbers
271
+ 0 --> NUM_0
272
+ 1 --> NUM_1
273
+ 2 --> NUM_2
274
+ 3 --> NUM_3
275
+ 4 --> NUM_4
276
+ 5 --> NUM_5
277
+ 6 --> NUM_6
278
+ 7 --> NUM_7
279
+ 8 --> NUM_8
280
+ 9 --> NUM_9
281
+ A --> NUM_10
282
+ B --> NUM_11
283
+ \end
284
+
285
+ \end
@@ -0,0 +1,276 @@
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
+ \** Sindarin Classical mode for glaemscribe (MAY BE INCOMPLETE) **\
26
+
27
+ \language "Sindarin"
28
+ \writing "Tengwar"
29
+ \mode "Classical"
30
+ \version "0.0.1"
31
+ \authors "Talagan (Benjamin Babut)"
32
+
33
+ \charset tengwar_ds true
34
+
35
+ \beg options
36
+ \option reverse_numbers true
37
+ \beg option numbers_base BASE_12
38
+ \value BASE_10 10
39
+ \value BASE_12 12
40
+ \end
41
+ \end
42
+
43
+ \beg preprocessor
44
+ \** Work exclusively downcase **\
45
+ \downcase
46
+
47
+ \** Simplify trema vowels **\
48
+ \substitute ä a
49
+ \substitute ë e
50
+ \substitute ï i
51
+ \substitute ö o
52
+ \substitute ü u
53
+ \substitute ÿ y
54
+
55
+ \** We should do better for that one (todo) **\
56
+ \substitute œ e
57
+
58
+ \** Dis-ambiguate long vowels **\
59
+ \rxsubstitute "(ā|â|aa)" "á"
60
+ \rxsubstitute "(ē|ê|ee)" "é"
61
+ \rxsubstitute "(ī|î|ii)" "í"
62
+ \rxsubstitute "(ō|ô|oo)" "ó"
63
+ \rxsubstitute "(ū|û|uu)" "ú"
64
+ \rxsubstitute "(ȳ|ŷ|yy)" "ý"
65
+
66
+ \** Special case of starting 'i' before vowels, replace i by j **\
67
+ \rxsubstitute "\\bi([aeouyáāâéēêíīîóōôúūûýȳŷ])" "j\\1"
68
+
69
+ \** Preprocess numbers **\
70
+ \elvish_numbers "\\eval numbers_base" "\\eval reverse_numbers"
71
+ \end
72
+
73
+ \beg processor
74
+
75
+ \beg rules litteral
76
+
77
+ \** VOWELS **\
78
+ {A} === a
79
+ {AA} === á
80
+ {E} === e
81
+ {EE} === é
82
+ {I} === i
83
+ {II} === í
84
+ {O} === o
85
+ {OO} === ó
86
+ {U} === u
87
+ {UU} === ú
88
+ {Y} === y
89
+ {YY} === ý
90
+
91
+ {AE} === {A}{E}
92
+ {AI} === {A}{I}
93
+ {AU} === {A}{U}
94
+ {AW} === {A}w
95
+ {EI} === {E}{I}
96
+ {OE} === {O}{E}
97
+ {UI} === {U}{I}
98
+
99
+ \** CONSONANTS **\
100
+ {K} === (c,k)
101
+
102
+ {VOWELS} === {A} * {E} * {I} * {O} * {U} * {Y}
103
+ {LVOWELS} === {AA} * {EE} * {II} * {OO} * {UU} * {YY}
104
+
105
+
106
+ {TEHTA_XS} === A_TEHTA_XS * E_TEHTA_XS * I_TEHTA_XS * O_TEHTA_XS * U_TEHTA_XS * Y_TEHTA_XS
107
+ {TEHTA__S} === A_TEHTA_S * E_TEHTA_S * I_TEHTA_S * O_TEHTA_S * U_TEHTA_S * Y_TEHTA_S
108
+ {TEHTA__L} === A_TEHTA_L * E_TEHTA_L * I_TEHTA_L * O_TEHTA_L * U_TEHTA_L * Y_TEHTA_L
109
+ {TEHTA_XL} === A_TEHTA_XL * E_TEHTA_XL * I_TEHTA_XL * O_TEHTA_XL * U_TEHTA_XL * Y_TEHTA_XL
110
+
111
+ {LVOWELS_IMG} === ARA A_TEHTA_XS * ARA E_TEHTA_XS * ARA I_TEHTA_XS * ARA O_TEHTA_XS * ARA U_TEHTA_XS * ARA Y_TEHTA_XS
112
+
113
+ {DIPHTHONGS} === {AI} * {AU} * {AW} * {EI} * {UI} * {AE} * {OE}
114
+ {DIPHTHENGS} === ANNA A_TEHTA_L * VALA A_TEHTA_S * VALA A_TEHTA_S * ANNA E_TEHTA_S * ANNA U_TEHTA_L * YANTA A_TEHTA_S * YANTA O_TEHTA_S
115
+
116
+ \** Consonants + Vowels, we will often need these ones **\
117
+ {V_D_KER} === [ {VOWELS} ]
118
+ {V_D_KER_WN} === [ {VOWELS} * {NULL} ]
119
+
120
+ {V_D_IMG_XS} === [ {TEHTA_XS} ]
121
+ {V_D_IMG__S} === [ {TEHTA__L} ]
122
+ {V_D_IMG__L} === [ {TEHTA__S} ]
123
+ {V_D_IMG_XL} === [ {TEHTA_XL} ]
124
+ {V_D_IMG_XS_WN} === [ {TEHTA_XS} * {NULL} ]
125
+ {V_D_IMG__S_WN} === [ {TEHTA__L} * {NULL} ]
126
+ {V_D_IMG__L_WN} === [ {TEHTA__S} * {NULL} ]
127
+ {V_D_IMG_XL_WN} === [ {TEHTA_XL} * {NULL} ]
128
+
129
+ \** Vowel rules **\
130
+ [{VOWELS}] --> TELCO [{TEHTA_XS}] \** Replace isolated short vowels **\
131
+ [{LVOWELS}] --> [{LVOWELS_IMG}] \** Replace long vowels **\
132
+ [{DIPHTHONGS}] --> [{DIPHTHENGS}] \** Replace diphthongs **\
133
+
134
+ \** 1ST LINE **\
135
+ {LINE_1ST_KER_1} === t * p
136
+ {LINE_1ST_IMG_1} === TINCO * PARMA
137
+ {LINE_1ST_KER_2} === {K}
138
+ {LINE_1ST_IMG_2} === QUESSE
139
+
140
+ {V_D_KER_WN}[{LINE_1ST_KER_1}] --> 2,1 --> [{LINE_1ST_IMG_1}]{V_D_IMG__S_WN}
141
+ {V_D_KER_WN}[{LINE_1ST_KER_2}] --> 2,1 --> [{LINE_1ST_IMG_2}]{V_D_IMG__S_WN}
142
+
143
+ {V_D_KER_WN}nt --> TINCO DASH_SUP_S {V_D_IMG__S_WN}
144
+ {V_D_KER_WN}mp --> PARMA DASH_SUP_S {V_D_IMG__S_WN}
145
+ {V_D_KER_WN}n{K} --> CALMA DASH_SUP_S {V_D_IMG__S_WN}
146
+
147
+ \** 2ND LINE **\
148
+ {LINE_2ND_KER} === d * b * g * ng \** * g **\
149
+ {LINE_2ND_IMG} === ANDO * UMBAR * UNGWE * UNGWE DASH_SUP_L \** * s **\
150
+
151
+ {V_D_KER_WN}[{LINE_2ND_KER}] --> 2,1 --> [{LINE_2ND_IMG}]{V_D_IMG_XL_WN}
152
+
153
+ {V_D_KER_WN}mb --> UMBAR DASH_SUP_L {V_D_IMG__S_WN}
154
+ {V_D_KER_WN}nd --> ANDO DASH_SUP_L {V_D_IMG_XL_WN}
155
+
156
+ \** 3RD LINE **\
157
+ {LINE_3RD_KER_1} === th * (f,ph,ff)
158
+ {LINE_3RD_IMG_1} === SULE * FORMEN
159
+ {LINE_3RD_KER_2} === ch
160
+ {LINE_3RD_IMG_2} === HWESTA
161
+
162
+ {V_D_KER_WN}[{LINE_3RD_KER_1}] --> 2,1 --> [{LINE_3RD_IMG_1}]{V_D_IMG__S_WN}
163
+ {V_D_KER_WN}[{LINE_3RD_KER_2}] --> 2,1 --> [{LINE_3RD_IMG_2}]{V_D_IMG__L_WN} \** Tengscribe uses _S **\
164
+
165
+ {V_D_KER_WN}nth --> SULE DASH_SUP_S {V_D_IMG__S_WN}
166
+ {V_D_KER_WN}mph --> FORMEN DASH_SUP_S {V_D_IMG__S_WN}
167
+ {V_D_KER_WN}nf --> FORMEN DASH_SUP_S {V_D_IMG_XL_WN}
168
+ {V_D_KER_WN}nch --> HWESTA DASH_SUP_S {V_D_IMG__S_WN}
169
+
170
+ \** 4TH LINE **\
171
+ {LINE_4TH_KER} === (ð,ðh,dh) * (v,bh,f_) \** Some noldorin variants here ... **\
172
+ {LINE_4TH_IMG} === ANTO * AMPA
173
+ {V_D_KER_WN}[{LINE_4TH_KER}] --> 2,1 --> [{LINE_4TH_IMG}]{V_D_IMG__L_WN}
174
+
175
+ \** 5TH LINE **\
176
+ {LINE_5TH_KER} === n * m * _ng * _mh
177
+ {LINE_5TH_IMG} === NUMEN * MALTA * NWALME * MALTA_W_HOOK
178
+
179
+ {V_D_KER_WN}[{LINE_5TH_KER}] --> 2,1 --> [{LINE_5TH_IMG}]{V_D_IMG_XL_WN}
180
+
181
+ {V_D_KER_WN}nn --> NUMEN DASH_SUP_L {V_D_IMG_XL_WN}
182
+ {V_D_KER_WN}mm --> MALTA DASH_SUP_L {V_D_IMG_XL_WN}
183
+
184
+ \** 6TH LINE **\
185
+
186
+ \** 7TH LINE **\
187
+ {LINE_L_KER} === r_ * r * _rh * l * _lh * ll * w
188
+ {LINE_L_IMG} === ORE * ROMEN * ARDA * LAMBE * ALDA * LAMBE LAMBE_MARK_TILD * VALA
189
+
190
+ {V_D_KER_WN}[{LINE_L_KER}] --> 2,1 --> [{LINE_L_IMG}]{V_D_IMG__S_WN}
191
+
192
+ \** S/Z LINE **\
193
+ {LINE_8TH_KER} === s * y * ss
194
+ {LINE_8TH_IMG} === SILME_NUQUERNA * SILME_NUQUERNA_ALT * ESSE_NUQUERNA
195
+
196
+ {V_D_KER_WN}[{LINE_8TH_KER}] --> 2,1 --> [{LINE_8TH_IMG}]{V_D_IMG__S_WN}
197
+
198
+ {V_D_KER_WN}ns --> SILME_NUQUERNA DASH_SUP_S {V_D_IMG__S_WN}
199
+
200
+ s --> SILME
201
+
202
+ \** OTHERS **\
203
+ j --> YANTA
204
+
205
+ {V_D_KER_WN}h --> HYARMEN {V_D_IMG__S_WN}
206
+ {V_D_KER_WN}hw --> HWESTA_SINDARINWA {V_D_IMG__S_WN}
207
+
208
+ {V_D_KER_WN}gw --> UNGWE THSUP_SEV_XL {V_D_IMG__S_WN}
209
+ {V_D_KER_WN}dw --> ANDO THSUP_SEV_XS {V_D_IMG_XL_WN}
210
+ {V_D_KER_WN}nw --> ORE THSUP_SEV_L {V_D_IMG__S_WN}
211
+ {V_D_KER_WN}rw --> ROMEN THSUP_SEV_L {V_D_IMG__S_WN}
212
+ \end
213
+
214
+ \beg rules punctuation
215
+ . --> PUNCT_DDOT
216
+ .. --> PUNCT_DOT PUNCT_DDOT PUNCT_DOT
217
+ ... --> PUNCT_TILD
218
+ … --> PUNCT_TILD
219
+ .... --> PUNCT_TILD
220
+ ..... --> PUNCT_TILD
221
+ ...... --> PUNCT_TILD
222
+ ....... --> PUNCT_TILD
223
+
224
+ , --> PUNCT_DOT
225
+ : --> PUNCT_DOT
226
+ ; --> PUNCT_DOT
227
+ ! --> PUNCT_EXCLAM
228
+ ? --> PUNCT_INTERR
229
+ · --> {NULL}
230
+
231
+ - --> {NULL}
232
+ – --> PUNCT_TILD
233
+ — --> PUNCT_TILD
234
+
235
+ \** Apostrophe **\
236
+
237
+ ' --> {NULL}
238
+ ’ --> {NULL}
239
+
240
+ \** Quotes **\
241
+
242
+ “ --> DQUOT_OPEN
243
+ ” --> DQUOT_CLOSE
244
+ « --> DQUOT_OPEN
245
+ » --> DQUOT_CLOSE
246
+
247
+ [ --> PUNCT_PAREN_L
248
+ ] --> PUNCT_PAREN_R
249
+ ( --> PUNCT_PAREN_L
250
+ ) --> PUNCT_PAREN_R
251
+ { --> PUNCT_PAREN_L
252
+ } --> PUNCT_PAREN_R
253
+ < --> PUNCT_PAREN_L
254
+ > --> PUNCT_PAREN_R
255
+
256
+ \** Not universal between fonts ... **\
257
+ $ --> BOOKMARK_SIGN
258
+ ≤ --> RING_MARK_L \** Ring inscription left beautiful stuff **\
259
+ ≥ --> RING_MARK_R \** Ring inscription right beautiful stuff **\
260
+ \end
261
+
262
+ \beg rules numbers
263
+ 0 --> NUM_0
264
+ 1 --> NUM_1
265
+ 2 --> NUM_2
266
+ 3 --> NUM_3
267
+ 4 --> NUM_4
268
+ 5 --> NUM_5
269
+ 6 --> NUM_6
270
+ 7 --> NUM_7
271
+ 8 --> NUM_8
272
+ 9 --> NUM_9
273
+ A --> NUM_10
274
+ B --> NUM_11
275
+ \end
276
+ \end