glaemscribe 1.0.13 → 1.0.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/glaemresources/charsets/tengwar_ds.cst +20 -11
- data/glaemresources/modes/futhark-long-branch.glaem.disabled +101 -0
- data/glaemresources/modes/futhark-short-twig.glaem.disabled +101 -0
- data/glaemresources/modes/futhorc.glaem.disabled +123 -0
- data/glaemresources/modes/khuzdul.glaem +11 -4
- data/glaemresources/modes/oldnorse-medieval.glaem +1 -1
- data/glaemresources/modes/quenya-sarati.glaem +9 -3
- data/glaemresources/modes/quenya.glaem +215 -173
- data/glaemresources/modes/sindarin-daeron.glaem +6 -6
- data/glaemresources/modes/valarin-sarati.glaem +5 -1
- data/lib/api/fragment.rb +1 -1
- data/lib/api/mode.rb +2 -2
- data/lib/api/mode_parser.rb +6 -11
- data/lib/api/post_processor/csub.rb +64 -0
- data/lib/api/post_processor/reverse.rb +2 -3
- data/lib/api/sheaf.rb +2 -0
- data/lib/api/sheaf_chain.rb +2 -0
- data/lib/api/transcription_pre_post_processor.rb +43 -13
- data/lib/api/transcription_processor.rb +17 -29
- data/lib/api/transcription_tree_node.rb +1 -1
- data/lib/glaemscribe.rb +1 -0
- metadata +5 -1
@@ -1,8 +1,8 @@
|
|
1
1
|
\**
|
2
2
|
|
3
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
|
4
|
+
the transcription of texts between writing systems, and more
|
5
|
+
specifically dedicated to the transcription of J.R.R. Tolkien's
|
6
6
|
invented languages to some of his devised writing systems.
|
7
7
|
|
8
8
|
Copyright (C) 2015 Benjamin Babut (Talagan).
|
@@ -23,29 +23,51 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
23
23
|
**\
|
24
24
|
|
25
25
|
\** Changelog **\
|
26
|
-
\**
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
26
|
+
\**
|
27
|
+
\beg changelog
|
28
|
+
\entry "0.0.2", "added χ for the word χarina, correcting ts/ps sequences to work better with eldamar"
|
29
|
+
\entry "0.0.3", "added o/u curl option"
|
30
|
+
\entry "0.0.4", "added voiced plosives corner cases treatment and option to chose method"
|
31
|
+
\entry "0.0.5", "fixing h+long vowel medially"
|
32
|
+
\entry "0.0.6", "adding option for alveolarized consonants st (t+t), pt (p+t), ht (c+t)"
|
33
|
+
\entry "0.0.7", "Fixing rb/lb, to be treated as r+mb and l+mb"
|
34
|
+
\entry "0.0.8", "Correcting double dot version for ry (aesthetics)"
|
35
|
+
\entry "0.0.9", "Adding 'implicit a' option."
|
36
|
+
\entry "0.1.0", "Simplified diacritic use by using new post-processor directive"
|
37
|
+
\entry "0.1.1", "Added default option for voiced plosives : use mb, nd, ng, ngw"
|
38
|
+
\entry "0.1.2", "Added a tehta shape selection"
|
39
|
+
\entry "0.1.3", "Fixing ks, ps, ts. Fixing dot under ore, romen in implicit a mode."
|
40
|
+
\end
|
41
|
+
**\
|
42
|
+
|
43
|
+
\**
|
44
|
+
TODO : Use the new csub directive for all diacritics/signs that could have variants (e.g. THINF_DDOT (LAMBE_MARK_DDOT for LAMBE), DASH_INF (LAMBE_MARK_TILD for LAMBE), SHOOK_LEFT)
|
45
|
+
TODO : Option for dot or not in 'a implicit' option before long vowels ?
|
46
|
+
TODO : bb, dd etc ? (for noobs)
|
47
|
+
**\
|
32
48
|
|
33
49
|
\language "Quenya"
|
34
50
|
\writing "Tengwar"
|
35
51
|
\mode "Classical"
|
36
|
-
\version "0.
|
52
|
+
\version "0.1.3"
|
37
53
|
\authors "Talagan (Benjamin Babut)"
|
38
54
|
|
39
55
|
\charset tengwar_ds true
|
40
|
-
|
56
|
+
|
41
57
|
\beg options
|
42
|
-
\option
|
43
|
-
\option
|
58
|
+
\option implicit_a false
|
59
|
+
\beg option a_tetha_shape A_SHAPE_THREE_DOTS
|
60
|
+
\value A_SHAPE_THREE_DOTS 1
|
61
|
+
\value A_SHAPE_CIRCUMFLEX 2
|
62
|
+
\end
|
44
63
|
\beg option reverse_o_u_tehtar U_UP_O_DOWN
|
45
64
|
\value O_UP_U_DOWN 1
|
46
65
|
\value U_UP_O_DOWN 2
|
47
66
|
\end
|
48
|
-
\
|
67
|
+
\option split_diphthongs false
|
68
|
+
\option always_use_romen_for_r false
|
69
|
+
\beg option voiced_plosives_treatment VOICED_PLOSIVES_AS_NASALIZED
|
70
|
+
\value VOICED_PLOSIVES_AS_NASALIZED 0
|
49
71
|
\value VOICED_PLOSIVES_WITH_STROKE 1
|
50
72
|
\value VOICED_PLOSIVES_WITH_XTD 2
|
51
73
|
\end
|
@@ -63,7 +85,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
63
85
|
\beg preprocessor
|
64
86
|
\** Work exclusively downcase **\
|
65
87
|
\downcase
|
66
|
-
|
88
|
+
|
67
89
|
\** Simplify trema vowels **\
|
68
90
|
\substitute ä a
|
69
91
|
\substitute ë e
|
@@ -81,233 +103,241 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
81
103
|
\rxsubstitute "(ȳ|ŷ|yy)" "ý"
|
82
104
|
|
83
105
|
\substitute "qu" "q" \** Dis-ambiguate qu **\
|
84
|
-
|
106
|
+
|
85
107
|
\elvish_numbers "\\eval numbers_base" "\\eval reverse_numbers"
|
86
108
|
\end
|
87
|
-
|
109
|
+
|
88
110
|
|
89
111
|
\beg processor
|
90
|
-
|
112
|
+
|
91
113
|
\beg rules litteral
|
92
|
-
|
114
|
+
|
93
115
|
{K} === (c,k)
|
94
116
|
{SS} === (z,ss)
|
95
|
-
|
117
|
+
|
96
118
|
{VOWELS} === a * e * i * o * u
|
97
119
|
{LVOWELS} === á * é * í * ó * ú
|
98
|
-
|
120
|
+
|
99
121
|
\if "reverse_o_u_tehtar == U_UP_O_DOWN"
|
100
|
-
|
101
|
-
|
102
|
-
{O_LOOP_L} === O_TEHTA_L
|
103
|
-
{O_LOOP_XL} === O_TEHTA_XL
|
104
|
-
{U_LOOP_XS} === U_TEHTA_XS
|
105
|
-
{U_LOOP_S} === U_TEHTA_S
|
106
|
-
{U_LOOP_L} === U_TEHTA_L
|
107
|
-
{U_LOOP_XL} === U_TEHTA_XL
|
122
|
+
{O_LOOP} === O_TEHTA
|
123
|
+
{U_LOOP} === U_TEHTA
|
108
124
|
\else
|
109
|
-
|
110
|
-
|
111
|
-
{O_LOOP_L} === U_TEHTA_L
|
112
|
-
{O_LOOP_XL} === U_TEHTA_XL
|
113
|
-
{U_LOOP_XS} === O_TEHTA_XS
|
114
|
-
{U_LOOP_S} === O_TEHTA_S
|
115
|
-
{U_LOOP_L} === O_TEHTA_L
|
116
|
-
{U_LOOP_XL} === O_TEHTA_XL
|
125
|
+
{O_LOOP} === U_TEHTA
|
126
|
+
{U_LOOP} === O_TEHTA
|
117
127
|
\endif
|
118
128
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
129
|
+
\if "a_tetha_shape == A_SHAPE_THREE_DOTS"
|
130
|
+
{A_SHAPE} === A_TEHTA
|
131
|
+
\else
|
132
|
+
{A_SHAPE} === A_TEHTA_CIRCUM
|
133
|
+
\endif
|
134
|
+
|
135
|
+
\if implicit_a
|
136
|
+
{_A_} === {NULL}
|
137
|
+
{_NVOWEL_} === THINF_DOT
|
138
|
+
\else
|
139
|
+
{_A_} === {A_SHAPE}
|
140
|
+
{_NVOWEL_} === {NULL}
|
141
|
+
\endif
|
142
|
+
|
143
|
+
{_TEHTAR_} === {_A_} * E_TEHTA * I_TEHTA * {O_LOOP} * {U_LOOP}
|
144
|
+
|
124
145
|
\if split_diphthongs
|
125
|
-
{WDIPHTHONGS} === {NULL}
|
126
|
-
{
|
146
|
+
{WDIPHTHONGS} === {NULL}
|
147
|
+
{_WDIPHTHONGS_} === {NULL}
|
127
148
|
\else
|
128
|
-
{DIPHTHONGS} === ai
|
129
|
-
{
|
130
|
-
{WDIPHTHONGS} === * {DIPHTHONGS}
|
131
|
-
{
|
149
|
+
{DIPHTHONGS} === ai * au * eu * iu * oi * ui
|
150
|
+
{_DIPHTHONGS_} === YANTA {_A_} * URE {_A_} * URE E_TEHTA * URE I_TEHTA * YANTA {O_LOOP} * YANTA {U_LOOP}
|
151
|
+
{WDIPHTHONGS} === * {DIPHTHONGS} \** groovy! **\
|
152
|
+
{_WDIPHTHONGS_} === * {_DIPHTHONGS_} \** same thing **\
|
132
153
|
\endif
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
154
|
+
|
155
|
+
\if implicit_a
|
156
|
+
\** consonants will take a tehta for a, and have ara + tehta in other cases **\
|
157
|
+
|
158
|
+
\** Bertrand does like the dot before long vowels **\
|
159
|
+
\** {_LTEHTAR_} === {A_SHAPE} * {_NVOWEL_} ARA E_TEHTA * {_NVOWEL_} ARA I_TEHTA * {_NVOWEL_} ARA {O_LOOP} * {_NVOWEL_} ARA {U_LOOP} **\
|
160
|
+
|
161
|
+
{_LTEHTAR_} === {A_SHAPE} * ARA E_TEHTA * ARA I_TEHTA * ARA {O_LOOP} * ARA {U_LOOP}
|
162
|
+
{_WLONG_} === * {_LTEHTAR_}
|
163
|
+
{WLONG} === * {LVOWELS}
|
164
|
+
\else
|
165
|
+
{_LTEHTAR_} === ARA {A_SHAPE} * ARA E_TEHTA * ARA I_TEHTA * ARA {O_LOOP} * ARA {U_LOOP}
|
166
|
+
{_WLONG_} === {NULL}
|
167
|
+
{WLONG} === {NULL}
|
168
|
+
\endif
|
169
|
+
|
170
|
+
{V_D} === [ {VOWELS} {WLONG} {WDIPHTHONGS} ]
|
171
|
+
{V_D_WN} === [ {VOWELS} {WLONG} {WDIPHTHONGS} * {NULL} ]
|
172
|
+
|
173
|
+
{_V_D_} === [ {_TEHTAR_} {_WLONG_} {_WDIPHTHONGS_} ]
|
174
|
+
{_V_D_WN_} === [ {_TEHTAR_} {_WLONG_} {_WDIPHTHONGS_} * {_NVOWEL_} ]
|
175
|
+
|
146
176
|
\** VOWEL RULES **\
|
147
|
-
[{VOWELS}]
|
148
|
-
|
149
|
-
|
177
|
+
[{VOWELS}] --> TELCO [{_TEHTAR_}] \** Replace isolated short vowels **\
|
178
|
+
\if implicit_a
|
179
|
+
[{LVOWELS}] --> TELCO {A_SHAPE} * ARA E_TEHTA * ARA I_TEHTA * ARA {O_LOOP} * ARA {U_LOOP}
|
180
|
+
\else
|
181
|
+
[{LVOWELS}] --> [{_LTEHTAR_}] \** Replace long vowels **\
|
182
|
+
\endif
|
183
|
+
|
150
184
|
\if !split_diphthongs
|
151
|
-
[{DIPHTHONGS}] --> [{
|
185
|
+
[{DIPHTHONGS}] --> [{_DIPHTHONGS_}] \** Replace diphthongs **\
|
152
186
|
\endif
|
153
|
-
|
187
|
+
|
154
188
|
\** ===================== **\
|
155
189
|
\** 1ST LINE RULES **\
|
156
190
|
\** ===================== **\
|
157
|
-
{
|
158
|
-
{
|
159
|
-
{L1_KER_2} === {K} * q
|
160
|
-
{L1_IMG_2} === CALMA * QUESSE
|
161
|
-
{L1_KER_1_GEMS} === tt * pp
|
162
|
-
{L1_IMG_1_GEMS} === TINCO DASH_INF_S * PARMA DASH_INF_S
|
163
|
-
|
164
|
-
\** NORMAL **\
|
165
|
-
[ {L1_KER_1} ] {V_D_KER_WN} --> [ {L1_IMG_1} ] {V_D_IMG__S_WN}
|
166
|
-
[ {L1_KER_2} ] {V_D_KER_WN} --> [ {L1_IMG_2} ] {V_D_IMG__S_WN}
|
191
|
+
{L1} === t * p * {K} * q
|
192
|
+
{_L1_} === TINCO * PARMA * CALMA * QUESSE
|
167
193
|
|
168
194
|
\** GEMINATED **\
|
169
|
-
|
170
|
-
{
|
195
|
+
{L1_1_GEMS} === tt * pp * {K}{K}
|
196
|
+
{_L1_1_GEMS_} === TINCO DASH_INF_S * PARMA DASH_INF_S * CALMA DASH_INF_S
|
197
|
+
|
198
|
+
\** NORMAL **\
|
199
|
+
[ {L1} * {L1_1_GEMS} ] {V_D_WN} --> [ {_L1_} * {_L1_1_GEMS_} ] {_V_D_WN_}
|
171
200
|
|
172
201
|
\** OTHERS **\
|
173
|
-
ty{
|
174
|
-
py{
|
175
|
-
|
176
|
-
ts{
|
177
|
-
ps{
|
178
|
-
|
179
|
-
|
202
|
+
ty{V_D_WN} --> TINCO THINF_DDOT_L {_V_D_WN_}
|
203
|
+
py{V_D_WN} --> PARMA THINF_DDOT_L {_V_D_WN_}
|
204
|
+
|
205
|
+
ts{V_D_WN} --> TINCO {_V_D_WN_} SHOOK_RIGHT_L
|
206
|
+
ps{V_D_WN} --> PARMA {_V_D_WN_} SHOOK_RIGHT_L
|
207
|
+
{K}s{V_D_WN} --> CALMA SHOOK_LEFT_L {_V_D_WN_}
|
208
|
+
x{V_D_WN} --> CALMA SHOOK_LEFT_L {_V_D_WN_} \** render ks for x **\
|
209
|
+
|
180
210
|
\** ===================== **\
|
181
211
|
\** 2ND LINE RULES **\
|
182
212
|
\** ===================== **\
|
183
|
-
{
|
184
|
-
{
|
213
|
+
{L2} === nd * mb * ng * ngw
|
214
|
+
{_L2_} === ANDO * UMBAR * ANGA * UNGWE
|
185
215
|
|
186
216
|
\** STANDARD **\
|
187
|
-
[{
|
188
|
-
|
189
|
-
\** Palatalized **\
|
190
|
-
ndy{
|
191
|
-
|
217
|
+
[{L2}]{V_D_WN} --> [{_L2_}]{_V_D_WN_}
|
218
|
+
|
219
|
+
\** Palatalized **\
|
220
|
+
ndy{V_D_WN} --> ANDO THINF_DDOT_XL {_V_D_WN_}
|
221
|
+
|
192
222
|
\** Have some rules for d,b,g,gw although there are not theoritically possible, aldudénie e.g needs it **\
|
193
|
-
{
|
194
|
-
|
195
|
-
|
223
|
+
{L2_UN} === d * b * g * gw
|
224
|
+
|
225
|
+
\if "voiced_plosives_treatment == VOICED_PLOSIVES_AS_NASALIZED"
|
226
|
+
[{L2_UN}]{V_D_WN} --> [{_L2_}] {_V_D_WN_}
|
227
|
+
\elsif "voiced_plosives_treatment == VOICED_PLOSIVES_WITH_STROKE"
|
228
|
+
[{L2_UN}]{V_D_WN} --> [{_L2_}] THINF_STROKE_XL {_V_D_WN_}
|
196
229
|
\else
|
197
|
-
|
198
|
-
|
230
|
+
{_L2_UN_} === TW_EXT_21 * TW_EXT_22 * TW_EXT_23 * TW_EXT_24
|
231
|
+
[{L2_UN}]{V_D_WN} --> [{_L2_UN_}] {_V_D_WN_}
|
199
232
|
\endif
|
200
|
-
|
233
|
+
|
201
234
|
\if "st_pt_ht == ST_PT_HT_WITH_XTD"
|
202
|
-
{
|
203
|
-
{
|
204
|
-
|
205
|
-
{
|
206
|
-
|
207
|
-
[{L2_KER_ALVEOLARIZED_1}]{V_D_KER_WN} --> [{L2_IMG_ALVEOLARIZED_1}] {V_D_IMG__L_WN}
|
208
|
-
[{L2_KER_ALVEOLARIZED_2}]{V_D_KER_WN} --> [{L2_IMG_ALVEOLARIZED_2}] {V_D_IMG_XL_WN}
|
235
|
+
{L2_ALVEOLARIZED} === st * pt * ht
|
236
|
+
{_L2_ALVEOLARIZED_} === TW_EXT_11 * TW_EXT_12 * TW_EXT_13
|
237
|
+
|
238
|
+
[{L2_ALVEOLARIZED}]{V_D_WN} --> [{_L2_ALVEOLARIZED_}] {_V_D_WN_}
|
209
239
|
\endif
|
210
|
-
|
240
|
+
|
211
241
|
\** ===================== **\
|
212
242
|
\** 3RD LINE RULES **\
|
213
243
|
\** ===================== **\
|
214
|
-
{
|
215
|
-
{
|
216
|
-
{L3_KER_2} === (h,χ) * hw
|
217
|
-
{L3_IMG_2} === AHA * HWESTA
|
244
|
+
{L3} === (th,þ) * f * (h,χ) * hw
|
245
|
+
{_L3_} === SULE * FORMEN * AHA * HWESTA
|
218
246
|
|
219
247
|
\** NORMAL **\
|
220
|
-
[{
|
221
|
-
|
222
|
-
|
248
|
+
[{L3}]{V_D_WN} --> [{_L3_}]{_V_D_WN_}
|
249
|
+
|
223
250
|
\** OTHERS **\
|
224
|
-
hy{
|
225
|
-
|
251
|
+
hy{V_D_WN} --> HYARMEN THINF_DDOT_L {_V_D_WN_}
|
252
|
+
|
226
253
|
\** Override h with vowels (descendent of hy) **\
|
227
|
-
_h{
|
228
|
-
_h[{LVOWELS}]
|
229
|
-
|
254
|
+
_h{V_D} --> HYARMEN {_V_D_}
|
255
|
+
_h[{LVOWELS}] --> HYARMEN [{_LTEHTAR_}]
|
256
|
+
|
257
|
+
(h,χ) --> AHA
|
230
258
|
|
231
259
|
\** ===================== **\
|
232
260
|
\** 4TH LINE RULES **\
|
233
261
|
\** ===================== **\
|
234
|
-
{
|
235
|
-
{
|
236
|
-
|
262
|
+
{L4} === nt * mp * nc * nq \** Not nqu, due to preprocessor **\
|
263
|
+
{_L4_} === ANTO * AMPA * ANCA * UNQUE
|
264
|
+
|
237
265
|
\** NORMAL **\
|
238
|
-
[{
|
266
|
+
[{L4}]{V_D_WN} --> [{_L4_}]{_V_D_WN_}
|
239
267
|
\** OTHERS **\
|
240
|
-
nty{
|
268
|
+
nty{V_D_WN} --> ANTO THINF_DDOT_XL {_V_D_WN_}
|
241
269
|
|
242
270
|
\** ===================== **\
|
243
271
|
\** 5TH LINE RULES **\
|
244
272
|
\** ===================== **\
|
245
|
-
{
|
246
|
-
{
|
273
|
+
{L5} === n * m * ñ * ñw * _nw
|
274
|
+
{_L5_} === NUMEN * MALTA * NOLDO * NWALME * NWALME
|
247
275
|
|
248
|
-
[{
|
276
|
+
[{L5}]{V_D_WN} --> [{_L5_}]{_V_D_WN_}
|
249
277
|
|
250
|
-
ny{
|
251
|
-
nn{
|
252
|
-
my{
|
253
|
-
mm{
|
278
|
+
ny{V_D_WN} --> NUMEN THINF_DDOT_XL {_V_D_WN_}
|
279
|
+
nn{V_D_WN} --> NUMEN DASH_INF_L {_V_D_WN_}
|
280
|
+
my{V_D_WN} --> MALTA THINF_DDOT_XL {_V_D_WN_}
|
281
|
+
mm{V_D_WN} --> MALTA DASH_INF_L {_V_D_WN_}
|
254
282
|
|
255
283
|
\** ===================== **\
|
256
284
|
\** 6TH LINE RULES **\
|
257
285
|
\** ===================== **\
|
258
|
-
|
259
|
-
{
|
286
|
+
|
287
|
+
{_LONE_R_} === ORE
|
260
288
|
\if always_use_romen_for_r
|
261
|
-
|
289
|
+
\** Override lone r if option is on **\
|
290
|
+
{_LONE_R_} === ROMEN
|
262
291
|
\endif
|
263
|
-
|
264
|
-
{L6_KER} === r * v * y * w
|
265
|
-
{L6_IMG} === ROMEN * VALA * ANNA THINF_DDOT_L * VILYA
|
266
292
|
|
267
|
-
|
268
|
-
|
293
|
+
{L6} === r * v * y * w
|
294
|
+
{_L6_} === ROMEN * VALA * ANNA THINF_DDOT_L * VILYA
|
295
|
+
|
296
|
+
[{L6}]{V_D_WN} --> [{_L6_}]{_V_D_WN_}
|
297
|
+
|
269
298
|
\** r before long vowels is voiced **\
|
270
|
-
r[{LVOWELS}]
|
271
|
-
r --> {LONE_R_IMG} \** lonely r is not voiced, so override rule **\
|
299
|
+
r[{LVOWELS}] --> ROMEN [{_LTEHTAR_}]
|
272
300
|
|
273
|
-
\**
|
274
|
-
|
301
|
+
\** Override rule r + null **\
|
302
|
+
r --> {_LONE_R_} {_NVOWEL_}
|
275
303
|
|
276
|
-
rr{
|
277
|
-
ry{
|
278
|
-
rd{
|
304
|
+
rr{V_D_WN} --> ROMEN DASH_INF_S {_V_D_WN_}
|
305
|
+
ry{V_D_WN} --> ROMEN THINF_DDOT_XS {_V_D_WN_}
|
306
|
+
rd{V_D_WN} --> ARDA {_V_D_WN_}
|
279
307
|
|
280
308
|
\** ===================== **\
|
281
309
|
\** L LINE RULES **\
|
282
310
|
\** ===================== **\
|
283
|
-
{
|
284
|
-
{
|
285
|
-
|
286
|
-
[{
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
ly{V_D_KER_WN} --> LAMBE LAMBE_MARK_DDOT {V_D_IMG__S_WN}
|
292
|
-
hl{V_D_KER_WN} --> HALLA LAMBE {V_D_IMG__S_WN}
|
293
|
-
hr{V_D_KER_WN} --> HALLA ROMEN {V_D_IMG__S_WN}
|
311
|
+
{LINE_L} === l * ld * ll
|
312
|
+
{_LINE_L_} === LAMBE * ALDA * LAMBE LAMBE_MARK_TILD
|
313
|
+
|
314
|
+
[{LINE_L}]{V_D_WN} --> [{_LINE_L_}]{_V_D_WN_}
|
315
|
+
|
316
|
+
ly{V_D_WN} --> LAMBE LAMBE_MARK_DDOT {_V_D_WN_}
|
317
|
+
hl{V_D_WN} --> HALLA LAMBE {_V_D_WN_}
|
318
|
+
hr{V_D_WN} --> HALLA ROMEN {_V_D_WN_}
|
294
319
|
|
295
320
|
\** ===================== **\
|
296
321
|
\** S/Z LINE RULES **\
|
297
322
|
\** ===================== **\
|
298
|
-
{
|
299
|
-
{
|
323
|
+
{L8} === s * {SS}
|
324
|
+
{_L8_} === SILME_NUQUERNA * ESSE_NUQUERNA
|
300
325
|
|
301
|
-
[{
|
326
|
+
[{L8}]{V_D_WN} --> [{_L8_}]{_V_D_WN_}
|
302
327
|
|
303
328
|
\** Override lonely s / ss / before consonant **\
|
304
329
|
s --> SILME
|
305
|
-
s[{LVOWELS}] --> SILME
|
306
|
-
{SS}
|
307
|
-
{SS}[{LVOWELS}] --> ESSE
|
308
|
-
|
330
|
+
s[{LVOWELS}] --> SILME [{_LTEHTAR_}]
|
331
|
+
{SS} --> ESSE
|
332
|
+
{SS}[{LVOWELS}] --> ESSE [{_LTEHTAR_}]
|
333
|
+
|
334
|
+
\if implicit_a
|
335
|
+
sá --> SILME_NUQUERNA {A_SHAPE}
|
336
|
+
{SS}á --> ESSE_NUQUERNA {A_SHAPE}
|
337
|
+
\endif
|
338
|
+
|
309
339
|
\end
|
310
|
-
|
340
|
+
|
311
341
|
\beg rules punctuation
|
312
342
|
. --> PUNCT_DDOT
|
313
343
|
.. --> PUNCT_DOT PUNCT_DDOT PUNCT_DOT
|
@@ -334,11 +364,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
334
364
|
|
335
365
|
“ --> DQUOT_OPEN
|
336
366
|
” --> DQUOT_CLOSE
|
337
|
-
« --> DQUOT_OPEN
|
338
|
-
» --> DQUOT_CLOSE
|
367
|
+
« --> DQUOT_OPEN
|
368
|
+
» --> DQUOT_CLOSE
|
339
369
|
|
340
|
-
- --> {NULL}
|
341
|
-
– --> PUNCT_TILD
|
370
|
+
- --> {NULL}
|
371
|
+
– --> PUNCT_TILD
|
342
372
|
— --> PUNCT_TILD
|
343
373
|
|
344
374
|
[ --> PUNCT_PAREN_L
|
@@ -348,15 +378,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
348
378
|
{ --> PUNCT_PAREN_L
|
349
379
|
} --> PUNCT_PAREN_R
|
350
380
|
< --> PUNCT_PAREN_L
|
351
|
-
> --> PUNCT_PAREN_R
|
381
|
+
> --> PUNCT_PAREN_R
|
352
382
|
|
353
383
|
\** Not universal between fonts ... **\
|
354
384
|
$ --> BOOKMARK_SIGN
|
355
385
|
≤ --> RING_MARK_L \** Ring inscription left beautiful stuff **\
|
356
386
|
≥ --> RING_MARK_R \** Ring inscription right beautiful stuff **\
|
357
|
-
|
387
|
+
|
358
388
|
\end
|
359
|
-
|
389
|
+
|
360
390
|
\beg rules numbers
|
361
391
|
0 --> NUM_0
|
362
392
|
1 --> NUM_1
|
@@ -369,7 +399,19 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
369
399
|
8 --> NUM_8
|
370
400
|
9 --> NUM_9
|
371
401
|
A --> NUM_10
|
372
|
-
B --> NUM_11
|
402
|
+
B --> NUM_11
|
373
403
|
\end
|
374
|
-
|
375
|
-
\end
|
404
|
+
|
405
|
+
\end
|
406
|
+
|
407
|
+
\beg postprocessor
|
408
|
+
\** TODO : Move formen to S, move hyarmen to XS **\
|
409
|
+
\csub A_TEHTA "A_TEHTA_XS TELCO ARA" "A_TEHTA_S ORE TW_EXT_11 TW_EXT_12 SULE HYARMEN" "A_TEHTA_L TINCO CALMA PARMA QUESSE AHA HWESTA LAMBE ALDA YANTA URE ROMEN ARDA SILME_NUQUERNA ESSE_NUQUERNA VALA ANNA VILYA FORMEN" "A_TEHTA_XL TW_EXT_13 TW_EXT_14 TW_EXT_21 TW_EXT_22 TW_EXT_23 TW_EXT_24 ANDO UMBAR ANGA UNGWE ANTO AMPA ANCA UNQUE NUMEN MALTA NOLDO NWALME"
|
410
|
+
\csub A_TEHTA_CIRCUM "A_TEHTA_CIRCUM_XS TELCO ARA" "A_TEHTA_CIRCUM_S ORE TW_EXT_11 TW_EXT_12 SULE HYARMEN" "A_TEHTA_CIRCUM_L TINCO CALMA PARMA QUESSE AHA HWESTA LAMBE ALDA YANTA URE ROMEN ARDA SILME_NUQUERNA ESSE_NUQUERNA VALA ANNA VILYA FORMEN" "A_TEHTA_CIRCUM_XL TW_EXT_13 TW_EXT_14 TW_EXT_21 TW_EXT_22 TW_EXT_23 TW_EXT_24 ANDO UMBAR ANGA UNGWE ANTO AMPA ANCA UNQUE NUMEN MALTA NOLDO NWALME"
|
411
|
+
\csub E_TEHTA "E_TEHTA_XS TELCO ARA" "E_TEHTA_S ORE TW_EXT_11 TW_EXT_12 SULE HYARMEN" "E_TEHTA_L TINCO CALMA PARMA QUESSE AHA HWESTA LAMBE ALDA YANTA URE ROMEN ARDA SILME_NUQUERNA ESSE_NUQUERNA VALA ANNA VILYA FORMEN" "E_TEHTA_XL TW_EXT_13 TW_EXT_14 TW_EXT_21 TW_EXT_22 TW_EXT_23 TW_EXT_24 ANDO UMBAR ANGA UNGWE ANTO AMPA ANCA UNQUE NUMEN MALTA NOLDO NWALME"
|
412
|
+
\csub I_TEHTA "I_TEHTA_XS TELCO ARA" "I_TEHTA_S ORE TW_EXT_11 TW_EXT_12 SULE HYARMEN" "I_TEHTA_L TINCO CALMA PARMA QUESSE AHA HWESTA LAMBE ALDA YANTA URE ROMEN ARDA SILME_NUQUERNA ESSE_NUQUERNA VALA ANNA VILYA FORMEN" "I_TEHTA_XL TW_EXT_13 TW_EXT_14 TW_EXT_21 TW_EXT_22 TW_EXT_23 TW_EXT_24 ANDO UMBAR ANGA UNGWE ANTO AMPA ANCA UNQUE NUMEN MALTA NOLDO NWALME"
|
413
|
+
\csub O_TEHTA "O_TEHTA_XS TELCO ARA" "O_TEHTA_S ORE TW_EXT_11 TW_EXT_12 SULE HYARMEN" "O_TEHTA_L TINCO CALMA PARMA QUESSE AHA HWESTA LAMBE ALDA YANTA URE ROMEN ARDA SILME_NUQUERNA ESSE_NUQUERNA VALA ANNA VILYA FORMEN" "O_TEHTA_XL TW_EXT_13 TW_EXT_14 TW_EXT_21 TW_EXT_22 TW_EXT_23 TW_EXT_24 ANDO UMBAR ANGA UNGWE ANTO AMPA ANCA UNQUE NUMEN MALTA NOLDO NWALME"
|
414
|
+
\csub U_TEHTA "U_TEHTA_XS TELCO ARA" "U_TEHTA_S ORE TW_EXT_11 TW_EXT_12 SULE HYARMEN" "U_TEHTA_L TINCO CALMA PARMA QUESSE AHA HWESTA LAMBE ALDA YANTA URE ROMEN ARDA SILME_NUQUERNA ESSE_NUQUERNA VALA ANNA VILYA FORMEN" "U_TEHTA_XL TW_EXT_13 TW_EXT_14 TW_EXT_21 TW_EXT_22 TW_EXT_23 TW_EXT_24 ANDO UMBAR ANGA UNGWE ANTO AMPA ANCA UNQUE NUMEN MALTA NOLDO NWALME"
|
415
|
+
\csub THINF_DOT "THINF_DOT_XS TELCO ROMEN ARDA" "THINF_DOT_L ORE TW_EXT_11 TW_EXT_12 TINCO PARMA SULE FORMEN VALA ANNA VILYA SILME ESSE AHA HWESTA HYARMEN YANTA URE" "THINF_DOT_XL QUESSE CALMA TW_EXT_13 TW_EXT_14 TW_EXT_21 TW_EXT_22 TW_EXT_23 TW_EXT_24 ANDO UMBAR ANGA UNGWE ANTO AMPA ANCA UNQUE NUMEN MALTA NOLDO NWALME" "LAMBE_MARK_DOT LAMBE ALDA"
|
416
|
+
\end
|
417
|
+
|
@@ -25,17 +25,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
25
25
|
\** Sindarin Angerthas Daeron mode for glaemscribe **\
|
26
26
|
|
27
27
|
\** changelog **\
|
28
|
-
\** 0.0.
|
29
|
-
|
28
|
+
\** 0.0.2 : Added thorn as equivalent for th **\
|
29
|
+
\** 0.0.3 : Moved out space to general element **\
|
30
30
|
|
31
31
|
\language "Sindarin"
|
32
32
|
\writing "Cirth"
|
33
33
|
\mode "Angerthas Daeron"
|
34
|
-
\version "0.0.
|
34
|
+
\version "0.0.3"
|
35
35
|
\authors "Talagan (Benjamin Babut)"
|
36
36
|
|
37
37
|
\charset cirth_ds true
|
38
38
|
|
39
|
+
\** We redefine the output space to have something beautiful, especially with erebor1 and erebor2 **\
|
40
|
+
\outspace CIRTH_SPACE_BIG
|
41
|
+
|
39
42
|
\beg preprocessor
|
40
43
|
\** Work exclusively downcase **\
|
41
44
|
\downcase
|
@@ -59,9 +62,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
59
62
|
|
60
63
|
\beg processor
|
61
64
|
|
62
|
-
\** We redefine the output space to have something beautiful, especially with erebor1 and erebor2 **\
|
63
|
-
\outspace CIRTH_SPACE_BIG
|
64
|
-
|
65
65
|
\beg rules litteral
|
66
66
|
a --> CIRTH_48
|
67
67
|
á --> CIRTH_49
|
@@ -22,6 +22,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
22
22
|
|
23
23
|
**\
|
24
24
|
|
25
|
+
\** 0.0.3 : Moved out space to general element **\
|
26
|
+
|
25
27
|
\language "Valarin"
|
26
28
|
\writing "Sarati"
|
27
29
|
\mode "Glaemscrafu"
|
@@ -30,6 +32,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
30
32
|
|
31
33
|
\charset sarati_eldamar true
|
32
34
|
|
35
|
+
\outspace SARATI_SPACE
|
36
|
+
|
37
|
+
|
33
38
|
\beg preprocessor
|
34
39
|
\** Work exclusively downcase **\
|
35
40
|
\downcase
|
@@ -55,7 +60,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
55
60
|
|
56
61
|
\beg processor
|
57
62
|
|
58
|
-
\outspace SARATI_SPACE
|
59
63
|
|
60
64
|
\beg rules litteral
|
61
65
|
|
data/lib/api/fragment.rb
CHANGED
data/lib/api/mode.rb
CHANGED
@@ -110,8 +110,8 @@ module Glaemscribe
|
|
110
110
|
ret = content.lines.map{ |l|
|
111
111
|
l = l.strip # Clean the lines
|
112
112
|
l = @pre_processor.apply(l)
|
113
|
-
l = @processor.apply(l
|
114
|
-
l = @post_processor.apply(l)
|
113
|
+
l = @processor.apply(l)
|
114
|
+
l = @post_processor.apply(l, charset)
|
115
115
|
}.join("\n")
|
116
116
|
|
117
117
|
return true, ret
|
data/lib/api/mode_parser.rb
CHANGED
@@ -70,7 +70,7 @@ module Glaemscribe
|
|
70
70
|
}
|
71
71
|
}
|
72
72
|
|
73
|
-
doc.root_node.gpath("
|
73
|
+
doc.root_node.gpath("postprocessor.outspace").each{ |outspace_element|
|
74
74
|
validate_presence_of_args(outspace_element, 1)
|
75
75
|
}
|
76
76
|
|
@@ -180,13 +180,8 @@ module Glaemscribe
|
|
180
180
|
|
181
181
|
if !operator_class
|
182
182
|
@mode.errors << Glaeml::Error.new(element.line,"Operator #{operator_name} is unknown.")
|
183
|
-
else
|
184
|
-
|
185
|
-
arg1 = element.args[1]
|
186
|
-
arg2 = element.args[2]
|
187
|
-
arg3 = element.args[3]
|
188
|
-
|
189
|
-
term.operators << operator_class.new([arg0,arg1,arg2,arg3])
|
183
|
+
else
|
184
|
+
term.operators << operator_class.new(element.args.clone)
|
190
185
|
end
|
191
186
|
}
|
192
187
|
|
@@ -277,9 +272,9 @@ module Glaemscribe
|
|
277
272
|
}
|
278
273
|
|
279
274
|
# Read the processor
|
280
|
-
doc.root_node.gpath("
|
281
|
-
val
|
282
|
-
@mode.
|
275
|
+
doc.root_node.gpath("outspace").each{ |outspace_element|
|
276
|
+
val = outspace_element.args[0]
|
277
|
+
@mode.post_processor.out_space = val.split.reject{|token| token.empty? }
|
283
278
|
}
|
284
279
|
|
285
280
|
doc.root_node.gpath("processor.rules").each{ |rules_element|
|