talentbox-unidecoder 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|