glaemscribe 1.0.13 → 1.0.14

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.
@@ -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
- \** 0.0.2 : added χ for the word χarina, correcting ts/ps sequences to work better with eldamar **\
27
- \** 0.0.3 : added o/u curl option **\
28
- \** 0.0.4 : added voiced plosives corner cases treatment and option to chose method **\
29
- \** 0.0.5 : fixing h+long vowel medially **\
30
- \** 0.0.6 : adding option for alveolarized consonants st (t+t), pt (p+t), ht (c+t) **\
31
- \** 0.0.7 : Fixing rb/lb, to be treated as r+mb and l+mb**\
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.0.7"
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 split_diphthongs false
43
- \option always_use_romen_for_r false
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
- \beg option voiced_plosives_treatment VOICED_PLOSIVES_WITH_STROKE
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
- {O_LOOP_XS} === O_TEHTA_XS
101
- {O_LOOP_S} === O_TEHTA_S
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
- {O_LOOP_XS} === U_TEHTA_XS
110
- {O_LOOP_S} === U_TEHTA_S
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
- {TEHTA_XS} === A_TEHTA_XS * E_TEHTA_XS * I_TEHTA_XS * {O_LOOP_XS} * {U_LOOP_XS}
120
- {TEHTA__S} === A_TEHTA_S * E_TEHTA_S * I_TEHTA_S * {O_LOOP_S} * {U_LOOP_S}
121
- {TEHTA__L} === A_TEHTA_L * E_TEHTA_L * I_TEHTA_L * {O_LOOP_L} * {U_LOOP_L}
122
- {TEHTA_XL} === A_TEHTA_XL * E_TEHTA_XL * I_TEHTA_XL * {O_LOOP_XL} * {U_LOOP_XL}
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
- {WDIPHTHENGS} === {NULL}
146
+ {WDIPHTHONGS} === {NULL}
147
+ {_WDIPHTHONGS_} === {NULL}
127
148
  \else
128
- {DIPHTHONGS} === ai * au * eu * iu * oi * ui
129
- {DIPHTHENGS} === YANTA A_TEHTA_L * URE A_TEHTA_L * URE E_TEHTA_L * URE I_TEHTA_L * YANTA {O_LOOP_L} * YANTA {U_LOOP_L}
130
- {WDIPHTHONGS} === * {DIPHTHONGS} \** groovy! **\
131
- {WDIPHTHENGS} === * {DIPHTHENGS} \** same thing **\
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
- {V_D_KER} === [ {VOWELS} {WDIPHTHONGS} ]
135
- {V_D_KER_WN} === [ {VOWELS} {WDIPHTHONGS} * {NULL} ]
136
-
137
- {V_D_IMG_XS} === [ {TEHTA_XS} {WDIPHTHENGS} ]
138
- {V_D_IMG__S} === [ {TEHTA__L} {WDIPHTHENGS} ]
139
- {V_D_IMG__L} === [ {TEHTA__S} {WDIPHTHENGS} ]
140
- {V_D_IMG_XL} === [ {TEHTA_XL} {WDIPHTHENGS} ]
141
- {V_D_IMG_XS_WN} === [ {TEHTA_XS} {WDIPHTHENGS} * {NULL} ]
142
- {V_D_IMG__S_WN} === [ {TEHTA__L} {WDIPHTHENGS} * {NULL} ]
143
- {V_D_IMG__L_WN} === [ {TEHTA__S} {WDIPHTHENGS} * {NULL} ]
144
- {V_D_IMG_XL_WN} === [ {TEHTA_XL} {WDIPHTHENGS} * {NULL} ]
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}] --> TELCO [{TEHTA_XS}] \** Replace isolated short vowels **\
148
- [{LVOWELS}] --> ARA [{TEHTA_XS}] \** Replace long vowels **\
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}] --> [{DIPHTHENGS}] \** Replace diphthongs **\
185
+ [{DIPHTHONGS}] --> [{_DIPHTHONGS_}] \** Replace diphthongs **\
152
186
  \endif
153
-
187
+
154
188
  \** ===================== **\
155
189
  \** 1ST LINE RULES **\
156
190
  \** ===================== **\
157
- {L1_KER_1} === t * p
158
- {L1_IMG_1} === TINCO * PARMA
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
- [ {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 **\
170
- {K}{K}{V_D_KER_WN} --> CALMA DASH_INF_S {V_D_IMG__S_WN}
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{V_D_KER_WN} --> TINCO THINF_DDOT_L {V_D_IMG__S_WN}
174
- py{V_D_KER_WN} --> PARMA THINF_DDOT_L {V_D_IMG__S_WN}
175
-
176
- ts{V_D_KER_WN}_ --> TINCO {V_D_IMG__L_WN} SHOOK_RIGHT_L
177
- ps{V_D_KER_WN}_ --> PARMA {V_D_IMG__L_WN} SHOOK_RIGHT_L
178
- x{V_D_KER_WN} --> CALMA SHOOK_LEFT_L {V_D_IMG__S_WN} \** render ks for x **\
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
- {L2_KER} === nd * mb * ng * ngw
184
- {L2_IMG} === ANDO * UMBAR * ANGA * UNGWE
213
+ {L2} === nd * mb * ng * ngw
214
+ {_L2_} === ANDO * UMBAR * ANGA * UNGWE
185
215
 
186
216
  \** STANDARD **\
187
- [{L2_KER}]{V_D_KER_WN} --> [{L2_IMG}]{V_D_IMG_XL_WN}
188
-
189
- \** Palatalized **\
190
- ndy{V_D_KER_WN} --> ANDO THINF_DDOT_XL {V_D_IMG_XL_WN}
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
- {L2_KER_UN} === d * b * g * gw
194
- \if "voiced_plosives_treatment == VOICED_PLOSIVES_WITH_STROKE"
195
- [{L2_KER_UN}]{V_D_KER_WN} --> [{L2_IMG}] THINF_STROKE_XL {V_D_IMG_XL_WN}
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
- {L2_IMG_UN} === TW_EXT_21 * TW_EXT_22 * TW_EXT_23 * TW_EXT_24
198
- [{L2_KER_UN}]{V_D_KER_WN} --> [{L2_IMG_UN}] {V_D_IMG_XL_WN}
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
- {L2_KER_ALVEOLARIZED_1} === st * pt
203
- {L2_IMG_ALVEOLARIZED_1} === TW_EXT_11 * TW_EXT_12
204
- {L2_KER_ALVEOLARIZED_2} === ht
205
- {L2_IMG_ALVEOLARIZED_2} === TW_EXT_13
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
- {L3_KER_1} === (th,þ) * f
215
- {L3_IMG_1} === SULE * FORMEN
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
- [{L3_KER_1}]{V_D_KER_WN} --> [{L3_IMG_1}]{V_D_IMG__S_WN}
221
- [{L3_KER_2}]{V_D_KER_WN} --> [{L3_IMG_2}]{V_D_IMG__S_WN} \** Tengscribe uses S but L is probably better **\
222
-
248
+ [{L3}]{V_D_WN} --> [{_L3_}]{_V_D_WN_}
249
+
223
250
  \** OTHERS **\
224
- hy{V_D_KER_WN} --> HYARMEN THINF_DDOT_L {V_D_IMG__L_WN}
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{V_D_KER} --> HYARMEN {V_D_IMG__L}
228
- _h[{LVOWELS}] --> HYARMEN ARA [{TEHTA_XS}]
229
- (h,χ) --> AHA
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
- {L4_KER} === nt * mp * nc * nq \** Not nqu, due to preprocessor **\
235
- {L4_IMG} === ANTO * AMPA * ANCA * UNQUE
236
-
262
+ {L4} === nt * mp * nc * nq \** Not nqu, due to preprocessor **\
263
+ {_L4_} === ANTO * AMPA * ANCA * UNQUE
264
+
237
265
  \** NORMAL **\
238
- [{L4_KER}]{V_D_KER_WN} --> [{L4_IMG}]{V_D_IMG_XL_WN}
266
+ [{L4}]{V_D_WN} --> [{_L4_}]{_V_D_WN_}
239
267
  \** OTHERS **\
240
- nty{V_D_KER_WN} --> ANTO THINF_DDOT_XL {V_D_IMG_XL_WN}
268
+ nty{V_D_WN} --> ANTO THINF_DDOT_XL {_V_D_WN_}
241
269
 
242
270
  \** ===================== **\
243
271
  \** 5TH LINE RULES **\
244
272
  \** ===================== **\
245
- {L5_KER} === n * m * ñ * ñw * _nw
246
- {L5_IMG} === NUMEN * MALTA * NOLDO * NWALME * NWALME
273
+ {L5} === n * m * ñ * ñw * _nw
274
+ {_L5_} === NUMEN * MALTA * NOLDO * NWALME * NWALME
247
275
 
248
- [{L5_KER}]{V_D_KER_WN} --> [{L5_IMG}]{V_D_IMG_XL_WN}
276
+ [{L5}]{V_D_WN} --> [{_L5_}]{_V_D_WN_}
249
277
 
250
- ny{V_D_KER_WN} --> NUMEN THINF_DDOT_XL {V_D_IMG_XL_WN}
251
- nn{V_D_KER_WN} --> NUMEN DASH_INF_L {V_D_IMG_XL_WN}
252
- my{V_D_KER_WN} --> MALTA THINF_DDOT_XL {V_D_IMG_XL_WN}
253
- mm{V_D_KER_WN} --> MALTA DASH_INF_L {V_D_IMG_XL_WN}
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
- {LONE_R_IMG} === ORE \** lonely r is not voiced, so override rule **\
286
+
287
+ {_LONE_R_} === ORE
260
288
  \if always_use_romen_for_r
261
- {LONE_R_IMG} === ROMEN \** Override lone r if option is on **\
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
- [{L6_KER}]{V_D_KER_WN} --> [{L6_IMG}]{V_D_IMG__S_WN}
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}] --> ROMEN ARA [{TEHTA_XS}]
271
- r --> {LONE_R_IMG} \** lonely r is not voiced, so override rule **\
299
+ r[{LVOWELS}] --> ROMEN [{_LTEHTAR_}]
272
300
 
273
- \** rb is specified to be treated as r + mb in the LotR Appendix E **\
274
- rb {V_D_KER_WN} --> {LONE_R_IMG} UMBAR {V_D_IMG_XL_WN}
301
+ \** Override rule r + null **\
302
+ r --> {_LONE_R_} {_NVOWEL_}
275
303
 
276
- rr{V_D_KER_WN} --> ROMEN DASH_INF_S {V_D_IMG__S_WN}
277
- ry{V_D_KER_WN} --> ROMEN THINF_DDOT_L {V_D_IMG__S_WN}
278
- rd{V_D_KER_WN} --> ARDA {V_D_IMG__S_WN}
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
- {LINE_L_KER} === l * ld * ll
284
- {LINE_L_IMG} === LAMBE * ALDA * LAMBE LAMBE_MARK_TILD
285
-
286
- [{LINE_L_KER}]{V_D_KER_WN} --> [{LINE_L_IMG}]{V_D_IMG__S_WN}
287
-
288
- \** lb is specified to be treated as l + mb in the LotR Appendix E **\
289
- lb {V_D_KER_WN} --> LAMBE UMBAR {V_D_IMG_XL_WN}
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
- {L8_KER} === s * {SS}
299
- {L8_IMG} === SILME_NUQUERNA * ESSE_NUQUERNA
323
+ {L8} === s * {SS}
324
+ {_L8_} === SILME_NUQUERNA * ESSE_NUQUERNA
300
325
 
301
- [{L8_KER}]{V_D_KER_WN} --> [{L8_IMG}]{V_D_IMG__S_WN}
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 ARA [{TEHTA_XS}]
306
- {SS} --> ESSE
307
- {SS}[{LVOWELS}] --> ESSE ARA [{TEHTA_XS}]
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.3 : Added thorn as equivalent for th **\
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.2"
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
@@ -67,7 +67,7 @@ module Glaemscribe
67
67
  }
68
68
 
69
69
  equivalences = [[[""]]] if equivalences.empty?
70
-
70
+
71
71
  # In the case of a destination fragment, check that all symbols used are found
72
72
  # in the charsets used by the mode
73
73
  if dst?
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, charset)
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
@@ -70,7 +70,7 @@ module Glaemscribe
70
70
  }
71
71
  }
72
72
 
73
- doc.root_node.gpath("processor.outspace").each{ |outspace_element|
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
- arg0 = element.args[0]
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("processor.outspace").each{ |outspace_element|
281
- val = outspace_element.args[0]
282
- @mode.processor.out_space = val.split.reject{|token| token.empty? }
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|