glaemscribe 1.0.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.
- checksums.yaml +7 -0
- data/LICENSE.txt +19 -0
- data/bin/glaemscribe +307 -0
- data/glaemresources/charsets/cirth_ds.cst +205 -0
- data/glaemresources/charsets/sarati_eldamar.cst +256 -0
- data/glaemresources/charsets/tengwar_ds.cst +318 -0
- data/glaemresources/charsets/unicode_gothic.cst +64 -0
- data/glaemresources/charsets/unicode_runes.cst +120 -0
- data/glaemresources/modes/adunaic.glaem +251 -0
- data/glaemresources/modes/blackspeech-annatar.glaem +318 -0
- data/glaemresources/modes/blackspeech.glaem +260 -0
- data/glaemresources/modes/gothic.glaem +78 -0
- data/glaemresources/modes/khuzdul.glaem +141 -0
- data/glaemresources/modes/mercian.glaem +419 -0
- data/glaemresources/modes/oldnorse-medieval.glaem +127 -0
- data/glaemresources/modes/quenya-sarati.glaem +320 -0
- data/glaemresources/modes/quenya.glaem +307 -0
- data/glaemresources/modes/sindarin-beleriand.glaem +285 -0
- data/glaemresources/modes/sindarin-classical.glaem +276 -0
- data/glaemresources/modes/sindarin-daeron.glaem +182 -0
- data/glaemresources/modes/telerin.glaem +302 -0
- data/glaemresources/modes/valarin-sarati.glaem +210 -0
- data/glaemresources/modes/westron.glaem +340 -0
- data/glaemresources/modes/westsaxon.glaem +342 -0
- data/lib/api/charset.rb +84 -0
- data/lib/api/charset_parser.rb +55 -0
- data/lib/api/constants.rb +29 -0
- data/lib/api/debug.rb +36 -0
- data/lib/api/eval.rb +268 -0
- data/lib/api/fragment.rb +113 -0
- data/lib/api/glaeml.rb +200 -0
- data/lib/api/if_tree.rb +96 -0
- data/lib/api/mode.rb +112 -0
- data/lib/api/mode_parser.rb +314 -0
- data/lib/api/option.rb +64 -0
- data/lib/api/post_processor/reverse.rb +36 -0
- data/lib/api/pre_processor/downcase.rb +35 -0
- data/lib/api/pre_processor/elvish_numbers.rb +47 -0
- data/lib/api/pre_processor/rxsubstitute.rb +40 -0
- data/lib/api/pre_processor/substitute.rb +38 -0
- data/lib/api/pre_processor/up_down_tehta_split.rb +138 -0
- data/lib/api/resource_manager.rb +130 -0
- data/lib/api/rule.rb +99 -0
- data/lib/api/rule_group.rb +159 -0
- data/lib/api/sheaf.rb +70 -0
- data/lib/api/sheaf_chain.rb +86 -0
- data/lib/api/sheaf_chain_iterator.rb +108 -0
- data/lib/api/sub_rule.rb +40 -0
- data/lib/api/transcription_pre_post_processor.rb +118 -0
- data/lib/api/transcription_processor.rb +137 -0
- data/lib/api/transcription_tree_node.rb +91 -0
- data/lib/glaemscribe.rb +70 -0
- metadata +112 -0
@@ -0,0 +1,419 @@
|
|
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 English"
|
26
|
+
\writing "Tengwar"
|
27
|
+
\mode "Mercian"
|
28
|
+
\version "0.0.1"
|
29
|
+
\authors "Talagan (Benjamin Babut)"
|
30
|
+
|
31
|
+
\charset tengwar_ds true
|
32
|
+
|
33
|
+
\beg preprocessor
|
34
|
+
\** Work exclusively downcase **\
|
35
|
+
\downcase
|
36
|
+
|
37
|
+
\** Simplify trema vowels **\
|
38
|
+
\substitute ä a
|
39
|
+
\substitute ë e
|
40
|
+
\substitute ï i
|
41
|
+
\substitute ö o
|
42
|
+
\substitute ü u
|
43
|
+
\substitute ÿ y
|
44
|
+
|
45
|
+
\substitute "ae" "æ"
|
46
|
+
\substitute "ea" "æa"
|
47
|
+
\substitute "éa" "ǽa"
|
48
|
+
\substitute "7" "⁊"
|
49
|
+
|
50
|
+
\** Dis-ambiguate long vowels **\
|
51
|
+
\rxsubstitute "(ā|â|aa)" "á"
|
52
|
+
\rxsubstitute "(ē|ê|ee)" "é"
|
53
|
+
\rxsubstitute "(ī|î|ii)" "í"
|
54
|
+
\rxsubstitute "(ō|ô|oo)" "ó"
|
55
|
+
\rxsubstitute "(ū|û|uu)" "ú"
|
56
|
+
\rxsubstitute "(ȳ|ŷ|yy)" "ý"
|
57
|
+
\end
|
58
|
+
|
59
|
+
\beg processor
|
60
|
+
|
61
|
+
\beg rules litteral
|
62
|
+
{A} === a
|
63
|
+
{AA} === á
|
64
|
+
{E} === e
|
65
|
+
{EE} === é
|
66
|
+
{I} === i
|
67
|
+
{II} === í
|
68
|
+
{O} === o
|
69
|
+
{OO} === ó
|
70
|
+
{U} === u
|
71
|
+
{UU} === ú
|
72
|
+
{Y} === y
|
73
|
+
{YY} === ý
|
74
|
+
|
75
|
+
{AE} === (æ,ae)
|
76
|
+
{AEAE} === (ǽ,ǣ)
|
77
|
+
|
78
|
+
{OE} === (ø,œ)
|
79
|
+
{OEOE} === (ǿ,œ́)
|
80
|
+
|
81
|
+
\** Diphtongs are always splitted, so consider we don't have any. **\
|
82
|
+
\** @ is the phantom vowel added by the preprocessor **\
|
83
|
+
|
84
|
+
{S_VOWELS_NP} === {A} * {AE} * {OE} * {E} * {I} * {O} * {U} * {Y}
|
85
|
+
{S_VOWELS} === {S_VOWELS_NP} * @
|
86
|
+
|
87
|
+
\** UP TEHTAS **\
|
88
|
+
{UTEHTA_NP_XS} === A_TEHTA_XS * Y_TEHTA_XS * E_TEHTA_DOUBLE_XS * E_TEHTA_XS * I_TEHTA_XS * O_TEHTA_XS * U_TEHTA_XS * THSUP_SEV_XS
|
89
|
+
{UTEHTA_NP__S} === A_TEHTA_S * Y_TEHTA_S * E_TEHTA_DOUBLE_S * E_TEHTA_S * I_TEHTA_S * O_TEHTA_S * U_TEHTA_S * THSUP_SEV_S
|
90
|
+
{UTEHTA_NP__L} === A_TEHTA_L * Y_TEHTA_L * E_TEHTA_DOUBLE_L * E_TEHTA_L * I_TEHTA_L * O_TEHTA_L * U_TEHTA_L * THSUP_SEV_L
|
91
|
+
{UTEHTA_NP_XL} === A_TEHTA_XL * Y_TEHTA_XL * E_TEHTA_DOUBLE_XL * E_TEHTA_XL * I_TEHTA_XL * O_TEHTA_XL * U_TEHTA_XL * THSUP_SEV_XL
|
92
|
+
{UTEHTA_XS} === {UTEHTA_NP_XS} * {NULL}
|
93
|
+
{UTEHTA__S} === {UTEHTA_NP__S} * {NULL}
|
94
|
+
{UTEHTA__L} === {UTEHTA_NP__L} * {NULL}
|
95
|
+
{UTEHTA_XL} === {UTEHTA_NP_XL} * {NULL}
|
96
|
+
|
97
|
+
\** FOR LONG VOWELS **\
|
98
|
+
{L_VOWELS} === {AA} * {AEAE} * {OEOE} * {EE} * {II} * {OO} * {UU} * {YY}
|
99
|
+
{L_PTEHTAS} === ARA A_TEHTA_XS * ARA Y_TEHTA_XS * ARA E_TEHTA_DOUBLE_XS * ARA E_TEHTA_XS * ARA I_TEHTA_XS * ARA O_TEHTA_XS * ARA U_TEHTA_XS * ARA THSUP_SEV_XS
|
100
|
+
|
101
|
+
{LVOWEL_MARKER_XS} === THINF_STROKE_XS
|
102
|
+
{LVOWEL_MARKER__S} === THINF_STROKE_S
|
103
|
+
{LVOWEL_MARKER__L} === THINF_STROKE_L
|
104
|
+
{LVOWEL_MARKER_XL} === THINF_STROKE_XL
|
105
|
+
|
106
|
+
\** DOWN TEHTAS **\
|
107
|
+
{DTEHTA_XS} === THINF_TDOT_XS * THINF_DDOT_XS * TH_SUB_CIRC_XS * THINF_ACCENT_XS * THINF_DOT_XS * THINF_CURL_XS * THINF_CURL_INV_XS * THINF_STROKE_XS * {NULL}
|
108
|
+
{DTEHTA__S} === THINF_TDOT_S * THINF_DDOT_S * TH_SUB_CIRC_S * THINF_ACCENT_S * THINF_DOT_S * THINF_CURL_S * THINF_CURL_INV_S * THINF_STROKE_S * {NULL}
|
109
|
+
{DTEHTA__L} === THINF_TDOT_L * THINF_DDOT_L * TH_SUB_CIRC_L * THINF_ACCENT_L * THINF_DOT_L * THINF_CURL_L * THINF_CURL_INV_L * THINF_STROKE_L * {NULL}
|
110
|
+
{DTEHTA_XL} === THINF_TDOT_XL * THINF_DDOT_XL * TH_SUB_CIRC_XL * THINF_ACCENT_XL * THINF_DOT_XL * THINF_CURL_XL * THINF_CURL_INV_XL * THINF_STROKE_XL * {NULL}
|
111
|
+
|
112
|
+
{S_VOWELS_NP_KER} === [ {S_VOWELS_NP} ]
|
113
|
+
{S_VOWELS_NP_KER_WN} === [ {S_VOWELS_NP} * {NULL} ]
|
114
|
+
{S_VOWELS_KER} === [ {S_VOWELS} ]
|
115
|
+
{S_VOWELS_KER_WN} === [ {S_VOWELS} * {NULL} ]
|
116
|
+
|
117
|
+
\** IMG Sheaves for all vowels **\
|
118
|
+
{SU_VOWELS_IMG_XS} === [ {UTEHTA_XS} ]
|
119
|
+
{SU_VOWELS_IMG__S} === [ {UTEHTA__S} ]
|
120
|
+
{SU_VOWELS_IMG__L} === [ {UTEHTA__L} ]
|
121
|
+
{SU_VOWELS_IMG_XL} === [ {UTEHTA_XL} ]
|
122
|
+
{SD_VOWELS_IMG_XS} === [ {DTEHTA_XS} ]
|
123
|
+
{SD_VOWELS_IMG__S} === [ {DTEHTA__S} ]
|
124
|
+
{SD_VOWELS_IMG__L} === [ {DTEHTA__L} ]
|
125
|
+
{SD_VOWELS_IMG_XL} === [ {DTEHTA_XL} ]
|
126
|
+
|
127
|
+
{SU_VOWELS_IMG_XS_WN} === [ {UTEHTA_XS} * {NULL} ]
|
128
|
+
{SU_VOWELS_IMG__S_WN} === [ {UTEHTA__S} * {NULL} ]
|
129
|
+
{SU_VOWELS_IMG__L_WN} === [ {UTEHTA__L} * {NULL} ]
|
130
|
+
{SU_VOWELS_IMG_XL_WN} === [ {UTEHTA_XL} * {NULL} ]
|
131
|
+
{SD_VOWELS_IMG_XS_WN} === [ {DTEHTA_XS} * {NULL} ]
|
132
|
+
{SD_VOWELS_IMG__S_WN} === [ {DTEHTA__S} * {NULL} ]
|
133
|
+
{SD_VOWELS_IMG__L_WN} === [ {DTEHTA__L} * {NULL} ]
|
134
|
+
{SD_VOWELS_IMG_XL_WN} === [ {DTEHTA_XL} * {NULL} ]
|
135
|
+
|
136
|
+
\** Fallback rule for all vowels **\
|
137
|
+
[ {L_VOWELS} ] --> [ {L_PTEHTAS} ] \** If found alone, long vowel will have a long carrier **\
|
138
|
+
|
139
|
+
\** Fallback rule for short vowels **\
|
140
|
+
@ --> {NULL} \** If found alone, put nothing **\
|
141
|
+
[ {S_VOWELS_NP} ] --> TELCO [ {UTEHTA_NP_XS} ] \** If found alone, a vowel will have a short carrier **\
|
142
|
+
_{A} --> VILYA \** We don't want a short carrier for _a **\
|
143
|
+
(w,u)_ --> VALA \** Only resolved after vowels **\
|
144
|
+
|
145
|
+
\** Next rule not valid in mercian mode **\
|
146
|
+
\** {UU} -> yU - Nope in mercian **\
|
147
|
+
|
148
|
+
|
149
|
+
\** ========== **\
|
150
|
+
\** CONSONANTS **\
|
151
|
+
\** ========== **\
|
152
|
+
|
153
|
+
\** ========== **\
|
154
|
+
\** 1st Line (Voiceless occlusives) **\
|
155
|
+
\** Short upper dash for nasalisation **\
|
156
|
+
|
157
|
+
{L1_KER_1} === t * p
|
158
|
+
{L1_IMG_1} === TINCO * PARMA
|
159
|
+
|
160
|
+
{L1_KER_2} === ċ * c * k
|
161
|
+
{L1_IMG_2} === CALMA * QUESSE * QUESSE
|
162
|
+
|
163
|
+
{L1_KER_1_GEMS} === tt * pp
|
164
|
+
{L1_IMG_1_GEMS} === TINCO THINF_DSTROKE_XS * PARMA THINF_DSTROKE_XS
|
165
|
+
|
166
|
+
{L1_KER_2_GEMS} === ċċ * cc * kk
|
167
|
+
{L1_IMG_2_GEMS} === CALMA THINF_DSTROKE_XL * QUESSE THINF_DSTROKE_XL * QUESSE THINF_DSTROKE_XL
|
168
|
+
|
169
|
+
\** C, CV, CVV. Rules are declared to avoid conflicts between [C, NULLV, V] and [C, V, NULLV] **\
|
170
|
+
\** We also have rules for long vowels **\
|
171
|
+
[{L1_KER_1}] --> [{L1_IMG_1}]
|
172
|
+
[{L1_KER_2}] --> [{L1_IMG_2}]
|
173
|
+
[{L1_KER_1}]{S_VOWELS_KER}{S_VOWELS_KER_WN} --> [{L1_IMG_1}]{SU_VOWELS_IMG__L}{SD_VOWELS_IMG__S_WN}
|
174
|
+
[{L1_KER_2}]{S_VOWELS_KER}{S_VOWELS_KER_WN} --> [{L1_IMG_2}]{SU_VOWELS_IMG__L}{SD_VOWELS_IMG_XL_WN}
|
175
|
+
[{L1_KER_1}][{L_VOWELS}] --> [{L1_IMG_1}][{UTEHTA_NP__L}]{LVOWEL_MARKER__S}
|
176
|
+
[{L1_KER_2}][{L_VOWELS}] --> [{L1_IMG_2}][{UTEHTA_NP__L}]{LVOWEL_MARKER_XL}
|
177
|
+
|
178
|
+
\** Geminateds (double sign below) **\
|
179
|
+
\** C², C²V **\
|
180
|
+
\** NOT C²V² (cannot put second tehta below due to gemination sign) **\
|
181
|
+
\** NOT C²L (long vowel not possible with gemination sign) **\
|
182
|
+
[{L1_KER_1_GEMS}]{S_VOWELS_KER_WN} --> [{L1_IMG_1_GEMS}]{SU_VOWELS_IMG__L_WN}
|
183
|
+
[{L1_KER_2_GEMS}]{S_VOWELS_KER_WN} --> [{L1_IMG_2_GEMS}]{SU_VOWELS_IMG__L_WN}
|
184
|
+
|
185
|
+
\** Nasals (tild above) **\
|
186
|
+
\** nC, nCV, nCVV **\
|
187
|
+
\** We also have rules for long vowels **\
|
188
|
+
[ nt * mp ] --> [ TINCO TILD_SUP_S * PARMA TILD_SUP_S ]
|
189
|
+
[ nċ * nc ] --> [ CALMA TILD_SUP_S * QUESSE TILD_SUP_S ]
|
190
|
+
[ nt * mp ]{S_VOWELS_KER}{S_VOWELS_KER_WN} --> [ TINCO TILD_SUP_S * PARMA TILD_SUP_S ]{SU_VOWELS_IMG__L}{SD_VOWELS_IMG__S_WN}
|
191
|
+
[ nċ * nc ]{S_VOWELS_KER}{S_VOWELS_KER_WN} --> [ CALMA TILD_SUP_S * QUESSE TILD_SUP_S ]{SU_VOWELS_IMG__L}{SD_VOWELS_IMG_XL_WN}
|
192
|
+
[ nt * mp ][{L_VOWELS}] --> [ TINCO TILD_SUP_S * PARMA TILD_SUP_S ][{UTEHTA_NP__L}]{LVOWEL_MARKER__S}
|
193
|
+
[ nċ * nc ][{L_VOWELS}] --> [ CALMA TILD_SUP_S * QUESSE TILD_SUP_S ][{UTEHTA_NP__L}]{LVOWEL_MARKER_XL}
|
194
|
+
|
195
|
+
\** ========== **\
|
196
|
+
\** 2nd Line (Voiced occlusives) **\
|
197
|
+
\** Long upper dash for nasalisation **\
|
198
|
+
|
199
|
+
{L2_KER} === d * b * ġ * g
|
200
|
+
{L2_IMG} === ANDO * UMBAR * ANGA * UNGWE
|
201
|
+
|
202
|
+
{L2_KER_GEMS} === dd * bb * (ċġ,ġġ) * (cg,gg)
|
203
|
+
{L2_IMG_GEMS} === ANDO THINF_DSTROKE_L * UMBAR THINF_DSTROKE_L * ANGA THINF_DSTROKE_L * UNGWE THINF_DSTROKE_L
|
204
|
+
|
205
|
+
\** C, CV, CVV **\
|
206
|
+
[{L2_KER}] --> [{L2_IMG}]
|
207
|
+
[{L2_KER}]{S_VOWELS_KER}{S_VOWELS_KER_WN} --> [{L2_IMG}]{SU_VOWELS_IMG_XL}{SD_VOWELS_IMG_XL_WN}
|
208
|
+
[{L2_KER}][{L_VOWELS}] --> [{L2_IMG}][{UTEHTA_NP_XL}]{LVOWEL_MARKER_XL}
|
209
|
+
|
210
|
+
\** Geminated sign below, cannot treat diphthongs or long vowels **\
|
211
|
+
[{L2_KER_GEMS}]{S_VOWELS_KER_WN} --> [{L2_IMG_GEMS}]{SU_VOWELS_IMG_XL_WN}
|
212
|
+
|
213
|
+
\** Nasals, with diphthongs! **\
|
214
|
+
[ nd * mb * nġ * ng ] --> [ ANDO TILD_SUP_L * UMBAR TILD_SUP_L * ANGA TILD_SUP_L * UNGWE TILD_SUP_L ]
|
215
|
+
[ nd * mb * nġ * ng ]{S_VOWELS_KER}{S_VOWELS_KER_WN} --> [ ANDO TILD_SUP_L * UMBAR TILD_SUP_L * ANGA TILD_SUP_L * UNGWE TILD_SUP_L ]{SU_VOWELS_IMG_XL}{SD_VOWELS_IMG_XL_WN}
|
216
|
+
[ nd * mb * nġ * ng ][{L_VOWELS}] --> [ ANDO TILD_SUP_L * UMBAR TILD_SUP_L * ANGA TILD_SUP_L * UNGWE TILD_SUP_L ][{UTEHTA_NP_XL}]{LVOWEL_MARKER_XL}
|
217
|
+
|
218
|
+
\** ========== **\
|
219
|
+
\** 3rd Line (Voiceless fricatives) **\
|
220
|
+
\** Short upper dash for nasalisation **\
|
221
|
+
{L3_KER_1} === þ * f
|
222
|
+
{L3_IMG_1} === SULE * FORMEN
|
223
|
+
|
224
|
+
{L3_KER_2} === ç * (χ,ħ)
|
225
|
+
{L3_IMG_2} === AHA * HWESTA
|
226
|
+
|
227
|
+
{L3_KER_1_GEMS} === þþ * ff
|
228
|
+
{L3_IMG_1_GEMS} === SULE THINF_DSTROKE_XS * FORMEN THINF_DSTROKE_XS
|
229
|
+
|
230
|
+
{L3_KER_2_GEMS} === çç * (χχ,ħħ)
|
231
|
+
{L3_IMG_2_GEMS} === AHA THINF_DSTROKE_XS * HWESTA THINF_DSTROKE_XS
|
232
|
+
|
233
|
+
[{L3_KER_1}] --> [{L3_IMG_1}]
|
234
|
+
[{L3_KER_2}] --> [{L3_IMG_2}]
|
235
|
+
[{L3_KER_1}]{S_VOWELS_KER}{S_VOWELS_KER_WN} --> [{L3_IMG_1}]{SU_VOWELS_IMG__S}{SD_VOWELS_IMG__L_WN}
|
236
|
+
[{L3_KER_2}]{S_VOWELS_KER}{S_VOWELS_KER_WN} --> [{L3_IMG_2}]{SU_VOWELS_IMG__L}{SD_VOWELS_IMG_XL_WN}
|
237
|
+
[{L3_KER_1}][{L_VOWELS}] --> [{L3_IMG_1}][{UTEHTA_NP__S}]{LVOWEL_MARKER__L}
|
238
|
+
[{L3_KER_2}][{L_VOWELS}] --> [{L3_IMG_2}][{UTEHTA_NP__L}]{LVOWEL_MARKER_XL}
|
239
|
+
|
240
|
+
\** Geminated sign below, cannot treat diphthongs or long vowels **\
|
241
|
+
[{L3_KER_1_GEMS}]{S_VOWELS_KER_WN} --> [{L3_IMG_1_GEMS}]{SU_VOWELS_IMG__S_WN}
|
242
|
+
[{L3_KER_2_GEMS}]{S_VOWELS_KER_WN} --> [{L3_IMG_2_GEMS}]{SU_VOWELS_IMG__L_WN}
|
243
|
+
|
244
|
+
|
245
|
+
\** ========== **\
|
246
|
+
\** 4th Line (Voiced fricatives) **\
|
247
|
+
\** Long upper dash for nasalisation **\
|
248
|
+
|
249
|
+
{L4_KER} === ð * v * j * ȝ
|
250
|
+
{L4_IMG} === ANTO * AMPA * ANCA * UNQUE
|
251
|
+
|
252
|
+
{L4_KER_GEMS} === ðð * vv * jj * ȝȝ
|
253
|
+
{L4_IMG_GEMS} === ANTO THINF_DSTROKE_L * AMPA THINF_DSTROKE_L * ANCA THINF_DSTROKE_L * UNQUE THINF_DSTROKE_L
|
254
|
+
|
255
|
+
[{L4_KER}] --> [{L4_IMG}]
|
256
|
+
[{L4_KER}]{S_VOWELS_KER}{S_VOWELS_KER_WN} --> [{L4_IMG}]{SU_VOWELS_IMG_XL}{SD_VOWELS_IMG_XL_WN}
|
257
|
+
[{L4_KER}][{L_VOWELS}] --> [{L4_IMG}][{UTEHTA_NP_XL}]{LVOWEL_MARKER_XL}
|
258
|
+
|
259
|
+
\** Geminated sign below, cannot treat diphthongs or long vowels **\
|
260
|
+
[{L4_KER_GEMS}]{S_VOWELS_KER_WN} --> [{L4_IMG_GEMS}]{SU_VOWELS_IMG_XL_WN}
|
261
|
+
|
262
|
+
|
263
|
+
\** ========== **\
|
264
|
+
\** 5th Line (Nasals) **\
|
265
|
+
\** Long upper dash for nasalisation (wins on gemination) **\
|
266
|
+
|
267
|
+
{L5_KER} === n * m
|
268
|
+
{L5_IMG} === NUMEN * MALTA
|
269
|
+
|
270
|
+
[{L5_KER}] --> [{L5_IMG}]
|
271
|
+
[{L5_KER}]{S_VOWELS_KER}{S_VOWELS_KER_WN} --> [{L5_IMG}]{SU_VOWELS_IMG_XL}{SD_VOWELS_IMG_XL_WN}
|
272
|
+
[{L5_KER}][{L_VOWELS}] --> [{L5_IMG}][{UTEHTA_NP_XL}]{LVOWEL_MARKER_XL}
|
273
|
+
|
274
|
+
\** Gemination === nasalisation **\
|
275
|
+
\** So prefer using tild to put tehtas up and down for diphthongs and long vowels **\
|
276
|
+
|
277
|
+
[ nn * mm ] --> [ NUMEN TILD_SUP_L * MALTA TILD_SUP_L ]
|
278
|
+
[ nn * mm ]{S_VOWELS_KER}{S_VOWELS_KER_WN} --> [ NUMEN TILD_SUP_L * MALTA TILD_SUP_L ]{SU_VOWELS_IMG_XL}{SD_VOWELS_IMG_XL_WN}
|
279
|
+
[ nn * mm ][{L_VOWELS}] --> [ NUMEN TILD_SUP_L * MALTA TILD_SUP_L ][{UTEHTA_NP_XL}]{LVOWEL_MARKER_XL}
|
280
|
+
|
281
|
+
\** ========== **\
|
282
|
+
\** 6th Line (Approximants == fr : Spirantes) **\
|
283
|
+
\** Short upper dash for nasalisation **\
|
284
|
+
|
285
|
+
{L6_KER} === r * ĭ
|
286
|
+
{L6_IMG} === ORE * ANNA
|
287
|
+
{L6_KER_GEMS} === rr * ĭĭ
|
288
|
+
{L6_IMG_GEMS} === ORE THINF_DSTROKE_XS * ANNA THINF_DSTROKE_XS
|
289
|
+
|
290
|
+
[{L6_KER}] --> [{L6_IMG}]
|
291
|
+
[{L6_KER}]{S_VOWELS_KER}{S_VOWELS_KER_WN} --> [{L6_IMG}]{SU_VOWELS_IMG__S}{SD_VOWELS_IMG__L_WN}
|
292
|
+
[{L6_KER}][{L_VOWELS}] --> [{L6_IMG}][{UTEHTA_NP__S}]{LVOWEL_MARKER__L}
|
293
|
+
|
294
|
+
\** Geminated sign below, cannot treat diphthongs or long vowels **\
|
295
|
+
[{L6_KER_GEMS}]{S_VOWELS_KER_WN} --> [{L6_IMG_GEMS}]{SU_VOWELS_IMG__S_WN}
|
296
|
+
|
297
|
+
\** ========== **\
|
298
|
+
\** Liquids **\
|
299
|
+
|
300
|
+
w --> ROMEN
|
301
|
+
w{S_VOWELS_KER}{S_VOWELS_KER_WN} --> ROMEN {SU_VOWELS_IMG__L}{SD_VOWELS_IMG_XS_WN}
|
302
|
+
w[{L_VOWELS}] --> ROMEN [{UTEHTA_NP__L}]{LVOWEL_MARKER_XS}
|
303
|
+
|
304
|
+
\** Geminated sign below, cannot treat diphthongs or long vowels **\
|
305
|
+
ww{S_VOWELS_KER_WN} --> ROMEN THINF_DSTROKE_XS {SU_VOWELS_IMG__L_WN}
|
306
|
+
|
307
|
+
\** L and LL and ld are too big to receive tehtas under, so no diphthongs, no long vowels **\
|
308
|
+
[l * ll * ld] {S_VOWELS_KER_WN} --> [LAMBE * LAMBE THINF_DSTROKE_FOR_LAMBE * ALDA] {SU_VOWELS_IMG__L_WN}
|
309
|
+
|
310
|
+
\** ========== **\
|
311
|
+
\** Alveolar (sifflantes) **\
|
312
|
+
|
313
|
+
{L8_KER} === s * z
|
314
|
+
{L8_IMG} === SILME_NUQUERNA * ESSE_NUQUERNA
|
315
|
+
{L8_KER_GEMS} === ss * zz
|
316
|
+
{L8_IMG_GEMS} === SILME_NUQUERNA THINF_DSTROKE_XS * ESSE_NUQUERNA THINF_DSTROKE_L
|
317
|
+
|
318
|
+
[{L8_KER}] --> [{L8_IMG}]
|
319
|
+
[{L8_KER}]{S_VOWELS_KER}{S_VOWELS_KER_WN} --> [{L8_IMG}]{SU_VOWELS_IMG__S}{SD_VOWELS_IMG__S_WN}
|
320
|
+
[{L8_KER}][{L_VOWELS}] --> [{L8_IMG}][{UTEHTA_NP__S}]{LVOWEL_MARKER__S}
|
321
|
+
|
322
|
+
\** Geminated sign under, cannot treat diphthongs or long vowels **\
|
323
|
+
[{L8_KER_GEMS}]{S_VOWELS_KER_WN} --> [{L8_IMG_GEMS}]{SU_VOWELS_IMG__S_WN}
|
324
|
+
|
325
|
+
\** Final s (Challenging!) **\
|
326
|
+
s_ --> SHOOK_BEAUTIFUL \** Final rule for s **\
|
327
|
+
{S_VOWELS_KER}s_ --> TELCO {SU_VOWELS_IMG_XS} SILME_NUQUERNA \** Rule es_ **\
|
328
|
+
[{L_VOWELS}]s_ --> [{L_PTEHTAS}] SILME_NUQUERNA \** Rule és_ **\
|
329
|
+
|
330
|
+
s --> SILME \** Overload lonely s **\
|
331
|
+
z --> ESSE \** Overload lonely z **\
|
332
|
+
|
333
|
+
\** ========== **\
|
334
|
+
\** Ligatures **\
|
335
|
+
|
336
|
+
{LINE_VARIOUS_1_KER} === sċ
|
337
|
+
{LINE_VARIOUS_1_IMG} === ANCA_CLOSED
|
338
|
+
{LINE_VARIOUS_2_KER} === hw * çt * (χt,ħt)
|
339
|
+
{LINE_VARIOUS_2_IMG} === HARP_SHAPED * AHA_TINCO * HWESTA_TINCO
|
340
|
+
|
341
|
+
[{LINE_VARIOUS_1_KER}] --> [{LINE_VARIOUS_1_IMG}]
|
342
|
+
[{LINE_VARIOUS_2_KER}] --> [{LINE_VARIOUS_2_IMG}]
|
343
|
+
[{LINE_VARIOUS_1_KER}]{S_VOWELS_KER}{S_VOWELS_KER_WN} --> [{LINE_VARIOUS_1_IMG}]{SU_VOWELS_IMG_XL}{SD_VOWELS_IMG_XL_WN}
|
344
|
+
[{LINE_VARIOUS_2_KER}]{S_VOWELS_KER}{S_VOWELS_KER_WN} --> [{LINE_VARIOUS_2_IMG}]{SU_VOWELS_IMG__S}{SD_VOWELS_IMG__S_WN}
|
345
|
+
[{LINE_VARIOUS_1_KER}][{L_VOWELS}] --> [{LINE_VARIOUS_1_IMG}][{UTEHTA_NP_XL}]{LVOWEL_MARKER_XL}
|
346
|
+
[{LINE_VARIOUS_2_KER}][{L_VOWELS}] --> [{LINE_VARIOUS_2_IMG}][{UTEHTA_NP__S}]{LVOWEL_MARKER__S}
|
347
|
+
|
348
|
+
\** No nasals, no geminated **\
|
349
|
+
|
350
|
+
\** ========== **\
|
351
|
+
\** Various **\
|
352
|
+
|
353
|
+
h --> HYARMEN
|
354
|
+
h{S_VOWELS_KER}{S_VOWELS_KER_WN} --> HYARMEN {SU_VOWELS_IMG_XS}{SD_VOWELS_IMG__L_WN}
|
355
|
+
h[{L_VOWELS}] --> HYARMEN [{UTEHTA_NP_XS}]{LVOWEL_MARKER__L}
|
356
|
+
|
357
|
+
\** Geminated sign below, cannot treat diphthongs or long vowels **\
|
358
|
+
hh{S_VOWELS_KER_WN} --> HYARMEN THINF_DSTROKE_XL {SU_VOWELS_IMG_XS_WN}
|
359
|
+
|
360
|
+
\** ========== **\
|
361
|
+
\** X **\
|
362
|
+
\** For x, due to the cedilla, we cannot put tehtas under the tengwa (so no need to treat diphthongs or long vowels) **\
|
363
|
+
|
364
|
+
x{S_VOWELS_KER_WN} --> QUESSE SHOOK_LEFT_L {SU_VOWELS_IMG__S_WN}
|
365
|
+
xx{S_VOWELS_KER_WN} --> QUESSE SHOOK_LEFT_L THINF_DSTROKE_XL {SU_VOWELS_IMG__S_WN}
|
366
|
+
nx{S_VOWELS_KER_WN} --> QUESSE SHOOK_LEFT_L TILD_SUP_S {SU_VOWELS_IMG__S_WN}
|
367
|
+
\end
|
368
|
+
|
369
|
+
\beg rules punctuation
|
370
|
+
⁊ --> OLD_ENGLISH_AND
|
371
|
+
|
372
|
+
. --> PUNCT_DDOT
|
373
|
+
.. --> PUNCT_DOT PUNCT_DDOT PUNCT_DOT
|
374
|
+
… --> PUNCT_TILD
|
375
|
+
... --> PUNCT_TILD
|
376
|
+
.... --> PUNCT_TILD
|
377
|
+
..... --> PUNCT_TILD
|
378
|
+
...... --> PUNCT_TILD
|
379
|
+
....... --> PUNCT_TILD
|
380
|
+
|
381
|
+
, --> PUNCT_DOT
|
382
|
+
: --> PUNCT_DOT
|
383
|
+
; --> PUNCT_DOT
|
384
|
+
! --> PUNCT_EXCLAM
|
385
|
+
? --> PUNCT_INTERR
|
386
|
+
· --> PUNCT_DOT
|
387
|
+
|
388
|
+
\** Apostrophe **\
|
389
|
+
|
390
|
+
' --> {NULL}
|
391
|
+
’ --> {NULL}
|
392
|
+
|
393
|
+
\** Quotes **\
|
394
|
+
|
395
|
+
“ --> DQUOT_OPEN
|
396
|
+
” --> DQUOT_CLOSE
|
397
|
+
« --> DQUOT_OPEN
|
398
|
+
» --> DQUOT_CLOSE
|
399
|
+
|
400
|
+
- --> PUNCT_DOT
|
401
|
+
– --> PUNCT_TILD
|
402
|
+
— --> PUNCT_TILD
|
403
|
+
|
404
|
+
[ --> PUNCT_PAREN_L
|
405
|
+
] --> PUNCT_PAREN_R
|
406
|
+
( --> PUNCT_PAREN_L_ALT \** TODO : Remove alt ? **\
|
407
|
+
) --> PUNCT_PAREN_R_ALT \** TODO : Remove alt ? **\
|
408
|
+
{ --> PUNCT_PAREN_L
|
409
|
+
} --> PUNCT_PAREN_R
|
410
|
+
< --> PUNCT_PAREN_L
|
411
|
+
> --> PUNCT_PAREN_R
|
412
|
+
|
413
|
+
\** Not universal between fonts ... **\
|
414
|
+
$ --> BOOKMARK_SIGN
|
415
|
+
≤ --> RING_MARK_L \** Ring inscription left beautiful stuff **\
|
416
|
+
≥ --> RING_MARK_R \** Ring inscription right beautiful stuff **\
|
417
|
+
\end
|
418
|
+
\end
|
419
|
+
|
@@ -0,0 +1,127 @@
|
|
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 "Futhark Codex Runicus"
|
28
|
+
\version "0.0.1"
|
29
|
+
\authors "Talagan (Benjamin Babut)"
|
30
|
+
|
31
|
+
\charset unicode_runes true
|
32
|
+
|
33
|
+
\beg preprocessor
|
34
|
+
\downcase
|
35
|
+
\end
|
36
|
+
|
37
|
+
\beg processor
|
38
|
+
|
39
|
+
\beg rules litteral
|
40
|
+
{A} === (a,á)
|
41
|
+
{E} === (e,é)
|
42
|
+
{I} === (i,í,j)
|
43
|
+
{O} === (o,ó)
|
44
|
+
{U} === (u,ú)
|
45
|
+
{Y} === (y,ý)
|
46
|
+
|
47
|
+
{AE} === (æ,ǽ,ę)
|
48
|
+
{OE} === (ø,ǿ,œ)
|
49
|
+
{OTREM} === (ö,ǫ)
|
50
|
+
{AEI} === (æi,ei)
|
51
|
+
|
52
|
+
\** VOWELS **\
|
53
|
+
|
54
|
+
\** ą (> a, o, á, ó plus tard) **\
|
55
|
+
|
56
|
+
{A} --> SHORT_TWIG_AR
|
57
|
+
{E} --> RUNIC_E
|
58
|
+
{I} --> ISS
|
59
|
+
{O} --> RUNIC_O
|
60
|
+
{U} --> UR
|
61
|
+
{Y} --> LONG_BRANCH_YR
|
62
|
+
{AE} --> LONG_BRANCH_AR
|
63
|
+
{OE} --> RUNIC_OE
|
64
|
+
{OTREM} --> RUNIC_O \** # ö en islandais **\
|
65
|
+
ǭ --> SHORT_TWIG_AR \** # á en islandais **\
|
66
|
+
{AEI} --> LONG_BRANCH_AR ISS
|
67
|
+
|
68
|
+
\** au: ok **\
|
69
|
+
{E}{Y} --> LONG_BRANCH_AR LONG_BRANCH_YR
|
70
|
+
{OE}{Y} --> LONG_BRANCH_AR LONG_BRANCH_YR
|
71
|
+
|
72
|
+
\** CONSONANTS **\
|
73
|
+
|
74
|
+
b --> BJARKAN
|
75
|
+
c --> RUNIC_C
|
76
|
+
\** bb: ok **\
|
77
|
+
\** mb: ok **\
|
78
|
+
d --> RUNIC_D
|
79
|
+
\** dd: ok **\
|
80
|
+
\** nd: ok **\
|
81
|
+
ð --> THORN
|
82
|
+
(f,f_) --> FEHU \** # Second part is unuseful but exists in other modes **\
|
83
|
+
_g --> RUNIC_G \** # Initial / After prefix **\
|
84
|
+
(g,g_) --> LONG_BRANCH_HAGALL \** # Median / Final Spirant **\
|
85
|
+
gg --> RUNIC_G RUNIC_G
|
86
|
+
ng --> SHORT_TWIG_NAUD RUNIC_G
|
87
|
+
h --> LONG_BRANCH_HAGALL
|
88
|
+
k --> KAUN
|
89
|
+
\** kk: ok **\
|
90
|
+
\** nk: ok **\
|
91
|
+
l --> LOGR
|
92
|
+
\** ll: ok **\
|
93
|
+
m --> LONG_BRANCH_MADR
|
94
|
+
\** mm: ok **\
|
95
|
+
n --> SHORT_TWIG_NAUD
|
96
|
+
\** nn: ok **\
|
97
|
+
p --> DOTTED_P
|
98
|
+
\** pp: ok **\
|
99
|
+
\** mp: ok **\
|
100
|
+
r --> REID
|
101
|
+
\** rr: ok **\
|
102
|
+
\** ř < z = rune ýr, none in this mode **\
|
103
|
+
s --> SIGEL
|
104
|
+
\** ss: ok **\
|
105
|
+
t --> SHORT_TWIG_TYR
|
106
|
+
nt --> SHORT_TWIG_TYR
|
107
|
+
\** tt: ok **\
|
108
|
+
þ --> THORN
|
109
|
+
vv --> FEHU \** # v (< f) **\
|
110
|
+
v --> URUZ \** # v (< w) **\
|
111
|
+
w --> URUZ \** # Should not exist but let's handle it **\
|
112
|
+
x --> RUNIC_X
|
113
|
+
z --> RUNIC_Z
|
114
|
+
\end
|
115
|
+
|
116
|
+
\beg rules punctuation
|
117
|
+
, --> RUNIC_SINGLE_PUNCTUATION
|
118
|
+
; --> RUNIC_SINGLE_PUNCTUATION
|
119
|
+
: --> RUNIC_MULTIPLE_PUNCTUATION
|
120
|
+
. --> RUNIC_MULTIPLE_PUNCTUATION
|
121
|
+
! --> RUNIC_MULTIPLE_PUNCTUATION
|
122
|
+
? --> RUNIC_CROSS_PUNCTUATION
|
123
|
+
\end
|
124
|
+
\end
|
125
|
+
|
126
|
+
|
127
|
+
|