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
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(trans_options_converted)
100
- @post_processor.finalize(trans_options_converted)
101
- @processor.finalize(trans_options_converted)
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
@@ -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
- reset_trigger_states(charset)
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
- if token == '*SPACE'
47
- reset_trigger_states(charset)
48
- next
49
- end
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
- tokens
79
+ new_tokens
69
80
  end
70
81
  end
71
82
 
@@ -142,7 +142,8 @@ module Glaemscribe
142
142
  when "*LF"
143
143
  ret += "\n"
144
144
  else
145
- ret += out_charset[token].str
145
+ c = out_charset[token]
146
+ ret += (c.nil?)?(UNKNOWN_CHAR_OUTPUT):c.str
146
147
  end
147
148
  }
148
149
  ret
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.19
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: 2016-09-06 00:00:00.000000000 Z
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/tengwar_ds.cst
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/futhark-long-branch.glaem.disabled
49
- - glaemresources/modes/futhark-short-twig.glaem.disabled
50
- - glaemresources/modes/futhorc.glaem.disabled
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: http://jrrvf.com/~glaemscrafu/english/glaemscribe.html
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.5.1
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
-