glaemscribe 1.0.19 → 1.1.0

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.
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