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
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
|
+
|