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