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,64 @@
|
|
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
|
+
\** Charset for the analecta font used by the gothic mode **\
|
26
|
+
\** Very incomplete outside of the gothic range **\
|
27
|
+
\** Minimal service here ... **\
|
28
|
+
|
29
|
+
\** **\ \char 20 SPACE
|
30
|
+
\** , **\ \char 2C COMA
|
31
|
+
\** . **\ \char 2E PERIOD
|
32
|
+
\** : **\ \char 3A COLON
|
33
|
+
\** ; **\ \char 3B SEMICOLON
|
34
|
+
|
35
|
+
\** Gothic part **\
|
36
|
+
\** 𐌰 **\ \char 10330 AZA
|
37
|
+
\** 𐌱 **\ \char 10331 BERCNA
|
38
|
+
\** 𐌳 **\ \char 10333 DAAZ
|
39
|
+
\** 𐌴 **\ \char 10334 EYZ
|
40
|
+
\** 𐍆 **\ \char 10346 FE
|
41
|
+
\** 𐌲 **\ \char 10332 GEUUA
|
42
|
+
\** 𐌷 **\ \char 10337 HAAL
|
43
|
+
\** 𐌹 **\ \char 10339 IIZ
|
44
|
+
\** 𐌾 **\ \char 1033E GAAR
|
45
|
+
\** 𐌺 **\ \char 1033A CHOZMA
|
46
|
+
\** 𐌻 **\ \char 1033B LAAZ
|
47
|
+
\** 𐌼 **\ \char 1033C MANNA
|
48
|
+
\** 𐌽 **\ \char 1033D NOICZ
|
49
|
+
\** 𐍉 **\ \char 10349 UTAL
|
50
|
+
\** 𐍀 **\ \char 10340 PERTRA
|
51
|
+
\** 𐌵 **\ \char 10335 QUETRA
|
52
|
+
\** 𐍂 **\ \char 10342 REDA
|
53
|
+
\** 𐍃 **\ \char 10343 SUGIL
|
54
|
+
\** 𐍄 **\ \char 10344 TYZ
|
55
|
+
\** 𐌸 **\ \char 10338 THYTH
|
56
|
+
\** 𐌿 **\ \char 1033F URAZ
|
57
|
+
\** 𐍇 **\ \char 10347 ENGUZ
|
58
|
+
\** 𐍅 **\ \char 10345 UUINNE
|
59
|
+
\** 𐌶 **\ \char 10336 EZEC
|
60
|
+
\** 𐍈 **\ \char 10348 UUAER
|
61
|
+
\** **\ \char 1034B IIZ_TREMA \** Special Glaemscrafu ! **\
|
62
|
+
\** 𐍁 **\ \char 10341 ?
|
63
|
+
\** 𐍊 **\ \char 1034A ?
|
64
|
+
|
@@ -0,0 +1,120 @@
|
|
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
|
+
\** Charset for the pfeffermediaeval font used by the furtharc mode **\
|
26
|
+
\** Very incomplete outside of the runes range **\
|
27
|
+
\** Minimal service here ... **\
|
28
|
+
|
29
|
+
\** **\ \char 20 SPACE
|
30
|
+
\** , **\ \char 2C COMA
|
31
|
+
\** . **\ \char 2E PERIOD
|
32
|
+
\** ; **\ \char 3B SEMICOLON
|
33
|
+
\** ᚠ **\ \char 16A0 FEHU FEOH FE
|
34
|
+
\** ᚡ **\ \char 16A1 RUNIC_V
|
35
|
+
\** ᚢ **\ \char 16A2 URUZ UR
|
36
|
+
\** ᚣ **\ \char 16A3 YR
|
37
|
+
\** ᚤ **\ \char 16A4 RUNIC_Y
|
38
|
+
\** ᚥ **\ \char 16A5 RUNIC_W
|
39
|
+
\** ᚦ **\ \char 16A6 THURISAZ THURS THORN
|
40
|
+
\** ᚧ **\ \char 16A7 ETH
|
41
|
+
\** ᚨ **\ \char 16A8 ANSUZ
|
42
|
+
\** ᚩ **\ \char 16A9 OS
|
43
|
+
\** ᚪ **\ \char 16AA AC
|
44
|
+
\** ᚫ **\ \char 16AB AESC
|
45
|
+
\** ᚬ **\ \char 16AC LONG_BRANCH_OSS
|
46
|
+
\** ᚭ **\ \char 16AD SHORT_TWIG_OSS
|
47
|
+
\** ᚮ **\ \char 16AE RUNIC_O
|
48
|
+
\** ᚯ **\ \char 16AF RUNIC_OE
|
49
|
+
\** ᚰ **\ \char 16B0 RUNIC_ON
|
50
|
+
\** ᚱ **\ \char 16B1 RAIDO RAD REID
|
51
|
+
\** ᚲ **\ \char 16B2 KAUNA
|
52
|
+
\** ᚳ **\ \char 16B3 CEN
|
53
|
+
\** ᚴ **\ \char 16B4 KAUN
|
54
|
+
\** ᚵ **\ \char 16B5 RUNIC_G
|
55
|
+
\** ᚶ **\ \char 16B6 ENG
|
56
|
+
\** ᚷ **\ \char 16B7 GEBO GYFU
|
57
|
+
\** ᚷ **\ \char 16B8 GAR
|
58
|
+
\** ᚹ **\ \char 16B9 WUNJO WYNN
|
59
|
+
\** ᚺ **\ \char 16BA HAGLAZ
|
60
|
+
\** ᚻ **\ \char 16BB HAEGL
|
61
|
+
\** ᚼ **\ \char 16BC LONG_BRANCH_HAGALL
|
62
|
+
\** ᚽ **\ \char 16BD SHORT_TWIG_HAGALL
|
63
|
+
\** ᚾ **\ \char 16BE NAUDIZ NYD NAUD
|
64
|
+
\** ᚿ **\ \char 16BF SHORT_TWIG_NAUD
|
65
|
+
\** ᛀ **\ \char 16C0 DOTTED_N
|
66
|
+
\** ᛁ **\ \char 16C1 ISAZ IS ISS
|
67
|
+
\** ᛂ **\ \char 16C2 RUNIC_E
|
68
|
+
\** ᛃ **\ \char 16C3 JERAN
|
69
|
+
\** ᛄ **\ \char 16C4 GER
|
70
|
+
\** ᛅ **\ \char 16C5 LONG_BRANCH_AR
|
71
|
+
\** ᛆ **\ \char 16C6 SHORT_TWIG_AR
|
72
|
+
\** ᛇ **\ \char 16C7 IWAZ EOH
|
73
|
+
\** ᛈ **\ \char 16C8 PERTHO PEORTH
|
74
|
+
\** ᛉ **\ \char 16C9 ALGIZ EOLHX
|
75
|
+
\** ᛊ **\ \char 16CA SOWILO
|
76
|
+
\** ᛋ **\ \char 16CB SIGEL LONG_BRANCH_SOL
|
77
|
+
\** ᛌ **\ \char 16CC SHORT_TWIG_SOL
|
78
|
+
\** ᛍ **\ \char 16CD RUNIC_C
|
79
|
+
\** ᛎ **\ \char 16CE RUNIC_Z
|
80
|
+
\** ᛏ **\ \char 16CF TIWAZ TIR TYR
|
81
|
+
\** ᛐ **\ \char 16D0 SHORT_TWIG_TYR
|
82
|
+
\** ᛑ **\ \char 16D1 RUNIC_D
|
83
|
+
\** ᛒ **\ \char 16D2 BERKANAN BEORC BJARKAN
|
84
|
+
\** ᛔ **\ \char 16D4 DOTTED_P
|
85
|
+
\** ᛕ **\ \char 16D5 OPEN_P
|
86
|
+
\** ᛖ **\ \char 16D6 EHWAZ EH
|
87
|
+
\** ᛗ **\ \char 16D7 MANNAZ MAN
|
88
|
+
\** ᛘ **\ \char 16D8 LONG_BRANCH_MADR
|
89
|
+
\** ᛙ **\ \char 16D9 SHORT_TWIG_MADR
|
90
|
+
\** ᛚ **\ \char 16DA LAUKAZ LAGU LOGR
|
91
|
+
\** ᛛ **\ \char 16DB DOTTED_L
|
92
|
+
\** ᛜ **\ \char 16DC INGWAZ
|
93
|
+
\** ᛝ **\ \char 16DD ING
|
94
|
+
\** ᛞ **\ \char 16DE DAGAZ DAEG
|
95
|
+
\** ᛟ **\ \char 16DF OTHALAN ETHEL
|
96
|
+
\** ᛠ **\ \char 16E0 EAR
|
97
|
+
\** ᛡ **\ \char 16E1 IOR
|
98
|
+
\** ᛢ **\ \char 16E2 CWEORTH
|
99
|
+
\** ᛣ **\ \char 16E3 CALC
|
100
|
+
\** ᛤ **\ \char 16E4 CEALC
|
101
|
+
\** ᛥ **\ \char 16E4 STAN
|
102
|
+
\** ᛦ **\ \char 16E6 LONG_BRANCH_YR
|
103
|
+
\** ᛧ **\ \char 16E7 SHORT_TWIG_YR
|
104
|
+
\** ᛨ **\ \char 16E8 ICELANDIC_YR
|
105
|
+
\** ᛩ **\ \char 16E9 RUNIC_Q
|
106
|
+
\** ᛪ **\ \char 16EA RUNIC_X
|
107
|
+
\** ᛫ **\ \char 16EB RUNIC_SINGLE_PUNCTUATION
|
108
|
+
\** ᛬ **\ \char 16EC RUNIC_MULTIPLE_PUNCTUATION
|
109
|
+
\** ᛭ **\ \char 16ED RUNIC_CROSS_PUNCTUATION
|
110
|
+
\** ᛮ **\ \char 16EE RUNIC_ARLAUG_SYMBOL
|
111
|
+
\** ᛯ **\ \char 16EF RUNIC_TVIMADUR_SYMBOL
|
112
|
+
\** ᛰ **\ \char 16F0 RUNIC_BELGTHOR_SYMBOL
|
113
|
+
\** ᛱ **\ \char 16F1 RUNIC_LETTER_K
|
114
|
+
\** ᛲ **\ \char 16F2 RUNIC_LETTER_SH
|
115
|
+
\** ᛳ **\ \char 16F3 RUNIC_LETTER_OO
|
116
|
+
\** ᛴ **\ \char 16F4 RUNIC_LETTER_FRANKS_CASKET_OS
|
117
|
+
\** ᛵ **\ \char 16F5 RUNIC_LETTER_FRANKS_CASKET_IS
|
118
|
+
\** ᛶ **\ \char 16F6 RUNIC_LETTER_FRANKS_CASKET_EH
|
119
|
+
\** ᛷ **\ \char 16F7 RUNIC_LETTER_FRANKS_CASKET_AC
|
120
|
+
\** ᛸ **\ \char 16F8 RUNIC_LETTER_FRANKS_CASKET_AESC
|
@@ -0,0 +1,251 @@
|
|
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
|
+
\** Adunaic mode for glaemscribe (MAY BE INCOMPLETE) **\
|
26
|
+
\language Adûnaic
|
27
|
+
\writing Tengwar
|
28
|
+
\mode Glaemscrafu
|
29
|
+
\version 0.0.1
|
30
|
+
\authors "Talagan (Benjamin Babut)"
|
31
|
+
|
32
|
+
\charset tengwar_ds true
|
33
|
+
|
34
|
+
\beg options
|
35
|
+
\option reverse_numbers true
|
36
|
+
\beg option numbers_base BASE_12
|
37
|
+
\value BASE_10 10
|
38
|
+
\value BASE_12 12
|
39
|
+
\end
|
40
|
+
\end
|
41
|
+
|
42
|
+
\beg preprocessor
|
43
|
+
\** Work exclusively downcase **\
|
44
|
+
\downcase
|
45
|
+
|
46
|
+
\** Simplify trema vowels **\
|
47
|
+
\substitute "ä" "a"
|
48
|
+
\substitute "ë" "e"
|
49
|
+
\substitute "ï" "i"
|
50
|
+
\substitute "ö" "o"
|
51
|
+
\substitute "ü" "u"
|
52
|
+
\substitute "ÿ" "y"
|
53
|
+
|
54
|
+
\** Dis-ambiguate long vowels **\
|
55
|
+
\rxsubstitute "(ā|â|aa)" "á"
|
56
|
+
\rxsubstitute "(ē|ê|ee)" "é"
|
57
|
+
\rxsubstitute "(ī|î|ii)" "í"
|
58
|
+
\rxsubstitute "(ō|ô|oo)" "ó"
|
59
|
+
\rxsubstitute "(ū|û|uu)" "ú"
|
60
|
+
\rxsubstitute "(ȳ|ŷ|yy)" "ý"
|
61
|
+
|
62
|
+
\** Preprocess numbers **\
|
63
|
+
\elvish_numbers "\\eval numbers_base" "\\eval reverse_numbers"
|
64
|
+
\end
|
65
|
+
|
66
|
+
\beg processor
|
67
|
+
|
68
|
+
\beg rules litteral
|
69
|
+
{A} === a
|
70
|
+
{AA} === á
|
71
|
+
{E} === e
|
72
|
+
{EE} === é
|
73
|
+
{I} === i
|
74
|
+
{II} === í
|
75
|
+
{O} === o
|
76
|
+
{OO} === ó
|
77
|
+
{U} === u
|
78
|
+
{UU} === ú
|
79
|
+
|
80
|
+
\** Short diphthongs **\
|
81
|
+
{AI} === {A}{I}
|
82
|
+
{AU} === {A}{U}
|
83
|
+
|
84
|
+
\** LONG diphthongs **\
|
85
|
+
{AAI} === {AA}{I} \** âi **\
|
86
|
+
{AAU} === {AA}{U} \** âu **\
|
87
|
+
{EEI} === {EE}{I} \** êi **\
|
88
|
+
{EEU} === {EE}{U} \** êu **\
|
89
|
+
{OOI} === {OO}{I} \** ôi **\
|
90
|
+
{OOU} === {OO}{U} \** ôu **\
|
91
|
+
|
92
|
+
{SDIPHTHONGS} === {AI} * {AU}
|
93
|
+
{SDIPHTHENGS} === YANTA A_TEHTA_L * URE A_TEHTA_L
|
94
|
+
|
95
|
+
{LDIPHTHONGS} === {AAI} * {AAU} * {EEI} * {EEU} * {OOI} * {OOU}
|
96
|
+
{LDIPHTHENGS} === ARA A_TEHTA_XS YANTA * ARA A_TEHTA_XS URE * ARA E_TEHTA_XS YANTA * ARA E_TEHTA_XS URE * ARA O_TEHTA_XS YANTA * ARA O_TEHTA_XS URE
|
97
|
+
|
98
|
+
{VOWELS} === {A} * {E} * {I} * {O} * {U}
|
99
|
+
{TEHTA_XS} === A_TEHTA_XS * E_TEHTA_XS * I_TEHTA_XS * O_TEHTA_XS * U_TEHTA_XS
|
100
|
+
{TEHTA__S} === A_TEHTA_S * E_TEHTA_S * I_TEHTA_S * O_TEHTA_S * U_TEHTA_S
|
101
|
+
{TEHTA__L} === A_TEHTA_L * E_TEHTA_L * I_TEHTA_L * O_TEHTA_L * U_TEHTA_L
|
102
|
+
{TEHTA_XL} === A_TEHTA_XL * E_TEHTA_XL * I_TEHTA_XL * O_TEHTA_XL * U_TEHTA_XL
|
103
|
+
|
104
|
+
{LVOWELS} === {AA} * {EE} * {II} * {OO} * {UU}
|
105
|
+
{LVOWTNG} === ARA A_TEHTA_XS * ARA E_TEHTA_XS * ARA I_TEHTA_XS * ARA O_TEHTA_XS * ARA U_TEHTA_XS
|
106
|
+
|
107
|
+
\** Let' put all vowels/diphthongs in the same basket **\
|
108
|
+
{V_D} === [ {VOWELS} * {LVOWELS} * {SDIPHTHONGS} * {LDIPHTHONGS} ]
|
109
|
+
\** And their images... **\
|
110
|
+
{T_XS_D} === [ {TEHTA_XS} * {LVOWTNG} * {SDIPHTHENGS} * {LDIPHTHENGS} ]
|
111
|
+
{T_S_D} === [ {TEHTA__S} * {LVOWTNG} * {SDIPHTHENGS} * {LDIPHTHENGS} ]
|
112
|
+
{T_L_D} === [ {TEHTA__L} * {LVOWTNG} * {SDIPHTHENGS} * {LDIPHTHENGS} ]
|
113
|
+
{T_XL_D} === [ {TEHTA_XL} * {LVOWTNG} * {SDIPHTHENGS} * {LDIPHTHENGS} ]
|
114
|
+
|
115
|
+
[{VOWELS}] --> TELCO [{TEHTA_XS}] \** Replace isolated short vowels **\
|
116
|
+
[{LVOWELS}] --> [{LVOWTNG}] \** Replace long vowels **\
|
117
|
+
[{SDIPHTHONGS}] --> [{SDIPHTHENGS}] \** Replace short diphthongs **\
|
118
|
+
[{LDIPHTHONGS}] --> [{LDIPHTHENGS}] \** Replace long diphthongs **\
|
119
|
+
|
120
|
+
\** ================ **\
|
121
|
+
\** CONSONANTS **\
|
122
|
+
\** ================ **\
|
123
|
+
{K} === (c,k)
|
124
|
+
{V} === (v,w)
|
125
|
+
|
126
|
+
{L1_S} === {K} * p * t * {K}{K} * pp * tt
|
127
|
+
{L1_T} === QUESSE * PARMA * TINCO * CALMA DASH_INF_S * PARMA DASH_INF_S * TINCO DASH_INF_S
|
128
|
+
|
129
|
+
[{L1_S}] --> [ {L1_T} ]
|
130
|
+
[{L1_S}]{V_D} --> [ {L1_T} ]{T_S_D}
|
131
|
+
|
132
|
+
{L2_S} === d * b * g * dd * bb * gg
|
133
|
+
{L2_T} === ANDO * UMBAR * UNGWE * ANDO DASH_INF_L * UMBAR DASH_INF_L * UNGWE DASH_INF_L
|
134
|
+
[{L2_S}] --> [{L2_T}]
|
135
|
+
[{L2_S}]{V_D} --> [{L2_T}]{T_XL_D}
|
136
|
+
|
137
|
+
\** Alignment of tehta is not the same in the font **\
|
138
|
+
\** So we need to split the third line unfortunately **\
|
139
|
+
{L3_1_S} === th * ph * (t,th)th * (p,ph)ph * (t,th)ph * (k,kh)ph * (p,ph)th * (k,kh)th
|
140
|
+
{L3_1_T} === SULE * FORMEN * SULE DASH_INF_S * FORMEN DASH_INF_S * SULE FORMEN * HWESTA FORMEN * FORMEN SULE * HWESTA SULE
|
141
|
+
|
142
|
+
{L3_2_S} === sh * kh * (k,kh)kh * (p,ph)kh * (t,th)kh
|
143
|
+
{L3_2_T} === AHA * HWESTA * HWESTA DASH_INF_S * FORMEN HWESTA * SULE HWESTA
|
144
|
+
|
145
|
+
[{L3_1_S}] --> [{L3_1_T}]
|
146
|
+
[{L3_1_S}]{V_D} --> [{L3_1_T}]{T_S_D}
|
147
|
+
[{L3_2_S}] --> [{L3_2_T}]
|
148
|
+
[{L3_2_S}]{V_D} --> [{L3_2_T}]{T_L_D}
|
149
|
+
|
150
|
+
{L4_S} === nd * mb * ng
|
151
|
+
{L4_T} === ANTO * AMPA * UNQUE
|
152
|
+
[{L4_S}] --> [{L4_T}]
|
153
|
+
[{L4_S}]{V_D} --> [{L4_T}]{T_XL_D}
|
154
|
+
|
155
|
+
{L5_S} === n * m * nn * mm
|
156
|
+
{L5_T} === NUMEN * MALTA * NUMEN DASH_INF_L * MALTA DASH_INF_L
|
157
|
+
[{L5_S}] --> [{L5_T}]
|
158
|
+
[{L5_S}]{V_D} --> [{L5_T}]{T_XL_D}
|
159
|
+
|
160
|
+
{L6_S} === {V} * y * rr * {V}{V} * yy
|
161
|
+
{L6_T} === VALA * ANNA * ROMEN DASH_INF_S * VALA DASH_INF_S * ANNA DASH_INF_S
|
162
|
+
[r * {L6_S}] --> [ ORE * {L6_T}]
|
163
|
+
[r * {L6_S}]{V_D} --> [ ROMEN * {L6_T}]{T_S_D}
|
164
|
+
|
165
|
+
\** This one is not useful (redundant with higher) **\
|
166
|
+
\** Keep it for clarity of mind **\
|
167
|
+
r_ --> ORE
|
168
|
+
|
169
|
+
s{V_D} --> SILME_NUQUERNA {T_S_D} \** Before a vowel goes down **\
|
170
|
+
s --> SILME \** Any other pos, up **\
|
171
|
+
z{V_D} --> ESSE_NUQUERNA {T_S_D} \** Before a vowel goes down **\
|
172
|
+
z --> ESSE \** Any other pos, up **\
|
173
|
+
|
174
|
+
h{V_D} --> HYARMEN {T_XS_D}
|
175
|
+
h --> HYARMEN
|
176
|
+
hh{V_D} --> HYARMEN DASH_INF_L {T_XS_D}
|
177
|
+
hh --> HYARMEN DASH_INF_L
|
178
|
+
|
179
|
+
l{V_D} --> LAMBE {T_XL_D}
|
180
|
+
l --> LAMBE
|
181
|
+
|
182
|
+
ll{V_D} --> LAMBE LAMBE_MARK_TILD {T_XL_D}
|
183
|
+
ll --> LAMBE LAMBE_MARK_TILD
|
184
|
+
|
185
|
+
\end
|
186
|
+
|
187
|
+
\beg rules punctutation
|
188
|
+
. --> PUNCT_DDOT
|
189
|
+
.. --> PUNCT_DOT PUNCT_DDOT PUNCT_DOT
|
190
|
+
… --> PUNCT_TILD
|
191
|
+
... --> PUNCT_TILD
|
192
|
+
.... --> PUNCT_TILD
|
193
|
+
..... --> PUNCT_TILD
|
194
|
+
...... --> PUNCT_TILD
|
195
|
+
....... --> PUNCT_TILD
|
196
|
+
|
197
|
+
, --> PUNCT_DOT
|
198
|
+
: --> PUNCT_DOT
|
199
|
+
; --> PUNCT_DOT
|
200
|
+
! --> PUNCT_EXCLAM
|
201
|
+
? --> PUNCT_INTERR
|
202
|
+
· --> PUNCT_DOT
|
203
|
+
|
204
|
+
\** Apostrophe **\
|
205
|
+
|
206
|
+
' --> {NULL}
|
207
|
+
’ --> {NULL}
|
208
|
+
|
209
|
+
\** Quotes **\
|
210
|
+
|
211
|
+
“ --> DQUOT_OPEN
|
212
|
+
” --> DQUOT_CLOSE
|
213
|
+
« --> DQUOT_OPEN
|
214
|
+
» --> DQUOT_CLOSE
|
215
|
+
|
216
|
+
- --> PUNCT_DOT
|
217
|
+
– --> WAVE_MED_SIMPLE
|
218
|
+
— --> WAVE_MED_DOUBLE
|
219
|
+
|
220
|
+
[ --> PUNCT_PAREN_L
|
221
|
+
] --> PUNCT_PAREN_R
|
222
|
+
( --> PUNCT_PAREN_L
|
223
|
+
) --> PUNCT_PAREN_R
|
224
|
+
{ --> PUNCT_PAREN_L
|
225
|
+
} --> PUNCT_PAREN_R
|
226
|
+
< --> PUNCT_PAREN_L
|
227
|
+
> --> PUNCT_PAREN_R
|
228
|
+
|
229
|
+
\** Not universal between fonts ... **\
|
230
|
+
$ --> BOOKMARK_SIGN
|
231
|
+
≤ --> RING_MARK_L \** Ring inscription left beautiful stuff **\
|
232
|
+
≥ --> RING_MARK_R \** Ring inscription right beautiful stuff **\
|
233
|
+
\end
|
234
|
+
|
235
|
+
\beg rules numbers
|
236
|
+
0 --> NUM_0
|
237
|
+
1 --> NUM_1
|
238
|
+
2 --> NUM_2
|
239
|
+
3 --> NUM_3
|
240
|
+
4 --> NUM_4
|
241
|
+
5 --> NUM_5
|
242
|
+
6 --> NUM_6
|
243
|
+
7 --> NUM_7
|
244
|
+
8 --> NUM_8
|
245
|
+
9 --> NUM_9
|
246
|
+
A --> NUM_10
|
247
|
+
B --> NUM_11
|
248
|
+
\end
|
249
|
+
|
250
|
+
\end
|
251
|
+
|
@@ -0,0 +1,318 @@
|
|
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
|
+
\** BlackSpeech ring mode for glaemscribe (FAR FROM BEING COMPLETE!!!) **\
|
26
|
+
|
27
|
+
\language "Black Speech"
|
28
|
+
\writing "Tengwar"
|
29
|
+
\mode "Ring Style / Cursive"
|
30
|
+
\version "0.0.1"
|
31
|
+
\authors "Talagan (Benjamin Babut)"
|
32
|
+
|
33
|
+
\charset tengwar_ds true
|
34
|
+
|
35
|
+
\beg options
|
36
|
+
\option reverse_numbers true
|
37
|
+
\beg option numbers_base BASE_12
|
38
|
+
\value BASE_10 10
|
39
|
+
\value BASE_12 12
|
40
|
+
\end
|
41
|
+
\end
|
42
|
+
|
43
|
+
\beg preprocessor
|
44
|
+
\** Work exclusively downcase **\
|
45
|
+
\downcase
|
46
|
+
|
47
|
+
\** Simplify trema vowels **\
|
48
|
+
\substitute ä a
|
49
|
+
\substitute ë e
|
50
|
+
\substitute ï i
|
51
|
+
\substitute ö o
|
52
|
+
\substitute ü u
|
53
|
+
\substitute ÿ y
|
54
|
+
|
55
|
+
\** Dis-ambiguate long vowels **\
|
56
|
+
\rxsubstitute "(ā|â|aa)" "á"
|
57
|
+
\rxsubstitute "(ē|ê|ee)" "é"
|
58
|
+
\rxsubstitute "(ī|î|ii)" "í"
|
59
|
+
\rxsubstitute "(ō|ô|oo)" "ó"
|
60
|
+
\rxsubstitute "(ū|û|uu)" "ú"
|
61
|
+
|
62
|
+
\** Preprocess numbers **\
|
63
|
+
\elvish_numbers "\\eval numbers_base" "\\eval reverse_numbers"
|
64
|
+
\end
|
65
|
+
|
66
|
+
\beg processor
|
67
|
+
|
68
|
+
\beg rules litteral
|
69
|
+
{A} === a
|
70
|
+
{AA} === á
|
71
|
+
{E} === e
|
72
|
+
{EE} === é
|
73
|
+
{I} === i
|
74
|
+
{II} === í
|
75
|
+
{O} === o
|
76
|
+
{OO} === ó
|
77
|
+
{U} === u
|
78
|
+
{UU} === ú
|
79
|
+
|
80
|
+
{AI} === {A}{I} \** attested **\
|
81
|
+
{AU} === {A}{U} \** attested **\
|
82
|
+
{OI} === {O}{I} \** Not quite sure (dushgoi) **\
|
83
|
+
|
84
|
+
{K} === (c,k)
|
85
|
+
|
86
|
+
\** VOWELS **\
|
87
|
+
{VOWELS} === {A} * {E} * {I} * {O} * {U}
|
88
|
+
{LVOWELS} === {AA} * {EE} * {II} * {OO} * {UU}
|
89
|
+
\** Reverse o and u **\
|
90
|
+
{TEHTA_XS} === A_TEHTA_XS * E_TEHTA_XS * I_TEHTA_XS * U_TEHTA_XS * O_TEHTA_XS
|
91
|
+
{TEHTA__S} === A_TEHTA_S * E_TEHTA_S * I_TEHTA_S * U_TEHTA_S * O_TEHTA_S
|
92
|
+
{TEHTA__L} === A_TEHTA_L * E_TEHTA_L * I_TEHTA_L * U_TEHTA_L * O_TEHTA_L
|
93
|
+
{TEHTA_XL} === A_TEHTA_XL * E_TEHTA_XL * I_TEHTA_XL * U_TEHTA_XL * O_TEHTA_XL
|
94
|
+
\** Double tehtas **\
|
95
|
+
{DTEHTA_XS} === A_TEHTA_DOUBLE_XS * E_TEHTA_DOUBLE_XS * Y_TEHTA_XS * U_TEHTA_DOUBLE_XS * O_TEHTA_DOUBLE_XS
|
96
|
+
{DTEHTA_S} === A_TEHTA_DOUBLE_S * E_TEHTA_DOUBLE_S * Y_TEHTA_S * U_TEHTA_DOUBLE_S * O_TEHTA_DOUBLE_S
|
97
|
+
{DTEHTA_L} === A_TEHTA_DOUBLE_L * E_TEHTA_DOUBLE_L * Y_TEHTA_L * U_TEHTA_DOUBLE_L * O_TEHTA_DOUBLE_L
|
98
|
+
{DTEHTA_XL} === A_TEHTA_DOUBLE_XL * E_TEHTA_DOUBLE_XL * Y_TEHTA_XL * U_TEHTA_DOUBLE_XL * O_TEHTA_DOUBLE_XL
|
99
|
+
|
100
|
+
{DIPHTHONGS} === {AI} * {AU} * {OI}
|
101
|
+
{DIPHTHENGS} === YANTA A_TEHTA_L * URE A_TEHTA_L * YANTA U_TEHTA_L
|
102
|
+
|
103
|
+
{V_D_KER} === [ {VOWELS} * {LVOWELS} * {DIPHTHONGS} ]
|
104
|
+
{V_D_IMG_XS} === [ {TEHTA_XS} * {DTEHTA_XS} * {DIPHTHENGS} ]
|
105
|
+
{V_D_IMG__S} === [ {TEHTA__S} * {DTEHTA_L} * {DIPHTHENGS} ]
|
106
|
+
{V_D_IMG__L} === [ {TEHTA__L} * {DTEHTA_S} * {DIPHTHENGS} ]
|
107
|
+
{V_D_IMG_XL} === [ {TEHTA_XL} * {DTEHTA_XL} * {DIPHTHENGS} ]
|
108
|
+
|
109
|
+
[{VOWELS}] --> TELCO [{TEHTA_XS}] \** Replace isolated short vowels **\
|
110
|
+
[{LVOWELS}] --> ARA [{TEHTA_XS}] \** Replace long vowels **\
|
111
|
+
[{DIPHTHONGS}] --> [{DIPHTHENGS}] \** Replace diphthongs **\
|
112
|
+
|
113
|
+
\** CONSONANT RULES (could be factorized with crossrules) **\
|
114
|
+
|
115
|
+
\** ======================== **\
|
116
|
+
|
117
|
+
l --> LAMBE
|
118
|
+
\** If we look closely on the ring inscription, **\
|
119
|
+
\** we can see the offset for the tehta starting point **\
|
120
|
+
\** That's why we use the XL tehtas **\
|
121
|
+
{V_D_KER} l --> LAMBE {V_D_IMG_XL}
|
122
|
+
\** when telco follows, ligature with telco **\
|
123
|
+
l {V_D_KER} _ --> LAMBE_LIG TELCO {V_D_IMG_XS}
|
124
|
+
|
125
|
+
\** ======================== **\
|
126
|
+
|
127
|
+
b --> UMBAR
|
128
|
+
{V_D_KER} b --> UMBAR {V_D_IMG_XL}
|
129
|
+
\** Attached l to b **\
|
130
|
+
l {V_D_KER} b --> LAMBE_LIG UMBAR {V_D_IMG_XL}
|
131
|
+
{V_D_KER} l {V_D_KER} b --> LAMBE_LIG {V_D_IMG_XL} UMBAR {V_D_IMG_XL}
|
132
|
+
|
133
|
+
d --> ANDO
|
134
|
+
{V_D_KER} d --> ANDO {V_D_IMG_XL}
|
135
|
+
\** Attached l to d **\
|
136
|
+
l {V_D_KER} d --> LAMBE_LIG ANDO {V_D_IMG_XL}
|
137
|
+
{V_D_KER} l {V_D_KER} d --> LAMBE_LIG {V_D_IMG_XL} ANDO {V_D_IMG_XL}
|
138
|
+
|
139
|
+
f --> FORMEN
|
140
|
+
{V_D_KER} f --> FORMEN_EXT {V_D_IMG__S} \** Beware. **\
|
141
|
+
\** Attached l to f **\
|
142
|
+
l {V_D_KER} f --> LAMBE_LIG FORMEN_EXT {V_D_IMG__S}
|
143
|
+
{V_D_KER} l {V_D_KER} f --> LAMBE_LIG {V_D_IMG_XL} FORMEN_EXT {V_D_IMG__S}
|
144
|
+
|
145
|
+
g --> UNGWE
|
146
|
+
{V_D_KER} g --> UNGWE {V_D_IMG_XL}
|
147
|
+
\** Attached l to g **\
|
148
|
+
l {V_D_KER} g --> LAMBE_LIG UNGWE {V_D_IMG_XL}
|
149
|
+
{V_D_KER} l {V_D_KER} g --> LAMBE_LIG {V_D_IMG_XL} UNGWE {V_D_IMG_XL}
|
150
|
+
|
151
|
+
gh --> UNGWE_EXT
|
152
|
+
{V_D_KER} gh --> UNGWE_EXT {V_D_IMG_XL}
|
153
|
+
\** Attached l to g **\
|
154
|
+
l {V_D_KER} gh --> LAMBE_LIG UNGWE_EXT {V_D_IMG_XL}
|
155
|
+
{V_D_KER} l {V_D_KER} gh --> LAMBE_LIG {V_D_IMG_XL} UNGWE_EXT {V_D_IMG_XL}
|
156
|
+
|
157
|
+
h --> HYARMEN
|
158
|
+
{V_D_KER} h --> HYARMEN {V_D_IMG_XS}
|
159
|
+
\** Attached l to g **\
|
160
|
+
l {V_D_KER} h --> LAMBE_LIG HYARMEN {V_D_IMG_XS}
|
161
|
+
{V_D_KER} l {V_D_KER} h --> LAMBE_LIG {V_D_IMG_XL} HYARMEN {V_D_IMG_XS}
|
162
|
+
|
163
|
+
{K} --> QUESSE
|
164
|
+
{V_D_KER} {K} --> QUESSE {V_D_IMG__L}
|
165
|
+
\** Attached l to g **\
|
166
|
+
l {V_D_KER} {K} --> LAMBE_LIG QUESSE {V_D_IMG__L}
|
167
|
+
{V_D_KER} l {V_D_KER} {K} --> LAMBE_LIG {V_D_IMG_XL} QUESSE {V_D_IMG__L}
|
168
|
+
|
169
|
+
{K}h --> HWESTA
|
170
|
+
{V_D_KER} {K}h --> HWESTA_EXT {V_D_IMG__L}
|
171
|
+
\** Attached l to g **\
|
172
|
+
l {V_D_KER} {K}h --> LAMBE_LIG HWESTA_EXT {V_D_IMG__L}
|
173
|
+
{V_D_KER} l {V_D_KER} {K}h --> LAMBE_LIG {V_D_IMG_XL} HWESTA_EXT {V_D_IMG__L}
|
174
|
+
|
175
|
+
|
176
|
+
m --> MALTA
|
177
|
+
{V_D_KER} m --> MALTA {V_D_IMG_XL}
|
178
|
+
|
179
|
+
mb --> UMBAR TILD_SUP_L
|
180
|
+
{V_D_KER} mb --> UMBAR TILD_SUP_L {V_D_IMG_XL}
|
181
|
+
|
182
|
+
mp --> PARMA TILD_SUP_S
|
183
|
+
{V_D_KER} mp --> PARMA TILD_SUP_S {V_D_IMG__L}
|
184
|
+
|
185
|
+
n --> NUMEN
|
186
|
+
{V_D_KER} n --> NUMEN {V_D_IMG_XL}
|
187
|
+
|
188
|
+
n{K} --> QUESSE TILD_SUP_S
|
189
|
+
{V_D_KER} n{K} --> QUESSE TILD_SUP_S {V_D_IMG__S}
|
190
|
+
|
191
|
+
p --> PARMA
|
192
|
+
|
193
|
+
r --> ROMEN
|
194
|
+
{V_D_KER} r --> ORE {V_D_IMG__L}
|
195
|
+
\** Attached l to r **\
|
196
|
+
l {V_D_KER} r --> LAMBE_LIG ORE {V_D_IMG__L}
|
197
|
+
{V_D_KER} l {V_D_KER} r --> LAMBE_LIG {V_D_IMG_XL} ORE {V_D_IMG__L}
|
198
|
+
|
199
|
+
|
200
|
+
r --> ROMEN
|
201
|
+
r_ --> ORE
|
202
|
+
{V_D_KER} r --> ORE {V_D_IMG__S}
|
203
|
+
{V_D_KER} rb --> ORE {V_D_IMG__L} UMBAR
|
204
|
+
{V_D_KER} rz --> ORE {V_D_IMG__L} ESSE
|
205
|
+
|
206
|
+
s --> SILME
|
207
|
+
|
208
|
+
|
209
|
+
\** Beware sh is not the same if not preceeded by vowel **\
|
210
|
+
sh --> AHA
|
211
|
+
{A}sh --> AHA_EXT A_TEHTA_L
|
212
|
+
{E}sh --> AHA_EXT E_TEHTA_L
|
213
|
+
{I}sh --> AHA_EXT I_TEHTA_L
|
214
|
+
{O}sh --> AHA_EXT U_TEHTA_S
|
215
|
+
{U}sh --> AHA_EXT O_TEHTA_XS \** The best one still not satisfying... **\
|
216
|
+
{AA}sh --> ESSE_NUQUERNA A_TEHTA_DOUBLE_L
|
217
|
+
{EE}sh --> ESSE_NUQUERNA E_TEHTA_DOUBLE_L
|
218
|
+
{II}sh --> ESSE_NUQUERNA Y_TEHTA_L
|
219
|
+
{OO}sh --> ESSE_NUQUERNA U_TEHTA_DOUBLE_S
|
220
|
+
{UU}sh --> ESSE_NUQUERNA O_TEHTA_DOUBLE_XS
|
221
|
+
|
222
|
+
t --> TINCO
|
223
|
+
{V_D_KER} t --> TINCO {V_D_IMG__L}
|
224
|
+
|
225
|
+
th --> SULE
|
226
|
+
y --> ANNA
|
227
|
+
|
228
|
+
z --> ESSE
|
229
|
+
|
230
|
+
\** Need to break thisone too **\
|
231
|
+
{A}z --> ESSE_NUQUERNA A_TEHTA_L
|
232
|
+
{E}z --> ESSE_NUQUERNA E_TEHTA_L
|
233
|
+
{I}z --> ESSE_NUQUERNA I_TEHTA_L
|
234
|
+
{O}z --> ESSE_NUQUERNA U_TEHTA_S
|
235
|
+
{U}z --> ESSE_NUQUERNA O_TEHTA_S
|
236
|
+
{AA}z --> ESSE_NUQUERNA A_TEHTA_DOUBLE_L
|
237
|
+
{EE}z --> ESSE_NUQUERNA E_TEHTA_DOUBLE_L
|
238
|
+
{II}z --> ESSE_NUQUERNA Y_TEHTA_L
|
239
|
+
{OO}z --> ESSE_NUQUERNA U_TEHTA_DOUBLE_S
|
240
|
+
{UU}z --> ESSE_NUQUERNA O_TEHTA_DOUBLE_S
|
241
|
+
\end
|
242
|
+
|
243
|
+
\beg rules punctuation
|
244
|
+
. --> PUNCT_DDOT
|
245
|
+
.. --> PUNCT_DOT PUNCT_DDOT PUNCT_DOT
|
246
|
+
… --> PUNCT_TILD
|
247
|
+
... --> PUNCT_TILD
|
248
|
+
.... --> PUNCT_TILD
|
249
|
+
..... --> PUNCT_TILD
|
250
|
+
...... --> PUNCT_TILD
|
251
|
+
....... --> PUNCT_TILD
|
252
|
+
|
253
|
+
, --> PUNCT_DOT
|
254
|
+
: --> PUNCT_DOT
|
255
|
+
; --> PUNCT_DOT
|
256
|
+
! --> PUNCT_EXCLAM
|
257
|
+
? --> PUNCT_INTERR
|
258
|
+
· --> PUNCT_DOT
|
259
|
+
|
260
|
+
\** Apostrophe **\
|
261
|
+
|
262
|
+
' --> {NULL}
|
263
|
+
’ --> {NULL}
|
264
|
+
|
265
|
+
\** Quotes **\
|
266
|
+
|
267
|
+
“ --> DQUOT_OPEN
|
268
|
+
” --> DQUOT_CLOSE
|
269
|
+
« --> DQUOT_OPEN
|
270
|
+
» --> DQUOT_CLOSE
|
271
|
+
|
272
|
+
- --> {NULL}
|
273
|
+
– --> PUNCT_TILD
|
274
|
+
— --> PUNCT_TILD
|
275
|
+
|
276
|
+
[ --> PUNCT_PAREN_L
|
277
|
+
] --> PUNCT_PAREN_R
|
278
|
+
( --> PUNCT_PAREN_L
|
279
|
+
) --> PUNCT_PAREN_R
|
280
|
+
{ --> PUNCT_PAREN_L
|
281
|
+
} --> PUNCT_PAREN_R
|
282
|
+
< --> PUNCT_PAREN_L
|
283
|
+
> --> PUNCT_PAREN_R
|
284
|
+
|
285
|
+
\** Not universal between fonts ... **\
|
286
|
+
$ --> BOOKMARK_SIGN
|
287
|
+
≤ --> RING_MARK_L \** Ring inscription left beautiful stuff **\
|
288
|
+
≥ --> RING_MARK_R \** Ring inscription right beautiful stuff **\
|
289
|
+
|
290
|
+
\end
|
291
|
+
|
292
|
+
\beg rules numbers
|
293
|
+
0 --> NUM_0
|
294
|
+
1 --> NUM_1
|
295
|
+
2 --> NUM_2
|
296
|
+
3 --> NUM_3
|
297
|
+
4 --> NUM_4
|
298
|
+
5 --> NUM_5
|
299
|
+
6 --> NUM_6
|
300
|
+
7 --> NUM_7
|
301
|
+
8 --> NUM_8
|
302
|
+
9 --> NUM_9
|
303
|
+
A --> NUM_10
|
304
|
+
B --> NUM_11
|
305
|
+
\end
|
306
|
+
|
307
|
+
\end
|
308
|
+
|
309
|
+
|
310
|
+
|
311
|
+
|
312
|
+
|
313
|
+
|
314
|
+
|
315
|
+
|
316
|
+
|
317
|
+
|
318
|
+
|