glaemscribe 1.1.14 → 1.2.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 (55) hide show
  1. checksums.yaml +5 -5
  2. data/bin/glaemscribe +19 -15
  3. data/glaemresources/charsets/cirth_ds.cst +205 -0
  4. data/glaemresources/charsets/sarati_eldamar.cst +256 -0
  5. data/glaemresources/charsets/tengwar_ds_annatar.cst +546 -0
  6. data/glaemresources/charsets/tengwar_ds_eldamar.cst +535 -0
  7. data/glaemresources/charsets/tengwar_ds_elfica.cst +551 -0
  8. data/glaemresources/charsets/tengwar_ds_parmaite.cst +534 -0
  9. data/glaemresources/charsets/tengwar_ds_sindarin.cst +531 -0
  10. data/glaemresources/charsets/tengwar_freemono.cst +217 -0
  11. data/glaemresources/charsets/tengwar_guni_annatar.cst +628 -0
  12. data/glaemresources/charsets/tengwar_guni_eldamar.cst +618 -0
  13. data/glaemresources/charsets/tengwar_guni_elfica.cst +620 -0
  14. data/glaemresources/charsets/tengwar_guni_parmaite.cst +621 -0
  15. data/glaemresources/charsets/tengwar_guni_sindarin.cst +617 -0
  16. data/glaemresources/charsets/tengwar_telcontar.cst +218 -0
  17. data/glaemresources/charsets/unicode_gothic.cst +64 -0
  18. data/glaemresources/charsets/unicode_runes.cst +121 -0
  19. data/glaemresources/modes/{adunaic.glaem → adunaic-tengwar-glaemscrafu.glaem} +14 -2
  20. data/glaemresources/modes/{blackspeech.glaem → blackspeech-tengwar-general_use.glaem} +12 -2
  21. data/glaemresources/modes/japanese-tengwar.glaem +771 -0
  22. data/glaemresources/modes/{khuzdul.glaem → khuzdul-cirth-moria.glaem} +4 -1
  23. data/glaemresources/modes/{futhorc.glaem → old_english-futhorc.glaem} +0 -0
  24. data/glaemresources/modes/{mercian.glaem → old_english-tengwar-mercian.glaem} +22 -12
  25. data/glaemresources/modes/{westsaxon.glaem → old_english-tengwar-westsaxon.glaem} +20 -11
  26. data/glaemresources/modes/{futhark-runicus.glaem → old_norse-futhark-runicus.glaem} +0 -0
  27. data/glaemresources/modes/{futhark-younger.glaem → old_norse-futhark-younger.glaem} +0 -0
  28. data/glaemresources/modes/{quenya.glaem → quenya-tengwar-classical.glaem} +32 -50
  29. data/glaemresources/modes/raw-tengwar.glaem +46 -23
  30. data/glaemresources/modes/{rlyehian.glaem → rlyehian-tengwar.glaem} +14 -3
  31. data/glaemresources/modes/{sindarin-daeron.glaem → sindarin-cirth-daeron.glaem} +55 -14
  32. data/glaemresources/modes/{sindarin-beleriand.glaem → sindarin-tengwar-beleriand.glaem} +154 -28
  33. data/glaemresources/modes/{sindarin.glaem → sindarin-tengwar-general_use.glaem} +86 -25
  34. data/glaemresources/modes/{telerin.glaem → telerin-tengwar-glaemscrafu.glaem} +16 -6
  35. data/glaemresources/modes/{westron.glaem → westron-tengwar-glaemscrafu.glaem} +18 -8
  36. data/lib/api/charset.rb +67 -7
  37. data/lib/api/charset_parser.rb +7 -0
  38. data/lib/api/constants.rb +3 -4
  39. data/lib/api/fragment.rb +26 -5
  40. data/lib/api/if_tree.rb +70 -8
  41. data/lib/api/macro.rb +40 -0
  42. data/lib/api/mode.rb +35 -13
  43. data/lib/api/mode_parser.rb +106 -12
  44. data/lib/api/object_additions.rb +23 -1
  45. data/lib/api/option.rb +17 -2
  46. data/lib/api/post_processor/resolve_virtuals.rb +25 -9
  47. data/lib/api/resource_manager.rb +1 -0
  48. data/lib/api/rule_group.rb +170 -26
  49. data/lib/api/sheaf_chain_iterator.rb +1 -1
  50. data/lib/api/transcription_processor.rb +3 -3
  51. data/lib/api/tts.rb +51 -0
  52. data/lib/glaemscribe.rb +34 -31
  53. data/lib_espeak/espeakng.for.glaemscribe.nowasm.sync.js +21 -0
  54. data/lib_espeak/glaemscribe_tts.js +365 -0
  55. metadata +67 -21
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: ebb0041e342e79b9b97f7e6a5ce163e58c8fd966
4
- data.tar.gz: 8339eb414f9a409dd91fa9f61943dcf0c147f596
2
+ SHA256:
3
+ metadata.gz: 142bc6436e2262629e5cf48a85e91d2a93a3581db59068967d19f807216e7792
4
+ data.tar.gz: 94eb7e50add321dfb44fffd95052405b3752d938e9aabbe18f4434ed53dd5f77
5
5
  SHA512:
6
- metadata.gz: 87f62555dbede9a38d3131b913f3626f1af92767e5a8edb657bc83d868448bd5f8eb66e42ec913fed3513a0466561cdb33bc420e428284ffbb88f7d4f9e309fe
7
- data.tar.gz: 9c61910fd13d721c8d02bf2b73567d86e7fd99a8f56605e99cd1c38858dcde4eeaed4e1b5a68565b9fdee0dc58289167ced72f8cc0993e84b1866f15e3f4e061
6
+ metadata.gz: c2eb4f568566d2fde6b61e4dd84d9e220412e4f21501f1123022d4460a8e64fb00748608957c3b91f5e080429ffc2342b9d4651a76997e9124e15f63d78dd619
7
+ data.tar.gz: bf737a0928bfc9c2a86368f19853d1b56740678ddc91f58bef6bbbbad87b50907f7dcd114e0387fe4e9d9035fe3f7d7a91727a0df80b036c104c44b4c55426df
@@ -32,6 +32,13 @@ rescue Exception => e
32
32
  exit(0)
33
33
  end
34
34
 
35
+ begin
36
+ require 'mini_racer'
37
+ rescue Exception => e
38
+ puts "The 'glaemscribe' binary requires the 'mini_racer' gem to work. Please 'gem install mini_racer' to make it work or add it to your Gemfile."
39
+ exit(0)
40
+ end
41
+
35
42
  env_version = ""
36
43
  begin
37
44
  # Try to load dev version before loading the gem one
@@ -59,8 +66,8 @@ end
59
66
  #############
60
67
 
61
68
  def puts_available_modes
62
- puts "\n #{$terminal.color 'Available modes are :', :bold }\n\n"
63
- puts Glaemscribe::API::ResourceManager.available_mode_names.map{|k| ". " + k.strip}.join("\n")
69
+ puts "\n #{HighLine.default_instance.color 'Available modes are :', :bold }\n\n"
70
+ puts Glaemscribe::API::ResourceManager.available_mode_names.sort.map{|k| ". " + k.strip}.join("\n")
64
71
  puts "\n"
65
72
  end
66
73
 
@@ -237,8 +244,7 @@ command :transcribe do |c|
237
244
  if success
238
245
  STDOUT.puts ret
239
246
  else
240
- perxit("The transcription failed.")
241
- perxit(ret, 42)
247
+ perxit("The transcription failed : #{ret}", 42)
242
248
  end
243
249
  end
244
250
  rescue Interrupt
@@ -301,22 +307,20 @@ command :info do |c|
301
307
  perxit(nil, 3)
302
308
  end
303
309
 
304
- puts "#{$terminal.color "Mode ID " , :bold} : #{mode.name}"
305
- puts "#{$terminal.color "Language " , :bold} : #{mode.language}"
306
- puts "#{$terminal.color "Writing " , :bold} : #{mode.writing}"
307
- puts "#{$terminal.color "Human Name" , :bold} : #{mode.human_name}"
308
- puts "#{$terminal.color "Authors " , :bold} : #{mode.authors}"
309
- puts "#{$terminal.color "Version " , :bold} : #{mode.version}"
310
+ puts "#{HighLine.default_instance.color "Mode ID " , :bold} : #{mode.name}"
311
+ puts "#{HighLine.default_instance.color "Language " , :bold} : #{mode.language}"
312
+ puts "#{HighLine.default_instance.color "Writing " , :bold} : #{mode.writing}"
313
+ puts "#{HighLine.default_instance.color "Human Name" , :bold} : #{mode.human_name}"
314
+ puts "#{HighLine.default_instance.color "Authors " , :bold} : #{mode.authors}"
315
+ puts "#{HighLine.default_instance.color "Version " , :bold} : #{mode.version}"
310
316
  puts ""
311
- puts "#{$terminal.color "Options " , :bold} :"
317
+ puts "#{HighLine.default_instance.color "Options " , :bold} :"
312
318
  mode.options.each { |name,option|
313
- puts " #{$terminal.color name, :bold} (#{option.type}) [#{option.default_value_name}]"
319
+ puts " #{HighLine.default_instance.color name, :bold} (#{option.type}) [#{option.default_value_name}]"
314
320
  option.values.each{ |oname,ovalue|
315
- puts " #{$terminal.color oname, :bold}"
321
+ puts " #{HighLine.default_instance.color oname, :bold}"
316
322
  }
317
323
  }
318
324
  end
319
325
 
320
326
  end
321
-
322
-
@@ -0,0 +1,205 @@
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
+
26
+ \** **\ \char 20 SPACE
27
+ \** ! **\ \char 21 CIRTH_11
28
+ \** " **\ \char 22 CIRTH_EREB_3
29
+ \** # **\ \char 23 CIRTH_13
30
+ \** $ **\ \char 24 CIRTH_14
31
+ \** % **\ \char 25 CIRTH_15
32
+ \** & **\ \char 26 CIRTH_EREB_4
33
+ \** ' **\ \char 27 ?
34
+ \** ( **\ \char 28 CIRTH_EREB_6
35
+ \** ) **\ \char 29 CIRTH_EREB_7
36
+ \** * **\ \char 2a CIRTH_EREB_5
37
+ \** + **\ \char 2b CIRTH_NUMERAL_4
38
+ \** , **\ \char 2c CIRTH_53
39
+ \** - **\ \char 2d ?
40
+ \** . **\ \char 2e CIRTH_54
41
+ \** / **\ \char 2f CIRTH_55
42
+ \** 0 **\ \char 30 CIRTH_10
43
+ \** 1 **\ \char 31 CIRTH_1
44
+ \** 2 **\ \char 32 CIRTH_2
45
+ \** 3 **\ \char 33 CIRTH_3
46
+ \** 4 **\ \char 34 CIRTH_4
47
+ \** 5 **\ \char 35 CIRTH_5
48
+ \** 6 **\ \char 36 CIRTH_6
49
+ \** 7 **\ \char 37 CIRTH_7
50
+ \** 8 **\ \char 38 CIRTH_8
51
+ \** 9 **\ \char 39 CIRTH_9
52
+ \** : **\ \char 3a CIRTH_EREB_2
53
+ \** ; **\ \char 3b CIRTH_40
54
+ \** < **\ \char 3c CIRTH_52_ALT
55
+ \** = **\ \char 3d ?
56
+ \** > **\ \char 3e CIRTH_55_ALT
57
+ \** ? **\ \char 3f CIRTH_56_ALT
58
+ \** @ **\ \char 40 CIRTH_12
59
+ \** A **\ \char 41 CIRTH_41
60
+ \** B **\ \char 42 CIRTH_60
61
+ \** C **\ \char 43 CIRTH_58
62
+ \** D **\ \char 44 CIRTH_43
63
+ \** E **\ \char 45 CIRTH_28
64
+ \** F **\ \char 46 CIRTH_44
65
+ \** G **\ \char 47 CIRTH_45
66
+ \** H **\ \char 48 ?
67
+ \** I **\ \char 49 CIRTH_PUNCT_MID_DOT
68
+ \** J **\ \char 4a CIRTH_38_ALT
69
+ \** K **\ \char 4b CIRTH_EREB_1
70
+ \** L **\ \char 4c CIRTH_45_ALT
71
+ \** M **\ \char 4d CIRTH_51_ALT
72
+ \** N **\ \char 4e CIRTH_SPACE
73
+ \** O **\ \char 4f CIRTH_PUNCT_TWO_DOTS
74
+ \** P **\ \char 50 CIRTH_PUNCT_THREE_DOTS
75
+ \** Q **\ \char 51 CIRTH_26
76
+ \** R **\ \char 52 CIRTH_29
77
+ \** S **\ \char 53 CIRTH_42
78
+ \** T **\ \char 54 CIRTH_30
79
+ \** U **\ \char 55 CIRTH_PUNCT_STAR
80
+ \** V **\ \char 56 CIRTH_59
81
+ \** W **\ \char 57 CIRTH_27
82
+ \** X **\ \char 58 CIRTH_57
83
+ \** Y **\ \char 59 ?
84
+ \** Z **\ \char 5a CIRTH_56
85
+ \** [ **\ \char 5b ?
86
+ \** \ **\ \char 5c CIRTH_PUNCT_DOT
87
+ \** ] **\ \char 5d ?
88
+ \** ^ **\ \char 5e ?
89
+ \** _ **\ \char 5f ?
90
+ \** ` **\ \char 60 CIRTH_SPACE_BIG
91
+ \** a **\ \char 61 CIRTH_31
92
+ \** b **\ \char 62 CIRTH_50
93
+ \** c **\ \char 63 CIRTH_48
94
+ \** d **\ \char 64 CIRTH_33
95
+ \** e **\ \char 65 CIRTH_18
96
+ \** f **\ \char 66 CIRTH_34
97
+ \** g **\ \char 67 CIRTH_35
98
+ \** h **\ \char 68 CIRTH_36
99
+ \** i **\ \char 69 CIRTH_23
100
+ \** j **\ \char 6a CIRTH_37
101
+ \** k **\ \char 6b CIRTH_38
102
+ \** l **\ \char 6c CIRTH_39
103
+ \** m **\ \char 6d CIRTH_52
104
+ \** n **\ \char 6e CIRTH_51
105
+ \** o **\ \char 6f CIRTH_24
106
+ \** p **\ \char 70 CIRTH_25
107
+ \** q **\ \char 71 CIRTH_16
108
+ \** r **\ \char 72 CIRTH_19
109
+ \** s **\ \char 73 CIRTH_32
110
+ \** t **\ \char 74 CIRTH_20
111
+ \** u **\ \char 75 CIRTH_22
112
+ \** v **\ \char 76 CIRTH_49
113
+ \** w **\ \char 77 CIRTH_17
114
+ \** x **\ \char 78 CIRTH_47
115
+ \** y **\ \char 79 CIRTH_21
116
+ \** z **\ \char 7a CIRTH_46
117
+ \** { **\ \char 7b CIRTH_PUNCT_THREE_DOTS_L
118
+ \** | **\ \char 7c CIRTH_PUNCT_DOUBLE_VBAR
119
+ \** } **\ \char 7d CIRTH_PUNCT_FOUR_DOTS
120
+ \** ~ **\ \char 7e ?
121
+ \** € **\ \char 80 ?
122
+ \**   **\ \char a0 ?
123
+ \** ¤ **\ \char a4 ?
124
+ \** § **\ \char a7 ?
125
+ \** © **\ \char a9 ?
126
+ \** « **\ \char ab ?
127
+ \** ® **\ \char ae ?
128
+ \** ¶ **\ \char b6 ?
129
+ \** » **\ \char bb ?
130
+ \** ¼ **\ \char bc ?
131
+ \** ½ **\ \char bd ?
132
+ \** ¾ **\ \char be ?
133
+ \** ¿ **\ \char bf ?
134
+ \** À **\ \char c0 ?
135
+ \** Á **\ \char c1 ?
136
+ \** Â **\ \char c2 ?
137
+ \** Ã **\ \char c3 ?
138
+ \** Ä **\ \char c4 ?
139
+ \** Å **\ \char c5 ?
140
+ \** Æ **\ \char c6 ?
141
+ \** Ç **\ \char c7 ?
142
+ \** È **\ \char c8 ?
143
+ \** É **\ \char c9 ?
144
+ \** Ê **\ \char ca ?
145
+ \** Ë **\ \char cb ?
146
+ \** Ì **\ \char cc ?
147
+ \** Í **\ \char cd ?
148
+ \** Î **\ \char ce ?
149
+ \** Ï **\ \char cf ?
150
+ \** Ð **\ \char d0 ?
151
+ \** Ñ **\ \char d1 ?
152
+ \** Ò **\ \char d2 ?
153
+ \** Ó **\ \char d3 ?
154
+ \** Ô **\ \char d4 ?
155
+ \** Õ **\ \char d5 ?
156
+ \** Ö **\ \char d6 ?
157
+ \** × **\ \char d7 ?
158
+ \** Ø **\ \char d8 ?
159
+ \** Ù **\ \char d9 ?
160
+ \** Ú **\ \char da ?
161
+ \** Û **\ \char db ?
162
+ \** Ü **\ \char dc ?
163
+ \** Ý **\ \char dd ?
164
+ \** Þ **\ \char de ?
165
+ \** ß **\ \char df ?
166
+ \** à **\ \char e0 ?
167
+ \** á **\ \char e1 ?
168
+ \** â **\ \char e2 ?
169
+ \** ã **\ \char e3 ?
170
+ \** ä **\ \char e4 ?
171
+ \** å **\ \char e5 ?
172
+ \** æ **\ \char e6 ?
173
+ \** ç **\ \char e7 ?
174
+ \** è **\ \char e8 ?
175
+ \** é **\ \char e9 ?
176
+ \** ê **\ \char ea ?
177
+ \** ë **\ \char eb ?
178
+ \** ì **\ \char ec ?
179
+ \** í **\ \char ed ?
180
+ \** î **\ \char ee ?
181
+ \** ï **\ \char ef ?
182
+ \** ð **\ \char f0 ?
183
+ \** ñ **\ \char f1 ?
184
+ \** ò **\ \char f2 ?
185
+ \** ó **\ \char f3 ?
186
+ \** ô **\ \char f4 ?
187
+ \** õ **\ \char f5 ?
188
+ \** ö **\ \char f6 ?
189
+ \** ÷ **\ \char f7 ?
190
+ \** ø **\ \char f8 ?
191
+ \** ù **\ \char f9 ?
192
+ \** ú **\ \char fa ?
193
+ \** û **\ \char fb ?
194
+ \** ü **\ \char fc ?
195
+ \** ý **\ \char fd ?
196
+ \** þ **\ \char fe ?
197
+ \** ÿ **\ \char ff ?
198
+ \** ‘ **\ \char 2018 ?
199
+ \** • **\ \char 2022 ?
200
+ \** … **\ \char 2026 ?
201
+ \** ‹ **\ \char 2039 ?
202
+ \** › **\ \char 203a ?
203
+ \** ∙ **\ \char 2219 ?
204
+ \** ◼ **\ \char 25fc ?
205
+
@@ -0,0 +1,256 @@
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
+ \** **\ \char 20 ?
26
+ \** ! **\ \char 21 SARATI_SPACE
27
+ \** " **\ \char 22 SARATI_T
28
+ \** # **\ \char 23 SARATI_QUENYA_C
29
+ \** $ **\ \char 24 ?
30
+ \** % **\ \char 25 SARATI_D
31
+ \** & **\ \char 26 SARATI_NG
32
+ \** ' **\ \char 27 SARATI_PHONETIC_GW
33
+ \** ( **\ \char 28 ?
34
+ \** ) **\ \char 29 ?
35
+ \** * **\ \char 2a ?
36
+ \** + **\ \char 2b SARATI_QUENYA_VELAR_NASAL
37
+ \** , **\ \char 2c SARATI_QUENYA_NW
38
+ \** - **\ \char 2d ?
39
+ \** . **\ \char 2e ?
40
+ \** / **\ \char 2f ?
41
+ \** 0 **\ \char 30 ?
42
+ \** 1 **\ \char 31 ?
43
+ \** 2 **\ \char 32 ?
44
+ \** 3 **\ \char 33 ?
45
+ \** 4 **\ \char 34 ?
46
+ \** 5 **\ \char 35 ?
47
+ \** 6 **\ \char 36 ?
48
+ \** 7 **\ \char 37 ?
49
+ \** 8 **\ \char 38 ?
50
+ \** 9 **\ \char 39 ?
51
+ \** : **\ \char 3a ?
52
+ \** ; **\ \char 3b ?
53
+ \** < **\ \char 3c ?
54
+ \** = **\ \char 3d ?
55
+ \** > **\ \char 3e ?
56
+ \** ? **\ \char 3f SARATI_L
57
+ \** @ **\ \char 40 ?
58
+ \** A **\ \char 41 SARATI_QUENYA_HL
59
+ \** B **\ \char 42 ?
60
+ \** C **\ \char 43 ?
61
+ \** D **\ \char 44 ?
62
+ \** E **\ \char 45 ?
63
+ \** F **\ \char 46 SARATI_R
64
+ \** G **\ \char 47 ?
65
+ \** H **\ \char 48 ?
66
+ \** I **\ \char 49 ?
67
+ \** J **\ \char 4a SARATI_QUENYA_HR
68
+ \** K **\ \char 4b ?
69
+ \** L **\ \char 4c ?
70
+ \** M **\ \char 4d ?
71
+ \** N **\ \char 4e ?
72
+ \** O **\ \char 4f ?
73
+ \** P **\ \char 50 SARATI_M
74
+ \** Q **\ \char 51 ?
75
+ \** R **\ \char 52 ?
76
+ \** S **\ \char 53 ?
77
+ \** T **\ \char 54 ?
78
+ \** U **\ \char 55 ?
79
+ \** V **\ \char 56 ?
80
+ \** W **\ \char 57 ?
81
+ \** X **\ \char 58 ?
82
+ \** Y **\ \char 59 ?
83
+ \** Z **\ \char 5a SARATI_P
84
+ \** [ **\ \char 5b SARATI_F
85
+ \** \ **\ \char 5c SARATI_QUENYA_F_ALT
86
+ \** ] **\ \char 5d ?
87
+ \** ^ **\ \char 5e ?
88
+ \** _ **\ \char 5f SARATI_B SARATI_QUENYA_MB
89
+ \** ` **\ \char 60 SARATI_V
90
+ \** a **\ \char 61 SARATI_QUENYA_V_ALT
91
+ \** b **\ \char 62 ?
92
+ \** c **\ \char 63 ?
93
+ \** d **\ \char 64 SARATI_QUENYA_MP SARATI_QUENYA_QU_ALT
94
+ \** e **\ \char 65 ?
95
+ \** f **\ \char 66 ?
96
+ \** g **\ \char 67 SARATI_QUENYA_TS
97
+ \** h **\ \char 68 ?
98
+ \** i **\ \char 69 ?
99
+ \** j **\ \char 6a ?
100
+ \** k **\ \char 6b ?
101
+ \** l **\ \char 6c ?
102
+ \** m **\ \char 6d ?
103
+ \** n **\ \char 6e SARATI_VOICELESS_VELAR_FRICATIVE
104
+ \** o **\ \char 6f ?
105
+ \** p **\ \char 70 SARATI_QUENYA_QU
106
+ \** q **\ \char 71 SARATI_VOICED_VELAR_FRICATIVE
107
+ \** r **\ \char 72 ?
108
+ \** s **\ \char 73 SARATI_QUENYA_NGW
109
+ \** t **\ \char 74 ?
110
+ \** u **\ \char 75 ?
111
+ \** v **\ \char 76 SARATI_QUENYA_ST
112
+ \** w **\ \char 77 ?
113
+ \** x **\ \char 78 ?
114
+ \** y **\ \char 79 SARATI_QUENYA_X SARATI_VELAR_LATERAL_APPROXIMANT
115
+ \** z **\ \char 7a SARATI_UVULAR_TRILL
116
+ \** { **\ \char 7b ?
117
+ \** | **\ \char 7c ?
118
+ \** } **\ \char 7d ?
119
+ \** ~ **\ \char 7e ?
120
+ \**   **\ \char a0 ?
121
+ \** ¡ **\ \char a1 ?
122
+ \** ¢ **\ \char a2 SARATI_VOICELESS_PALATO_ALVEOLAR_SIBILANT_FRICATIVE
123
+ \** £ **\ \char a3 ?
124
+ \** ¤ **\ \char a4 ?
125
+ \** ¥ **\ \char a5 ?
126
+ \** ¦ **\ \char a6 SARATI_QUENYA_SS_ALT_1
127
+ \** § **\ \char a7 ?
128
+ \** ¨ **\ \char a8 ?
129
+ \** © **\ \char a9 ?
130
+ \** ª **\ \char aa SARATI_QUENYA_NT
131
+ \** « **\ \char ab SARATI_VOICED_DENTAL_FRICATIVE
132
+ \** ¬ **\ \char ac ?
133
+ \** ­ **\ \char ad ?
134
+ \** ® **\ \char ae ?
135
+ \** ¯ **\ \char af ?
136
+ \** ° **\ \char b0 ?
137
+ \** ± **\ \char b1 SARATI_QUENYA_TY
138
+ \** ² **\ \char b2 SARATI_QUENYA_HT_ALT_1
139
+ \** ³ **\ \char b3 SARATI_QUENYA_NDY
140
+ \** ´ **\ \char b4 ?
141
+ \** µ **\ \char b5 ?
142
+ \** ¶ **\ \char b6 ?
143
+ \** · **\ \char b7 ?
144
+ \** ¸ **\ \char b8 ?
145
+ \** ¹ **\ \char b9 SARATI_W
146
+ \** º **\ \char ba SARATI_QUENYA_HW SARATI_VOICELESS_LABIOVELAR_APPROXIMANT
147
+ \** » **\ \char bb SARATI_QUENYA_Y SARATI_J
148
+ \** ¼ **\ \char bc ?
149
+ \** ½ **\ \char bd SARATI_QUENYA_HY SARATI_VOICELESS_PALATAL_APPROXIMANT
150
+ \** ¾ **\ \char be ?
151
+ \** ¿ **\ \char bf ?
152
+ \** À **\ \char c0 SARATI_N
153
+ \** Á **\ \char c1 ?
154
+ \** Â **\ \char c2 ?
155
+ \** Ã **\ \char c3 ?
156
+ \** Ä **\ \char c4 ?
157
+ \** Å **\ \char c5 ?
158
+ \** Æ **\ \char c6 ?
159
+ \** Ç **\ \char c7 ?
160
+ \** È **\ \char c8 SARATI_QUENYA_LONG_VOWEL_CARRIER
161
+ \** É **\ \char c9 ?
162
+ \** Ê **\ \char ca ?
163
+ \** Ë **\ \char cb SARATI_H
164
+ \** Ì **\ \char cc ?
165
+ \** Í **\ \char cd PUNCT_DOT
166
+ \** Î **\ \char ce PUNCT_2_DOT
167
+ \** Ï **\ \char cf PUNCT_TRI
168
+ \** Ð **\ \char d0 PUNCT_2_TRI
169
+ \** Ñ **\ \char d1 ?
170
+ \** Ò **\ \char d2 SARATI_DOT_U SARATI_QUENYA_I
171
+ \** Ó **\ \char d3 SARATI_DOT_D
172
+ \** Ô **\ \char d4 ?
173
+ \** Õ **\ \char d5 ?
174
+ \** Ö **\ \char d6 SARATI_QUENYA_A
175
+ \** × **\ \char d7 ?
176
+ \** Ø **\ \char d8 SARATI_QUENYA_A_REVERSED
177
+ \** Ù **\ \char d9 ?
178
+ \** Ú **\ \char da ?
179
+ \** Û **\ \char db ?
180
+ \** Ü **\ \char dc SARATI_QUENYA_O
181
+ \** Ý **\ \char dd ?
182
+ \** Þ **\ \char de SARATI_QUENYA_U
183
+ \** ß **\ \char df ?
184
+ \** à **\ \char e0 ?
185
+ \** á **\ \char e1 ?
186
+ \** â **\ \char e2 ?
187
+ \** ã **\ \char e3 ?
188
+ \** ä **\ \char e4 ?
189
+ \** å **\ \char e5 ?
190
+ \** æ **\ \char e6 ?
191
+ \** ç **\ \char e7 ?
192
+ \** è **\ \char e8 SARATI_QUENYA_E
193
+ \** é **\ \char e9 ?
194
+ \** ê **\ \char ea ?
195
+ \** ë **\ \char eb ?
196
+ \** ì **\ \char ec ?
197
+ \** í **\ \char ed ?
198
+ \** î **\ \char ee ?
199
+ \** ï **\ \char ef ?
200
+ \** ð **\ \char f0 SARATI_DIACRITIC_CIRCLE
201
+ \** ñ **\ \char f1 ?
202
+ \** ò **\ \char f2 SARATI_DASH_U
203
+ \** ó **\ \char f3 SARATI_DASH_D
204
+ \** ô **\ \char f4 ?
205
+ \** õ **\ \char f5 ?
206
+ \** ö **\ \char f6 ?
207
+ \** ÷ **\ \char f7 ?
208
+ \** ø **\ \char f8 ?
209
+ \** ù **\ \char f9 ?
210
+ \** ú **\ \char fa ?
211
+ \** û **\ \char fb ?
212
+ \** ü **\ \char fc ?
213
+ \** ý **\ \char fd ?
214
+ \** þ **\ \char fe ?
215
+ \** ÿ **\ \char ff ?
216
+ \** Ā **\ \char 100 ?
217
+ \** ā **\ \char 101 ?
218
+ \** Ă **\ \char 102 ?
219
+ \** Đ **\ \char 110 ?
220
+ \** đ **\ \char 111 ?
221
+ \** Ġ **\ \char 120 ?
222
+ \** ġ **\ \char 121 ?
223
+ \** Ģ **\ \char 122 ?
224
+ \** ģ **\ \char 123 ?
225
+ \** Ĥ **\ \char 124 ?
226
+ \** İ **\ \char 130 ?
227
+ \** ı **\ \char 131 ?
228
+ \** ŀ **\ \char 140 ?
229
+ \** Œ **\ \char 152 SARATI_QUENYA_HTY
230
+ \** œ **\ \char 153 ?
231
+ \** Š **\ \char 160 ?
232
+ \** š **\ \char 161 ?
233
+ \** Ÿ **\ \char 178 SARATI_QUENYA_S
234
+ \** Ž **\ \char 17d ?
235
+ \** ž **\ \char 17e ?
236
+ \** ƒ **\ \char 192 ?
237
+ \** ˆ **\ \char 2c6 ?
238
+ \** ˜ **\ \char 2dc SARATI_QUENYA_NQU
239
+ \** – **\ \char 2013 ?
240
+ \** — **\ \char 2014 SARATI_QUENYA_NC
241
+ \** ‘ **\ \char 2018 ?
242
+ \** ’ **\ \char 2019 ?
243
+ \** ‚ **\ \char 201a ?
244
+ \** “ **\ \char 201c ?
245
+ \** ” **\ \char 201d ?
246
+ \** „ **\ \char 201e SARATI_QUENYA_NTY
247
+ \** † **\ \char 2020 ?
248
+ \** ‡ **\ \char 2021 ?
249
+ \** • **\ \char 2022 ?
250
+ \** … **\ \char 2026 SARATI_QUENYA_STY
251
+ \** ‰ **\ \char 2030 SARATI_QUENYA_NY
252
+ \** ‹ **\ \char 2039 ?
253
+ \** › **\ \char 203a ?
254
+ \** € **\ \char 20ac SARATI_QUENYA_ND
255
+ \** ™ **\ \char 2122 ?
256
+