glaemscribe 1.0.13 → 1.0.14

Sign up to get free protection for your applications and to get access to all the features.
@@ -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|