talentbox-unidecoder 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (189) hide show
  1. data/Changelog.md +16 -0
  2. data/README.md +51 -0
  3. data/Rakefile +28 -0
  4. data/lib/unidecoder.rb +98 -0
  5. data/lib/unidecoder/data/x00.yml +257 -0
  6. data/lib/unidecoder/data/x01.yml +257 -0
  7. data/lib/unidecoder/data/x02.yml +256 -0
  8. data/lib/unidecoder/data/x03.yml +256 -0
  9. data/lib/unidecoder/data/x04.yml +256 -0
  10. data/lib/unidecoder/data/x05.yml +256 -0
  11. data/lib/unidecoder/data/x06.yml +256 -0
  12. data/lib/unidecoder/data/x07.yml +256 -0
  13. data/lib/unidecoder/data/x09.yml +256 -0
  14. data/lib/unidecoder/data/x0a.yml +256 -0
  15. data/lib/unidecoder/data/x0b.yml +256 -0
  16. data/lib/unidecoder/data/x0c.yml +256 -0
  17. data/lib/unidecoder/data/x0d.yml +256 -0
  18. data/lib/unidecoder/data/x0e.yml +256 -0
  19. data/lib/unidecoder/data/x0f.yml +256 -0
  20. data/lib/unidecoder/data/x10.yml +256 -0
  21. data/lib/unidecoder/data/x11.yml +256 -0
  22. data/lib/unidecoder/data/x12.yml +257 -0
  23. data/lib/unidecoder/data/x13.yml +256 -0
  24. data/lib/unidecoder/data/x14.yml +257 -0
  25. data/lib/unidecoder/data/x15.yml +257 -0
  26. data/lib/unidecoder/data/x16.yml +256 -0
  27. data/lib/unidecoder/data/x17.yml +256 -0
  28. data/lib/unidecoder/data/x18.yml +256 -0
  29. data/lib/unidecoder/data/x1e.yml +256 -0
  30. data/lib/unidecoder/data/x1f.yml +256 -0
  31. data/lib/unidecoder/data/x20.yml +256 -0
  32. data/lib/unidecoder/data/x21.yml +256 -0
  33. data/lib/unidecoder/data/x22.yml +256 -0
  34. data/lib/unidecoder/data/x23.yml +256 -0
  35. data/lib/unidecoder/data/x24.yml +256 -0
  36. data/lib/unidecoder/data/x25.yml +256 -0
  37. data/lib/unidecoder/data/x26.yml +256 -0
  38. data/lib/unidecoder/data/x27.yml +256 -0
  39. data/lib/unidecoder/data/x28.yml +257 -0
  40. data/lib/unidecoder/data/x2e.yml +256 -0
  41. data/lib/unidecoder/data/x2f.yml +256 -0
  42. data/lib/unidecoder/data/x30.yml +256 -0
  43. data/lib/unidecoder/data/x31.yml +256 -0
  44. data/lib/unidecoder/data/x32.yml +256 -0
  45. data/lib/unidecoder/data/x33.yml +256 -0
  46. data/lib/unidecoder/data/x4d.yml +256 -0
  47. data/lib/unidecoder/data/x4e.yml +257 -0
  48. data/lib/unidecoder/data/x4f.yml +257 -0
  49. data/lib/unidecoder/data/x50.yml +257 -0
  50. data/lib/unidecoder/data/x51.yml +257 -0
  51. data/lib/unidecoder/data/x52.yml +257 -0
  52. data/lib/unidecoder/data/x53.yml +257 -0
  53. data/lib/unidecoder/data/x54.yml +257 -0
  54. data/lib/unidecoder/data/x55.yml +257 -0
  55. data/lib/unidecoder/data/x56.yml +257 -0
  56. data/lib/unidecoder/data/x57.yml +257 -0
  57. data/lib/unidecoder/data/x58.yml +257 -0
  58. data/lib/unidecoder/data/x59.yml +257 -0
  59. data/lib/unidecoder/data/x5a.yml +257 -0
  60. data/lib/unidecoder/data/x5b.yml +257 -0
  61. data/lib/unidecoder/data/x5c.yml +257 -0
  62. data/lib/unidecoder/data/x5d.yml +257 -0
  63. data/lib/unidecoder/data/x5e.yml +257 -0
  64. data/lib/unidecoder/data/x5f.yml +257 -0
  65. data/lib/unidecoder/data/x60.yml +257 -0
  66. data/lib/unidecoder/data/x61.yml +257 -0
  67. data/lib/unidecoder/data/x62.yml +257 -0
  68. data/lib/unidecoder/data/x63.yml +257 -0
  69. data/lib/unidecoder/data/x64.yml +257 -0
  70. data/lib/unidecoder/data/x65.yml +257 -0
  71. data/lib/unidecoder/data/x66.yml +257 -0
  72. data/lib/unidecoder/data/x67.yml +257 -0
  73. data/lib/unidecoder/data/x68.yml +257 -0
  74. data/lib/unidecoder/data/x69.yml +257 -0
  75. data/lib/unidecoder/data/x6a.yml +257 -0
  76. data/lib/unidecoder/data/x6b.yml +257 -0
  77. data/lib/unidecoder/data/x6c.yml +257 -0
  78. data/lib/unidecoder/data/x6d.yml +257 -0
  79. data/lib/unidecoder/data/x6e.yml +257 -0
  80. data/lib/unidecoder/data/x6f.yml +257 -0
  81. data/lib/unidecoder/data/x70.yml +257 -0
  82. data/lib/unidecoder/data/x71.yml +257 -0
  83. data/lib/unidecoder/data/x72.yml +257 -0
  84. data/lib/unidecoder/data/x73.yml +257 -0
  85. data/lib/unidecoder/data/x74.yml +257 -0
  86. data/lib/unidecoder/data/x75.yml +257 -0
  87. data/lib/unidecoder/data/x76.yml +257 -0
  88. data/lib/unidecoder/data/x77.yml +257 -0
  89. data/lib/unidecoder/data/x78.yml +257 -0
  90. data/lib/unidecoder/data/x79.yml +257 -0
  91. data/lib/unidecoder/data/x7a.yml +257 -0
  92. data/lib/unidecoder/data/x7b.yml +257 -0
  93. data/lib/unidecoder/data/x7c.yml +257 -0
  94. data/lib/unidecoder/data/x7d.yml +257 -0
  95. data/lib/unidecoder/data/x7e.yml +257 -0
  96. data/lib/unidecoder/data/x7f.yml +257 -0
  97. data/lib/unidecoder/data/x80.yml +257 -0
  98. data/lib/unidecoder/data/x81.yml +257 -0
  99. data/lib/unidecoder/data/x82.yml +257 -0
  100. data/lib/unidecoder/data/x83.yml +257 -0
  101. data/lib/unidecoder/data/x84.yml +257 -0
  102. data/lib/unidecoder/data/x85.yml +257 -0
  103. data/lib/unidecoder/data/x86.yml +257 -0
  104. data/lib/unidecoder/data/x87.yml +257 -0
  105. data/lib/unidecoder/data/x88.yml +257 -0
  106. data/lib/unidecoder/data/x89.yml +257 -0
  107. data/lib/unidecoder/data/x8a.yml +257 -0
  108. data/lib/unidecoder/data/x8b.yml +257 -0
  109. data/lib/unidecoder/data/x8c.yml +257 -0
  110. data/lib/unidecoder/data/x8d.yml +257 -0
  111. data/lib/unidecoder/data/x8e.yml +257 -0
  112. data/lib/unidecoder/data/x8f.yml +257 -0
  113. data/lib/unidecoder/data/x90.yml +257 -0
  114. data/lib/unidecoder/data/x91.yml +257 -0
  115. data/lib/unidecoder/data/x92.yml +257 -0
  116. data/lib/unidecoder/data/x93.yml +257 -0
  117. data/lib/unidecoder/data/x94.yml +257 -0
  118. data/lib/unidecoder/data/x95.yml +257 -0
  119. data/lib/unidecoder/data/x96.yml +257 -0
  120. data/lib/unidecoder/data/x97.yml +257 -0
  121. data/lib/unidecoder/data/x98.yml +257 -0
  122. data/lib/unidecoder/data/x99.yml +257 -0
  123. data/lib/unidecoder/data/x9a.yml +257 -0
  124. data/lib/unidecoder/data/x9b.yml +257 -0
  125. data/lib/unidecoder/data/x9c.yml +257 -0
  126. data/lib/unidecoder/data/x9d.yml +257 -0
  127. data/lib/unidecoder/data/x9e.yml +257 -0
  128. data/lib/unidecoder/data/x9f.yml +256 -0
  129. data/lib/unidecoder/data/xa0.yml +257 -0
  130. data/lib/unidecoder/data/xa1.yml +257 -0
  131. data/lib/unidecoder/data/xa2.yml +257 -0
  132. data/lib/unidecoder/data/xa3.yml +257 -0
  133. data/lib/unidecoder/data/xa4.yml +256 -0
  134. data/lib/unidecoder/data/xac.yml +257 -0
  135. data/lib/unidecoder/data/xad.yml +257 -0
  136. data/lib/unidecoder/data/xae.yml +257 -0
  137. data/lib/unidecoder/data/xaf.yml +257 -0
  138. data/lib/unidecoder/data/xb0.yml +257 -0
  139. data/lib/unidecoder/data/xb1.yml +257 -0
  140. data/lib/unidecoder/data/xb2.yml +257 -0
  141. data/lib/unidecoder/data/xb3.yml +257 -0
  142. data/lib/unidecoder/data/xb4.yml +257 -0
  143. data/lib/unidecoder/data/xb5.yml +257 -0
  144. data/lib/unidecoder/data/xb6.yml +257 -0
  145. data/lib/unidecoder/data/xb7.yml +257 -0
  146. data/lib/unidecoder/data/xb8.yml +257 -0
  147. data/lib/unidecoder/data/xb9.yml +257 -0
  148. data/lib/unidecoder/data/xba.yml +257 -0
  149. data/lib/unidecoder/data/xbb.yml +257 -0
  150. data/lib/unidecoder/data/xbc.yml +257 -0
  151. data/lib/unidecoder/data/xbd.yml +257 -0
  152. data/lib/unidecoder/data/xbe.yml +257 -0
  153. data/lib/unidecoder/data/xbf.yml +257 -0
  154. data/lib/unidecoder/data/xc0.yml +257 -0
  155. data/lib/unidecoder/data/xc1.yml +257 -0
  156. data/lib/unidecoder/data/xc2.yml +257 -0
  157. data/lib/unidecoder/data/xc3.yml +257 -0
  158. data/lib/unidecoder/data/xc4.yml +257 -0
  159. data/lib/unidecoder/data/xc5.yml +257 -0
  160. data/lib/unidecoder/data/xc6.yml +257 -0
  161. data/lib/unidecoder/data/xc7.yml +257 -0
  162. data/lib/unidecoder/data/xc8.yml +257 -0
  163. data/lib/unidecoder/data/xc9.yml +257 -0
  164. data/lib/unidecoder/data/xca.yml +257 -0
  165. data/lib/unidecoder/data/xcb.yml +257 -0
  166. data/lib/unidecoder/data/xcc.yml +257 -0
  167. data/lib/unidecoder/data/xcd.yml +257 -0
  168. data/lib/unidecoder/data/xce.yml +257 -0
  169. data/lib/unidecoder/data/xcf.yml +257 -0
  170. data/lib/unidecoder/data/xd0.yml +257 -0
  171. data/lib/unidecoder/data/xd1.yml +257 -0
  172. data/lib/unidecoder/data/xd2.yml +257 -0
  173. data/lib/unidecoder/data/xd3.yml +257 -0
  174. data/lib/unidecoder/data/xd4.yml +257 -0
  175. data/lib/unidecoder/data/xd5.yml +257 -0
  176. data/lib/unidecoder/data/xd6.yml +257 -0
  177. data/lib/unidecoder/data/xd7.yml +256 -0
  178. data/lib/unidecoder/data/xf9.yml +257 -0
  179. data/lib/unidecoder/data/xfa.yml +256 -0
  180. data/lib/unidecoder/data/xfb.yml +257 -0
  181. data/lib/unidecoder/data/xfc.yml +257 -0
  182. data/lib/unidecoder/data/xfd.yml +256 -0
  183. data/lib/unidecoder/data/xfe.yml +257 -0
  184. data/lib/unidecoder/data/xff.yml +257 -0
  185. data/lib/unidecoder/version.rb +9 -0
  186. data/test/unicode_point_suite/basic_latin_test.rb +144 -0
  187. data/test/unicode_point_suite/codepoint_test_helper.rb +28 -0
  188. data/test/unidecoder_test.rb +114 -0
  189. 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