glaemscribe 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5e9f617d5136cabf67f2956d2e7f2ff819b10200
|
4
|
+
data.tar.gz: 10c475fd8eeb1008b491be028ef418ecc75975ab
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4df56fe4e0d19a4efa206fda5e2654d3670f2c579732ee2b6a30e58bcee2765034e10f0d5377dff7a6c3617b480dba7e1abf4decb462e7eb90838996578683ea
|
7
|
+
data.tar.gz: ebfd8a156d2a5a93ae25e455f80275da909891cdc47624bde2a8f37b09ba69c8f6c06267376d92bb6d08a12e237e8526f55350f44de44eb21d34dd6efd6d9dbb
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Glǽmscribe (also written Glaemscribe) is a software dedicated to
|
2
|
+
the transcription of texts between writing systems, and more
|
3
|
+
specifically dedicated to the transcription of J.R.R. Tolkien's
|
4
|
+
invented languages to some of his devised writing systems.
|
5
|
+
|
6
|
+
Copyright (C) 2015 Benjamin Babut (Talagan).
|
7
|
+
|
8
|
+
This program is free software: you can redistribute it and/or modify
|
9
|
+
it under the terms of the GNU Affero General Public License as published by
|
10
|
+
the Free Software Foundation, either version 3 of the License, or
|
11
|
+
any later version.
|
12
|
+
|
13
|
+
This program is distributed in the hope that it will be useful,
|
14
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
GNU Affero General Public License for more details.
|
17
|
+
|
18
|
+
You should have received a copy of the GNU Affero General Public License
|
19
|
+
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
data/bin/glaemscribe
ADDED
@@ -0,0 +1,307 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
#
|
4
|
+
# Glǽmscribe (also written Glaemscribe) is a software dedicated to
|
5
|
+
# the transcription of texts between writing systems, and more
|
6
|
+
# specifically dedicated to the transcription of J.R.R. Tolkien's
|
7
|
+
# invented languages to some of his devised writing systems.
|
8
|
+
#
|
9
|
+
# Copyright (C) 2015 Benjamin Babut (Talagan).
|
10
|
+
#
|
11
|
+
# This program is free software: you can redistribute it and/or modify
|
12
|
+
# it under the terms of the GNU General Public License as published by
|
13
|
+
# the Free Software Foundation, either version 3 of the License, or
|
14
|
+
# any later version.
|
15
|
+
#
|
16
|
+
# This program is distributed in the hope that it will be useful,
|
17
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
18
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
19
|
+
# GNU General Public License for more details.
|
20
|
+
#
|
21
|
+
# You should have received a copy of the GNU General Public License
|
22
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
23
|
+
|
24
|
+
###############
|
25
|
+
# ENV STUFF #
|
26
|
+
###############
|
27
|
+
|
28
|
+
begin
|
29
|
+
require 'commander/import'
|
30
|
+
rescue Exception => e
|
31
|
+
puts "The 'glaemscribe' binary requires the 'commander' gem to work. Please 'gem install commander' to make it work or add it to your Gemfile."
|
32
|
+
exit(0)
|
33
|
+
end
|
34
|
+
|
35
|
+
env_version = ""
|
36
|
+
begin
|
37
|
+
# Try to load dev version before loading the gem one
|
38
|
+
require File.dirname(__FILE__) + "/../lib_rb/glaemscribe.rb"
|
39
|
+
env_version = " (DEVELOPER VERSION - LOADED FROM SRC DIRECTORY)"
|
40
|
+
Glaemscribe::API::Debug.enabled = false
|
41
|
+
rescue Exception => e
|
42
|
+
# This is (probably) the gem version
|
43
|
+
require 'glaemscribe'
|
44
|
+
end
|
45
|
+
|
46
|
+
# Just a small monkey patch because I found commander lacks a new line at the beginning of its formatters
|
47
|
+
module Commander
|
48
|
+
module HelpFormatter
|
49
|
+
class Terminal < Base
|
50
|
+
def render
|
51
|
+
"\n" + template(:help).result(ProgramContext.new(@runner).get_binding)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
#############
|
58
|
+
# HELPERS #
|
59
|
+
#############
|
60
|
+
|
61
|
+
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")
|
64
|
+
puts "\n"
|
65
|
+
end
|
66
|
+
|
67
|
+
def perxit(error = nil, exit_code = nil)
|
68
|
+
STDERR.puts "*** " + error if(error)
|
69
|
+
exit(exit_code) if(exit_code)
|
70
|
+
end
|
71
|
+
|
72
|
+
def pereol
|
73
|
+
STDERR.puts "\n"
|
74
|
+
end
|
75
|
+
|
76
|
+
def profile
|
77
|
+
# Profile the code
|
78
|
+
RubyProf.start
|
79
|
+
yield()
|
80
|
+
result = RubyProf.stop
|
81
|
+
printer = RubyProf::MultiPrinter.new(result)
|
82
|
+
printer.print(:path => ".", :profile => "profile")
|
83
|
+
end
|
84
|
+
|
85
|
+
##############
|
86
|
+
# PROGRAMM #
|
87
|
+
##############
|
88
|
+
|
89
|
+
program :name, "glaemscribe#{env_version}"
|
90
|
+
program :version, '0.0.1'
|
91
|
+
program :description, 'Glǽmscribe (also written Glaemscribe) is a software dedicated to the
|
92
|
+
transcription of texts between writing systems, and more specifically
|
93
|
+
dedicated to the transcription of J.R.R. Tolkien\'s invented languages
|
94
|
+
to some of his devised writing systems.'
|
95
|
+
program :help, 'Author', 'Benjamin Talagan Babut'
|
96
|
+
|
97
|
+
##############
|
98
|
+
# COMMANDS #
|
99
|
+
##############
|
100
|
+
|
101
|
+
default_command :transcribe
|
102
|
+
|
103
|
+
command :transcribe do |c|
|
104
|
+
|
105
|
+
c.syntax = 'glaemscribe transcribe file [options]'
|
106
|
+
c.summary = 'Transcribes a file (default command)'
|
107
|
+
c.description = "Transcribes a file with the given options. You can use '-' instead of a file name to work with stdin."
|
108
|
+
|
109
|
+
c.option '-m', '--mode mode', String, "The name of the embedded mode to use. See the 'list' command to get a list of available modes names."
|
110
|
+
c.option '-c', '--charset charset', String, 'The name of the charset to use. If not given, glaemscribe will load and use the default charset defined in the mode.'
|
111
|
+
c.option '--modefile modefile', String, 'Use a custom mode file instead of an embedded one. The file extension must be .glaem .'
|
112
|
+
c.option '--charsetfile charsetfile', String, 'Use a custom charset file instead of an embedded one. The file extension must be .cst .'
|
113
|
+
c.option '-o', '--options name1:value1,name2:value2,...', String, 'Pass options to the transcriptor (see the mode options documentation).'
|
114
|
+
|
115
|
+
c.action do |args, options|
|
116
|
+
|
117
|
+
filename = args[0]
|
118
|
+
# Let's do some checks
|
119
|
+
if !filename && options.__hash__.keys.count == 0
|
120
|
+
# Nothing at all given!
|
121
|
+
command(:help).run()
|
122
|
+
exit(123)
|
123
|
+
end
|
124
|
+
|
125
|
+
if !filename
|
126
|
+
perxit("No file given for transcription.", 1)
|
127
|
+
end
|
128
|
+
|
129
|
+
if !options.mode && !options.modefile
|
130
|
+
perxit("An option 'mode' (-m) or 'modefile' (--modefile) is mandatory!", 2)
|
131
|
+
end
|
132
|
+
|
133
|
+
if options.mode && options.modefile
|
134
|
+
perxit("Option 'mode' (-m) and 'modefile' (--modefile) are not compatible. You have to chose!")
|
135
|
+
end
|
136
|
+
|
137
|
+
if options.charset && options.charsetfile
|
138
|
+
perxit("Option 'charset' (-c) and 'charsetfile' (--charsetfile) are not compatible. You have to chose!")
|
139
|
+
end
|
140
|
+
|
141
|
+
charset = nil
|
142
|
+
charset_name = nil
|
143
|
+
|
144
|
+
# If given a charset_file, it should be loaded BEFORE so that we have it in our charset base
|
145
|
+
if options.charsetfile
|
146
|
+
# External charset file loading
|
147
|
+
charset_name = Glaemscribe::API::ResourceManager.charset_name_from_file_path(options.charsetfile)
|
148
|
+
|
149
|
+
begin
|
150
|
+
charset = Glaemscribe::API::CharsetParser.new().parse(options.charsetfile)
|
151
|
+
# Put it in our base of charsets
|
152
|
+
Glaemscribe::API::ResourceManager.loaded_charsets[charset_name] = charset
|
153
|
+
rescue Errno::ENOENT
|
154
|
+
perxit("Charset file '#{options.charsetfile}' could not be opened for reading.",3)
|
155
|
+
end
|
156
|
+
elsif options.charset
|
157
|
+
charset_name = options.charset
|
158
|
+
# Let the mode load the embedded charset
|
159
|
+
end
|
160
|
+
|
161
|
+
mode = nil
|
162
|
+
mode_name = nil
|
163
|
+
|
164
|
+
if options.mode
|
165
|
+
# Embedded mode loading
|
166
|
+
mode_name = options.mode
|
167
|
+
|
168
|
+
Glaemscribe::API::ResourceManager.load_modes([mode_name])
|
169
|
+
mode = Glaemscribe::API::ResourceManager.loaded_modes[mode_name]
|
170
|
+
|
171
|
+
if !mode
|
172
|
+
perxit("Embedded #{mode_name} not handled!")
|
173
|
+
puts_available_modes
|
174
|
+
perxit(nil, 3)
|
175
|
+
end
|
176
|
+
|
177
|
+
else
|
178
|
+
# External mode file loading
|
179
|
+
mode_name = Glaemscribe::API::ResourceManager.mode_name_from_file_path(options.modefile)
|
180
|
+
|
181
|
+
begin
|
182
|
+
mode = Glaemscribe::API::ModeParser.new().parse(options.modefile)
|
183
|
+
rescue Errno::ENOENT
|
184
|
+
perxit("Mode file '#{options.modefile}' could not be opened for reading.",3)
|
185
|
+
end
|
186
|
+
|
187
|
+
Glaemscribe::API::ResourceManager.loaded_modes[mode_name] = mode
|
188
|
+
end
|
189
|
+
|
190
|
+
if mode.errors.any?
|
191
|
+
pereol
|
192
|
+
perxit("The mode '#{mode_name}' contains errors. ")
|
193
|
+
mode.errors.each{ |e|
|
194
|
+
puts "** #{mode.name}:#{e.line}: #{e.text}"
|
195
|
+
}
|
196
|
+
pereol
|
197
|
+
perxit("Transcription cannot continue", 3)
|
198
|
+
end
|
199
|
+
|
200
|
+
if mode.warnings.any?
|
201
|
+
pereol
|
202
|
+
perxit("The mode '#{mode_name}' contains warnings. ")
|
203
|
+
mode.warnings.each{ |e|
|
204
|
+
puts "** #{mode.name}:#{e.line}: #{e.text}"
|
205
|
+
}
|
206
|
+
pereol
|
207
|
+
perxit("Continuing transcription without guarantee...\n")
|
208
|
+
end
|
209
|
+
|
210
|
+
# If a charset was forced (embedded or with external file), check that the mode supports it
|
211
|
+
if charset_name
|
212
|
+
charset = mode.supported_charsets[charset_name]
|
213
|
+
perxit("Was asked to use charset '#{charset_name}', but the mode does not handle it. Aborting.", 12) if !charset
|
214
|
+
end
|
215
|
+
|
216
|
+
if options.options
|
217
|
+
a = options.options.split(",").map{ |o| o.split(":") }.flatten.map{|s| s.strip }
|
218
|
+
opts = Hash[*a]
|
219
|
+
mode.finalize(opts)
|
220
|
+
end
|
221
|
+
|
222
|
+
# Ready for transcription ...
|
223
|
+
|
224
|
+
if(filename == "-")
|
225
|
+
perxit "Opened in stdin mode, waiting for input..."
|
226
|
+
begin
|
227
|
+
while to_transcribe = STDIN.gets
|
228
|
+
success, ret = mode.transcribe(to_transcribe, charset)
|
229
|
+
if success
|
230
|
+
STDOUT.puts ret
|
231
|
+
else
|
232
|
+
perxit("The transcription failed.")
|
233
|
+
perxit(ret, 42)
|
234
|
+
end
|
235
|
+
end
|
236
|
+
rescue Interrupt
|
237
|
+
perxit "Interrupted, end of session.", 42
|
238
|
+
end
|
239
|
+
else
|
240
|
+
|
241
|
+
to_transcribe = ""
|
242
|
+
begin
|
243
|
+
File.open(args[0],"rb:utf-8") {|f|
|
244
|
+
to_transcribe = f.read
|
245
|
+
}
|
246
|
+
rescue Errno::ENOENT
|
247
|
+
perxit("File '#{args[0]}' could not be opened for reading.",3)
|
248
|
+
end
|
249
|
+
|
250
|
+
success, ret = mode.transcribe(to_transcribe, charset)
|
251
|
+
|
252
|
+
if success
|
253
|
+
STDOUT.puts ret
|
254
|
+
else
|
255
|
+
perxit("The transcription failed.")
|
256
|
+
perxit(ret, 42)
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
command :list do |c|
|
264
|
+
|
265
|
+
c.syntax = 'glaemscribe list'
|
266
|
+
c.summary = 'Lists all available embedded modes'
|
267
|
+
c.description = 'Lists all available embedded modes.'
|
268
|
+
|
269
|
+
c.action do |args, options|
|
270
|
+
puts_available_modes
|
271
|
+
end
|
272
|
+
|
273
|
+
end
|
274
|
+
|
275
|
+
|
276
|
+
command :info do |c|
|
277
|
+
|
278
|
+
c.syntax = 'glaemscribe info'
|
279
|
+
c.summary = "Displays information about an embedded mode"
|
280
|
+
c.description = "Displays information about the embedded mode 'modename'."
|
281
|
+
|
282
|
+
c.action do |args, options|
|
283
|
+
|
284
|
+
mode_name = args[0]
|
285
|
+
if !mode_name
|
286
|
+
perxit("No mode name given!", 2)
|
287
|
+
end
|
288
|
+
|
289
|
+
Glaemscribe::API::ResourceManager.load_modes(mode_name)
|
290
|
+
mode = Glaemscribe::API::ResourceManager.loaded_modes[mode_name]
|
291
|
+
if !mode
|
292
|
+
perxit("Mode #{mode_name} not handled!")
|
293
|
+
perxit(nil, 3)
|
294
|
+
end
|
295
|
+
|
296
|
+
puts "#{$terminal.color "Mode ID " , :bold} : #{mode.name}"
|
297
|
+
puts "#{$terminal.color "Language " , :bold} : #{mode.language}"
|
298
|
+
puts "#{$terminal.color "Writing " , :bold} : #{mode.writing}"
|
299
|
+
puts "#{$terminal.color "Human Name" , :bold} : #{mode.human_name}"
|
300
|
+
puts "#{$terminal.color "Authors " , :bold} : #{mode.authors}"
|
301
|
+
puts "#{$terminal.color "Version " , :bold} : #{mode.version}"
|
302
|
+
|
303
|
+
end
|
304
|
+
|
305
|
+
end
|
306
|
+
|
307
|
+
|
@@ -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
|
+
|