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,182 @@
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 Angerthas Daeron mode for glaemscribe **\
26
+
27
+ \language "Sindarin"
28
+ \writing "Cirth"
29
+ \mode "Angerthas Daeron"
30
+ \version "0.0.1"
31
+ \authors "Talagan (Benjamin Babut)"
32
+
33
+ \charset cirth_ds true
34
+
35
+ \beg preprocessor
36
+ \** Work exclusively downcase **\
37
+ \downcase
38
+
39
+ \** Simplify trema vowels **\
40
+ \substitute ä a
41
+ \substitute ë e
42
+ \substitute ï i
43
+ \substitute ö o
44
+ \substitute ü u
45
+ \substitute ÿ y
46
+
47
+ \** Dis-ambiguate long vowels **\
48
+ \rxsubstitute "(ā|â|aa)" "á"
49
+ \rxsubstitute "(ē|ê|ee)" "é"
50
+ \rxsubstitute "(ī|î|ii)" "í"
51
+ \rxsubstitute "(ō|ô|oo)" "ó"
52
+ \rxsubstitute "(ū|û|uu)" "ú"
53
+ \rxsubstitute "(ȳ|ŷ|yy)" "ý"
54
+ \end
55
+
56
+ \beg processor
57
+
58
+ \** We redefine the output space to have something beautiful, especially with erebor1 and erebor2 **\
59
+ \outspace CIRTH_SPACE_BIG
60
+
61
+ \beg rules litteral
62
+ a --> CIRTH_48
63
+ á --> CIRTH_49
64
+
65
+ b --> CIRTH_2
66
+ bh --> CIRTH_4
67
+ c --> CIRTH_18
68
+ ch --> CIRTH_13
69
+
70
+ d --> CIRTH_9
71
+
72
+ dh --> CIRTH_11
73
+ đ --> CIRTH_11
74
+ ð --> CIRTH_11
75
+ ðh --> CIRTH_11
76
+
77
+ e --> CIRTH_46
78
+ é --> CIRTH_47
79
+
80
+ f --> CIRTH_3
81
+ ff_ --> CIRTH_3
82
+
83
+ g --> CIRTH_19
84
+ gh --> CIRTH_21
85
+ ghw --> CIRTH_26
86
+ gw --> CIRTH_24
87
+ h --> CIRTH_5 \** . is another one??, V is +h (should be used in combinations, maybe todo) **\
88
+ i --> CIRTH_39
89
+ í --> CIRTH_39 CIRTH_39
90
+ j --> CIRTH_14
91
+ k --> CIRTH_18
92
+ kh --> CIRTH_20
93
+ khw --> CIRTH_25
94
+ kw --> CIRTH_23
95
+ l --> CIRTH_31
96
+ lh --> CIRTH_32
97
+ m --> CIRTH_6
98
+ mb --> CIRTH_7
99
+ mh --> CIRTH_7
100
+ n --> CIRTH_12
101
+ nc_ --> CIRTH_22 CIRTH_18 \** equals ŋc **\
102
+ nd --> CIRTH_38
103
+ ng --> CIRTH_33
104
+
105
+ _ng --> CIRTH_22
106
+ ng_ --> CIRTH_22
107
+ ŋ --> CIRTH_22
108
+
109
+ nw --> CIRTH_28
110
+ ngw --> CIRTH_27
111
+ nj --> CIRTH_17
112
+ o --> CIRTH_50
113
+ ó --> CIRTH_51 \** Can use CIRTH_51_ALT **\
114
+ ö --> CIRTH_52 \** Can use CIRTH_52_ALT **\
115
+ œ --> CIRTH_52
116
+ p --> CIRTH_1
117
+ r --> CIRTH_29
118
+ rh --> CIRTH_30
119
+ s --> CIRTH_34 \** Can use CIRTH_35 **\
120
+ sh --> CIRTH_15
121
+ ss --> CIRTH_36
122
+ t --> CIRTH_8
123
+ th --> CIRTH_10
124
+ u --> CIRTH_42
125
+ ú --> CIRTH_43
126
+ ü --> CIRTH_45_ALT \** Can use CIRTH_45 **\
127
+ y --> CIRTH_45_ALT \** Can use CIRTH_45 **\
128
+ v --> CIRTH_4
129
+ w --> CIRTH_44
130
+ zh --> CIRTH_16
131
+ \end
132
+
133
+ \beg rules punctuation
134
+
135
+ . --> CIRTH_PUNCT_THREE_DOTS
136
+ .. --> CIRTH_PUNCT_THREE_DOTS
137
+ ... --> CIRTH_PUNCT_THREE_DOTS
138
+ … --> CIRTH_PUNCT_THREE_DOTS
139
+ .... --> CIRTH_PUNCT_THREE_DOTS
140
+ ..... --> CIRTH_PUNCT_THREE_DOTS
141
+ ...... --> CIRTH_PUNCT_THREE_DOTS
142
+ ....... --> CIRTH_PUNCT_THREE_DOTS
143
+
144
+ , --> CIRTH_PUNCT_MID_DOT
145
+ : --> CIRTH_PUNCT_TWO_DOTS
146
+ ; --> CIRTH_PUNCT_TWO_DOTS
147
+ ! --> CIRTH_PUNCT_THREE_DOTS
148
+ ? --> CIRTH_PUNCT_THREE_DOTS
149
+ · --> {NULL}
150
+
151
+ - --> {NULL}
152
+ – --> CIRTH_PUNCT_TWO_DOTS
153
+ — --> CIRTH_PUNCT_TWO_DOTS
154
+
155
+ \** Apostrophe **\
156
+
157
+ ' --> {NULL}
158
+ ’ --> {NULL}
159
+
160
+ \** Quotes **\
161
+
162
+ “ --> {NULL}
163
+ ” --> {NULL}
164
+ « --> {NULL}
165
+ » --> {NULL}
166
+
167
+ [ --> CIRTH_PUNCT_THREE_DOTS_L
168
+ ] --> CIRTH_PUNCT_THREE_DOTS_L
169
+ ( --> CIRTH_PUNCT_THREE_DOTS_L
170
+ ) --> CIRTH_PUNCT_THREE_DOTS_L
171
+ { --> CIRTH_PUNCT_THREE_DOTS_L
172
+ } --> CIRTH_PUNCT_THREE_DOTS_L
173
+ < --> CIRTH_PUNCT_THREE_DOTS_L
174
+ > --> CIRTH_PUNCT_THREE_DOTS_L
175
+
176
+ / --> CIRTH_PUNCT_FOUR_DOTS
177
+
178
+ \end
179
+ \end
180
+
181
+
182
+
@@ -0,0 +1,302 @@
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
+ \** Telerin mode for glaemscribe (MAY BE INCOMPLETE) - Derived from Quenya **\
26
+
27
+ \language "Telerin"
28
+ \writing "Tengwar"
29
+ \mode "Glaemscrafu"
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
+ \** Dis-ambiguate long vowels **\
56
+ \rxsubstitute "(ā|â|aa)" "á"
57
+ \rxsubstitute "(ē|ê|ee)" "é"
58
+ \rxsubstitute "(ī|î|ii)" "í"
59
+ \rxsubstitute "(ō|ô|oo)" "ó"
60
+ \rxsubstitute "(ū|û|uu)" "ú"
61
+ \rxsubstitute "(ȳ|ŷ|yy)" "ý"
62
+
63
+ \substitute "qu" "q" \** Dis-ambiguate qu **\
64
+
65
+ \elvish_numbers "\\eval numbers_base" "\\eval reverse_numbers"
66
+ \end
67
+
68
+ \beg processor
69
+
70
+ \beg rules litteral
71
+ {A} === a
72
+ {AA} === á
73
+ {E} === e
74
+ {EE} === é
75
+ {I} === i
76
+ {II} === í
77
+ {O} === o
78
+ {OO} === ó
79
+ {U} === u
80
+ {UU} === ú
81
+
82
+ {AI} === {A}{I}
83
+ {AU} === {A}{U}
84
+ {EU} === {E}{U}
85
+ {IU} === {I}{U}
86
+ {OI} === {O}{I}
87
+ {UI} === {U}{I}
88
+
89
+
90
+ {K} === (c,k)
91
+ {W} === (v,w)
92
+ {SS} === (z,ss)
93
+
94
+ \** {MB} === (b,mb) **\
95
+ \** {SS} === (z,ss) **\
96
+
97
+ {VOWELS} === {A} * {E} * {I} * {O} * {U}
98
+ {LVOWELS} === {AA} * {EE} * {II} * {OO} * {UU}
99
+
100
+ {TEHTA_XS} === A_TEHTA_XS * E_TEHTA_XS * I_TEHTA_XS * O_TEHTA_XS * U_TEHTA_XS
101
+ {TEHTA__S} === A_TEHTA_S * E_TEHTA_S * I_TEHTA_S * O_TEHTA_S * U_TEHTA_S
102
+ {TEHTA__L} === A_TEHTA_L * E_TEHTA_L * I_TEHTA_L * O_TEHTA_L * U_TEHTA_L
103
+ {TEHTA_XL} === A_TEHTA_XL * E_TEHTA_XL * I_TEHTA_XL * O_TEHTA_XL * U_TEHTA_XL
104
+
105
+ {DIPHTHONGS} === {AI} * {AU} * {EU} * {IU} * {OI} * {UI}
106
+ {DIPHTHENGS} === YANTA A_TEHTA_L * URE A_TEHTA_L * URE E_TEHTA_L * URE I_TEHTA_L * YANTA O_TEHTA_L * YANTA U_TEHTA_L
107
+
108
+
109
+ {V_D_KER} === [ {VOWELS} * {DIPHTHONGS} ]
110
+ {V_D_IMG_XS} === [ {TEHTA_XS} * {DIPHTHENGS} ]
111
+ {V_D_IMG__S} === [ {TEHTA__L} * {DIPHTHENGS} ]
112
+ {V_D_IMG__L} === [ {TEHTA__S} * {DIPHTHENGS} ]
113
+ {V_D_IMG_XL} === [ {TEHTA_XL} * {DIPHTHENGS} ]
114
+
115
+ {V_D_KER_WN} === [ {VOWELS} * {DIPHTHONGS} * {NULL} ]
116
+ {V_D_IMG_XS_WN} === [ {TEHTA_XS} * {DIPHTHENGS} * {NULL} ]
117
+ {V_D_IMG__S_WN} === [ {TEHTA__L} * {DIPHTHENGS} * {NULL} ]
118
+ {V_D_IMG__L_WN} === [ {TEHTA__S} * {DIPHTHENGS} * {NULL} ]
119
+ {V_D_IMG_XL_WN} === [ {TEHTA_XL} * {DIPHTHENGS} * {NULL} ]
120
+
121
+ \** VOWEL RULES **\
122
+ [{VOWELS}] --> TELCO[{TEHTA_XS}] \** Replace isolated short vowels **\
123
+ [{LVOWELS}] --> ARA[{TEHTA_XS}] \** Replace long vowels **\
124
+ [{DIPHTHONGS}] --> [{DIPHTHENGS}] \** Replace diphthongs **\
125
+
126
+ \** TELERIN: changed v/w, removed all y rules **\
127
+
128
+ \** ===================== **\
129
+ \** 1ST LINE RULES **\
130
+ \** ===================== **\
131
+ {L1_KER_1} === t * p
132
+ {L1_IMG_1} === TINCO * PARMA
133
+ {L1_KER_2} === {K} * q
134
+ {L1_IMG_2} === CALMA * QUESSE
135
+ {L1_KER_1_GEMS} === tt * pp
136
+ {L1_IMG_1_GEMS} === TINCO DASH_INF_S * PARMA DASH_INF_S
137
+
138
+ \** NORMAL **\
139
+ [ {L1_KER_1} ] {V_D_KER_WN} --> [ {L1_IMG_1} ] {V_D_IMG__S_WN}
140
+ [ {L1_KER_2} ] {V_D_KER_WN} --> [ {L1_IMG_2} ] {V_D_IMG__S_WN}
141
+
142
+ \** GEMINATED **\
143
+ [ {L1_KER_1_GEMS} ] {V_D_KER_WN} --> [ {L1_IMG_1_GEMS} ] {V_D_IMG__S_WN} \** Tengscribe uses S but L is probably better **\
144
+ {K}{K}{V_D_KER_WN} --> CALMA DASH_INF_S {V_D_IMG__S_WN}
145
+
146
+ ts{V_D_KER_WN}_ --> TINCO SHOOK_RIGHT_L {V_D_IMG__S_WN}
147
+ ps{V_D_KER_WN}_ --> PARMA SHOOK_RIGHT_L {V_D_IMG__S_WN}
148
+ x{V_D_KER_WN} --> CALMA SHOOK_LEFT_L {V_D_IMG__S_WN} \** render ks for x **\
149
+
150
+ \** ===================== **\
151
+ \** 2ND LINE RULES **\
152
+ \** ===================== **\
153
+ {L2_KER} === nd * mb * ng * ngw
154
+ {L2_IMG} === ANDO * UMBAR * ANGA * UNGWE
155
+
156
+ \** STANDARD **\
157
+ [{L2_KER}]{V_D_KER_WN} --> [{L2_IMG}]{V_D_IMG_XL_WN}
158
+
159
+ {L2_KER_2} === d * b * g
160
+ {L2_IMG_2} === ORE * VALA * ANNA
161
+
162
+ \** STANDARD **\
163
+ [{L2_KER_2}]{V_D_KER_WN} --> [{L2_IMG_2}]{V_D_IMG__S_WN}
164
+
165
+ \** ===================== **\
166
+ \** 3RD LINE RULES **\
167
+ \** ===================== **\
168
+ {L3_KER_1} === th * f
169
+ {L3_IMG_1} === SULE * FORMEN
170
+ {L3_KER_2} === h * hw
171
+ {L3_IMG_2} === AHA * HWESTA
172
+
173
+ \** NORMAL **\
174
+ [{L3_KER_1}]{V_D_KER_WN} --> [{L3_IMG_1}]{V_D_IMG__S_WN}
175
+ [{L3_KER_2}]{V_D_KER_WN} --> [{L3_IMG_2}]{V_D_IMG__S_WN} \** Tengscribe uses S but L is probably better **\
176
+
177
+ \** Override h with vowels (descendent) **\
178
+ _h{V_D_KER} --> HYARMEN {V_D_IMG__L}
179
+ h[{LVOWELS}] --> HYARMEN ARA [{TEHTA_XS}]
180
+ h --> AHA
181
+
182
+ \** ===================== **\
183
+ \** 4TH LINE RULES **\
184
+ \** ===================== **\
185
+ {L4_KER} === nt * mp * nc * nq \** Not nqu, due to preprocessor **\
186
+ {L4_IMG} === ANTO * AMPA * ANCA * UNQUE
187
+
188
+ \** NORMAL **\
189
+ [{L4_KER}]{V_D_KER_WN} --> [{L4_IMG}]{V_D_IMG_XL_WN}
190
+
191
+ \** ===================== **\
192
+ \** 5TH LINE RULES **\
193
+ \** ===================== **\
194
+ {L5_KER} === n * m * ñ * ñw * _nw
195
+ {L5_IMG} === NUMEN * MALTA * NOLDO * NWALME * NWALME
196
+
197
+ [{L5_KER}]{V_D_KER_WN} --> [{L5_IMG}]{V_D_IMG_XL_WN}
198
+
199
+ nn{V_D_KER_WN} --> NUMEN DASH_INF_L {V_D_IMG_XL_WN}
200
+ mm{V_D_KER_WN} --> MALTA DASH_INF_L {V_D_IMG_XL_WN}
201
+
202
+ \** ===================== **\
203
+ \** 6TH LINE RULES **\
204
+ \** ===================== **\
205
+ {L6_KER} === r * {W}
206
+ {L6_IMG} === ROMEN * VILYA
207
+
208
+ [{L6_KER}]{V_D_KER_WN} --> [{L6_IMG}]{V_D_IMG__S_WN}
209
+
210
+ rr{V_D_KER_WN} --> ROMEN DASH_INF_S {V_D_IMG__S_WN}
211
+ rd{V_D_KER_WN} --> ARDA {V_D_IMG__S_WN}
212
+
213
+ \** ===================== **\
214
+ \** L LINE RULES **\
215
+ \** ===================== **\
216
+ {LINE_L_KER} === l * ld * ll
217
+ {LINE_L_IMG} === LAMBE * ALDA * LAMBE LAMBE_MARK_TILD
218
+
219
+ [{LINE_L_KER}]{V_D_KER_WN} --> [{LINE_L_IMG}]{V_D_IMG__S_WN}
220
+ hl{V_D_KER_WN} --> HALLA LAMBE {V_D_IMG__S_WN}
221
+ hr{V_D_KER_WN} --> HALLA ROMEN {V_D_IMG__S_WN}
222
+
223
+ \** ===================== **\
224
+ \** S/Z LINE RULES **\
225
+ \** ===================== **\
226
+ {L8_KER} === s * {SS}
227
+ {L8_IMG} === SILME_NUQUERNA * ESSE_NUQUERNA
228
+
229
+ [{L8_KER}]{V_D_KER_WN} --> [{L8_IMG}]{V_D_IMG__S_WN}
230
+
231
+ \** Override lonely s / ss / before consonant **\
232
+ s --> SILME
233
+ s[{LVOWELS}] --> SILME ARA [{TEHTA_XS}]
234
+ {SS} --> ESSE
235
+ {SS}[{LVOWELS}] --> ESSE ARA [{TEHTA_XS}]
236
+ \end
237
+
238
+ \beg rules punctuation
239
+ . --> PUNCT_DDOT
240
+ .. --> PUNCT_DOT PUNCT_DDOT PUNCT_DOT
241
+ … --> PUNCT_TILD
242
+ ... --> PUNCT_TILD
243
+ .... --> PUNCT_TILD
244
+ ..... --> PUNCT_TILD
245
+ ...... --> PUNCT_TILD
246
+ ....... --> PUNCT_TILD
247
+
248
+ , --> PUNCT_DOT
249
+ : --> PUNCT_DOT
250
+ ; --> PUNCT_DOT
251
+ ! --> PUNCT_EXCLAM
252
+ ? --> PUNCT_INTERR
253
+ · --> PUNCT_DOT
254
+
255
+ \** Apostrophe **\
256
+
257
+ ' --> {NULL}
258
+ ’ --> {NULL}
259
+
260
+ \** Quotes **\
261
+
262
+ “ --> DQUOT_OPEN
263
+ ” --> DQUOT_CLOSE
264
+ « --> DQUOT_OPEN
265
+ » --> DQUOT_CLOSE
266
+
267
+ - --> {NULL}
268
+ – --> PUNCT_TILD
269
+ — --> PUNCT_TILD
270
+
271
+ [ --> PUNCT_PAREN_L
272
+ ] --> PUNCT_PAREN_R
273
+ ( --> PUNCT_PAREN_L
274
+ ) --> PUNCT_PAREN_R
275
+ { --> PUNCT_PAREN_L
276
+ } --> PUNCT_PAREN_R
277
+ < --> PUNCT_PAREN_L
278
+ > --> PUNCT_PAREN_R
279
+
280
+ \** Not universal between fonts ... **\
281
+ $ --> BOOKMARK_SIGN
282
+ ≤ --> RING_MARK_L \** Ring inscription left beautiful stuff **\
283
+ ≥ --> RING_MARK_R \** Ring inscription right beautiful stuff **\
284
+
285
+ \end
286
+
287
+ \beg rules numbers
288
+ 0 --> NUM_0
289
+ 1 --> NUM_1
290
+ 2 --> NUM_2
291
+ 3 --> NUM_3
292
+ 4 --> NUM_4
293
+ 5 --> NUM_5
294
+ 6 --> NUM_6
295
+ 7 --> NUM_7
296
+ 8 --> NUM_8
297
+ 9 --> NUM_9
298
+ A --> NUM_10
299
+ B --> NUM_11
300
+ \end
301
+ \end
302
+