talentbox-unidecoder 1.1.2
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.
- data/Changelog.md +16 -0
- data/README.md +51 -0
- data/Rakefile +28 -0
- data/lib/unidecoder.rb +98 -0
- data/lib/unidecoder/data/x00.yml +257 -0
- data/lib/unidecoder/data/x01.yml +257 -0
- data/lib/unidecoder/data/x02.yml +256 -0
- data/lib/unidecoder/data/x03.yml +256 -0
- data/lib/unidecoder/data/x04.yml +256 -0
- data/lib/unidecoder/data/x05.yml +256 -0
- data/lib/unidecoder/data/x06.yml +256 -0
- data/lib/unidecoder/data/x07.yml +256 -0
- data/lib/unidecoder/data/x09.yml +256 -0
- data/lib/unidecoder/data/x0a.yml +256 -0
- data/lib/unidecoder/data/x0b.yml +256 -0
- data/lib/unidecoder/data/x0c.yml +256 -0
- data/lib/unidecoder/data/x0d.yml +256 -0
- data/lib/unidecoder/data/x0e.yml +256 -0
- data/lib/unidecoder/data/x0f.yml +256 -0
- data/lib/unidecoder/data/x10.yml +256 -0
- data/lib/unidecoder/data/x11.yml +256 -0
- data/lib/unidecoder/data/x12.yml +257 -0
- data/lib/unidecoder/data/x13.yml +256 -0
- data/lib/unidecoder/data/x14.yml +257 -0
- data/lib/unidecoder/data/x15.yml +257 -0
- data/lib/unidecoder/data/x16.yml +256 -0
- data/lib/unidecoder/data/x17.yml +256 -0
- data/lib/unidecoder/data/x18.yml +256 -0
- data/lib/unidecoder/data/x1e.yml +256 -0
- data/lib/unidecoder/data/x1f.yml +256 -0
- data/lib/unidecoder/data/x20.yml +256 -0
- data/lib/unidecoder/data/x21.yml +256 -0
- data/lib/unidecoder/data/x22.yml +256 -0
- data/lib/unidecoder/data/x23.yml +256 -0
- data/lib/unidecoder/data/x24.yml +256 -0
- data/lib/unidecoder/data/x25.yml +256 -0
- data/lib/unidecoder/data/x26.yml +256 -0
- data/lib/unidecoder/data/x27.yml +256 -0
- data/lib/unidecoder/data/x28.yml +257 -0
- data/lib/unidecoder/data/x2e.yml +256 -0
- data/lib/unidecoder/data/x2f.yml +256 -0
- data/lib/unidecoder/data/x30.yml +256 -0
- data/lib/unidecoder/data/x31.yml +256 -0
- data/lib/unidecoder/data/x32.yml +256 -0
- data/lib/unidecoder/data/x33.yml +256 -0
- data/lib/unidecoder/data/x4d.yml +256 -0
- data/lib/unidecoder/data/x4e.yml +257 -0
- data/lib/unidecoder/data/x4f.yml +257 -0
- data/lib/unidecoder/data/x50.yml +257 -0
- data/lib/unidecoder/data/x51.yml +257 -0
- data/lib/unidecoder/data/x52.yml +257 -0
- data/lib/unidecoder/data/x53.yml +257 -0
- data/lib/unidecoder/data/x54.yml +257 -0
- data/lib/unidecoder/data/x55.yml +257 -0
- data/lib/unidecoder/data/x56.yml +257 -0
- data/lib/unidecoder/data/x57.yml +257 -0
- data/lib/unidecoder/data/x58.yml +257 -0
- data/lib/unidecoder/data/x59.yml +257 -0
- data/lib/unidecoder/data/x5a.yml +257 -0
- data/lib/unidecoder/data/x5b.yml +257 -0
- data/lib/unidecoder/data/x5c.yml +257 -0
- data/lib/unidecoder/data/x5d.yml +257 -0
- data/lib/unidecoder/data/x5e.yml +257 -0
- data/lib/unidecoder/data/x5f.yml +257 -0
- data/lib/unidecoder/data/x60.yml +257 -0
- data/lib/unidecoder/data/x61.yml +257 -0
- data/lib/unidecoder/data/x62.yml +257 -0
- data/lib/unidecoder/data/x63.yml +257 -0
- data/lib/unidecoder/data/x64.yml +257 -0
- data/lib/unidecoder/data/x65.yml +257 -0
- data/lib/unidecoder/data/x66.yml +257 -0
- data/lib/unidecoder/data/x67.yml +257 -0
- data/lib/unidecoder/data/x68.yml +257 -0
- data/lib/unidecoder/data/x69.yml +257 -0
- data/lib/unidecoder/data/x6a.yml +257 -0
- data/lib/unidecoder/data/x6b.yml +257 -0
- data/lib/unidecoder/data/x6c.yml +257 -0
- data/lib/unidecoder/data/x6d.yml +257 -0
- data/lib/unidecoder/data/x6e.yml +257 -0
- data/lib/unidecoder/data/x6f.yml +257 -0
- data/lib/unidecoder/data/x70.yml +257 -0
- data/lib/unidecoder/data/x71.yml +257 -0
- data/lib/unidecoder/data/x72.yml +257 -0
- data/lib/unidecoder/data/x73.yml +257 -0
- data/lib/unidecoder/data/x74.yml +257 -0
- data/lib/unidecoder/data/x75.yml +257 -0
- data/lib/unidecoder/data/x76.yml +257 -0
- data/lib/unidecoder/data/x77.yml +257 -0
- data/lib/unidecoder/data/x78.yml +257 -0
- data/lib/unidecoder/data/x79.yml +257 -0
- data/lib/unidecoder/data/x7a.yml +257 -0
- data/lib/unidecoder/data/x7b.yml +257 -0
- data/lib/unidecoder/data/x7c.yml +257 -0
- data/lib/unidecoder/data/x7d.yml +257 -0
- data/lib/unidecoder/data/x7e.yml +257 -0
- data/lib/unidecoder/data/x7f.yml +257 -0
- data/lib/unidecoder/data/x80.yml +257 -0
- data/lib/unidecoder/data/x81.yml +257 -0
- data/lib/unidecoder/data/x82.yml +257 -0
- data/lib/unidecoder/data/x83.yml +257 -0
- data/lib/unidecoder/data/x84.yml +257 -0
- data/lib/unidecoder/data/x85.yml +257 -0
- data/lib/unidecoder/data/x86.yml +257 -0
- data/lib/unidecoder/data/x87.yml +257 -0
- data/lib/unidecoder/data/x88.yml +257 -0
- data/lib/unidecoder/data/x89.yml +257 -0
- data/lib/unidecoder/data/x8a.yml +257 -0
- data/lib/unidecoder/data/x8b.yml +257 -0
- data/lib/unidecoder/data/x8c.yml +257 -0
- data/lib/unidecoder/data/x8d.yml +257 -0
- data/lib/unidecoder/data/x8e.yml +257 -0
- data/lib/unidecoder/data/x8f.yml +257 -0
- data/lib/unidecoder/data/x90.yml +257 -0
- data/lib/unidecoder/data/x91.yml +257 -0
- data/lib/unidecoder/data/x92.yml +257 -0
- data/lib/unidecoder/data/x93.yml +257 -0
- data/lib/unidecoder/data/x94.yml +257 -0
- data/lib/unidecoder/data/x95.yml +257 -0
- data/lib/unidecoder/data/x96.yml +257 -0
- data/lib/unidecoder/data/x97.yml +257 -0
- data/lib/unidecoder/data/x98.yml +257 -0
- data/lib/unidecoder/data/x99.yml +257 -0
- data/lib/unidecoder/data/x9a.yml +257 -0
- data/lib/unidecoder/data/x9b.yml +257 -0
- data/lib/unidecoder/data/x9c.yml +257 -0
- data/lib/unidecoder/data/x9d.yml +257 -0
- data/lib/unidecoder/data/x9e.yml +257 -0
- data/lib/unidecoder/data/x9f.yml +256 -0
- data/lib/unidecoder/data/xa0.yml +257 -0
- data/lib/unidecoder/data/xa1.yml +257 -0
- data/lib/unidecoder/data/xa2.yml +257 -0
- data/lib/unidecoder/data/xa3.yml +257 -0
- data/lib/unidecoder/data/xa4.yml +256 -0
- data/lib/unidecoder/data/xac.yml +257 -0
- data/lib/unidecoder/data/xad.yml +257 -0
- data/lib/unidecoder/data/xae.yml +257 -0
- data/lib/unidecoder/data/xaf.yml +257 -0
- data/lib/unidecoder/data/xb0.yml +257 -0
- data/lib/unidecoder/data/xb1.yml +257 -0
- data/lib/unidecoder/data/xb2.yml +257 -0
- data/lib/unidecoder/data/xb3.yml +257 -0
- data/lib/unidecoder/data/xb4.yml +257 -0
- data/lib/unidecoder/data/xb5.yml +257 -0
- data/lib/unidecoder/data/xb6.yml +257 -0
- data/lib/unidecoder/data/xb7.yml +257 -0
- data/lib/unidecoder/data/xb8.yml +257 -0
- data/lib/unidecoder/data/xb9.yml +257 -0
- data/lib/unidecoder/data/xba.yml +257 -0
- data/lib/unidecoder/data/xbb.yml +257 -0
- data/lib/unidecoder/data/xbc.yml +257 -0
- data/lib/unidecoder/data/xbd.yml +257 -0
- data/lib/unidecoder/data/xbe.yml +257 -0
- data/lib/unidecoder/data/xbf.yml +257 -0
- data/lib/unidecoder/data/xc0.yml +257 -0
- data/lib/unidecoder/data/xc1.yml +257 -0
- data/lib/unidecoder/data/xc2.yml +257 -0
- data/lib/unidecoder/data/xc3.yml +257 -0
- data/lib/unidecoder/data/xc4.yml +257 -0
- data/lib/unidecoder/data/xc5.yml +257 -0
- data/lib/unidecoder/data/xc6.yml +257 -0
- data/lib/unidecoder/data/xc7.yml +257 -0
- data/lib/unidecoder/data/xc8.yml +257 -0
- data/lib/unidecoder/data/xc9.yml +257 -0
- data/lib/unidecoder/data/xca.yml +257 -0
- data/lib/unidecoder/data/xcb.yml +257 -0
- data/lib/unidecoder/data/xcc.yml +257 -0
- data/lib/unidecoder/data/xcd.yml +257 -0
- data/lib/unidecoder/data/xce.yml +257 -0
- data/lib/unidecoder/data/xcf.yml +257 -0
- data/lib/unidecoder/data/xd0.yml +257 -0
- data/lib/unidecoder/data/xd1.yml +257 -0
- data/lib/unidecoder/data/xd2.yml +257 -0
- data/lib/unidecoder/data/xd3.yml +257 -0
- data/lib/unidecoder/data/xd4.yml +257 -0
- data/lib/unidecoder/data/xd5.yml +257 -0
- data/lib/unidecoder/data/xd6.yml +257 -0
- data/lib/unidecoder/data/xd7.yml +256 -0
- data/lib/unidecoder/data/xf9.yml +257 -0
- data/lib/unidecoder/data/xfa.yml +256 -0
- data/lib/unidecoder/data/xfb.yml +257 -0
- data/lib/unidecoder/data/xfc.yml +257 -0
- data/lib/unidecoder/data/xfd.yml +256 -0
- data/lib/unidecoder/data/xfe.yml +257 -0
- data/lib/unidecoder/data/xff.yml +257 -0
- data/lib/unidecoder/version.rb +9 -0
- data/test/unicode_point_suite/basic_latin_test.rb +144 -0
- data/test/unicode_point_suite/codepoint_test_helper.rb +28 -0
- data/test/unidecoder_test.rb +114 -0
- metadata +238 -0
data/Changelog.md
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# Unidecoder Changelog
|
2
|
+
|
3
|
+
## 1.1.1 2010-08-11
|
4
|
+
|
5
|
+
* Added some missing transliterations.
|
6
|
+
* Fixed some other incorrect transliterations.
|
7
|
+
|
8
|
+
## 1.1.0 2010-06-23
|
9
|
+
|
10
|
+
* Ability to override transliterations.
|
11
|
+
* Better Unicode validation.
|
12
|
+
* Cleanups and refactoring.
|
13
|
+
|
14
|
+
## 1.0.0 2009-02-20
|
15
|
+
|
16
|
+
* Unidecoder extracted from Stringex and released as independent gem.
|
data/README.md
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# Unidecoder
|
2
|
+
|
3
|
+
This library provides methods to transliterate Unicode characters to an ASCII
|
4
|
+
approximation.
|
5
|
+
|
6
|
+
The functionality in this library was originally written by [Russel Norris](http://github.com/rsl)
|
7
|
+
for his [Stringex library](http://github.com/rsl/stringex). This gem is an
|
8
|
+
extraction of the Unicode transliteration functionality from Stringex into a
|
9
|
+
separate library with some added functionality.
|
10
|
+
|
11
|
+
The Unidecoder component of Stringex is itself a port of Sean M. Burke's
|
12
|
+
[Unidecode](http://search.cpan.org/dist/Text-Unidecode/lib/Text/Unidecode.pm)
|
13
|
+
Perl module.
|
14
|
+
|
15
|
+
## Installation
|
16
|
+
|
17
|
+
gem install unidecoder
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
"olá, mundo!".to_ascii #=> "ola, mundo!"
|
22
|
+
"你好".to_ascii #=> "Ni Hao "
|
23
|
+
"Jürgen Müller".to_ascii #=> "Jurgen Muller"
|
24
|
+
"Jürgen Müller".to_ascii("ü" => "ue") #=> "Juergen Mueller"
|
25
|
+
|
26
|
+
## Extra stuff
|
27
|
+
|
28
|
+
If you also install either the [Unicode](http://github.com/blackwinter/unicode)
|
29
|
+
**or** [Active Support](http://github.com/rails/rails) gems, Unidecoder will
|
30
|
+
also perform Unicode normalization before attempting to transliterate strings
|
31
|
+
to ASCII.
|
32
|
+
|
33
|
+
## Warnings
|
34
|
+
|
35
|
+
While this is a neat trick, in practice many transliterations end up being
|
36
|
+
fairly useless. For example, all Chinese characters are transliterated to
|
37
|
+
Mandarin Chinese. Since Japanese uses Chinese characters writing, but
|
38
|
+
pronounces them differently from Mandarin, this makes the transliteration of
|
39
|
+
Japanese with this library useless.
|
40
|
+
|
41
|
+
Some languages, like Russian, would most correctly transliterate some letters
|
42
|
+
based on context, rather than a 1-1 mapping with ASCII. This library does not
|
43
|
+
do that.
|
44
|
+
|
45
|
+
Other languages, like Hebrew and Arabic, don't write vowels, but assume them
|
46
|
+
from context, so the ASCII representation of these langages given by this
|
47
|
+
library will look fairly ugly to native speakers.
|
48
|
+
|
49
|
+
Basically, your milage may vary. I don't speak every language used by this
|
50
|
+
library, so there are certain to be limitations and errors. Your feedback is
|
51
|
+
most appreciated!
|
data/Rakefile
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require "rake"
|
2
|
+
require "rake/testtask"
|
3
|
+
require "rake/gempackagetask"
|
4
|
+
require "rake/clean"
|
5
|
+
|
6
|
+
task :default => :test
|
7
|
+
|
8
|
+
CLEAN << "pkg" << "doc" << "coverage" << ".yardoc"
|
9
|
+
Rake::GemPackageTask.new(eval(File.read("unidecoder.gemspec"))) { |pkg| }
|
10
|
+
Rake::TestTask.new(:test) { |t| t.pattern = "test/**/*_test.rb" }
|
11
|
+
|
12
|
+
begin
|
13
|
+
require "yard"
|
14
|
+
YARD::Rake::YardocTask.new do |t|
|
15
|
+
t.options = ["--output-dir=doc"]
|
16
|
+
end
|
17
|
+
rescue LoadError
|
18
|
+
end
|
19
|
+
|
20
|
+
begin
|
21
|
+
require "rcov/rcovtask"
|
22
|
+
Rcov::RcovTask.new do |r|
|
23
|
+
r.test_files = FileList["test/**/*_test.rb"]
|
24
|
+
r.verbose = true
|
25
|
+
r.rcov_opts << "--exclude gems/*"
|
26
|
+
end
|
27
|
+
rescue LoadError
|
28
|
+
end
|
data/lib/unidecoder.rb
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
require "yaml"
|
2
|
+
|
3
|
+
# Utilities for transliterating UTF-8 strings to ASCII.
|
4
|
+
module Unidecoder
|
5
|
+
|
6
|
+
# Contains Unicode codepoints, loading as needed from YAML files.
|
7
|
+
CODEPOINTS = Hash.new { |h, k|
|
8
|
+
h[k] = YAML::load_file(File.expand_path("../unidecoder/data/#{k}.yml", __FILE__))
|
9
|
+
} unless defined?(CODEPOINTS)
|
10
|
+
|
11
|
+
module StringExtensions
|
12
|
+
# Returns string with its UTF-8 characters transliterated to ASCII ones. Example:
|
13
|
+
#
|
14
|
+
# "⠋⠗⠁⠝⠉⠑".to_ascii #=> "braille"
|
15
|
+
def to_ascii(*args)
|
16
|
+
Unidecoder.decode(self, *args)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
extend self
|
21
|
+
# Transliterates UTF-8 characters to ASCII.
|
22
|
+
#
|
23
|
+
# @param [#to_s] string The string or string-like object to transliterate.
|
24
|
+
# @param [Hash] overrides A Hash of UTF-8 to ASCII characters to use in
|
25
|
+
# place of the defaults. This can be used for language-specific
|
26
|
+
# transliterations.
|
27
|
+
#
|
28
|
+
# @example
|
29
|
+
#
|
30
|
+
# Unidecoder.decode("你好") #=> "Ni Hao"
|
31
|
+
# Unidecoder.decode("Jürgen Müller", "ü" => "ue") #=> "Juergen Mueller"
|
32
|
+
# Unidecoder.decode("feliz año", "ñ" => "ni") #=> #=> "feliz anio"
|
33
|
+
#
|
34
|
+
# @return [String] The transliterated string.
|
35
|
+
def decode(string, overrides = nil)
|
36
|
+
validate_utf8!(string)
|
37
|
+
normalize(string.to_s).gsub(/[^\x00-\x7f]/u) do |char|
|
38
|
+
begin
|
39
|
+
decode_overridden(char, overrides) or decode_char(char)
|
40
|
+
rescue
|
41
|
+
"?"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def validate_utf8!(string)
|
47
|
+
string.unpack("U*")
|
48
|
+
end
|
49
|
+
|
50
|
+
# Returns a UTF-8 character for the given UTF-8 codepoint
|
51
|
+
def encode(codepoint)
|
52
|
+
[codepoint.to_i(16)].pack("U")
|
53
|
+
end
|
54
|
+
|
55
|
+
# Returns string indicating which file (and line) contains the
|
56
|
+
# transliteration value for the character. This is useful only for
|
57
|
+
# development.
|
58
|
+
def in_yaml_file(character)
|
59
|
+
unpacked = character.unpack("U")[0]
|
60
|
+
"#{code_group(unpacked)}.yml (line #{grouped_point(unpacked) + 2})"
|
61
|
+
end
|
62
|
+
|
63
|
+
def define_normalize(library = nil, &block)
|
64
|
+
return if method_defined? :normalize
|
65
|
+
begin
|
66
|
+
require library if library
|
67
|
+
define_method(:normalize, &block)
|
68
|
+
rescue LoadError
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
define_normalize("unicode") {|str| Unicode.normalize_C(str)}
|
73
|
+
define_normalize("active_support") {|str| ActiveSupport::Multibyte::Chars.new(str).normalize(:c).to_s}
|
74
|
+
define_normalize {|str| str}
|
75
|
+
|
76
|
+
def decode_char(char)
|
77
|
+
unpacked = char.unpack("U")[0]
|
78
|
+
CODEPOINTS[code_group(unpacked)][grouped_point(unpacked)]
|
79
|
+
end
|
80
|
+
|
81
|
+
def decode_overridden(char, overrides)
|
82
|
+
overrides[char] if overrides
|
83
|
+
end
|
84
|
+
|
85
|
+
# Returns the Unicode codepoint grouping for the given character
|
86
|
+
def code_group(unpacked_character)
|
87
|
+
"x%02x" % (unpacked_character >> 8)
|
88
|
+
end
|
89
|
+
|
90
|
+
# Returns the index of the given character in the YAML file for its codepoint group
|
91
|
+
def grouped_point(unpacked_character)
|
92
|
+
unpacked_character & 255
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
class String
|
97
|
+
include Unidecoder::StringExtensions
|
98
|
+
end
|
@@ -0,0 +1,257 @@
|
|
1
|
+
---
|
2
|
+
- "\x00"
|
3
|
+
- "\x01"
|
4
|
+
- "\x02"
|
5
|
+
- "\x03"
|
6
|
+
- "\x04"
|
7
|
+
- "\x05"
|
8
|
+
- "\x06"
|
9
|
+
- "\a"
|
10
|
+
- "\x08"
|
11
|
+
- ' '
|
12
|
+
- "\n"
|
13
|
+
- "\v"
|
14
|
+
- "\f"
|
15
|
+
- "\r"
|
16
|
+
- "\x0e"
|
17
|
+
- "\x0f"
|
18
|
+
- "\x10"
|
19
|
+
- "\x11"
|
20
|
+
- "\x12"
|
21
|
+
- "\x13"
|
22
|
+
- "\x14"
|
23
|
+
- "\x15"
|
24
|
+
- "\x16"
|
25
|
+
- "\x17"
|
26
|
+
- "\x18"
|
27
|
+
- "\x19"
|
28
|
+
- "\x1a"
|
29
|
+
- "\e"
|
30
|
+
- "\x1c"
|
31
|
+
- "\x1d"
|
32
|
+
- "\x1e"
|
33
|
+
- "\x1f"
|
34
|
+
- ' '
|
35
|
+
- '!'
|
36
|
+
- '"'
|
37
|
+
- '#'
|
38
|
+
- $
|
39
|
+
- '%'
|
40
|
+
- '&'
|
41
|
+
- "'"
|
42
|
+
- (
|
43
|
+
- )
|
44
|
+
- '*'
|
45
|
+
- +
|
46
|
+
- ','
|
47
|
+
- '-'
|
48
|
+
- .
|
49
|
+
- /
|
50
|
+
- 0
|
51
|
+
- 1
|
52
|
+
- 2
|
53
|
+
- 3
|
54
|
+
- 4
|
55
|
+
- 5
|
56
|
+
- 6
|
57
|
+
- 7
|
58
|
+
- 8
|
59
|
+
- 9
|
60
|
+
- ':'
|
61
|
+
- ;
|
62
|
+
- <
|
63
|
+
- '='
|
64
|
+
- '>'
|
65
|
+
- '?'
|
66
|
+
- '@'
|
67
|
+
- A
|
68
|
+
- B
|
69
|
+
- C
|
70
|
+
- D
|
71
|
+
- E
|
72
|
+
- F
|
73
|
+
- G
|
74
|
+
- H
|
75
|
+
- I
|
76
|
+
- J
|
77
|
+
- K
|
78
|
+
- L
|
79
|
+
- M
|
80
|
+
- N
|
81
|
+
- O
|
82
|
+
- P
|
83
|
+
- Q
|
84
|
+
- R
|
85
|
+
- S
|
86
|
+
- T
|
87
|
+
- U
|
88
|
+
- V
|
89
|
+
- W
|
90
|
+
- X
|
91
|
+
- Y
|
92
|
+
- Z
|
93
|
+
- ']'
|
94
|
+
- \
|
95
|
+
- ']'
|
96
|
+
- '^'
|
97
|
+
- _
|
98
|
+
- '`'
|
99
|
+
- a
|
100
|
+
- b
|
101
|
+
- c
|
102
|
+
- d
|
103
|
+
- e
|
104
|
+
- f
|
105
|
+
- g
|
106
|
+
- h
|
107
|
+
- i
|
108
|
+
- j
|
109
|
+
- k
|
110
|
+
- l
|
111
|
+
- m
|
112
|
+
- n
|
113
|
+
- o
|
114
|
+
- p
|
115
|
+
- q
|
116
|
+
- r
|
117
|
+
- s
|
118
|
+
- t
|
119
|
+
- u
|
120
|
+
- v
|
121
|
+
- w
|
122
|
+
- x
|
123
|
+
- y
|
124
|
+
- z
|
125
|
+
- '{'
|
126
|
+
- '|'
|
127
|
+
- '}'
|
128
|
+
- '~'
|
129
|
+
- ''
|
130
|
+
- ''
|
131
|
+
- ''
|
132
|
+
- ''
|
133
|
+
- ''
|
134
|
+
- ''
|
135
|
+
- ''
|
136
|
+
- ''
|
137
|
+
- ''
|
138
|
+
- ''
|
139
|
+
- ''
|
140
|
+
- ''
|
141
|
+
- ''
|
142
|
+
- ''
|
143
|
+
- ''
|
144
|
+
- ''
|
145
|
+
- ''
|
146
|
+
- ''
|
147
|
+
- "'"
|
148
|
+
- "'"
|
149
|
+
- '"'
|
150
|
+
- '"'
|
151
|
+
- ''
|
152
|
+
- ''
|
153
|
+
- ''
|
154
|
+
- ''
|
155
|
+
- ''
|
156
|
+
- ''
|
157
|
+
- ''
|
158
|
+
- ''
|
159
|
+
- ''
|
160
|
+
- ''
|
161
|
+
- ''
|
162
|
+
- ' '
|
163
|
+
- ''
|
164
|
+
- C/
|
165
|
+
- PS
|
166
|
+
- $?
|
167
|
+
- Y=
|
168
|
+
- '|'
|
169
|
+
- SS
|
170
|
+
- '"'
|
171
|
+
- (c)
|
172
|
+
- a
|
173
|
+
- '<<'
|
174
|
+
- '!'
|
175
|
+
- ''
|
176
|
+
- (r)
|
177
|
+
- '-'
|
178
|
+
- deg
|
179
|
+
- +-
|
180
|
+
- 2
|
181
|
+
- 3
|
182
|
+
- "'"
|
183
|
+
- u
|
184
|
+
- P
|
185
|
+
- ';'
|
186
|
+
- ','
|
187
|
+
- 1
|
188
|
+
- o
|
189
|
+
- '>>'
|
190
|
+
- 1/4
|
191
|
+
- 1/2
|
192
|
+
- 3/4
|
193
|
+
- ''
|
194
|
+
- A
|
195
|
+
- A
|
196
|
+
- A
|
197
|
+
- A
|
198
|
+
- A
|
199
|
+
- A
|
200
|
+
- AE
|
201
|
+
- C
|
202
|
+
- E
|
203
|
+
- E
|
204
|
+
- E
|
205
|
+
- E
|
206
|
+
- I
|
207
|
+
- I
|
208
|
+
- I
|
209
|
+
- I
|
210
|
+
- D
|
211
|
+
- N
|
212
|
+
- O
|
213
|
+
- O
|
214
|
+
- O
|
215
|
+
- O
|
216
|
+
- O
|
217
|
+
- x
|
218
|
+
- O
|
219
|
+
- U
|
220
|
+
- U
|
221
|
+
- U
|
222
|
+
- U
|
223
|
+
- Y
|
224
|
+
- Th
|
225
|
+
- ss
|
226
|
+
- a
|
227
|
+
- a
|
228
|
+
- a
|
229
|
+
- a
|
230
|
+
- a
|
231
|
+
- a
|
232
|
+
- ae
|
233
|
+
- c
|
234
|
+
- e
|
235
|
+
- e
|
236
|
+
- e
|
237
|
+
- e
|
238
|
+
- i
|
239
|
+
- i
|
240
|
+
- i
|
241
|
+
- i
|
242
|
+
- d
|
243
|
+
- n
|
244
|
+
- o
|
245
|
+
- o
|
246
|
+
- o
|
247
|
+
- o
|
248
|
+
- o
|
249
|
+
- /
|
250
|
+
- o
|
251
|
+
- u
|
252
|
+
- u
|
253
|
+
- u
|
254
|
+
- u
|
255
|
+
- y
|
256
|
+
- th
|
257
|
+
- y
|