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
@@ -27,18 +27,56 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
27
27
  \beg changelog
28
28
  \entry 0.0.1 "First version"
29
29
  \entry 0.0.2 "Ported to virtual chars."
30
+ \entry 0.0.3 "Merging with blackspeech Annatar".
31
+ \entry 0.0.4 "Adding double tehtar handling."
32
+ \entry 0.0.5 "Fixing ORE/ROMEN, refactoring."
33
+ \entry 0.0.6 "Added support for the FreeMonoTengwar font"
34
+ \entry "0.1.0" "Added support for the Tengwar Elfica font"
30
35
  \end
31
36
 
32
37
  \language "Black Speech"
33
38
  \writing "Tengwar"
34
39
  \mode "General Use"
35
- \version "0.0.2"
36
- \authors "Talagan (Benjamin Babut)"
40
+ \version "0.1.0"
41
+ \authors "J.R.R. Tolkien, impl. Talagan (Benjamin Babut)"
37
42
 
38
- \charset tengwar_ds true
39
- \charset tengwar_ds_eldamar false
43
+ \charset tengwar_ds_sindarin false
44
+ \charset tengwar_ds_parmaite false
45
+ \charset tengwar_ds_eldamar false
46
+ \charset tengwar_ds_annatar true
47
+ \charset tengwar_ds_elfica false
48
+ \charset tengwar_freemono false
40
49
 
41
50
  \beg options
51
+
52
+ \beg option reverse_o_u_tehtar O_UP_U_DOWN
53
+ \value O_UP_U_DOWN 1
54
+ \value U_UP_O_DOWN 2
55
+ \end
56
+
57
+ \beg option long_vowels_format LONG_VOWELS_USE_DOUBLE_TEHTAR
58
+ \value LONG_VOWELS_USE_LONG_CARRIER 1
59
+ \value LONG_VOWELS_USE_DOUBLE_TEHTAR 2
60
+ \end
61
+
62
+ \beg option double_tehta_e true
63
+ \visible_when 'long_vowels_format == LONG_VOWELS_USE_DOUBLE_TEHTAR'
64
+ \end
65
+ \beg option double_tehta_i true
66
+ \visible_when 'long_vowels_format == LONG_VOWELS_USE_DOUBLE_TEHTAR'
67
+ \end
68
+ \beg option double_tehta_o true
69
+ \visible_when 'long_vowels_format == LONG_VOWELS_USE_DOUBLE_TEHTAR'
70
+ \end
71
+ \beg option double_tehta_u true
72
+ \visible_when 'long_vowels_format == LONG_VOWELS_USE_DOUBLE_TEHTAR'
73
+ \end
74
+
75
+ \beg option consonant_modification_style CONSONANT_MODIFICATION_STYLE_WAVE
76
+ \value CONSONANT_MODIFICATION_STYLE_WAVE 0
77
+ \value CONSONANT_MODIFICATION_STYLE_BAR 1
78
+ \end
79
+
42
80
  \option reverse_numbers true
43
81
  \beg option numbers_base BASE_12
44
82
  \value BASE_10 10
@@ -65,6 +103,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
65
103
  \rxsubstitute "(ō|ô|oo)" "ó"
66
104
  \rxsubstitute "(ū|û|uu)" "ú"
67
105
 
106
+ \** For ORE/ROMEN **\
107
+ \rxsubstitute "r(a|e|i|o|u|á|é|í|ó|ú)" "R\\1"
108
+
68
109
  \** Preprocess numbers **\
69
110
  \elvish_numbers "\\eval numbers_base" "\\eval reverse_numbers"
70
111
  \end
@@ -72,118 +113,151 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
72
113
  \beg processor
73
114
 
74
115
  \beg rules litteral
75
- {A} === a
76
- {AA} === á
77
- {E} === e
78
- {EE} === é
79
- {I} === i
80
- {II} === í
81
- {O} === o
82
- {OO} === ó
83
- {U} === u
84
- {UU} === ú
85
-
86
- {AI} === {A}{I} \** attested **\
87
- {AU} === {A}{U} \** attested **\
88
- {OI} === {O}{I} \** Not quite sure (dushgoi) **\
89
-
116
+
90
117
  {K} === (c,k)
91
118
 
92
- {VOWELS} === {A} * {E} * {I} * {O} * {U}
93
- {LVOWELS} === {AA} * {EE} * {II} * {OO} * {UU}
119
+ \if "consonant_modification_style == CONSONANT_MODIFICATION_STYLE_WAVE"
120
+ {GEMINATE} === GEMINATE_SIGN_TILD
121
+ {NASAL} === NASALIZE_SIGN_TILD
122
+ \else
123
+ {GEMINATE} === GEMINATE_SIGN
124
+ {NASAL} === NASALIZE_SIGN
125
+ \endif
126
+
127
+ {VOWELS} === a * e * i * o * u
128
+ {LVOWELS} === á * é * í * ó * ú
94
129
 
95
- \** Revers o and u **\
96
- {TEHTAR} === A_TEHTA * E_TEHTA * I_TEHTA * U_TEHTA * O_TEHTA
130
+ \if "reverse_o_u_tehtar == U_UP_O_DOWN"
131
+ {O_LOOP} === O_TEHTA
132
+ {O_LOOP_DOUBLE} === O_TEHTA_DOUBLE
133
+ {U_LOOP} === U_TEHTA
134
+ {U_LOOP_DOUBLE} === U_TEHTA_DOUBLE
135
+ \else
136
+ {O_LOOP} === U_TEHTA
137
+ {O_LOOP_DOUBLE} === U_TEHTA_DOUBLE
138
+ {U_LOOP} === O_TEHTA
139
+ {U_LOOP_DOUBLE} === O_TEHTA_DOUBLE
140
+ \endif
141
+
142
+ {_TEHTAR_} === A_TEHTA * E_TEHTA * I_TEHTA * {O_LOOP} * {U_LOOP}
97
143
 
98
- {DIPHTHONGS} === {AI} * {AU} * {OI}
99
- {_DIPHTHONGS_} === YANTA A_TEHTA * URE A_TEHTA * YANTA U_TEHTA
144
+ {DIPHTHONGS} === ai * au * oi
145
+ {_DIPHTHONGS_} === YANTA A_TEHTA * URE A_TEHTA * YANTA {O_LOOP}
146
+ {WDIPHTHONGS} === * {DIPHTHONGS}
147
+ {_WDIPHTHONGS_} === * {_DIPHTHONGS_}
148
+
149
+ {WLONG} === {NULL} \** long vowels that can be used as tehtar **\
150
+ {_WLONG_} === {NULL} \** tehtar of long vowels that can be used as tehtar **\
151
+
152
+ {_LONG_A_} === ARA A_TEHTA
153
+ {_LONG_E_} === ARA E_TEHTA
154
+ {_LONG_I_} === ARA I_TEHTA
155
+ {_LONG_O_} === ARA {O_LOOP}
156
+ {_LONG_U_} === ARA {U_LOOP}
157
+ {_LONE_LONG_A_} === {_LONG_A_}
158
+ {_LONE_LONG_E_} === {_LONG_E_}
159
+ {_LONE_LONG_I_} === {_LONG_I_}
160
+ {_LONE_LONG_O_} === {_LONG_O_}
161
+ {_LONE_LONG_U_} === {_LONG_U_}
162
+
163
+ \if "long_vowels_format == LONG_VOWELS_USE_DOUBLE_TEHTAR"
164
+ \if double_tehta_e
165
+ {_LONG_E_} === E_TEHTA_DOUBLE
166
+ {_LONE_LONG_E_} === TELCO {_LONG_E_}
167
+ {WLONG} === {WLONG} * é
168
+ {_WLONG_} === {_WLONG_} * {_LONG_E_}
169
+ \endif
170
+ \if double_tehta_i
171
+ {_LONG_I_} === I_TEHTA_DOUBLE
172
+ {_LONE_LONG_I_} === TELCO {_LONG_I_}
173
+ {WLONG} === {WLONG} * í
174
+ {_WLONG_} === {_WLONG_} * {_LONG_I_}
175
+ \endif
176
+ \if double_tehta_o
177
+ {_LONG_O_} === {O_LOOP_DOUBLE}
178
+ {_LONE_LONG_O_} === TELCO {_LONG_O_}
179
+ {WLONG} === {WLONG} * ó
180
+ {_WLONG_} === {_WLONG_} * {_LONG_O_}
181
+ \endif
182
+ \if double_tehta_u
183
+ {_LONG_U_} === {U_LOOP_DOUBLE}
184
+ {_LONE_LONG_U_} === TELCO {_LONG_U_}
185
+ {WLONG} === {WLONG} * ú
186
+ {_WLONG_} === {_WLONG_} * {_LONG_U_}
187
+ \endif
188
+ \endif
189
+
190
+ {_LTEHTAR_} === {_LONG_A_} * {_LONG_E_} * {_LONG_I_} * {_LONG_O_} * {_LONG_U_}
100
191
 
101
- [{VOWELS}] --> TELCO [{TEHTAR}] \** Replace isolated short vowels **\
102
- [{LVOWELS}] --> ARA [{TEHTAR}] \** Replace long vowels **\
103
- [{DIPHTHONGS}] --> [{_DIPHTHONGS_}] \** Replace diphthongs **\
104
-
105
- b --> UMBAR
106
- [{VOWELS}] b --> UMBAR [{TEHTAR}]
107
-
108
- d --> ANDO
109
- [{VOWELS}] d --> ANDO [{TEHTAR}]
192
+ {V_D} === [ {VOWELS} {WLONG} ]
193
+ {V_D_WN} === [ {VOWELS} {WLONG} * {NULL} ]
194
+
195
+ {_V_D_} === [ {_TEHTAR_} {_WLONG_} ]
196
+ {_V_D_WN_} === [ {_TEHTAR_} {_WLONG_} * {NULL} ]
197
+
198
+ \** LONE SHORT VOWELS **\
199
+ [{VOWELS}] --> TELCO [{_TEHTAR_}] \** Replace isolated short vowels **\
110
200
 
111
- f --> FORMEN
112
- [{VOWELS}] f --> FORMEN_EXT [{TEHTAR}] \** Beware. **\
113
-
114
- g --> UNGWE
115
- [{VOWELS}] g --> UNGWE [{TEHTAR}]
116
-
117
- gh --> UNGWE_EXT
118
- [{VOWELS}] gh --> UNGWE_EXT [{TEHTAR}]
119
-
120
- h --> HYARMEN
121
- [{VOWELS}] h --> HYARMEN [{TEHTAR}]
201
+ \** LONE LONG VOWELS **\
202
+ [{LVOWELS}] --> [{_LONE_LONG_A_} * {_LONE_LONG_E_} * {_LONE_LONG_I_} * {_LONE_LONG_O_} * {_LONE_LONG_U_}]
203
+
204
+ [{DIPHTHONGS}] --> [{_DIPHTHONGS_}] \** Replace diphthongs **\
205
+
206
+ \** ========================= **\
207
+
208
+ {V_D_WN}p --> PARMA {_V_D_WN_}
209
+ {V_D_WN}t --> TINCO {_V_D_WN_}
210
+ {V_D_WN}{K} --> QUESSE {_V_D_WN_}
211
+
212
+ {V_D_WN} b --> UMBAR {_V_D_WN_}
213
+ {V_D_WN} d --> ANDO {_V_D_WN_}
214
+ {V_D_WN} f --> FORMEN_EXT {_V_D_WN_} \** Beware. **\
215
+ {V_D_WN} g --> UNGWE {_V_D_WN_}
216
+ {V_D_WN} gh --> UNGWE_EXT {_V_D_WN_}
217
+ {V_D_WN} h --> HYARMEN {_V_D_WN_}
122
218
 
123
219
  \** ======================== **\
124
220
 
125
- {K} --> QUESSE
126
- [{VOWELS}]{K} --> QUESSE [{TEHTAR}]
127
-
128
- {K}h --> HWESTA
129
- [{VOWELS}]{K}h --> HWESTA_EXT [{TEHTAR}] \** Take care. **\
221
+ {K}h --> HWESTA
222
+ {V_D}{K}h --> HWESTA_EXT {_V_D_} \** Take care. **\
130
223
 
131
224
  \** ======================== **\
132
225
 
133
- l --> LAMBE
134
- [{VOWELS}] l --> LAMBE [{TEHTAR}]
226
+ {V_D_WN} l --> LAMBE {_V_D_WN_}
135
227
 
136
228
  \** ======================== **\
137
229
 
138
- m --> MALTA
139
- [{VOWELS}] m --> MALTA [{TEHTAR}]
140
-
141
- mb --> UMBAR NASALIZE_SIGN_TILD
142
- [{VOWELS}] mb --> UMBAR NASALIZE_SIGN_TILD [{TEHTAR}]
143
-
144
- mp --> PARMA NASALIZE_SIGN_TILD
145
- [{VOWELS}] mp --> PARMA NASALIZE_SIGN_TILD [{TEHTAR}]
230
+ {V_D_WN} m --> MALTA {_V_D_WN_}
231
+ {V_D_WN} mb --> UMBAR {NASAL} {_V_D_WN_}
232
+ {V_D_WN} mp --> PARMA {NASAL} {_V_D_WN_}
146
233
 
147
234
  \** ======================== **\
148
235
 
149
- n --> NUMEN
150
- [{VOWELS}]n --> NUMEN [{TEHTAR}]
151
-
152
- n{K} --> QUESSE NASALIZE_SIGN_TILD
153
- [{VOWELS}]n{K} --> QUESSE NASALIZE_SIGN_TILD [{TEHTAR}]
236
+ {V_D_WN}n --> NUMEN {_V_D_WN_}
237
+ {V_D_WN}n{K} --> QUESSE {NASAL} {_V_D_WN_}
154
238
 
155
239
  \** ======================== **\
156
240
 
157
- p --> PARMA
158
-
159
- r --> ROMEN
160
- r_ --> ORE
161
- [{VOWELS}]r --> ORE [{TEHTAR}]
162
-
163
- [{VOWELS}]rb --> ORE [{TEHTAR}] UMBAR
164
- [{LVOWELS}]rb --> ARA [{TEHTAR}] ORE UMBAR
165
-
166
- [{VOWELS}]rz --> ORE [{TEHTAR}] ESSE
167
- [{LVOWELS}]rz --> ARA [{TEHTAR}] ORE ESSE
241
+ \** ROMEN / ORE handling probably not accurate **\
242
+ {V_D_WN}r --> ORE {_V_D_WN_}
243
+ {V_D_WN}R --> ROMEN {_V_D_WN_}
168
244
 
169
245
  \** ======================== **\
170
246
 
171
247
  s --> SILME
248
+ {V_D} s --> SILME_NUQUERNA {_V_D_}
249
+ z --> ESSE
250
+ {V_D} z --> ESSE_NUQUERNA {_V_D_}
172
251
 
173
252
  \** ======================== **\
174
253
 
175
254
  sh --> AHA
176
- [{VOWELS}] sh --> AHA_EXT [{TEHTAR}] \** BEWARE. **\
255
+ {V_D} sh --> AHA_EXT {_V_D_} \** BEWARE. **\
177
256
 
178
- t --> TINCO
179
- [{VOWELS}]t --> TINCO [{TEHTAR}]
180
257
 
181
258
  th --> SULE
182
259
 
183
260
  y --> ANNA
184
-
185
- z --> ESSE
186
- [{VOWELS}] z --> ESSE_NUQUERNA [{TEHTAR}]
187
261
 
188
262
  \end
189
263
 
@@ -0,0 +1,49 @@
1
+ \**
2
+
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
6
+ invented languages to some of his devised writing systems.
7
+
8
+ Copyright (C) 2015 Benjamin Babut (Talagan).
9
+
10
+ This program is free software: you can redistribute it and/or modify
11
+ it under the terms of the GNU Affero General Public License as published by
12
+ the Free Software Foundation, either version 3 of the License, or
13
+ any later version.
14
+
15
+ This program is distributed in the hope that it will be useful,
16
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ GNU Affero General Public License for more details.
19
+
20
+ You should have received a copy of the GNU Affero General Public License
21
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
22
+
23
+ **\
24
+
25
+ \** FOR NOW THIS IS JUST A TEMPLATE **\
26
+
27
+ \beg changelog
28
+ \end
29
+
30
+ \language "English"
31
+ \writing "Tengwar"
32
+ \mode "Phonemic IPA"
33
+ \version "0.0.1"
34
+ \authors "J.R.R. Tolkien, impl. Talagan (Benjamin Babut)"
35
+
36
+ \charset tengwar_ds_sindarin false
37
+ \charset tengwar_ds_parmaite false
38
+ \charset tengwar_ds_eldamar false
39
+ \charset tengwar_ds_annatar true
40
+ \charset tengwar_freemono false
41
+
42
+ \beg preprocessor
43
+ \end
44
+
45
+ \beg processor
46
+ \end
47
+
48
+ \beg postprocessor
49
+ \end
@@ -0,0 +1,49 @@
1
+ \**
2
+
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
6
+ invented languages to some of his devised writing systems.
7
+
8
+ Copyright (C) 2015 Benjamin Babut (Talagan).
9
+
10
+ This program is free software: you can redistribute it and/or modify
11
+ it under the terms of the GNU Affero General Public License as published by
12
+ the Free Software Foundation, either version 3 of the License, or
13
+ any later version.
14
+
15
+ This program is distributed in the hope that it will be useful,
16
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ GNU Affero General Public License for more details.
19
+
20
+ You should have received a copy of the GNU Affero General Public License
21
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
22
+
23
+ **\
24
+
25
+ \** FOR NOW THIS IS JUST A TEMPLATE **\
26
+
27
+ \beg changelog
28
+ \end
29
+
30
+ \language "French"
31
+ \writing "Tengwar"
32
+ \mode "Phonemic IPA"
33
+ \version "0.0.1"
34
+ \authors "J.R.R. Tolkien, impl. Talagan (Benjamin Babut)"
35
+
36
+ \charset tengwar_ds_sindarin false
37
+ \charset tengwar_ds_parmaite false
38
+ \charset tengwar_ds_eldamar false
39
+ \charset tengwar_ds_annatar true
40
+ \charset tengwar_freemono false
41
+
42
+ \beg preprocessor
43
+ \end
44
+
45
+ \beg processor
46
+ \end
47
+
48
+ \beg postprocessor
49
+ \end
@@ -26,7 +26,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
26
26
  \writing "Runes"
27
27
  \mode "Futhark Codex Runicus"
28
28
  \version "0.0.1"
29
- \authors "Talagan (Benjamin Babut)"
29
+ \authors "Historical, impl. Talagan (Benjamin Babut)"
30
30
 
31
31
  \charset unicode_runes true
32
32
 
@@ -40,13 +40,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
40
40
  {A} === (a,á)
41
41
  {E} === (e,é)
42
42
  {I} === (i,í,j)
43
- {O} === (o)
43
+ {O} === (o,ó,ą,ą́)
44
44
  {U} === (u,ú)
45
45
  {Y} === (y,ý)
46
46
 
47
47
  {AE} === (æ,ǽ,ę)
48
48
  {OE} === (ø,ǿ,œ)
49
- {OTREM} === (ö,ǫ,ǫ́)
49
+ {OTREM} === (ö,ǫ,ǫ́,ǭ)
50
50
  {AEI} === (æi,ei)
51
51
 
52
52
  \** VOWELS **\
@@ -97,7 +97,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
97
97
  p --> DOTTED_P
98
98
  \** pp: ok **\
99
99
  \** mp: ok **\
100
- r --> REID
100
+ (r,ř) --> REID
101
101
  \** rr: ok **\
102
102
  \** ř < z = rune ýr, none in this mode **\
103
103
  s --> SIGEL
@@ -0,0 +1,129 @@
1
+ \**
2
+
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
6
+ invented languages to some of his devised writing systems.
7
+
8
+ Copyright (C) 2015 Benjamin Babut (Talagan).
9
+
10
+ This program is free software: you can redistribute it and/or modify
11
+ it under the terms of the GNU Affero General Public License as published by
12
+ the Free Software Foundation, either version 3 of the License, or
13
+ any later version.
14
+
15
+ This program is distributed in the hope that it will be useful,
16
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ GNU Affero General Public License for more details.
19
+
20
+ You should have received a copy of the GNU Affero General Public License
21
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
22
+
23
+ **\
24
+
25
+ \language "Old Norse"
26
+ \writing "Runes"
27
+ \mode "Younger Futhark"
28
+ \version "0.0.1"
29
+ \authors "Historical impl. Bertrand Bellet"
30
+
31
+ \charset unicode_runes true
32
+
33
+ \beg options
34
+ \beg option runic_style RUNIC_STYLE_LONG_BRANCH
35
+ \value RUNIC_STYLE_LONG_BRANCH 0
36
+ \value RUNIC_STYLE_SHORT_TWIG 1
37
+ \end
38
+ \end
39
+
40
+ \beg preprocessor
41
+ \downcase
42
+
43
+ \** Dis-ambiguate q,c,k **\
44
+ \rxsubstitute "(q|c|k)" "k"
45
+ \end
46
+
47
+ \beg processor
48
+
49
+ \beg rules litteral
50
+ {A} === (a,á,æ,ǽ,ę)
51
+ {I} === (i,í,j,e,é)
52
+ {O} === (ą,ą́,ö,ǫ,ǫ́,ǭ)
53
+ {U} === (u,ú,o,ó,y,ý,ø,ǿ,œ)
54
+ {AI} === (æi,ei)
55
+ {AU} === (au,ǫu,ey,æy,øy,œy)
56
+
57
+ \** VOWELS **\
58
+ \if "runic_style == RUNIC_STYLE_LONG_BRANCH"
59
+ {AR} === LONG_BRANCH_AR
60
+ {OSS} === LONG_BRANCH_OSS
61
+ \else
62
+ {AR} === SHORT_TWIG_AR
63
+ {OSS} === SHORT_TWIG_OSS
64
+ \endif
65
+
66
+ {A} --> {AR}
67
+ {I} --> ISS
68
+ {O} --> {OSS}
69
+ {U} --> UR
70
+ {AI} --> {AR} ISS
71
+ {AU} --> {OSS} UR
72
+
73
+ \** CONSONANTS **\
74
+ \if "runic_style == RUNIC_STYLE_LONG_BRANCH"
75
+ {BJARKAN} === BJARKAN
76
+ {HAGALL} === LONG_BRANCH_HAGALL
77
+ {MADR} === LONG_BRANCH_MADR
78
+ {NAUD} === NAUD
79
+ {YR} === LONG_BRANCH_YR
80
+ {SOL} === LONG_BRANCH_SOL
81
+ {TYR} === TYR
82
+ \else
83
+ {BJARKAN} === SHORT_TWIG_BJARKAN
84
+ {HAGALL} === SHORT_TWIG_HAGALL
85
+ {MADR} === SHORT_TWIG_MADR
86
+ {NAUD} === SHORT_TWIG_NAUD
87
+ {YR} === SHORT_TWIG_YR
88
+ {SOL} === SHORT_TWIG_SOL
89
+ {TYR} === SHORT_TWIG_TYR
90
+ \endif
91
+
92
+ (b,bb,mb,p,pp,mp) --> {BJARKAN}
93
+ (f,ff) --> FE
94
+ _g --> KAUN \** # Initial / After prefix **\
95
+ (g,g_) --> {HAGALL} \** # Median or final spirant **\
96
+ (h,hh) --> {HAGALL}
97
+ (k,nk,kk,gg,ng) --> KAUN
98
+ (l,ll) --> LOGR
99
+ (m,mm) --> {MADR}
100
+ (n,nn) --> {NAUD}
101
+ (r,rr) --> REID
102
+ (ř) --> {YR} \** ř < Germanic z **\
103
+ (s,ss) --> {SOL}
104
+ (t,tt,nt,d,dd,nd) --> {TYR}
105
+ (þ,þþ,ð,ðð) --> THURS
106
+ (v,vv,w,ww) --> URUZ
107
+ x --> KAUN {SOL}
108
+ z --> {TYR} {SOL}
109
+
110
+ \** nasalization of a **\
111
+ {A}(m,mm) --> {OSS} {MADR}
112
+ {A}(n,nn) --> {OSS} {NAUD}
113
+ {A}(mp,mb) --> {OSS} {BJARKAN}
114
+ {A}(nt,nd) --> {OSS} {TYR}
115
+ {A}(nk,ng) --> {OSS} KAUN
116
+ \end
117
+
118
+ \beg rules punctuation
119
+ , --> RUNIC_SINGLE_PUNCTUATION
120
+ ; --> RUNIC_SINGLE_PUNCTUATION
121
+ : --> RUNIC_MULTIPLE_PUNCTUATION
122
+ . --> RUNIC_MULTIPLE_PUNCTUATION
123
+ ! --> RUNIC_MULTIPLE_PUNCTUATION
124
+ ? --> RUNIC_CROSS_PUNCTUATION
125
+ \end
126
+ \end
127
+
128
+
129
+