glaemscribe 1.0.19 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/glaemresources/charsets/tengwar_ds_annatar.cst +509 -0
  3. data/glaemresources/charsets/tengwar_ds_eldamar.cst +22 -16
  4. data/glaemresources/charsets/tengwar_ds_elfica.cst +461 -0
  5. data/glaemresources/charsets/tengwar_ds_parmaite.cst +500 -0
  6. data/glaemresources/charsets/{tengwar_ds.cst → tengwar_ds_sindarin.cst} +59 -62
  7. data/glaemresources/charsets/tengwar_freemono.cst +176 -0
  8. data/glaemresources/charsets/unicode_runes.cst +1 -0
  9. data/glaemresources/modes/adunaic.glaem +50 -28
  10. data/glaemresources/modes/blackspeech.glaem +156 -82
  11. data/glaemresources/modes/english-ipa.glaem +49 -0
  12. data/glaemresources/modes/french-ipa.glaem +49 -0
  13. data/glaemresources/modes/{oldnorse-medieval.glaem → futhark-runicus.glaem} +4 -4
  14. data/glaemresources/modes/futhark-younger.glaem +129 -0
  15. data/glaemresources/modes/{futhorc.glaem.disabled → futhorc.glaem} +76 -38
  16. data/glaemresources/modes/gothic.glaem +1 -1
  17. data/glaemresources/modes/khuzdul.glaem +1 -1
  18. data/glaemresources/modes/mercian.glaem +31 -16
  19. data/glaemresources/modes/quenya-sarati.glaem +5 -3
  20. data/glaemresources/modes/quenya.glaem +168 -77
  21. data/glaemresources/modes/rlyehian.glaem +41 -43
  22. data/glaemresources/modes/sindarin-beleriand.glaem +39 -17
  23. data/glaemresources/modes/sindarin-daeron.glaem +1 -1
  24. data/glaemresources/modes/{sindarin-classical.glaem → sindarin.glaem} +73 -37
  25. data/glaemresources/modes/telerin.glaem +161 -64
  26. data/glaemresources/modes/valarin-sarati.glaem +1 -1
  27. data/glaemresources/modes/westron.glaem +83 -44
  28. data/glaemresources/modes/westsaxon.glaem +30 -13
  29. data/lib/api/charset.rb +29 -11
  30. data/lib/api/charset_parser.rb +15 -3
  31. data/lib/api/mode.rb +15 -3
  32. data/lib/api/mode_parser.rb +7 -2
  33. data/lib/api/option.rb +15 -1
  34. data/lib/api/post_processor/resolve_virtuals.rb +35 -24
  35. data/lib/api/transcription_pre_post_processor.rb +2 -1
  36. metadata +15 -11
  37. data/glaemresources/modes/blackspeech-annatar.glaem +0 -320
  38. data/glaemresources/modes/futhark-long-branch.glaem.disabled +0 -101
  39. data/glaemresources/modes/futhark-short-twig.glaem.disabled +0 -101
@@ -26,10 +26,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
26
26
  \writing "Runes"
27
27
  \mode "Futhorc"
28
28
  \version "0.0.1"
29
- \authors "Bertrand Bellet"
29
+ \authors "Historical impl. Bertrand Bellet"
30
30
 
31
31
  \charset unicode_runes true
32
32
 
33
+ \beg options
34
+ \option use_cweorth true
35
+ \option use_stan true
36
+ \option use_calc_and_gar true
37
+ \end
38
+
33
39
  \beg preprocessor
34
40
  \downcase
35
41
  \end
@@ -45,9 +51,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
45
51
  {Y} === (y,ý)
46
52
  {AE} === (æ,ǽ)
47
53
  {OE} === (œ,œ́)
48
- {EA} === (ea,éa)
49
- {EO} === (eo,éo)
50
- {IO} === (io,ío)
54
+ {EA} === (ea,éa)
55
+ {EO} === (eo,éo)
56
+ {IO} === (io,ío)
51
57
 
52
58
  \** VOWELS **\
53
59
 
@@ -59,54 +65,86 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
59
65
  {Y} --> YR
60
66
  {AE} --> AESC
61
67
  {OE} --> ETHEL
62
- {EA} --> EAR
63
- {EO} --> EOH
64
- {IO} --> IOR
68
+ {EA} --> EAR
69
+ {EO} --> EOH
70
+ {IO} --> IOR
65
71
 
66
72
  \** IOTATED VOWELS **\
67
-
68
- i{A} --> GER AC
69
- i{E} --> GER EH
70
- i{O} --> GER OS
71
- i{U} --> GER UR
72
- i{Y} --> GER YR
73
- i{AE} --> GER AESC
74
- i{OE} --> GER ETHEL
75
- i{EA} --> GER EAR
76
- i{EO} --> GER EOH
73
+ {IOTABLES} === {A} * {E} * {O} * {U} * {Y} * {AE} * {OE} * {EA} * {EO}
74
+ {_IOTABLES_} === AC * EH * OS * UR * YR * AESC * ETHEL * EAR * EOH
75
+
76
+ i [{IOTABLES}] --> GER [{_IOTABLES_} ]
77
77
 
78
78
  \** CONSONANTS **\
79
-
80
79
  (b,bb) --> BEORC
81
- (c,cc,k,kk) --> CALC
80
+
81
+ \** (c,cc,k,kk) --> CALC **\
82
+ \** (ċ,ċċ) --> CEN **\
83
+ (c,cc,k,kk) --> CEN
82
84
  (ċ,ċċ) --> CEN
85
+ \if use_calc_and_gar
86
+ \** overload when option is on **\
87
+ (c,cc,k,kk) --> CALC
88
+ \endif
89
+
83
90
  (d,dd) --> DAEG
84
- (ð,ðð) --> THORN
85
- (f,ff) --> FEOH
91
+ (f,ff,v) --> FEOH
92
+
93
+ \** (g,gg,cg) --> GAR **\
94
+ \** (ȝ,ġ,ġġ,ċġ) --> GYFU **\
95
+ (g,gg,cg) --> GYFU
86
96
  (ȝ,ġ,ġġ,ċġ) --> GYFU
87
- (g,gg,cg) --> GAR
88
- (h,hh) --> HAEGL
97
+ \if use_calc_and_gar
98
+ \** overload when option is on **\
99
+ (g,gg,cg) --> GAR
100
+ \endif
101
+
102
+ (h,hh,ç,χ) --> HAEGL
103
+ (j,jj,ĭ) --> GER
89
104
  (l,ll) --> LAGU
90
105
  (m,mm) --> MAN
91
106
  (n,nn) --> NYD
92
107
  (p,pp) --> PEORTH
93
108
  (r,rr) --> RAD
94
- (s,ss) --> SIGEL
109
+ (s,ss,z) --> SIGEL
95
110
  (t,tt) --> TIR
96
- (þ,þþ) --> THORN
111
+ (þ,þþ,ð,ðð) --> THORN
97
112
  (w,ww) --> WYNN
98
-
99
- \** CLUSTERS **\
100
-
101
- ng --> ING GAR
102
- nġ --> ING GYFU
103
- nc --> ING CALC
104
- nċ --> ING CEN
105
- (cw,qu) --> CWEORTH
106
- x --> EOLHX
107
- (z,ts) --> TIR SIGEL
108
- st --> STAN
109
-
113
+
114
+ \** OLD ENGLISH AND **\
115
+
116
+ --> OS NYD DAEG
117
+
118
+ \** CLUSTERS WITH ING **\
119
+
120
+ \** ng --> ING GAR **\
121
+ \** nġ --> ING GYFU **\
122
+ ng --> ING GYFU
123
+ --> ING GYFU
124
+ \if use_calc_and_gar
125
+ ng --> ING GAR
126
+ \endif
127
+
128
+ \** nc --> ING CALC **\
129
+ \** (nċ,nk,nq) --> ING CEN **\
130
+ nc --> ING CEN
131
+ (nċ,nk,nq) --> ING CEN
132
+ \if use_calc_and_gar
133
+ ng --> ING CALC
134
+ \endif
135
+
136
+ \** CLUSTERS WITH S **\
137
+ x --> EOLHX
138
+ (z,ts) --> TIR SIGEL
139
+
140
+ \** ADDITIONAL RUNES **\
141
+ \if use_cweorth
142
+ (cw,qu,ccw,cqu) --> CWEORTH
143
+ \endif
144
+ \if use_stan
145
+ st --> STAN
146
+ \endif
147
+
110
148
  \end
111
149
 
112
150
  \beg rules punctuation
@@ -115,7 +153,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
115
153
  : --> RUNIC_MULTIPLE_PUNCTUATION
116
154
  . --> RUNIC_MULTIPLE_PUNCTUATION
117
155
  ! --> RUNIC_MULTIPLE_PUNCTUATION
118
- ? --> RUNIC_CROSS_PUNCTUATION
156
+ ? --> RUNIC_CROSS_PUNCTUATION
119
157
  \end
120
158
  \end
121
159
 
@@ -26,7 +26,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
26
26
  \writing "Gothic Alphabet"
27
27
  \mode "Standard"
28
28
  \version "0.0.1"
29
- \authors "Talagan (Benjamin Babut)"
29
+ \authors "Historical, impl. Talagan (Benjamin Babut)"
30
30
 
31
31
  \charset unicode_gothic true
32
32
 
@@ -28,7 +28,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
28
28
  \writing "Cirth"
29
29
  \mode "Angerthas Moria"
30
30
  \version "0.0.2"
31
- \authors "Talagan (Benjamin Babut)"
31
+ \authors "J.R.R. Tolkien, impl. Talagan (Benjamin Babut)"
32
32
 
33
33
  \charset cirth_ds true
34
34
 
@@ -29,10 +29,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
29
29
  \language "Old English"
30
30
  \writing "Tengwar"
31
31
  \mode "Mercian"
32
- \version "0.0.2"
33
- \authors "Talagan (Benjamin Babut)"
32
+ \version "0.1.0"
33
+ \authors "J.R.R. Tolkien, impl. Talagan (Benjamin Babut)"
34
34
 
35
35
  \charset tengwar_ds_eldamar true
36
+ \** Other charsets cannot handle all diacritics we are using here ... **\
37
+
38
+ \beg options
39
+ \beg option consonant_modification_style CONSONANT_MODIFICATION_STYLE_WAVE
40
+ \value CONSONANT_MODIFICATION_STYLE_WAVE 0
41
+ \value CONSONANT_MODIFICATION_STYLE_BAR 1
42
+ \end
43
+ \end
36
44
 
37
45
  \beg preprocessor
38
46
  \** Work exclusively downcase **\
@@ -63,6 +71,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
63
71
  \beg processor
64
72
 
65
73
  \beg rules litteral
74
+
75
+ \if "consonant_modification_style == CONSONANT_MODIFICATION_STYLE_WAVE"
76
+ {NASAL} === NASALIZE_SIGN_TILD
77
+ \else
78
+ {NASAL} === NASALIZE_SIGN
79
+ \endif
80
+
66
81
  {A} === a
67
82
  {AA} === á
68
83
  {E} === e
@@ -86,7 +101,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
86
101
  \** @ is the phantom vowel added by the preprocessor **\
87
102
 
88
103
  {S_VOWELS_NP_KERNEL} === {A} * {AE} * {OE} * {E} * {I} * {O} * {U} * {Y}
89
- {S_VOWELS_WP_KERNEL} === {S_VOWELS_NP_KERNEL} * @
104
+ {S_VOWELS_WP_KERNEL} === {S_VOWELS_NP_KERNEL} * @
90
105
 
91
106
  \** UP TEHTAS **\
92
107
  {TEHTAR_UP_NP} === A_TEHTA * Y_TEHTA * E_TEHTA_DOUBLE * E_TEHTA * I_TEHTA * O_TEHTA * U_TEHTA * SEV_TEHTA
@@ -167,12 +182,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
167
182
  \** Nasals (tild above) **\
168
183
  \** nC, nCV, nCVV **\
169
184
  \** We also have rules for long vowels **\
170
- [ nt * mp ] --> [ TINCO NASALIZE_SIGN_TILD * PARMA NASALIZE_SIGN_TILD ]
171
- [ nċ * nc ] --> [ CALMA NASALIZE_SIGN_TILD * QUESSE NASALIZE_SIGN_TILD ]
172
- [ nt * mp ]{S_VOWELS}{S_VOWELS_WN} --> [ TINCO NASALIZE_SIGN_TILD * PARMA NASALIZE_SIGN_TILD ]{_S_VOWELS_UP_}{_S_VOWELS_DN_WN_}
173
- [ nċ * nc ]{S_VOWELS}{S_VOWELS_WN} --> [ CALMA NASALIZE_SIGN_TILD * QUESSE NASALIZE_SIGN_TILD ]{_S_VOWELS_UP_}{_S_VOWELS_DN_WN_}
174
- [ nt * mp ][{LVOWELS}] --> [ TINCO NASALIZE_SIGN_TILD * PARMA NASALIZE_SIGN_TILD ][{TEHTAR_UP_NP}]{LVOWEL_MARKER}
175
- [ nċ * nc ][{LVOWELS}] --> [ CALMA NASALIZE_SIGN_TILD * QUESSE NASALIZE_SIGN_TILD ][{TEHTAR_UP_NP}]{LVOWEL_MARKER}
185
+ [ nt * mp ] --> [ TINCO {NASAL} * PARMA {NASAL} ]
186
+ [ nċ * nc ] --> [ CALMA {NASAL} * QUESSE {NASAL} ]
187
+ [ nt * mp ]{S_VOWELS}{S_VOWELS_WN} --> [ TINCO {NASAL} * PARMA {NASAL} ]{_S_VOWELS_UP_}{_S_VOWELS_DN_WN_}
188
+ [ nċ * nc ]{S_VOWELS}{S_VOWELS_WN} --> [ CALMA {NASAL} * QUESSE {NASAL} ]{_S_VOWELS_UP_}{_S_VOWELS_DN_WN_}
189
+ [ nt * mp ][{LVOWELS}] --> [ TINCO {NASAL} * PARMA {NASAL} ][{TEHTAR_UP_NP}]{LVOWEL_MARKER}
190
+ [ nċ * nc ][{LVOWELS}] --> [ CALMA {NASAL} * QUESSE {NASAL} ][{TEHTAR_UP_NP}]{LVOWEL_MARKER}
176
191
 
177
192
  \** ========== **\
178
193
  \** 2nd Line (Voiced occlusives) **\
@@ -193,9 +208,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
193
208
  [{L2_KER_GEMS}]{S_VOWELS_WN} --> [{L2_IMG_GEMS}]{_S_VOWELS_UP_WN_}
194
209
 
195
210
  \** Nasals, with diphthongs! **\
196
- [ nd * mb * nġ * ng ] --> [ ANDO NASALIZE_SIGN_TILD * UMBAR NASALIZE_SIGN_TILD * ANGA NASALIZE_SIGN_TILD * UNGWE NASALIZE_SIGN_TILD ]
197
- [ nd * mb * nġ * ng ]{S_VOWELS}{S_VOWELS_WN} --> [ ANDO NASALIZE_SIGN_TILD * UMBAR NASALIZE_SIGN_TILD * ANGA NASALIZE_SIGN_TILD * UNGWE NASALIZE_SIGN_TILD ]{_S_VOWELS_UP_}{_S_VOWELS_DN_WN_}
198
- [ nd * mb * nġ * ng ][{LVOWELS}] --> [ ANDO NASALIZE_SIGN_TILD * UMBAR NASALIZE_SIGN_TILD * ANGA NASALIZE_SIGN_TILD * UNGWE NASALIZE_SIGN_TILD ][{TEHTAR_UP_NP}]{LVOWEL_MARKER}
211
+ [ nd * mb * nġ * ng ] --> [ ANDO {NASAL} * UMBAR {NASAL} * ANGA {NASAL} * UNGWE {NASAL} ]
212
+ [ nd * mb * nġ * ng ]{S_VOWELS}{S_VOWELS_WN} --> [ ANDO {NASAL} * UMBAR {NASAL} * ANGA {NASAL} * UNGWE {NASAL} ]{_S_VOWELS_UP_}{_S_VOWELS_DN_WN_}
213
+ [ nd * mb * nġ * ng ][{LVOWELS}] --> [ ANDO {NASAL} * UMBAR {NASAL} * ANGA {NASAL} * UNGWE {NASAL} ][{TEHTAR_UP_NP}]{LVOWEL_MARKER}
199
214
 
200
215
  \** ========== **\
201
216
  \** 3rd Line (Voiceless fricatives) **\
@@ -256,9 +271,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
256
271
  \** Gemination === nasalisation **\
257
272
  \** So prefer using tild to put tehtas up and down for diphthongs and long vowels **\
258
273
 
259
- [ nn * mm ] --> [ NUMEN NASALIZE_SIGN_TILD * MALTA NASALIZE_SIGN_TILD ]
260
- [ nn * mm ]{S_VOWELS}{S_VOWELS_WN} --> [ NUMEN NASALIZE_SIGN_TILD * MALTA NASALIZE_SIGN_TILD ]{_S_VOWELS_UP_}{_S_VOWELS_DN_WN_}
261
- [ nn * mm ][{LVOWELS}] --> [ NUMEN NASALIZE_SIGN_TILD * MALTA NASALIZE_SIGN_TILD ][{TEHTAR_UP_NP}]{LVOWEL_MARKER}
274
+ [ nn * mm ] --> [ NUMEN {NASAL} * MALTA {NASAL} ]
275
+ [ nn * mm ]{S_VOWELS}{S_VOWELS_WN} --> [ NUMEN {NASAL} * MALTA {NASAL} ]{_S_VOWELS_UP_}{_S_VOWELS_DN_WN_}
276
+ [ nn * mm ][{LVOWELS}] --> [ NUMEN {NASAL} * MALTA {NASAL} ][{TEHTAR_UP_NP}]{LVOWEL_MARKER}
262
277
 
263
278
  \** ========== **\
264
279
  \** 6th Line (Approximants == fr : Spirantes) **\
@@ -345,7 +360,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
345
360
 
346
361
  x{S_VOWELS_WN} --> QUESSE ALVEOLAR_SIGN {_S_VOWELS_UP_WN_}
347
362
  xx{S_VOWELS_WN} --> QUESSE ALVEOLAR_SIGN GEMINATE_DOUBLE {_S_VOWELS_UP_WN_}
348
- nx{S_VOWELS_WN} --> QUESSE ALVEOLAR_SIGN NASALIZE_SIGN_TILD {_S_VOWELS_UP_WN_}
363
+ nx{S_VOWELS_WN} --> QUESSE ALVEOLAR_SIGN {NASAL} {_S_VOWELS_UP_WN_}
349
364
  \end
350
365
 
351
366
  \beg rules punctuation
@@ -33,7 +33,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
33
33
  \writing "Sarati"
34
34
  \mode "Quenya Usage"
35
35
  \version "0.0.1"
36
- \authors "Talagan (Benjamin Babut)"
36
+ \authors "J.R.R. Tolkien, impl. Talagan (Benjamin Babut)"
37
37
 
38
38
  \charset sarati_eldamar true
39
39
 
@@ -65,9 +65,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
65
65
  \substitute "oi" "oy"
66
66
  \substitute "ui" "uy"
67
67
 
68
- \substitute "á" "aa" \** Split long a **\
68
+ \** Split long a **\
69
+ \substitute "á" "aa"
69
70
 
70
- \substitute "qu" "q" \** Dis-ambiguate qu **\
71
+ \** Dis-ambiguate qu **\
72
+ \substitute "qu" "q"
71
73
  \end
72
74
 
73
75
  \beg processor
@@ -23,21 +23,24 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
23
23
  **\
24
24
 
25
25
  \beg changelog
26
- \entry "0.0.2", "added χ for the word χarina, correcting ts/ps sequences to work better with eldamar"
27
- \entry "0.0.3", "added o/u curl option"
28
- \entry "0.0.4", "added voiced plosives corner cases treatment and option to chose method"
29
- \entry "0.0.5", "fixing h+long vowel medially"
30
- \entry "0.0.6", "adding option for alveolarized consonants st (t+t), pt (p+t), ht (c+t)"
31
- \entry "0.0.7", "Fixing rb/lb, to be treated as r+mb and l+mb"
32
- \entry "0.0.8", "Correcting double dot version for ry (aesthetics)"
33
- \entry "0.0.9", "Adding 'implicit a' option."
34
- \entry "0.1.0", "Simplified diacritic use by using new post-processor directive"
35
- \entry "0.1.1", "Added default option for voiced plosives : use mb, nd, ng, ngw"
36
- \entry "0.1.2", "Added a tehta shape selection"
37
- \entry "0.1.3", "Fixing ks, ps, ts. Fixing dot under ore, romen in implicit a mode."
38
- \entry "0.1.4", "Conforming to the new csub format. Cleaning with new csub classes."
39
- \entry "0.1.5", "csub removed. Now using virtual chars defined in charsets."
40
- \entry "0.1.6", "Removing unutixe under óre for coherency in implicit a submode."
26
+ \entry "0.0.2" "added χ for the word χarina, correcting ts/ps sequences to work better with eldamar"
27
+ \entry "0.0.3" "added o/u curl option"
28
+ \entry "0.0.4" "added voiced plosives corner cases treatment and option to chose method"
29
+ \entry "0.0.5" "fixing h+long vowel medially"
30
+ \entry "0.0.6" "adding option for alveolarized consonants st (t+t), pt (p+t), ht (c+t)"
31
+ \entry "0.0.7" "Fixing rb/lb, to be treated as r+mb and l+mb"
32
+ \entry "0.0.8" "Correcting double dot version for ry (aesthetics)"
33
+ \entry "0.0.9" "Adding 'implicit a' option."
34
+ \entry "0.1.0" "Simplified diacritic use by using new post-processor directive"
35
+ \entry "0.1.1" "Added default option for voiced plosives : use mb, nd, ng, ngw"
36
+ \entry "0.1.2" "Added a tehta shape selection"
37
+ \entry "0.1.3" "Fixing ks, ps, ts. Fixing dot under ore, romen in implicit a mode."
38
+ \entry "0.1.4" "Conforming to the new csub format. Cleaning with new csub classes."
39
+ \entry "0.1.5" "csub removed. Now using virtual chars defined in charsets."
40
+ \entry "0.1.6" "Removing unutixe under óre for coherency in implicit a submode."
41
+ \entry "0.9.0" "Adding double tehtar support"
42
+ \entry "0.9.1" "Added support for the FreeMonoTengwar font"
43
+ \entry "0.9.2" "Added support for the Tengwar Elfica font"
41
44
  \end
42
45
 
43
46
  \**
@@ -48,14 +51,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
48
51
  \language "Quenya"
49
52
  \writing "Tengwar"
50
53
  \mode "Classical"
51
- \version "0.1.6"
52
- \authors "Talagan (Benjamin Babut)"
54
+ \version "0.9.2"
55
+ \authors "J.R.R. Tolkien, impl. Talagan (Benjamin Babut)"
56
+
57
+ \charset tengwar_ds_sindarin true
58
+ \charset tengwar_ds_parmaite false
59
+ \charset tengwar_ds_eldamar false
60
+ \charset tengwar_ds_annatar false
61
+ \charset tengwar_ds_elfica false
62
+ \charset tengwar_freemono false
53
63
 
54
- \charset tengwar_ds true
55
- \charset tengwar_ds_eldamar false
56
64
 
57
65
  \beg options
58
66
  \option implicit_a false
67
+
59
68
  \beg option a_tetha_shape A_SHAPE_THREE_DOTS
60
69
  \value A_SHAPE_THREE_DOTS 1
61
70
  \value A_SHAPE_CIRCUMFLEX 2
@@ -64,6 +73,29 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
64
73
  \value O_UP_U_DOWN 1
65
74
  \value U_UP_O_DOWN 2
66
75
  \end
76
+ \beg option long_vowels_format LONG_VOWELS_USE_LONG_CARRIER
77
+ \value LONG_VOWELS_USE_LONG_CARRIER 1
78
+ \value LONG_VOWELS_USE_DOUBLE_TEHTAR 2
79
+ \end
80
+
81
+ \** REMOVED BECAUSE UNATTESTED
82
+ \beg option double_tehta_a false
83
+ \visible_when 'long_vowels_format == LONG_VOWELS_USE_DOUBLE_TEHTAR'
84
+ \end
85
+ **\
86
+ \beg option double_tehta_e false
87
+ \visible_when 'long_vowels_format == LONG_VOWELS_USE_DOUBLE_TEHTAR'
88
+ \end
89
+ \beg option double_tehta_i false
90
+ \visible_when 'long_vowels_format == LONG_VOWELS_USE_DOUBLE_TEHTAR'
91
+ \end
92
+ \beg option double_tehta_o true
93
+ \visible_when 'long_vowels_format == LONG_VOWELS_USE_DOUBLE_TEHTAR'
94
+ \end
95
+ \beg option double_tehta_u true
96
+ \visible_when 'long_vowels_format == LONG_VOWELS_USE_DOUBLE_TEHTAR'
97
+ \end
98
+
67
99
  \option split_diphthongs false
68
100
  \option always_use_romen_for_r false
69
101
  \beg option voiced_plosives_treatment VOICED_PLOSIVES_AS_NASALIZED
@@ -75,6 +107,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
75
107
  \value ST_PT_HT_SEPARATED 1
76
108
  \value ST_PT_HT_WITH_XTD 2
77
109
  \end
110
+
111
+ \beg option consonant_modification_style CONSONANT_MODIFICATION_STYLE_BAR
112
+ \value CONSONANT_MODIFICATION_STYLE_WAVE 0
113
+ \value CONSONANT_MODIFICATION_STYLE_BAR 1
114
+ \end
115
+
78
116
  \option reverse_numbers true
79
117
  \beg option numbers_base BASE_12
80
118
  \value BASE_10 10
@@ -102,7 +140,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
102
140
  \rxsubstitute "(ū|û|uu)" "ú"
103
141
  \rxsubstitute "(ȳ|ŷ|yy)" "ý"
104
142
 
105
- \substitute "qu" "q" \** Dis-ambiguate qu **\
143
+ \** Dis-ambiguate qu **\
144
+ \substitute "qu" "q"
106
145
 
107
146
  \elvish_numbers "\\eval numbers_base" "\\eval reverse_numbers"
108
147
  \end
@@ -111,25 +150,35 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
111
150
  \beg processor
112
151
 
113
152
  \beg rules litteral
114
-
153
+
115
154
  {K} === (c,k)
116
155
  {SS} === (z,ss)
156
+
157
+ \if "consonant_modification_style == CONSONANT_MODIFICATION_STYLE_WAVE"
158
+ {GEMINATE} === GEMINATE_SIGN_TILD
159
+ \else
160
+ {GEMINATE} === GEMINATE_SIGN
161
+ \endif
117
162
 
118
163
  {VOWELS} === a * e * i * o * u
119
164
  {LVOWELS} === á * é * í * ó * ú
120
165
 
121
166
  \if "reverse_o_u_tehtar == U_UP_O_DOWN"
122
- {O_LOOP} === O_TEHTA
123
- {U_LOOP} === U_TEHTA
167
+ {O_LOOP} === O_TEHTA
168
+ {O_LOOP_DOUBLE} === O_TEHTA_DOUBLE
169
+ {U_LOOP} === U_TEHTA
170
+ {U_LOOP_DOUBLE} === U_TEHTA_DOUBLE
124
171
  \else
125
- {O_LOOP} === U_TEHTA
126
- {U_LOOP} === O_TEHTA
172
+ {O_LOOP} === U_TEHTA
173
+ {O_LOOP_DOUBLE} === U_TEHTA_DOUBLE
174
+ {U_LOOP} === O_TEHTA
175
+ {U_LOOP_DOUBLE} === O_TEHTA_DOUBLE
127
176
  \endif
128
177
 
129
178
  \if "a_tetha_shape == A_SHAPE_THREE_DOTS"
130
- {A_SHAPE} === A_TEHTA
179
+ {A_SHAPE} === A_TEHTA
131
180
  \else
132
- {A_SHAPE} === A_TEHTA_CIRCUM
181
+ {A_SHAPE} === A_TEHTA_CIRCUM
133
182
  \endif
134
183
 
135
184
  \if implicit_a
@@ -151,35 +200,80 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
151
200
  {WDIPHTHONGS} === * {DIPHTHONGS} \** groovy! **\
152
201
  {_WDIPHTHONGS_} === * {_DIPHTHONGS_} \** same thing **\
153
202
  \endif
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}
203
+
204
+ {_LONG_A_} === ARA {A_SHAPE}
205
+ {_LONG_E_} === ARA E_TEHTA
206
+ {_LONG_I_} === ARA I_TEHTA
207
+ {_LONG_O_} === ARA {O_LOOP}
208
+ {_LONG_U_} === ARA {U_LOOP}
209
+ {_LONE_LONG_A_} === {_LONG_A_}
210
+ {_LONE_LONG_E_} === {_LONG_E_}
211
+ {_LONE_LONG_I_} === {_LONG_I_}
212
+ {_LONE_LONG_O_} === {_LONG_O_}
213
+ {_LONE_LONG_U_} === {_LONG_U_}
214
+
215
+ {LTEHTAR} === {NULL}
216
+ {_LTEHTAR_} === {NULL}
217
+
218
+ \if implicit_a
219
+ {_LONG_A_} === {A_SHAPE} \** Eat the long a **\
220
+ {_LONE_LONG_A_} === TELCO {A_SHAPE} \** Eat the long a **\
221
+ {LTEHTAR} === {LTEHTAR} * á
222
+ {_LTEHTAR_} === {_LTEHTAR_} * {_LONG_A_}
168
223
  \endif
224
+
225
+ \if "long_vowels_format == LONG_VOWELS_USE_DOUBLE_TEHTAR"
226
+ \** REMOVED BECAUSE UNATTESTED
227
+ \if "double_tehta_a && !implicit_a"
228
+ {_LONG_A_} === A_TEHTA_DOUBLE
229
+ {_LONE_LONG_A_} === TELCO {_LONG_A_}
230
+ {LTEHTAR} === {LTEHTAR} * á
231
+ {_LTEHTAR_} === {_LTEHTAR_} * {_LONG_A_}
232
+ \endif
233
+ **\
234
+ \if double_tehta_e
235
+ {_LONG_E_} === E_TEHTA_DOUBLE
236
+ {_LONE_LONG_E_} === TELCO {_LONG_E_}
237
+ {LTEHTAR} === {LTEHTAR} * é
238
+ {_LTEHTAR_} === {_LTEHTAR_} * {_LONG_E_}
239
+ \endif
240
+ \if double_tehta_i
241
+ {_LONG_I_} === I_TEHTA_DOUBLE
242
+ {_LONE_LONG_I_} === TELCO {_LONG_I_}
243
+ {LTEHTAR} === {LTEHTAR} * í
244
+ {_LTEHTAR_} === {_LTEHTAR_} * {_LONG_I_}
245
+ \endif
246
+ \if double_tehta_o
247
+ {_LONG_O_} === {O_LOOP_DOUBLE}
248
+ {_LONE_LONG_O_} === TELCO {_LONG_O_}
249
+ {LTEHTAR} === {LTEHTAR} * ó
250
+ {_LTEHTAR_} === {_LTEHTAR_} * {_LONG_O_}
251
+ \endif
252
+ \if double_tehta_u
253
+ {_LONG_U_} === {U_LOOP_DOUBLE}
254
+ {_LONE_LONG_U_} === TELCO {_LONG_U_}
255
+ {LTEHTAR} === {LTEHTAR} * ú
256
+ {_LTEHTAR_} === {_LTEHTAR_} * {_LONG_U_}
257
+ \endif
258
+ \endif
259
+
260
+ \** images of long vowels, either tehtar or ara versions **\
261
+ {_LVOWELS_} === {_LONG_A_} * {_LONG_E_} * {_LONG_I_} * {_LONG_O_} * {_LONG_U_}
262
+
263
+ {WLONG} === * {LVOWELS}
264
+ {_WLONG_} === * {_LVOWELS_}
169
265
 
170
266
  {V_D} === [ {VOWELS} {WLONG} {WDIPHTHONGS} ]
171
267
  {V_D_WN} === [ {VOWELS} {WLONG} {WDIPHTHONGS} * {NULL} ]
172
268
 
173
269
  {_V_D_} === [ {_TEHTAR_} {_WLONG_} {_WDIPHTHONGS_} ]
174
270
  {_V_D_WN_} === [ {_TEHTAR_} {_WLONG_} {_WDIPHTHONGS_} * {_NVOWEL_} ]
175
-
176
- \** VOWEL RULES **\
271
+
272
+ \** LONE SHORT VOWELS **\
177
273
  [{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
274
+
275
+ \** LONE LONG VOWELS **\
276
+ [{LVOWELS}] --> [{_LONE_LONG_A_} * {_LONE_LONG_E_} * {_LONE_LONG_I_} * {_LONE_LONG_O_} * {_LONE_LONG_U_}]
183
277
 
184
278
  \if !split_diphthongs
185
279
  [{DIPHTHONGS}] --> [{_DIPHTHONGS_}] \** Replace diphthongs **\
@@ -192,8 +286,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
192
286
  {_L1_} === TINCO * PARMA * CALMA * QUESSE
193
287
 
194
288
  \** GEMINATED **\
195
- {L1_1_GEMS} === tt * pp * {K}{K}
196
- {_L1_1_GEMS_} === TINCO GEMINATE_SIGN * PARMA GEMINATE_SIGN * CALMA GEMINATE_SIGN
289
+ {L1_1_GEMS} === tt * pp * {K}{K}
290
+ {_L1_1_GEMS_} === TINCO {GEMINATE} * PARMA {GEMINATE} * CALMA {GEMINATE}
197
291
 
198
292
  \** NORMAL **\
199
293
  [ {L1} * {L1_1_GEMS} ] {V_D_WN} --> [ {_L1_} * {_L1_1_GEMS_} ] {_V_D_WN_}
@@ -202,8 +296,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
202
296
  ty{V_D_WN} --> TINCO PALATAL_SIGN {_V_D_WN_}
203
297
  py{V_D_WN} --> PARMA PALATAL_SIGN {_V_D_WN_}
204
298
 
205
- ts{V_D_WN} --> TINCO {_V_D_WN_} ALVEOLAR_SIGN
206
- ps{V_D_WN} --> PARMA {_V_D_WN_} ALVEOLAR_SIGN
299
+ \** For alveolarized consonants, we must put the alveolar_sign just after the tengwa
300
+ because else, FreeMonoTengwar will not handle well the ligature. Anyway, this is
301
+ more logical, but the tehta placement will not be perfect for older fonts **\
302
+ ts{V_D_WN} --> TINCO ALVEOLAR_SIGN {_V_D_WN_}
303
+ ps{V_D_WN} --> PARMA ALVEOLAR_SIGN {_V_D_WN_}
207
304
  {K}s{V_D_WN} --> CALMA ALVEOLAR_SIGN {_V_D_WN_}
208
305
  x{V_D_WN} --> CALMA ALVEOLAR_SIGN {_V_D_WN_} \** render ks for x **\
209
306
 
@@ -225,7 +322,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
225
322
  \if "voiced_plosives_treatment == VOICED_PLOSIVES_AS_NASALIZED"
226
323
  [{L2_UN}]{V_D_WN} --> [{_L2_}] {_V_D_WN_}
227
324
  \elsif "voiced_plosives_treatment == VOICED_PLOSIVES_WITH_STROKE"
228
- [{L2_UN}]{V_D_WN} --> [{_L2_}] THINF_STROKE_XL {_V_D_WN_}
325
+ [{L2_UN}]{V_D_WN} --> [{_L2_}] THINF_STROKE {_V_D_WN_}
229
326
  \else
230
327
  {_L2_UN_} === TW_EXT_21 * TW_EXT_22 * TW_EXT_23 * TW_EXT_24
231
328
  [{L2_UN}]{V_D_WN} --> [{_L2_UN_}] {_V_D_WN_}
@@ -252,7 +349,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
252
349
 
253
350
  \** Override h with vowels (descendent of hy) **\
254
351
  _h{V_D} --> HYARMEN {_V_D_}
255
- _h[{LVOWELS}] --> HYARMEN [{_LTEHTAR_}]
352
+ \** Starting voiced h before long vowels **\
353
+ _h[{LVOWELS}] --> HYARMEN [{_LVOWELS_}]
256
354
 
257
355
  (h,χ) --> AHA
258
356
 
@@ -276,9 +374,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
276
374
  [{L5}]{V_D_WN} --> [{_L5_}]{_V_D_WN_}
277
375
 
278
376
  ny{V_D_WN} --> NUMEN PALATAL_SIGN {_V_D_WN_}
279
- nn{V_D_WN} --> NUMEN GEMINATE_SIGN {_V_D_WN_}
377
+ nn{V_D_WN} --> NUMEN {GEMINATE} {_V_D_WN_}
280
378
  my{V_D_WN} --> MALTA PALATAL_SIGN {_V_D_WN_}
281
- mm{V_D_WN} --> MALTA GEMINATE_SIGN {_V_D_WN_}
379
+ mm{V_D_WN} --> MALTA {GEMINATE} {_V_D_WN_}
282
380
 
283
381
  \** ===================== **\
284
382
  \** 6TH LINE RULES **\
@@ -295,13 +393,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
295
393
 
296
394
  [{L6}]{V_D_WN} --> [{_L6_}]{_V_D_WN_}
297
395
 
298
- \** r before long vowels is voiced **\
299
- r[{LVOWELS}] --> ROMEN [{_LTEHTAR_}]
300
-
301
396
  \** Override rule r + null **\
302
397
  r --> {_LONE_R_}
303
398
 
304
- rr{V_D_WN} --> ROMEN GEMINATE_SIGN {_V_D_WN_}
399
+ rr{V_D_WN} --> ROMEN {GEMINATE} {_V_D_WN_}
305
400
  ry{V_D_WN} --> ROMEN PALATAL_SIGN {_V_D_WN_}
306
401
  rd{V_D_WN} --> ARDA {_V_D_WN_}
307
402
 
@@ -309,7 +404,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
309
404
  \** L LINE RULES **\
310
405
  \** ===================== **\
311
406
  {LINE_L} === l * ld * ll
312
- {_LINE_L_} === LAMBE * ALDA * LAMBE LAMBE_MARK_TILD
407
+ {_LINE_L_} === LAMBE * ALDA * LAMBE {GEMINATE}
313
408
 
314
409
  [{LINE_L}]{V_D_WN} --> [{_LINE_L_}]{_V_D_WN_}
315
410
 
@@ -320,22 +415,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
320
415
  \** ===================== **\
321
416
  \** S/Z LINE RULES **\
322
417
  \** ===================== **\
323
- {L8} === s * {SS}
324
- {_L8_} === SILME_NUQUERNA * ESSE_NUQUERNA
325
-
326
- [{L8}]{V_D_WN} --> [{_L8_}]{_V_D_WN_}
327
-
328
- \** Override lonely s / ss / before consonant **\
329
- s --> SILME
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
-
418
+
419
+ \** SILME is a bit tricky : the shape is not linked to voicing but to a tehta presence or not **\
420
+ {L8} === s * {SS}
421
+ {_L8_TEHTAR_} === SILME_NUQUERNA * ESSE_NUQUERNA
422
+ {_L8_NO_TEHTAR_} === SILME * ESSE
423
+
424
+ [{L8}][{VOWELS}] --> [{_L8_TEHTAR_}][{_TEHTAR_}]
425
+ [{L8}][{LTEHTAR}] --> [{_L8_TEHTAR_}][{_LTEHTAR_}]
426
+
427
+ {L8} --> {_L8_NO_TEHTAR_}
428
+ {L8}[{DIPHTHONGS}] --> {_L8_NO_TEHTAR_}[{_DIPHTHONGS_}]
429
+
339
430
  \end
340
431
 
341
432
  \beg rules punctuation