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.
- checksums.yaml +4 -4
- data/glaemresources/charsets/tengwar_ds_annatar.cst +509 -0
- data/glaemresources/charsets/tengwar_ds_eldamar.cst +22 -16
- data/glaemresources/charsets/tengwar_ds_elfica.cst +461 -0
- data/glaemresources/charsets/tengwar_ds_parmaite.cst +500 -0
- data/glaemresources/charsets/{tengwar_ds.cst → tengwar_ds_sindarin.cst} +59 -62
- data/glaemresources/charsets/tengwar_freemono.cst +176 -0
- data/glaemresources/charsets/unicode_runes.cst +1 -0
- data/glaemresources/modes/adunaic.glaem +50 -28
- data/glaemresources/modes/blackspeech.glaem +156 -82
- data/glaemresources/modes/english-ipa.glaem +49 -0
- data/glaemresources/modes/french-ipa.glaem +49 -0
- data/glaemresources/modes/{oldnorse-medieval.glaem → futhark-runicus.glaem} +4 -4
- data/glaemresources/modes/futhark-younger.glaem +129 -0
- data/glaemresources/modes/{futhorc.glaem.disabled → futhorc.glaem} +76 -38
- data/glaemresources/modes/gothic.glaem +1 -1
- data/glaemresources/modes/khuzdul.glaem +1 -1
- data/glaemresources/modes/mercian.glaem +31 -16
- data/glaemresources/modes/quenya-sarati.glaem +5 -3
- data/glaemresources/modes/quenya.glaem +168 -77
- data/glaemresources/modes/rlyehian.glaem +41 -43
- data/glaemresources/modes/sindarin-beleriand.glaem +39 -17
- data/glaemresources/modes/sindarin-daeron.glaem +1 -1
- data/glaemresources/modes/{sindarin-classical.glaem → sindarin.glaem} +73 -37
- data/glaemresources/modes/telerin.glaem +161 -64
- data/glaemresources/modes/valarin-sarati.glaem +1 -1
- data/glaemresources/modes/westron.glaem +83 -44
- data/glaemresources/modes/westsaxon.glaem +30 -13
- data/lib/api/charset.rb +29 -11
- data/lib/api/charset_parser.rb +15 -3
- data/lib/api/mode.rb +15 -3
- data/lib/api/mode_parser.rb +7 -2
- data/lib/api/option.rb +15 -1
- data/lib/api/post_processor/resolve_virtuals.rb +35 -24
- data/lib/api/transcription_pre_post_processor.rb +2 -1
- metadata +15 -11
- data/glaemresources/modes/blackspeech-annatar.glaem +0 -320
- data/glaemresources/modes/futhark-long-branch.glaem.disabled +0 -101
- data/glaemresources/modes/futhark-short-twig.glaem.disabled +0 -101
data/lib/api/mode.rb
CHANGED
@@ -36,6 +36,8 @@ module Glaemscribe
|
|
36
36
|
|
37
37
|
attr_accessor :supported_charsets
|
38
38
|
attr_accessor :default_charset
|
39
|
+
|
40
|
+
attr_reader :latest_option_values
|
39
41
|
|
40
42
|
def initialize(name)
|
41
43
|
@name = name
|
@@ -43,6 +45,7 @@ module Glaemscribe
|
|
43
45
|
@warnings = []
|
44
46
|
@supported_charsets = {}
|
45
47
|
@options = {}
|
48
|
+
@last_raw_options = nil
|
46
49
|
|
47
50
|
@pre_processor = TranscriptionPreProcessor.new(self)
|
48
51
|
@processor = TranscriptionProcessor.new(self)
|
@@ -59,6 +62,13 @@ module Glaemscribe
|
|
59
62
|
|
60
63
|
def finalize(options={})
|
61
64
|
|
65
|
+
if options == @last_raw_options
|
66
|
+
# Small optimization : don't refinalize if options are the same as before
|
67
|
+
return
|
68
|
+
end
|
69
|
+
|
70
|
+
@last_raw_options = options
|
71
|
+
|
62
72
|
# Hash: option_name => value_name
|
63
73
|
trans_options = {}
|
64
74
|
|
@@ -95,10 +105,12 @@ module Glaemscribe
|
|
95
105
|
}
|
96
106
|
end
|
97
107
|
}
|
108
|
+
|
109
|
+
@latest_option_values = trans_options_converted
|
98
110
|
|
99
|
-
@pre_processor.finalize(
|
100
|
-
@post_processor.finalize(
|
101
|
-
@processor.finalize(
|
111
|
+
@pre_processor.finalize(@latest_option_values)
|
112
|
+
@post_processor.finalize(@latest_option_values)
|
113
|
+
@processor.finalize(@latest_option_values)
|
102
114
|
|
103
115
|
self
|
104
116
|
end
|
data/lib/api/mode_parser.rb
CHANGED
@@ -214,11 +214,16 @@ module Glaemscribe
|
|
214
214
|
@mode.version = doc.root_node.gpath('version').first.args.first
|
215
215
|
|
216
216
|
doc.root_node.gpath("options.option").each{ |option_element|
|
217
|
-
values
|
217
|
+
values = {}
|
218
|
+
visibility = nil
|
219
|
+
|
218
220
|
option_element.gpath("value").each{ |value_element|
|
219
221
|
value_name = value_element.args.first
|
220
222
|
values[value_name] = value_element.args.last.to_i
|
221
223
|
}
|
224
|
+
option_element.gpath("visible_when").each{ |visible_element|
|
225
|
+
visibility = visible_element.args.first
|
226
|
+
}
|
222
227
|
|
223
228
|
option_name_at = option_element.args[0]
|
224
229
|
option_default_val_at = option_element.args[1]
|
@@ -228,7 +233,7 @@ module Glaemscribe
|
|
228
233
|
@mode.errors << Glaeml::Error.new(option_element.line, "Missing option default value.")
|
229
234
|
end
|
230
235
|
|
231
|
-
option = Option.new(option_name_at, option_default_val_at, values)
|
236
|
+
option = Option.new(@mode, option_name_at, option_default_val_at, values, visibility)
|
232
237
|
@mode.options[option.name] = option
|
233
238
|
}
|
234
239
|
|
data/lib/api/option.rb
CHANGED
@@ -24,21 +24,25 @@ module Glaemscribe
|
|
24
24
|
module API
|
25
25
|
|
26
26
|
class Option
|
27
|
+
attr_reader :mode
|
27
28
|
attr_reader :name
|
28
29
|
attr_reader :type
|
29
30
|
attr_reader :default_value_name
|
30
31
|
attr_reader :values
|
32
|
+
|
31
33
|
|
32
34
|
class Type
|
33
35
|
ENUM = "ENUM"
|
34
36
|
BOOL = "BOOL"
|
35
37
|
end
|
36
38
|
|
37
|
-
def initialize(name, default_value_name, values)
|
39
|
+
def initialize(mode, name, default_value_name, values, visibility = nil)
|
40
|
+
@mode = mode
|
38
41
|
@name = name
|
39
42
|
@default_value_name = default_value_name
|
40
43
|
@type = (values.keys.count == 0)?(Type::BOOL):(Type::ENUM)
|
41
44
|
@values = values
|
45
|
+
@visibility = visibility
|
42
46
|
end
|
43
47
|
|
44
48
|
def default_value
|
@@ -59,6 +63,16 @@ module Glaemscribe
|
|
59
63
|
end
|
60
64
|
end
|
61
65
|
|
66
|
+
def visible?
|
67
|
+
if_eval = Eval::Parser.new()
|
68
|
+
|
69
|
+
begin
|
70
|
+
(if_eval.parse(@visibility || "true", @mode.latest_option_values || {}) == true)
|
71
|
+
rescue Eval::IfEvalError => e
|
72
|
+
nil
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
62
76
|
end
|
63
77
|
end
|
64
78
|
end
|
@@ -37,35 +37,46 @@ module Glaemscribe
|
|
37
37
|
}
|
38
38
|
end
|
39
39
|
|
40
|
+
def apply_loop(charset, tokens, new_tokens, reversed, token, idx)
|
41
|
+
if token == '*SPACE'
|
42
|
+
reset_trigger_states(charset)
|
43
|
+
return
|
44
|
+
end
|
45
|
+
|
46
|
+
# Check if token is a virtual char
|
47
|
+
c = charset[token]
|
48
|
+
return if c.nil? # May happen for empty tokens
|
49
|
+
if c.virtual? && (reversed == c.reversed)
|
50
|
+
# Try to replace
|
51
|
+
last_trigger = @last_triggers[c]
|
52
|
+
if last_trigger != nil
|
53
|
+
new_tokens[idx] = last_trigger.names.first # Take the first name of the non-virtual replacement.
|
54
|
+
end
|
55
|
+
else
|
56
|
+
# Update states of virtual classes
|
57
|
+
charset.virtual_chars.each{|vc|
|
58
|
+
rc = vc[token]
|
59
|
+
@last_triggers[vc] = rc if rc != nil
|
60
|
+
}
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
40
64
|
def apply(tokens,charset)
|
41
65
|
|
42
|
-
|
66
|
+
# Clone the tokens so that we can perform ligatures AND diacritics without interferences
|
67
|
+
new_tokens = tokens.clone
|
43
68
|
|
69
|
+
# Handle l to r virtuals (diacritics ?)
|
70
|
+
reset_trigger_states(charset)
|
44
71
|
tokens.each_with_index{ |token,idx|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
# Check if token is a virtual char
|
52
|
-
c = charset[token]
|
53
|
-
next if c.nil? # May happen for empty tokens
|
54
|
-
if c.virtual?
|
55
|
-
# Try to replace
|
56
|
-
last_trigger = @last_triggers[c]
|
57
|
-
if last_trigger != nil
|
58
|
-
tokens[idx] = last_trigger.names.first # Take the first name of the non-virtual replacement.
|
59
|
-
end
|
60
|
-
else
|
61
|
-
# Update states of virtual classes
|
62
|
-
charset.virtual_chars.each{|vc|
|
63
|
-
rc = vc[token]
|
64
|
-
@last_triggers[vc] = rc if rc != nil
|
65
|
-
}
|
66
|
-
end
|
72
|
+
apply_loop(charset,tokens,new_tokens,false,token,idx)
|
73
|
+
}
|
74
|
+
# Handle r to l virtuals (ligatures ?)
|
75
|
+
reset_trigger_states(charset)
|
76
|
+
tokens.reverse_each.with_index{ |token,idx|
|
77
|
+
apply_loop(charset,tokens,new_tokens,true,token,tokens.count - 1 - idx)
|
67
78
|
}
|
68
|
-
|
79
|
+
new_tokens
|
69
80
|
end
|
70
81
|
end
|
71
82
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glaemscribe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin 'Talagan' Babut
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-03-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: commander
|
@@ -38,26 +38,30 @@ files:
|
|
38
38
|
- bin/glaemscribe
|
39
39
|
- glaemresources/charsets/cirth_ds.cst
|
40
40
|
- glaemresources/charsets/sarati_eldamar.cst
|
41
|
-
- glaemresources/charsets/
|
41
|
+
- glaemresources/charsets/tengwar_ds_annatar.cst
|
42
42
|
- glaemresources/charsets/tengwar_ds_eldamar.cst
|
43
|
+
- glaemresources/charsets/tengwar_ds_elfica.cst
|
44
|
+
- glaemresources/charsets/tengwar_ds_parmaite.cst
|
45
|
+
- glaemresources/charsets/tengwar_ds_sindarin.cst
|
46
|
+
- glaemresources/charsets/tengwar_freemono.cst
|
43
47
|
- glaemresources/charsets/unicode_gothic.cst
|
44
48
|
- glaemresources/charsets/unicode_runes.cst
|
45
49
|
- glaemresources/modes/adunaic.glaem
|
46
|
-
- glaemresources/modes/blackspeech-annatar.glaem
|
47
50
|
- glaemresources/modes/blackspeech.glaem
|
48
|
-
- glaemresources/modes/
|
49
|
-
- glaemresources/modes/
|
50
|
-
- glaemresources/modes/
|
51
|
+
- glaemresources/modes/english-ipa.glaem
|
52
|
+
- glaemresources/modes/french-ipa.glaem
|
53
|
+
- glaemresources/modes/futhark-runicus.glaem
|
54
|
+
- glaemresources/modes/futhark-younger.glaem
|
55
|
+
- glaemresources/modes/futhorc.glaem
|
51
56
|
- glaemresources/modes/gothic.glaem
|
52
57
|
- glaemresources/modes/khuzdul.glaem
|
53
58
|
- glaemresources/modes/mercian.glaem
|
54
|
-
- glaemresources/modes/oldnorse-medieval.glaem
|
55
59
|
- glaemresources/modes/quenya-sarati.glaem
|
56
60
|
- glaemresources/modes/quenya.glaem
|
57
61
|
- glaemresources/modes/rlyehian.glaem
|
58
62
|
- glaemresources/modes/sindarin-beleriand.glaem
|
59
|
-
- glaemresources/modes/sindarin-classical.glaem
|
60
63
|
- glaemresources/modes/sindarin-daeron.glaem
|
64
|
+
- glaemresources/modes/sindarin.glaem
|
61
65
|
- glaemresources/modes/telerin.glaem
|
62
66
|
- glaemresources/modes/valarin-sarati.glaem
|
63
67
|
- glaemresources/modes/westron.glaem
|
@@ -91,7 +95,7 @@ files:
|
|
91
95
|
- lib/api/transcription_processor.rb
|
92
96
|
- lib/api/transcription_tree_node.rb
|
93
97
|
- lib/glaemscribe.rb
|
94
|
-
homepage:
|
98
|
+
homepage: https://jrrvf.com/~glaemscrafu/english/glaemscribe.html
|
95
99
|
licenses:
|
96
100
|
- AGPL-3.0
|
97
101
|
metadata: {}
|
@@ -111,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
115
|
version: '0'
|
112
116
|
requirements: []
|
113
117
|
rubyforge_project:
|
114
|
-
rubygems_version: 2.
|
118
|
+
rubygems_version: 2.6.11
|
115
119
|
signing_key:
|
116
120
|
specification_version: 4
|
117
121
|
summary: Glǽmscribe
|
@@ -1,320 +0,0 @@
|
|
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
|
-
\** TODO : NEEDS PORTING TO VIRTUAL CHARS, BUT NEEDS A NEW CHARSET FOR ANNATAR FOR THAT **\
|
34
|
-
|
35
|
-
\charset tengwar_ds true
|
36
|
-
|
37
|
-
\beg options
|
38
|
-
\option reverse_numbers true
|
39
|
-
\beg option numbers_base BASE_12
|
40
|
-
\value BASE_10 10
|
41
|
-
\value BASE_12 12
|
42
|
-
\end
|
43
|
-
\end
|
44
|
-
|
45
|
-
\beg preprocessor
|
46
|
-
\** Work exclusively downcase **\
|
47
|
-
\downcase
|
48
|
-
|
49
|
-
\** Simplify trema vowels **\
|
50
|
-
\substitute ä a
|
51
|
-
\substitute ë e
|
52
|
-
\substitute ï i
|
53
|
-
\substitute ö o
|
54
|
-
\substitute ü u
|
55
|
-
\substitute ÿ y
|
56
|
-
|
57
|
-
\** Dis-ambiguate long vowels **\
|
58
|
-
\rxsubstitute "(ā|â|aa)" "á"
|
59
|
-
\rxsubstitute "(ē|ê|ee)" "é"
|
60
|
-
\rxsubstitute "(ī|î|ii)" "í"
|
61
|
-
\rxsubstitute "(ō|ô|oo)" "ó"
|
62
|
-
\rxsubstitute "(ū|û|uu)" "ú"
|
63
|
-
|
64
|
-
\** Preprocess numbers **\
|
65
|
-
\elvish_numbers "\\eval numbers_base" "\\eval reverse_numbers"
|
66
|
-
\end
|
67
|
-
|
68
|
-
\beg processor
|
69
|
-
|
70
|
-
\beg rules litteral
|
71
|
-
{A} === a
|
72
|
-
{AA} === á
|
73
|
-
{E} === e
|
74
|
-
{EE} === é
|
75
|
-
{I} === i
|
76
|
-
{II} === í
|
77
|
-
{O} === o
|
78
|
-
{OO} === ó
|
79
|
-
{U} === u
|
80
|
-
{UU} === ú
|
81
|
-
|
82
|
-
{AI} === {A}{I} \** attested **\
|
83
|
-
{AU} === {A}{U} \** attested **\
|
84
|
-
{OI} === {O}{I} \** Not quite sure (dushgoi) **\
|
85
|
-
|
86
|
-
{K} === (c,k)
|
87
|
-
|
88
|
-
\** VOWELS **\
|
89
|
-
{VOWELS} === {A} * {E} * {I} * {O} * {U}
|
90
|
-
{LVOWELS} === {AA} * {EE} * {II} * {OO} * {UU}
|
91
|
-
\** Reverse o and u **\
|
92
|
-
{TEHTA_XS} === A_TEHTA_XS * E_TEHTA_XS * I_TEHTA_XS * U_TEHTA_XS * O_TEHTA_XS
|
93
|
-
{TEHTA__S} === A_TEHTA_S * E_TEHTA_S * I_TEHTA_S * U_TEHTA_S * O_TEHTA_S
|
94
|
-
{TEHTA__L} === A_TEHTA_L * E_TEHTA_L * I_TEHTA_L * U_TEHTA_L * O_TEHTA_L
|
95
|
-
{TEHTA_XL} === A_TEHTA_XL * E_TEHTA_XL * I_TEHTA_XL * U_TEHTA_XL * O_TEHTA_XL
|
96
|
-
\** Double tehtas **\
|
97
|
-
{DTEHTA_XS} === A_TEHTA_DOUBLE_XS * E_TEHTA_DOUBLE_XS * Y_TEHTA_XS * U_TEHTA_DOUBLE_XS * O_TEHTA_DOUBLE_XS
|
98
|
-
{DTEHTA_S} === A_TEHTA_DOUBLE_S * E_TEHTA_DOUBLE_S * Y_TEHTA_S * U_TEHTA_DOUBLE_S * O_TEHTA_DOUBLE_S
|
99
|
-
{DTEHTA_L} === A_TEHTA_DOUBLE_L * E_TEHTA_DOUBLE_L * Y_TEHTA_L * U_TEHTA_DOUBLE_L * O_TEHTA_DOUBLE_L
|
100
|
-
{DTEHTA_XL} === A_TEHTA_DOUBLE_XL * E_TEHTA_DOUBLE_XL * Y_TEHTA_XL * U_TEHTA_DOUBLE_XL * O_TEHTA_DOUBLE_XL
|
101
|
-
|
102
|
-
{DIPHTHONGS} === {AI} * {AU} * {OI}
|
103
|
-
{DIPHTHENGS} === YANTA A_TEHTA_L * URE A_TEHTA_L * YANTA U_TEHTA_L
|
104
|
-
|
105
|
-
{V_D_KER} === [ {VOWELS} * {LVOWELS} * {DIPHTHONGS} ]
|
106
|
-
{V_D_IMG_XS} === [ {TEHTA_XS} * {DTEHTA_XS} * {DIPHTHENGS} ]
|
107
|
-
{V_D_IMG__S} === [ {TEHTA__S} * {DTEHTA_L} * {DIPHTHENGS} ]
|
108
|
-
{V_D_IMG__L} === [ {TEHTA__L} * {DTEHTA_S} * {DIPHTHENGS} ]
|
109
|
-
{V_D_IMG_XL} === [ {TEHTA_XL} * {DTEHTA_XL} * {DIPHTHENGS} ]
|
110
|
-
|
111
|
-
[{VOWELS}] --> TELCO [{TEHTA_XS}] \** Replace isolated short vowels **\
|
112
|
-
[{LVOWELS}] --> ARA [{TEHTA_XS}] \** Replace long vowels **\
|
113
|
-
[{DIPHTHONGS}] --> [{DIPHTHENGS}] \** Replace diphthongs **\
|
114
|
-
|
115
|
-
\** CONSONANT RULES (could be factorized with crossrules) **\
|
116
|
-
|
117
|
-
\** ======================== **\
|
118
|
-
|
119
|
-
l --> LAMBE
|
120
|
-
\** If we look closely on the ring inscription, **\
|
121
|
-
\** we can see the offset for the tehta starting point **\
|
122
|
-
\** That's why we use the XL tehtas **\
|
123
|
-
{V_D_KER} l --> LAMBE {V_D_IMG_XL}
|
124
|
-
\** when telco follows, ligature with telco **\
|
125
|
-
l {V_D_KER} _ --> LAMBE_LIG TELCO {V_D_IMG_XS}
|
126
|
-
|
127
|
-
\** ======================== **\
|
128
|
-
|
129
|
-
b --> UMBAR
|
130
|
-
{V_D_KER} b --> UMBAR {V_D_IMG_XL}
|
131
|
-
\** Attached l to b **\
|
132
|
-
l {V_D_KER} b --> LAMBE_LIG UMBAR {V_D_IMG_XL}
|
133
|
-
{V_D_KER} l {V_D_KER} b --> LAMBE_LIG {V_D_IMG_XL} UMBAR {V_D_IMG_XL}
|
134
|
-
|
135
|
-
d --> ANDO
|
136
|
-
{V_D_KER} d --> ANDO {V_D_IMG_XL}
|
137
|
-
\** Attached l to d **\
|
138
|
-
l {V_D_KER} d --> LAMBE_LIG ANDO {V_D_IMG_XL}
|
139
|
-
{V_D_KER} l {V_D_KER} d --> LAMBE_LIG {V_D_IMG_XL} ANDO {V_D_IMG_XL}
|
140
|
-
|
141
|
-
f --> FORMEN
|
142
|
-
{V_D_KER} f --> FORMEN_EXT {V_D_IMG__S} \** Beware. **\
|
143
|
-
\** Attached l to f **\
|
144
|
-
l {V_D_KER} f --> LAMBE_LIG FORMEN_EXT {V_D_IMG__S}
|
145
|
-
{V_D_KER} l {V_D_KER} f --> LAMBE_LIG {V_D_IMG_XL} FORMEN_EXT {V_D_IMG__S}
|
146
|
-
|
147
|
-
g --> UNGWE
|
148
|
-
{V_D_KER} g --> UNGWE {V_D_IMG_XL}
|
149
|
-
\** Attached l to g **\
|
150
|
-
l {V_D_KER} g --> LAMBE_LIG UNGWE {V_D_IMG_XL}
|
151
|
-
{V_D_KER} l {V_D_KER} g --> LAMBE_LIG {V_D_IMG_XL} UNGWE {V_D_IMG_XL}
|
152
|
-
|
153
|
-
gh --> UNGWE_EXT
|
154
|
-
{V_D_KER} gh --> UNGWE_EXT {V_D_IMG_XL}
|
155
|
-
\** Attached l to g **\
|
156
|
-
l {V_D_KER} gh --> LAMBE_LIG UNGWE_EXT {V_D_IMG_XL}
|
157
|
-
{V_D_KER} l {V_D_KER} gh --> LAMBE_LIG {V_D_IMG_XL} UNGWE_EXT {V_D_IMG_XL}
|
158
|
-
|
159
|
-
h --> HYARMEN
|
160
|
-
{V_D_KER} h --> HYARMEN {V_D_IMG_XS}
|
161
|
-
\** Attached l to g **\
|
162
|
-
l {V_D_KER} h --> LAMBE_LIG HYARMEN {V_D_IMG_XS}
|
163
|
-
{V_D_KER} l {V_D_KER} h --> LAMBE_LIG {V_D_IMG_XL} HYARMEN {V_D_IMG_XS}
|
164
|
-
|
165
|
-
{K} --> QUESSE
|
166
|
-
{V_D_KER} {K} --> QUESSE {V_D_IMG__L}
|
167
|
-
\** Attached l to g **\
|
168
|
-
l {V_D_KER} {K} --> LAMBE_LIG QUESSE {V_D_IMG__L}
|
169
|
-
{V_D_KER} l {V_D_KER} {K} --> LAMBE_LIG {V_D_IMG_XL} QUESSE {V_D_IMG__L}
|
170
|
-
|
171
|
-
{K}h --> HWESTA
|
172
|
-
{V_D_KER} {K}h --> HWESTA_EXT {V_D_IMG__L}
|
173
|
-
\** Attached l to g **\
|
174
|
-
l {V_D_KER} {K}h --> LAMBE_LIG HWESTA_EXT {V_D_IMG__L}
|
175
|
-
{V_D_KER} l {V_D_KER} {K}h --> LAMBE_LIG {V_D_IMG_XL} HWESTA_EXT {V_D_IMG__L}
|
176
|
-
|
177
|
-
|
178
|
-
m --> MALTA
|
179
|
-
{V_D_KER} m --> MALTA {V_D_IMG_XL}
|
180
|
-
|
181
|
-
mb --> UMBAR TILD_SUP_L
|
182
|
-
{V_D_KER} mb --> UMBAR TILD_SUP_L {V_D_IMG_XL}
|
183
|
-
|
184
|
-
mp --> PARMA TILD_SUP_S
|
185
|
-
{V_D_KER} mp --> PARMA TILD_SUP_S {V_D_IMG__L}
|
186
|
-
|
187
|
-
n --> NUMEN
|
188
|
-
{V_D_KER} n --> NUMEN {V_D_IMG_XL}
|
189
|
-
|
190
|
-
n{K} --> QUESSE TILD_SUP_S
|
191
|
-
{V_D_KER} n{K} --> QUESSE TILD_SUP_S {V_D_IMG__S}
|
192
|
-
|
193
|
-
p --> PARMA
|
194
|
-
|
195
|
-
r --> ROMEN
|
196
|
-
{V_D_KER} r --> ORE {V_D_IMG__L}
|
197
|
-
\** Attached l to r **\
|
198
|
-
l {V_D_KER} r --> LAMBE_LIG ORE {V_D_IMG__L}
|
199
|
-
{V_D_KER} l {V_D_KER} r --> LAMBE_LIG {V_D_IMG_XL} ORE {V_D_IMG__L}
|
200
|
-
|
201
|
-
|
202
|
-
r --> ROMEN
|
203
|
-
r_ --> ORE
|
204
|
-
{V_D_KER} r --> ORE {V_D_IMG__S}
|
205
|
-
{V_D_KER} rb --> ORE {V_D_IMG__L} UMBAR
|
206
|
-
{V_D_KER} rz --> ORE {V_D_IMG__L} ESSE
|
207
|
-
|
208
|
-
s --> SILME
|
209
|
-
|
210
|
-
|
211
|
-
\** Beware sh is not the same if not preceeded by vowel **\
|
212
|
-
sh --> AHA
|
213
|
-
{A}sh --> AHA_EXT A_TEHTA_L
|
214
|
-
{E}sh --> AHA_EXT E_TEHTA_L
|
215
|
-
{I}sh --> AHA_EXT I_TEHTA_L
|
216
|
-
{O}sh --> AHA_EXT U_TEHTA_S
|
217
|
-
{U}sh --> AHA_EXT O_TEHTA_XS \** The best one still not satisfying... **\
|
218
|
-
{AA}sh --> ESSE_NUQUERNA A_TEHTA_DOUBLE_L
|
219
|
-
{EE}sh --> ESSE_NUQUERNA E_TEHTA_DOUBLE_L
|
220
|
-
{II}sh --> ESSE_NUQUERNA Y_TEHTA_L
|
221
|
-
{OO}sh --> ESSE_NUQUERNA U_TEHTA_DOUBLE_S
|
222
|
-
{UU}sh --> ESSE_NUQUERNA O_TEHTA_DOUBLE_XS
|
223
|
-
|
224
|
-
t --> TINCO
|
225
|
-
{V_D_KER} t --> TINCO {V_D_IMG__L}
|
226
|
-
|
227
|
-
th --> SULE
|
228
|
-
y --> ANNA
|
229
|
-
|
230
|
-
z --> ESSE
|
231
|
-
|
232
|
-
\** Need to break thisone too **\
|
233
|
-
{A}z --> ESSE_NUQUERNA A_TEHTA_L
|
234
|
-
{E}z --> ESSE_NUQUERNA E_TEHTA_L
|
235
|
-
{I}z --> ESSE_NUQUERNA I_TEHTA_L
|
236
|
-
{O}z --> ESSE_NUQUERNA U_TEHTA_S
|
237
|
-
{U}z --> ESSE_NUQUERNA O_TEHTA_S
|
238
|
-
{AA}z --> ESSE_NUQUERNA A_TEHTA_DOUBLE_L
|
239
|
-
{EE}z --> ESSE_NUQUERNA E_TEHTA_DOUBLE_L
|
240
|
-
{II}z --> ESSE_NUQUERNA Y_TEHTA_L
|
241
|
-
{OO}z --> ESSE_NUQUERNA U_TEHTA_DOUBLE_S
|
242
|
-
{UU}z --> ESSE_NUQUERNA O_TEHTA_DOUBLE_S
|
243
|
-
\end
|
244
|
-
|
245
|
-
\beg rules punctuation
|
246
|
-
. --> PUNCT_DDOT
|
247
|
-
.. --> PUNCT_DOT PUNCT_DDOT PUNCT_DOT
|
248
|
-
… --> PUNCT_TILD
|
249
|
-
... --> PUNCT_TILD
|
250
|
-
.... --> PUNCT_TILD
|
251
|
-
..... --> PUNCT_TILD
|
252
|
-
...... --> PUNCT_TILD
|
253
|
-
....... --> PUNCT_TILD
|
254
|
-
|
255
|
-
, --> PUNCT_DOT
|
256
|
-
: --> PUNCT_DOT
|
257
|
-
; --> PUNCT_DOT
|
258
|
-
! --> PUNCT_EXCLAM
|
259
|
-
? --> PUNCT_INTERR
|
260
|
-
· --> PUNCT_DOT
|
261
|
-
|
262
|
-
\** Apostrophe **\
|
263
|
-
|
264
|
-
' --> {NULL}
|
265
|
-
’ --> {NULL}
|
266
|
-
|
267
|
-
\** Quotes **\
|
268
|
-
|
269
|
-
“ --> DQUOT_OPEN
|
270
|
-
” --> DQUOT_CLOSE
|
271
|
-
« --> DQUOT_OPEN
|
272
|
-
» --> DQUOT_CLOSE
|
273
|
-
|
274
|
-
- --> {NULL}
|
275
|
-
– --> PUNCT_TILD
|
276
|
-
— --> PUNCT_TILD
|
277
|
-
|
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
|
-
< --> PUNCT_PAREN_L
|
285
|
-
> --> PUNCT_PAREN_R
|
286
|
-
|
287
|
-
\** Not universal between fonts ... **\
|
288
|
-
$ --> BOOKMARK_SIGN
|
289
|
-
≤ --> RING_MARK_L \** Ring inscription left beautiful stuff **\
|
290
|
-
≥ --> RING_MARK_R \** Ring inscription right beautiful stuff **\
|
291
|
-
|
292
|
-
\end
|
293
|
-
|
294
|
-
\beg rules numbers
|
295
|
-
0 --> NUM_0
|
296
|
-
1 --> NUM_1
|
297
|
-
2 --> NUM_2
|
298
|
-
3 --> NUM_3
|
299
|
-
4 --> NUM_4
|
300
|
-
5 --> NUM_5
|
301
|
-
6 --> NUM_6
|
302
|
-
7 --> NUM_7
|
303
|
-
8 --> NUM_8
|
304
|
-
9 --> NUM_9
|
305
|
-
A --> NUM_10
|
306
|
-
B --> NUM_11
|
307
|
-
\end
|
308
|
-
|
309
|
-
\end
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|