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,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