ascii 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.
Files changed (195) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.travis.yml +5 -0
  4. data/Gemfile +7 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +48 -0
  7. data/Rakefile +6 -0
  8. data/ascii.gemspec +19 -0
  9. data/data/x00.yml +257 -0
  10. data/data/x01.yml +257 -0
  11. data/data/x02.yml +256 -0
  12. data/data/x03.yml +256 -0
  13. data/data/x04.yml +256 -0
  14. data/data/x05.yml +256 -0
  15. data/data/x06.yml +256 -0
  16. data/data/x07.yml +256 -0
  17. data/data/x09.yml +256 -0
  18. data/data/x0a.yml +256 -0
  19. data/data/x0b.yml +256 -0
  20. data/data/x0c.yml +256 -0
  21. data/data/x0d.yml +256 -0
  22. data/data/x0e.yml +256 -0
  23. data/data/x0f.yml +256 -0
  24. data/data/x10.yml +256 -0
  25. data/data/x11.yml +256 -0
  26. data/data/x12.yml +257 -0
  27. data/data/x13.yml +256 -0
  28. data/data/x14.yml +257 -0
  29. data/data/x15.yml +257 -0
  30. data/data/x16.yml +256 -0
  31. data/data/x17.yml +256 -0
  32. data/data/x18.yml +256 -0
  33. data/data/x1e.yml +256 -0
  34. data/data/x1f.yml +256 -0
  35. data/data/x20.yml +256 -0
  36. data/data/x21.yml +256 -0
  37. data/data/x22.yml +256 -0
  38. data/data/x23.yml +256 -0
  39. data/data/x24.yml +256 -0
  40. data/data/x25.yml +256 -0
  41. data/data/x26.yml +256 -0
  42. data/data/x27.yml +256 -0
  43. data/data/x28.yml +257 -0
  44. data/data/x2e.yml +256 -0
  45. data/data/x2f.yml +256 -0
  46. data/data/x30.yml +256 -0
  47. data/data/x31.yml +256 -0
  48. data/data/x32.yml +256 -0
  49. data/data/x33.yml +256 -0
  50. data/data/x4d.yml +256 -0
  51. data/data/x4e.yml +257 -0
  52. data/data/x4f.yml +257 -0
  53. data/data/x50.yml +257 -0
  54. data/data/x51.yml +257 -0
  55. data/data/x52.yml +257 -0
  56. data/data/x53.yml +257 -0
  57. data/data/x54.yml +257 -0
  58. data/data/x55.yml +257 -0
  59. data/data/x56.yml +257 -0
  60. data/data/x57.yml +257 -0
  61. data/data/x58.yml +257 -0
  62. data/data/x59.yml +257 -0
  63. data/data/x5a.yml +257 -0
  64. data/data/x5b.yml +257 -0
  65. data/data/x5c.yml +257 -0
  66. data/data/x5d.yml +257 -0
  67. data/data/x5e.yml +257 -0
  68. data/data/x5f.yml +257 -0
  69. data/data/x60.yml +257 -0
  70. data/data/x61.yml +257 -0
  71. data/data/x62.yml +257 -0
  72. data/data/x63.yml +257 -0
  73. data/data/x64.yml +257 -0
  74. data/data/x65.yml +257 -0
  75. data/data/x66.yml +257 -0
  76. data/data/x67.yml +257 -0
  77. data/data/x68.yml +257 -0
  78. data/data/x69.yml +257 -0
  79. data/data/x6a.yml +257 -0
  80. data/data/x6b.yml +257 -0
  81. data/data/x6c.yml +257 -0
  82. data/data/x6d.yml +257 -0
  83. data/data/x6e.yml +257 -0
  84. data/data/x6f.yml +257 -0
  85. data/data/x70.yml +257 -0
  86. data/data/x71.yml +257 -0
  87. data/data/x72.yml +257 -0
  88. data/data/x73.yml +257 -0
  89. data/data/x74.yml +257 -0
  90. data/data/x75.yml +257 -0
  91. data/data/x76.yml +257 -0
  92. data/data/x77.yml +257 -0
  93. data/data/x78.yml +257 -0
  94. data/data/x79.yml +257 -0
  95. data/data/x7a.yml +257 -0
  96. data/data/x7b.yml +257 -0
  97. data/data/x7c.yml +257 -0
  98. data/data/x7d.yml +257 -0
  99. data/data/x7e.yml +257 -0
  100. data/data/x7f.yml +257 -0
  101. data/data/x80.yml +257 -0
  102. data/data/x81.yml +257 -0
  103. data/data/x82.yml +257 -0
  104. data/data/x83.yml +257 -0
  105. data/data/x84.yml +257 -0
  106. data/data/x85.yml +257 -0
  107. data/data/x86.yml +257 -0
  108. data/data/x87.yml +257 -0
  109. data/data/x88.yml +257 -0
  110. data/data/x89.yml +257 -0
  111. data/data/x8a.yml +257 -0
  112. data/data/x8b.yml +257 -0
  113. data/data/x8c.yml +257 -0
  114. data/data/x8d.yml +257 -0
  115. data/data/x8e.yml +257 -0
  116. data/data/x8f.yml +257 -0
  117. data/data/x90.yml +257 -0
  118. data/data/x91.yml +257 -0
  119. data/data/x92.yml +257 -0
  120. data/data/x93.yml +257 -0
  121. data/data/x94.yml +257 -0
  122. data/data/x95.yml +257 -0
  123. data/data/x96.yml +257 -0
  124. data/data/x97.yml +257 -0
  125. data/data/x98.yml +257 -0
  126. data/data/x99.yml +257 -0
  127. data/data/x9a.yml +257 -0
  128. data/data/x9b.yml +257 -0
  129. data/data/x9c.yml +257 -0
  130. data/data/x9d.yml +257 -0
  131. data/data/x9e.yml +257 -0
  132. data/data/x9f.yml +256 -0
  133. data/data/xa0.yml +257 -0
  134. data/data/xa1.yml +257 -0
  135. data/data/xa2.yml +257 -0
  136. data/data/xa3.yml +257 -0
  137. data/data/xa4.yml +256 -0
  138. data/data/xac.yml +257 -0
  139. data/data/xad.yml +257 -0
  140. data/data/xae.yml +257 -0
  141. data/data/xaf.yml +257 -0
  142. data/data/xb0.yml +257 -0
  143. data/data/xb1.yml +257 -0
  144. data/data/xb2.yml +257 -0
  145. data/data/xb3.yml +257 -0
  146. data/data/xb4.yml +257 -0
  147. data/data/xb5.yml +257 -0
  148. data/data/xb6.yml +257 -0
  149. data/data/xb7.yml +257 -0
  150. data/data/xb8.yml +257 -0
  151. data/data/xb9.yml +257 -0
  152. data/data/xba.yml +257 -0
  153. data/data/xbb.yml +257 -0
  154. data/data/xbc.yml +257 -0
  155. data/data/xbd.yml +257 -0
  156. data/data/xbe.yml +257 -0
  157. data/data/xbf.yml +257 -0
  158. data/data/xc0.yml +257 -0
  159. data/data/xc1.yml +257 -0
  160. data/data/xc2.yml +257 -0
  161. data/data/xc3.yml +257 -0
  162. data/data/xc4.yml +257 -0
  163. data/data/xc5.yml +257 -0
  164. data/data/xc6.yml +257 -0
  165. data/data/xc7.yml +257 -0
  166. data/data/xc8.yml +257 -0
  167. data/data/xc9.yml +257 -0
  168. data/data/xca.yml +257 -0
  169. data/data/xcb.yml +257 -0
  170. data/data/xcc.yml +257 -0
  171. data/data/xcd.yml +257 -0
  172. data/data/xce.yml +257 -0
  173. data/data/xcf.yml +257 -0
  174. data/data/xd0.yml +257 -0
  175. data/data/xd1.yml +257 -0
  176. data/data/xd2.yml +257 -0
  177. data/data/xd3.yml +257 -0
  178. data/data/xd4.yml +257 -0
  179. data/data/xd5.yml +257 -0
  180. data/data/xd6.yml +257 -0
  181. data/data/xd7.yml +256 -0
  182. data/data/xf9.yml +257 -0
  183. data/data/xfa.yml +256 -0
  184. data/data/xfb.yml +257 -0
  185. data/data/xfc.yml +257 -0
  186. data/data/xfd.yml +256 -0
  187. data/data/xfe.yml +257 -0
  188. data/data/xff.yml +257 -0
  189. data/lib/ascii.rb +10 -0
  190. data/lib/ascii/codepoint.rb +34 -0
  191. data/lib/ascii/unidecoder.rb +21 -0
  192. data/lib/ascii/version.rb +3 -0
  193. data/spec/ascii_spec.rb +107 -0
  194. data/spec/spec_helper.rb +1 -0
  195. metadata +240 -0
@@ -0,0 +1,10 @@
1
+ require "ascii/unidecoder"
2
+ require "ascii/version"
3
+
4
+ module Ascii
5
+ extend self
6
+
7
+ def process(str)
8
+ Unidecoder.new(str).to_ascii
9
+ end
10
+ end
@@ -0,0 +1,34 @@
1
+ require "yaml"
2
+
3
+ module Ascii
4
+ class Codepoint
5
+ attr_reader :code
6
+
7
+ GROUPS = Hash.new do |hash, group_name|
8
+ filename = File.expand_path("../../../data/#{group_name}.yml", __FILE__)
9
+ hash[name] = YAML.load_file(filename)
10
+ end
11
+
12
+ def initialize(char)
13
+ @code = char.unpack("U").first
14
+ end
15
+
16
+ def decode
17
+ group.at(group_index)
18
+ end
19
+
20
+ private
21
+
22
+ def group
23
+ GROUPS[group_name]
24
+ end
25
+
26
+ def group_name
27
+ "x%02x" % (code >> 8)
28
+ end
29
+
30
+ def group_index
31
+ code & 255
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,21 @@
1
+ require "ascii/codepoint"
2
+
3
+ module Ascii
4
+ class Unidecoder
5
+ attr_reader :input
6
+
7
+ def initialize(input)
8
+ @input = input.to_s
9
+ end
10
+
11
+ def to_ascii
12
+ input.gsub(/[^\x00-\x7f]/u, &method(:decode)).strip
13
+ end
14
+
15
+ private
16
+
17
+ def decode(char)
18
+ Codepoint.new(char).decode
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,3 @@
1
+ module Ascii
2
+ VERSION = "1.0.0".freeze
3
+ end
@@ -0,0 +1,107 @@
1
+ # encoding: utf-8
2
+ require "spec_helper"
3
+
4
+ describe Ascii do
5
+ PURE_ASCII = [
6
+ "Vitrum edere possum; mihi non nocet.", # Latin
7
+ "Je puis mangier del voirre. Ne me nuit.", # Old French
8
+ "Kristala jan dezaket, ez dit minik ematen.", # Basque
9
+ "Kaya kong kumain nang bubog at hindi ako masaktan.", # Tagalog
10
+ "Ich kann Glas essen, ohne mir weh zu tun.", # German
11
+ "I can eat glass and it doesn't hurt me.", # English
12
+ ]
13
+
14
+ CONVERT = {
15
+ "French" => [
16
+ "Je peux manger du verre, ça ne me fait pas de mal.",
17
+ "Je peux manger du verre, ca ne me fait pas de mal."
18
+ ],
19
+
20
+ "Romanian" => [
21
+ "Pot să mănânc sticlă și ea nu mă rănește.",
22
+ "Pot sa mananc sticla si ea nu ma raneste."
23
+ ],
24
+
25
+ "Icelandic" => [
26
+ "Ég get etið gler án þess að meiða mig.",
27
+ "Eg get etid gler an thess ad meida mig."
28
+ ],
29
+
30
+ "Albanian" => [
31
+ "Unë mund të ha qelq dhe nuk më gjen gjë.",
32
+ "Une mund te ha qelq dhe nuk me gjen gje."
33
+ ],
34
+
35
+ "Polish" => [
36
+ "Mogę jeść szkło i mi nie szkodzi.",
37
+ "Moge jesc szklo i mi nie szkodzi."
38
+ ],
39
+
40
+ "Russian" => [
41
+ "Я могу есть стекло, оно мне не вредит.",
42
+ "Ia moghu iest' stieklo, ono mnie nie vriedit."
43
+ ],
44
+
45
+ "Bulgarian" => [
46
+ "Мога да ям стъкло, то не ми вреди.",
47
+ "Mogha da iam stklo, to nie mi vriedi."
48
+ ],
49
+
50
+ "Anglo-Saxon" => [
51
+ "ᛁᚳ᛫ᛗᚨᚷ᛫ᚷᛚᚨᛋ᛫ᛖᚩᛏᚪᚾ᛫ᚩᚾᛞ᛫ᚻᛁᛏ᛫ᚾᛖ᛫ᚻᛖᚪᚱᛗᛁᚪᚧ᛫ᛗᛖ᛬",
52
+ "ic.mag.glas.eotacn.ond.hit.ne.heacrmiacth.me:"
53
+ ],
54
+
55
+ "Classical Greek" => [
56
+ "ὕαλον ϕαγεῖν δύναμαι· τοῦτο οὔ με βλάπτει",
57
+ "ualon phagein dunamai; touto ou me blaptei"
58
+ ],
59
+
60
+ "Hindi" => [
61
+ "मैं काँच खा सकता हूँ और मुझे उससे कोई चोट नहीं पहुंचती",
62
+ "maiN kaaNc khaa sktaa huuN aur mujhe usse koii cott nhiiN phuNctii"
63
+ ],
64
+
65
+ "Thai" => [
66
+ "ฉันกินกระจกได้ แต่มันไม่ทำให้ฉันเจ็บ",
67
+ "chankinkracchkaid aetmanaimthamaihchanecchb"
68
+ ],
69
+
70
+ "Chinese" => [
71
+ "我能吞下玻璃而不伤身体。",
72
+ "Wo Neng Tun Xia Bo Li Er Bu Shang Shen Ti ."
73
+ ],
74
+
75
+ "Japanese" => [
76
+ "私はガラスを食べられます。それは私を傷つけません。",
77
+ "Si hagarasuwoShi beraremasu. sorehaSi woShang tukemasen."
78
+ ],
79
+
80
+ "Persian" => [
81
+ "من می توانم بدونِ احساس درد شيشه بخورم",
82
+ "mn my twnm bdwni Hss drd shyshh bkhwrm"
83
+ ],
84
+
85
+ "Arabic" => [
86
+ "أنا قادر على أكل الزجاج و هذا لا يؤلمن",
87
+ "'n qdr 'l~ 'kl lzjj w hdh l yw'lmn"
88
+ ],
89
+
90
+ "Hebrew" => [
91
+ "אני יכול לאכול זכוכית וזה לא מזיק לי",
92
+ "ny ykvl lkvl zkvkyt vzh l mzyq ly"
93
+ ]
94
+ }
95
+
96
+ PURE_ASCII.each do |phrase|
97
+ it "does not modify an ASCII phrase #{phrase.inspect}" do
98
+ expect(described_class.process(phrase)).to eq(phrase)
99
+ end
100
+ end
101
+
102
+ CONVERT.each do |language, (input, expected)|
103
+ it "converts a phrase in #{language} to ASCII" do
104
+ expect(described_class.process(input)).to eq(expected)
105
+ end
106
+ end
107
+ end
@@ -0,0 +1 @@
1
+ require "ascii"
metadata ADDED
@@ -0,0 +1,240 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ascii
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Pavel Pravosud
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-14 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: This library provides methods to transliterate Unicode characters to
14
+ an ASCII approximation
15
+ email:
16
+ - pavel@pravosud.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - ".gitignore"
22
+ - ".travis.yml"
23
+ - Gemfile
24
+ - LICENSE.txt
25
+ - README.md
26
+ - Rakefile
27
+ - ascii.gemspec
28
+ - data/x00.yml
29
+ - data/x01.yml
30
+ - data/x02.yml
31
+ - data/x03.yml
32
+ - data/x04.yml
33
+ - data/x05.yml
34
+ - data/x06.yml
35
+ - data/x07.yml
36
+ - data/x09.yml
37
+ - data/x0a.yml
38
+ - data/x0b.yml
39
+ - data/x0c.yml
40
+ - data/x0d.yml
41
+ - data/x0e.yml
42
+ - data/x0f.yml
43
+ - data/x10.yml
44
+ - data/x11.yml
45
+ - data/x12.yml
46
+ - data/x13.yml
47
+ - data/x14.yml
48
+ - data/x15.yml
49
+ - data/x16.yml
50
+ - data/x17.yml
51
+ - data/x18.yml
52
+ - data/x1e.yml
53
+ - data/x1f.yml
54
+ - data/x20.yml
55
+ - data/x21.yml
56
+ - data/x22.yml
57
+ - data/x23.yml
58
+ - data/x24.yml
59
+ - data/x25.yml
60
+ - data/x26.yml
61
+ - data/x27.yml
62
+ - data/x28.yml
63
+ - data/x2e.yml
64
+ - data/x2f.yml
65
+ - data/x30.yml
66
+ - data/x31.yml
67
+ - data/x32.yml
68
+ - data/x33.yml
69
+ - data/x4d.yml
70
+ - data/x4e.yml
71
+ - data/x4f.yml
72
+ - data/x50.yml
73
+ - data/x51.yml
74
+ - data/x52.yml
75
+ - data/x53.yml
76
+ - data/x54.yml
77
+ - data/x55.yml
78
+ - data/x56.yml
79
+ - data/x57.yml
80
+ - data/x58.yml
81
+ - data/x59.yml
82
+ - data/x5a.yml
83
+ - data/x5b.yml
84
+ - data/x5c.yml
85
+ - data/x5d.yml
86
+ - data/x5e.yml
87
+ - data/x5f.yml
88
+ - data/x60.yml
89
+ - data/x61.yml
90
+ - data/x62.yml
91
+ - data/x63.yml
92
+ - data/x64.yml
93
+ - data/x65.yml
94
+ - data/x66.yml
95
+ - data/x67.yml
96
+ - data/x68.yml
97
+ - data/x69.yml
98
+ - data/x6a.yml
99
+ - data/x6b.yml
100
+ - data/x6c.yml
101
+ - data/x6d.yml
102
+ - data/x6e.yml
103
+ - data/x6f.yml
104
+ - data/x70.yml
105
+ - data/x71.yml
106
+ - data/x72.yml
107
+ - data/x73.yml
108
+ - data/x74.yml
109
+ - data/x75.yml
110
+ - data/x76.yml
111
+ - data/x77.yml
112
+ - data/x78.yml
113
+ - data/x79.yml
114
+ - data/x7a.yml
115
+ - data/x7b.yml
116
+ - data/x7c.yml
117
+ - data/x7d.yml
118
+ - data/x7e.yml
119
+ - data/x7f.yml
120
+ - data/x80.yml
121
+ - data/x81.yml
122
+ - data/x82.yml
123
+ - data/x83.yml
124
+ - data/x84.yml
125
+ - data/x85.yml
126
+ - data/x86.yml
127
+ - data/x87.yml
128
+ - data/x88.yml
129
+ - data/x89.yml
130
+ - data/x8a.yml
131
+ - data/x8b.yml
132
+ - data/x8c.yml
133
+ - data/x8d.yml
134
+ - data/x8e.yml
135
+ - data/x8f.yml
136
+ - data/x90.yml
137
+ - data/x91.yml
138
+ - data/x92.yml
139
+ - data/x93.yml
140
+ - data/x94.yml
141
+ - data/x95.yml
142
+ - data/x96.yml
143
+ - data/x97.yml
144
+ - data/x98.yml
145
+ - data/x99.yml
146
+ - data/x9a.yml
147
+ - data/x9b.yml
148
+ - data/x9c.yml
149
+ - data/x9d.yml
150
+ - data/x9e.yml
151
+ - data/x9f.yml
152
+ - data/xa0.yml
153
+ - data/xa1.yml
154
+ - data/xa2.yml
155
+ - data/xa3.yml
156
+ - data/xa4.yml
157
+ - data/xac.yml
158
+ - data/xad.yml
159
+ - data/xae.yml
160
+ - data/xaf.yml
161
+ - data/xb0.yml
162
+ - data/xb1.yml
163
+ - data/xb2.yml
164
+ - data/xb3.yml
165
+ - data/xb4.yml
166
+ - data/xb5.yml
167
+ - data/xb6.yml
168
+ - data/xb7.yml
169
+ - data/xb8.yml
170
+ - data/xb9.yml
171
+ - data/xba.yml
172
+ - data/xbb.yml
173
+ - data/xbc.yml
174
+ - data/xbd.yml
175
+ - data/xbe.yml
176
+ - data/xbf.yml
177
+ - data/xc0.yml
178
+ - data/xc1.yml
179
+ - data/xc2.yml
180
+ - data/xc3.yml
181
+ - data/xc4.yml
182
+ - data/xc5.yml
183
+ - data/xc6.yml
184
+ - data/xc7.yml
185
+ - data/xc8.yml
186
+ - data/xc9.yml
187
+ - data/xca.yml
188
+ - data/xcb.yml
189
+ - data/xcc.yml
190
+ - data/xcd.yml
191
+ - data/xce.yml
192
+ - data/xcf.yml
193
+ - data/xd0.yml
194
+ - data/xd1.yml
195
+ - data/xd2.yml
196
+ - data/xd3.yml
197
+ - data/xd4.yml
198
+ - data/xd5.yml
199
+ - data/xd6.yml
200
+ - data/xd7.yml
201
+ - data/xf9.yml
202
+ - data/xfa.yml
203
+ - data/xfb.yml
204
+ - data/xfc.yml
205
+ - data/xfd.yml
206
+ - data/xfe.yml
207
+ - data/xff.yml
208
+ - lib/ascii.rb
209
+ - lib/ascii/codepoint.rb
210
+ - lib/ascii/unidecoder.rb
211
+ - lib/ascii/version.rb
212
+ - spec/ascii_spec.rb
213
+ - spec/spec_helper.rb
214
+ homepage: https://github.com/rwz/ascii
215
+ licenses:
216
+ - MIT
217
+ metadata: {}
218
+ post_install_message:
219
+ rdoc_options: []
220
+ require_paths:
221
+ - lib
222
+ required_ruby_version: !ruby/object:Gem::Requirement
223
+ requirements:
224
+ - - ">="
225
+ - !ruby/object:Gem::Version
226
+ version: '0'
227
+ required_rubygems_version: !ruby/object:Gem::Requirement
228
+ requirements:
229
+ - - ">="
230
+ - !ruby/object:Gem::Version
231
+ version: '0'
232
+ requirements: []
233
+ rubyforge_project:
234
+ rubygems_version: 2.2.2
235
+ signing_key:
236
+ specification_version: 4
237
+ summary: Create an ASCII representation of localized string
238
+ test_files:
239
+ - spec/ascii_spec.rb
240
+ - spec/spec_helper.rb