zhongwen_tools 0.12.4 → 0.15.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/README.md +74 -165
  4. data/Rakefile +0 -1
  5. data/lib/zhongwen_tools/{string/caps.rb → caps.rb} +19 -1
  6. data/lib/zhongwen_tools/core.rb +19 -0
  7. data/lib/zhongwen_tools/core_ext/integer.rb +8 -0
  8. data/lib/zhongwen_tools/core_ext/string.rb +10 -0
  9. data/lib/zhongwen_tools/fullwidth.rb +102 -0
  10. data/lib/zhongwen_tools/integer_extension.rb +31 -0
  11. data/lib/zhongwen_tools/number/number_table.rb +44 -0
  12. data/lib/zhongwen_tools/number.rb +221 -0
  13. data/lib/zhongwen_tools/regex.rb +38 -22
  14. data/lib/zhongwen_tools/romanization/pinyin.rb +231 -0
  15. data/lib/zhongwen_tools/romanization/{pyn_to_py.rb → pinyin_table.rb} +2 -1
  16. data/lib/zhongwen_tools/romanization/romanization_table.rb +425 -0
  17. data/lib/zhongwen_tools/romanization.rb +199 -136
  18. data/lib/zhongwen_tools/{string/ruby19.rb → ruby_19.rb} +1 -2
  19. data/lib/zhongwen_tools/{conversion → script}/conversion_data +0 -0
  20. data/lib/zhongwen_tools/{conversion.rb → script.rb} +21 -34
  21. data/lib/zhongwen_tools/string_extension.rb +136 -0
  22. data/lib/zhongwen_tools/unicode.rb +25 -0
  23. data/lib/zhongwen_tools/uri.rb +14 -0
  24. data/lib/zhongwen_tools/version.rb +1 -1
  25. data/lib/zhongwen_tools/zhongwen.rb +29 -0
  26. data/lib/zhongwen_tools.rb +2 -3
  27. data/test/test_caps.rb +26 -0
  28. data/test/test_core.rb +13 -0
  29. data/test/test_fullwidth.rb +30 -0
  30. data/test/test_helper.rb +4 -12
  31. data/test/test_helpers/unload_zhongwen_tools_script.rb +5 -0
  32. data/test/test_integer_extension.rb +34 -0
  33. data/test/test_number.rb +79 -0
  34. data/test/test_pinyin.rb +68 -0
  35. data/test/test_regex.rb +41 -0
  36. data/test/test_romanization.rb +110 -133
  37. data/test/{test_conversion.rb → test_script.rb} +41 -44
  38. data/test/test_string_extension.rb +94 -0
  39. data/test/test_unicode.rb +27 -0
  40. data/test/test_uri.rb +16 -0
  41. data/test/test_zhongwen.rb +37 -0
  42. data/zhongwen_tools.gemspec +1 -1
  43. metadata +93 -52
  44. data/Gemfile.1.8.7 +0 -8
  45. data/lib/zhongwen_tools/conversion/string.rb +0 -19
  46. data/lib/zhongwen_tools/integer.rb +0 -28
  47. data/lib/zhongwen_tools/numbers.rb +0 -195
  48. data/lib/zhongwen_tools/regex/ruby18.rb +0 -15
  49. data/lib/zhongwen_tools/romanization/conversion_table.rb +0 -425
  50. data/lib/zhongwen_tools/romanization/detect.rb +0 -141
  51. data/lib/zhongwen_tools/romanization/string.rb +0 -36
  52. data/lib/zhongwen_tools/string/fullwidth.rb +0 -85
  53. data/lib/zhongwen_tools/string/ruby18.rb +0 -96
  54. data/lib/zhongwen_tools/string.rb +0 -164
  55. data/test/test_integer.rb +0 -31
  56. data/test/test_numbers.rb +0 -68
  57. data/test/test_string.rb +0 -133
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 466a2ff98a772d2209ee19dc8e9247f5d583a634
4
- data.tar.gz: 70b02d066dd3d5fe4f77d9a44c3f7d128fd8e0e1
3
+ metadata.gz: f0892b76a8079a31b85cb39141d4a71d2d35f4dc
4
+ data.tar.gz: 75d2bab50cbde53afd7a98aa331e9d40e01b376d
5
5
  SHA512:
6
- metadata.gz: ed785ce19696c432b19cb0f638f1ba600457b4ffe78712f3a0d877709003fc31752978c53bbb007709615e04bb49b4109d08169bf5709a567fec058435fe123a
7
- data.tar.gz: 4c54eba7f80ab986b01eaf746d76e08730387bc16d088a55a9881fa9c1d595577a11b1a4de294564da14b6d6534884b9ca687e66a5b887f344d073b798c0da5f
6
+ metadata.gz: 522d46768adfbff771b16d0007e80b00aaceaa757d86d791d0811b2d495ee0cbe297ca11ade973dc2ae6dd7937c455cb27d1ad85c1e6769e0c707643f3a13cd9
7
+ data.tar.gz: b2e9b8739311ccdf49d637af1f633752088e002086e4a99578edd1d82d7f8509277029dbf51f8c95bbe30cd3583f818da8e981137a534748f72b04c92ccd9ee6
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
1
  source "https://rubygems.org"
2
- # Specify your gem's dependencies in zhongwen_tools.gemspec
2
+ # gem dependencies are in zhongwen_tools.gemspec
3
3
  gemspec
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  #Zhongwen Tools:
2
- Tools and methods for dealing with Chinese.
2
+ Methods for dealing with Chinese.
3
3
 
4
4
  [![Build
5
5
  Status](https://travis-ci.org/stevendaniels/zhongwen_tools.png?branch=master)](https://travis-ci.org/stevendaniels/zhongwen_tools) [![Dependency Status](https://gemnasium.com/stevendaniels/zhongwen_tools.png)](https://gemnasium.com/stevendaniels/zhongwen_tools) [![Code Climate](https://codeclimate.com/github/stevendaniels/zhongwen_tools.png)](https://codeclimate.com/github/stevendaniels/zhongwen_tools) [![Coverage Status](https://coveralls.io/repos/stevendaniels/zhongwen_tools/badge.png)](https://coveralls.io/r/stevendaniels/zhongwen_tools)
@@ -12,224 +12,133 @@ Install as a gem
12
12
  $ [sudo] gem install zhongwen_tools
13
13
 
14
14
 
15
- Zhongwen Tools is a set of modules that makes working with Chinese
16
- easier. It includes the following:
17
-
18
- 1. ZhongwenTools::String - deals with strings that are Chinese or pinyin.
19
- 2. ZhongwenTools::Numbers - identifies Chinese numbers and converts numbers to and from Chinese.
20
- 3. ZhongwenTools::Integer - converts integers into Chinese or pinyin.
21
- 4. ZhongwenTools::Romanization - converts converting between Chinese romanization systems like Pinyin and Wade-Giles.
22
- 5. ZhongwenTools::Conversion - converts between Chinese scripts.
23
-
24
-
25
-
26
15
  ## Usage
27
16
 
28
- Add the ZhongwenTools component you need to your classes as a module.
17
+ You can monkey patch the String class or use refinements (Ruby 2.0+).
29
18
 
30
- require 'zhongwen_tools/romanization'
19
+ ### Monkey Patch
31
20
 
32
- class String
33
- include ZhongwenTools::Romanization
34
- end
21
+ You can monkey patch the String class.
35
22
 
36
- str = 'ni3 hao3' #pinyin with numbers
37
- str.to_pinyin
38
- #=> 'nǐ hǎo'
23
+ require 'zhongwen_tools'
24
+ require 'zhongwen_tools/core_ext/string'
39
25
 
40
- str.to_zhuyin_fuhao
41
- #=> 'ㄋㄧ3 ㄏㄠ3'
26
+ # normalizes the behavior between Ruby 1.9.2, 1.9.3, 2+
27
+ '中国'chars #=> ['中', '国']
42
28
 
43
- mzd = 'Mao Tse-tung'
44
- mzd.to_pinyin
45
- #=> 'Mao Zedong'
29
+ 'zhōngguó'.capitalize #=> 'Zhōngguó'
46
30
 
47
- Or require the components you want.
31
+ 'Zhōngguó'.zh_downcase #=> 'zhōngguó'
48
32
 
49
- require 'zhongwen_tools/numbers'
33
+ 'ālābó'.zh_upcase #=> 'ĀLĀBÓ'
50
34
 
51
- ZhongwenTools::Numbers.to_pyn '一百二十'
52
- #=> 'yi1-bai2-er4-shi2'
35
+ '你好Kailin!'.has_zh? # => true
53
36
 
54
- ### Using ZhongwenTools::String
55
- Zhongwen Tools has string methods for detecting different string formats
56
- and for converting to and from halfwidth, fullwidth, and utf-8 codepoints.
37
+ '你好Kailin!'.has_zh_punctuation? # => true
57
38
 
58
- require 'zhongwen_tools/string'
39
+ '你好'.zh? #=> true
59
40
 
60
- ZhongwenTools::String.ascii? 'hello'
61
- #=> true #non-multibyle strings
41
+ '你好'.uri_encode
62
42
 
63
- ZhongwenTools::String.multibyte? '中文'
64
- #=> true #multibtye strings
43
+ '你好'.uri_escape
65
44
 
66
- ZhongwenTools::String.halfwidth? 'hello'
67
- #=> true
45
+ '你好!'.strip_zh_punctuation #=> '你好'
68
46
 
69
- ZhongwenTools::String.fullwidth? 'hello'
70
- #=> true
47
+ 'hello'.ascii?
71
48
 
72
- ZhongwenTools::String.to_halfwidth 'hello'
73
- #=> 'hello'
49
+ '你好'.multibyte?
74
50
 
75
- ZhongwenTools::String.uri_encode '我太懒'
76
- #=> '%E6%88%91%E5%A4%AA%E6%87%92'
51
+ 'hello'.halfwidth?
77
52
 
78
- ZhongwenTools::String.to_codepoint '中文'
79
- #=> '\u4e2d\u6587'
53
+ 'hello'.fullwidth?
54
+
55
+ 'hello'.to_halfwidth?
80
56
 
81
- ZhongwenTools::String.from_codepoint '\u4e2d\u6587'
82
- #=> '中文' #converts string from a utf-8 codepoint.
57
+ '\u4e2d\u6587'.from_codepoint #=> '中文'
83
58
 
59
+ '中文'.to_codepoint #=> '\u4e2d\u6587'
84
60
 
85
- #### Detecting Chinese or Chinese Punctuation.
86
- Zhongwen Tools can also detect if a string is or has Chinese or Chinese
87
- punctuation.
61
+ 'Zhong1guo2'.to_pinyin #=> 'Zhōngguó'
88
62
 
89
- require 'zhongwen_tools/string'
90
- ZhongwenTools::String.has_zh? '1月'
91
- #=> true
63
+ 'Zhong1guo2'.to_py #=> 'Zhōngguó'
92
64
 
93
- ZhongwenTools::String.zh? '1月'
94
- #=> false #(The string can't be mixed.)
65
+ 'Zhōngguó'.to_py #=> 'Zhong1guo2'
95
66
 
96
- ZhongwenTools::String.has_zh_punctuation? '你在哪里?'
97
- #=> true
98
- ZhongwenTools::String.strip_zh_punctuation? '你在哪里?'
99
- #=> '你在哪里'
67
+ 'nǐ hǎo'.to_bpmf #=> 'ㄋㄧ3 ㄏㄠ3'
100
68
 
101
- #### Converting between Traditional and Simplified Chinese
102
- By requiring conversion module, ZhongwenTools::String gets some
103
- convenience methods for converting to and from traditional and
104
- simplified Chinese.
69
+ 'nǐ hǎo'.to_zyfh #=> 'ㄋㄧ3 ㄏㄠ3'
105
70
 
106
- require 'zhongwen_tools/conversion'
71
+ 'nǐ hǎo'.to_zhyfh #=> 'ㄋㄧ3 ㄏㄠ3'
107
72
 
108
- ZhongwenTools::String.zhs? '中国'
109
- #=> true
110
- ZhongwenTools::String.zht? '中国'
111
- #=> false
73
+ 'nǐ hǎo'.to_bopomofo #=> 'ㄋㄧ3 ㄏㄠ3'
112
74
 
113
- #### Romanization
114
- By requiring the romanization module ZhongwenTools::String gets some
115
- convenience methods for dealing with romanization.
75
+ 'nǐ hǎo'.to_yale #=> 'ni3 hau3',
116
76
 
117
- require 'zhongwen_tools/romanziation'
77
+ 'nǐ hǎo'.to_typy #=> 'ni3 hao3',
118
78
 
119
- ZhongwenTools::String.to_pinyin 'ni3 hao3'
120
- #=> 'nǐ hǎo'
79
+ 'nǐ hǎo'.to_tongyong #=> 'ni3 hao3',
121
80
 
81
+ 'nǐ hǎo'.to_tongyong_pinyin #=> 'ni3 hao3',
122
82
 
123
- #### Pinyin-safe String Methods
124
- The following capitalization methods work for pinyin.
83
+ 'nǐ hǎo'.to_wg #=> 'ni3 hao3',
125
84
 
126
- require 'zhongwen_tools/string'
85
+ 'nǐ hǎo'.to_wade_giles #=> 'ni3 hao3',
127
86
 
128
- ZhongwenTools::String.downcase 'Àomén'
129
- #=> 'àomén' does pinyin/ lowercase
130
- ZhongwenTools::String.upcase 'àomén'
131
- #=> 'ÀOMÉN'
132
- ZhongwenTools::String.capitalize 'àomén'
133
- #=> 'Àomén'
87
+ 'nǐ hǎo'.to_mps2 #=> 'ni3 hau3'
134
88
 
89
+ '你们好'.zhs? #=> true
135
90
 
136
- ### Numbers
137
- Functions for converting to and from Chinese numbers.
91
+ '你们好'.zht? #=> false
138
92
 
139
- require 'zhongwen_tools/numbers'
93
+ '你們好'.to_zhs #=> '你们好'
140
94
 
141
- ZhongwenTools::Numbers.number_to_zht :num, 12000
142
- #=> '一萬二千'
143
- ZhongwenTools::Numbers.number_to_zhs :num, 42
144
- #=> '四十二'
145
- ZhongwenTools::Numbers.number_to_pyn :num, 42
146
- #=> 'si4-shi2-er4'
147
- ZhongwenTools::Numbers.zh_number_to_number '四十二'
148
- #=> 42
149
- ZhongwenTools::Numbers.number? '四十二'
150
- #=> true
95
+ '你们好'.to_zht #=> '你們好'
151
96
 
152
- ### Integers
153
- Monkey-patch your integers for Chinese.
97
+ '金枪鱼'.to_zhtw #=> '鮪魚'
154
98
 
155
- require 'zhongwen_tools/ingteger'
99
+ '鮪魚'.to_zhcn #=> '金枪鱼'
156
100
 
157
- class Integer
158
- include ZhongwenTools::Integer
159
- end
101
+ '金枪鱼'.to_zhhk #=> '吞拿魚'
160
102
 
161
- 12.to_pinyin
162
- #=> 'shi2-er4'
163
- 12.to_zht
164
- #=> '十二'
165
103
 
104
+ #### Integer Extensions
166
105
 
167
- ### Romanization
168
- ZhongwenTools::Romanization has tools for converting between Chinese language romanization systems and
169
- scripts. It **does not convert Chinese characters to pinyin** (see ZhongwenTools::Conversion). Romanization methods must be required explicitly.
106
+ You can also monkey patch the Integer class!
107
+ require 'zhongwen_tools'
108
+ require 'zhongwen_tools/core_ext/integer'
170
109
 
171
- gem 'zhongwen_tools'
172
- require 'zhongwen_tools/romanization'
110
+ 1.to_pyn #=> 'yi1'
111
+ 10_000.to_zht #=> '一萬'
112
+ 10_000.to_zhs #=> '一万'
173
113
 
174
- class String
175
- include ZhongwenTools::Romanization
176
- end
114
+ ### Refinements (Ruby > 2.0 only)
177
115
 
116
+ You can also use refinements, to refine the string or integer class.
178
117
 
179
- str = 'ni3 hao3'
180
- py = 'nǐ hǎo'
118
+ # some_class.rb
119
+ require 'zhongwen_tools'
120
+ using ZhongwenTools
181
121
 
182
- str.to_pinyin
183
- #=> 'nǐ hǎo'
184
- str.to_py
185
- #=> 'nǐ hǎo'
122
+ class SomeClass
186
123
 
187
- py.to_pyn
188
- #=> 'ni3 hao3'
189
-
190
- str.to_wg
191
- #=> 'ni3 hao3' #Wade-Giles
192
-
193
- str.to_bpmf
194
- #=> 'ㄋㄧ3 ㄏㄠ3' #Zhuyin Fuhao, a.k.a. Bopomofo
195
-
196
- str.to_yale
197
- #=> 'ni3 hau3'
198
-
199
- str.to_typy
200
- #=> 'ni3 hao3'
201
-
202
- str.pyn?
203
- #=> true
204
- str.wg?
205
- #=> true #(There can be overlap between Wade-Giles and Pinyin)
206
- str.to_py.py?
207
- #=> true
124
+ def hi
125
+ '你们好'.to_zht
126
+ end
127
+ end
208
128
 
209
- #split pinyin with numbers accurately.
210
- 'dong1xi1'.split_pyn # => ['dong1', 'xi1']
211
- 'dongxi'.split_pyn # => ['dong', 'xi']
129
+ SomeClass.new.hi #=> 你們好
212
130
 
213
- ### Conversion
214
- Functions for converting between scripts (e.g. traditional Chinese to
215
- simplified Chinese) and [TODO] between Chinese and romanization systems (e.g.
216
- Chinese to pinyin).
217
- Conversion methods must be required explicitly.
131
+ ### ZhongwenTools::Core
218
132
 
219
- gem 'zhongwen_tools'
220
- require 'zhongwen_tools/conversion'
133
+ The core functionality of ZhongwenTools excludes converting between
134
+ simplified and traditional Chinese. You can use it by requiring
135
+ 'zhongwen_tools/core' instead of 'zhongwen_tools'
221
136
 
222
- ZhongwenTools::Conversion.to_zhs '華語'
223
- #=> '华语'
224
- ZhongwenTools::Conversion.to_zht '华语'
225
- #=> '華語'
226
- ZhongwenTools::Conversion.to_zhtw '方便面'
227
- #=> '泡麵'
228
- ZhongwenTools::Conversion.to_zhhk '方便面'
229
- #=> '即食麵'
230
- ZhongwenTools::Conversion.to_zhcn '即食麵'
231
- #=> '方便面'
137
+ require 'zhongwen_tools/core'
138
+ require 'zhongwen_tools/core_ext/string'
232
139
 
140
+ 'ni3 hao3'.to_pinyin #=> 'nǐ hǎo'
141
+ '你們好'.to_zhs #=> NoMethodError
233
142
 
234
- ## TODO
235
- 1. A character -> pinyin converter
143
+ ##TODO:
144
+ 1. create a generic ZhongwenTools::Romanization.split method for convenience
data/Rakefile CHANGED
@@ -1,4 +1,3 @@
1
- require 'rubygems' if RUBY_VERSION < '1.9'
2
1
  require 'bundler/gem_tasks'
3
2
  require 'rake/testtask'
4
3
  Bundler.require :test
@@ -1,7 +1,24 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module ZhongwenTools
4
- UNICODE_CAPS = {
4
+ module Caps
5
+
6
+ def self.downcase(str)
7
+ regex = /(#{ZhongwenTools::Caps::CAPS.keys.join('|')})/
8
+ str.gsub(regex, ZhongwenTools::Caps::CAPS).downcase
9
+ end
10
+
11
+ def self.upcase(str)
12
+ str.gsub(/(#{ZhongwenTools::Caps::CAPS.values.join('|')})/){
13
+ ZhongwenTools::Caps::CAPS.find{|k,v| v == $1}[0]
14
+ }.upcase
15
+ end
16
+
17
+ def self.capitalize(str)
18
+ str.sub(str[0], ZhongwenTools::Caps.upcase(str[0]))
19
+ end
20
+
21
+ CAPS = {
5
22
  'Ā' => 'ā',
6
23
  'Á' => 'á',
7
24
  'Ǎ' => 'ǎ',
@@ -53,4 +70,5 @@ module ZhongwenTools
53
70
  "Y" => "y",
54
71
  "Z" => "z"
55
72
  }
73
+ end
56
74
  end
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+ require 'zhongwen_tools/ruby_19' if RUBY_VERSION < '2.0.0'
3
+ require 'zhongwen_tools/regex'
4
+ require 'zhongwen_tools/fullwidth'
5
+ require 'zhongwen_tools/unicode'
6
+ require 'zhongwen_tools/uri'
7
+ require 'zhongwen_tools/zhongwen'
8
+ require 'zhongwen_tools/number'
9
+ require 'zhongwen_tools/romanization'
10
+ require 'zhongwen_tools/string_extension'
11
+
12
+ module ZhongwenTools
13
+ # Allow for the use Refinements.
14
+ if RUBY_VERSION >= '2.0.0'
15
+ refine String do
16
+ include ::ZhongwenTools::StringExtension
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,8 @@
1
+ require 'zhongwen_tools/integer_extension'
2
+ ensure_module_defined = ->(base, module_name){
3
+ base.const_set(module_name, Module.new) unless base.const_defined?(module_name)
4
+ }
5
+ ensure_module_defined[ZhongwenTools, :Number]
6
+ ensure_module_defined[ZhongwenTools, :IntegerExtension]
7
+
8
+ Integer.send(:include, ZhongwenTools::IntegerExtension)
@@ -0,0 +1,10 @@
1
+ require 'zhongwen_tools/string_extension'
2
+ ensure_module_defined = ->(base, module_name){
3
+ base.const_set(module_name, Module.new) unless base.const_defined?(module_name)
4
+ }
5
+
6
+ ensure_module_defined[ZhongwenTools, :Romanization]
7
+ ensure_module_defined[ZhongwenTools, :StringExtension]
8
+ ensure_module_defined[ZhongwenTools, :Script]
9
+
10
+ String.send(:include, ZhongwenTools::StringExtension)
@@ -0,0 +1,102 @@
1
+ # encoding: utf-8
2
+ require 'zhongwen_tools/regex'
3
+
4
+ module ZhongwenTools
5
+ module Fullwidth
6
+ # TODO: type checking.
7
+ def self.halfwidth?(str)
8
+ str[ZhongwenTools::Regex.fullwidth].nil?
9
+ end
10
+
11
+ def self.fullwidth?(str)
12
+ !halfwidth?(str) && to_halfwidth(str) != str
13
+ end
14
+
15
+ def self.to_halfwidth(str)
16
+ str.gsub(/(#{ZhongwenTools::Regex.fullwidth})/, ZhongwenTools::Fullwidth::FW_HW)
17
+ end
18
+
19
+ FW_HW ={
20
+ "0" => "0",
21
+ "1" => "1",
22
+ "2" => "2",
23
+ "3" => "3",
24
+ "4" => "4",
25
+ "5" => "5",
26
+ "6" => "6",
27
+ "7" => "7",
28
+ "8" => "8",
29
+ "9" => "9",
30
+ "A" => "A",
31
+ "B" => "B",
32
+ "C" => "C",
33
+ "D" => "D",
34
+ "E" => "E",
35
+ "F" => "F",
36
+ "G" => "G",
37
+ "H" => "H",
38
+ "I" => "I",
39
+ "J" => "J",
40
+ "K" => "K",
41
+ "L" => "L",
42
+ "M" => "M",
43
+ "N" => "N",
44
+ "O" => "O",
45
+ "P" => "P",
46
+ "Q" => "Q",
47
+ "R" => "R",
48
+ "S" => "S",
49
+ "T" => "T",
50
+ "U" => "U",
51
+ "V" => "V",
52
+ "W" => "W",
53
+ "X" => "X",
54
+ "Y" => "Y",
55
+ "Z" => "Z",
56
+ "a" => "a",
57
+ "b" => "b",
58
+ "c" => "c",
59
+ "d" => "d",
60
+ "e" => "e",
61
+ "f" => "f",
62
+ "g" => "g",
63
+ "h" => "h",
64
+ "i" => "i",
65
+ "j" => "j",
66
+ "k" => "k",
67
+ "l" => "l",
68
+ "m" => "m",
69
+ "n" => "n",
70
+ "o" => "o",
71
+ "p" => "p",
72
+ "q" => "q",
73
+ "r" => "r",
74
+ "s" => "s",
75
+ "t" => "t",
76
+ "u" => "u",
77
+ "v" => "v",
78
+ "w" => "w",
79
+ "x" => "x",
80
+ "y" => "y",
81
+ "z" => "z",
82
+ "%" => '%',
83
+ "." => '.',
84
+ ':' => ':',
85
+ "#" => '#',
86
+ "$" => "$",
87
+ "&" => "&",
88
+ "+" => "+",
89
+ "-" => "-",
90
+ "/" => "/",
91
+ "\" => '\\',
92
+ '=' => '=',
93
+ ";" => ";",
94
+ "<" => "<",
95
+ ">" => ">",
96
+ "?" => "?",
97
+ "。" => ".",
98
+ "!" => "!",
99
+ ',' => ','
100
+ }
101
+ end
102
+ end
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+ require 'zhongwen_tools/number'
3
+
4
+ module ZhongwenTools
5
+ module IntegerExtension
6
+
7
+ def to_zh(type = nil)
8
+ #type == :zht ? self.to_zht? : self.to_zhs
9
+ ZhongwenTools::Number.convert(self, type, :i)
10
+ end
11
+
12
+ %w(zhs zht).each do |type|
13
+ define_method("to_#{type}") do
14
+ ZhongwenTools::Number.convert(self, type.to_sym, :i)
15
+ end
16
+ end
17
+
18
+ def to_pyn
19
+ ZhongwenTools::Number.convert self, :pyn, :i
20
+ end
21
+
22
+ # TODO: add to_pyn to_bmpf, to_wg, to_mps2, to_yale, etc.
23
+ end
24
+
25
+ # Allow for the use Refinements.
26
+ if RUBY_VERSION >= '2.0.0'
27
+ refine Integer do
28
+ include ::ZhongwenTools::IntegerExtension
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+
3
+ module ZhongwenTools
4
+ module Number
5
+ # TODO: Add huge numbers.
6
+ # 垓 秭 穰 溝 澗 正 載 --> beyond 100,000,000!
7
+ # NOTE: financial numbers i == 0 ? NT.select{ |x| x[:i] == i }.last[:zhs] : NT.find{ |x| x[:i] = i }
8
+ NUMBERS_TABLE = [
9
+ { :zhs => '零', :zht => '零', :i => 0, :pyn => 'ling2'},
10
+ { :zhs => '〇', :zht => '〇', :i => 0, :pyn => 'ling2'},
11
+ { :zhs => '一', :zht => '一', :i => 1, :pyn => 'yi1'},
12
+ { :zhs => '壹', :zht => '壹', :i => 1, :pyn => 'yi1'},
13
+ { :zhs => '幺', :zht => '幺', :i => 1, :pyn => 'yao1'},
14
+ { :zhs => '二', :zht => '二', :i => 2, :pyn => 'er4'},
15
+ { :zhs => '两', :zht => '兩', :i => 2, :pyn => 'liang3'},
16
+ { :zhs => '贰', :zht => '貳', :i => 2, :pyn => 'er4'},
17
+ { :zhs => '三', :zht => '三', :i => 3, :pyn => 'san1'},
18
+ { :zhs => '弎', :zht => '弎', :i => 3, :pyn => 'san1'},
19
+ { :zhs => '叁', :zht => '參', :i => 3, :pyn => 'san1'},
20
+ { :zhs => '四', :zht => '四', :i => 4, :pyn => 'si4'},
21
+ { :zhs => '䦉', :zht => '䦉', :i => 4, :pyn => 'si4'},
22
+ { :zhs => '肆', :zht => '肆', :i => 4, :pyn => 'si4'},
23
+ { :zhs => '五', :zht => '五', :i => 5, :pyn => 'wu3'},
24
+ { :zhs => '伍', :zht => '伍', :i => 5, :pyn => 'wu3'},
25
+ { :zhs => '六', :zht => '六', :i => 6, :pyn => 'liu4'},
26
+ { :zhs => '陆', :zht => '陸', :i => 6, :pyn => 'liu4'},
27
+ { :zhs => '七', :zht => '七', :i => 7, :pyn => 'qi1'},
28
+ { :zhs => '柒', :zht => '柒', :i => 7, :pyn => 'qi1'},
29
+ { :zhs => '八', :zht => '八', :i => 8, :pyn => 'ba1'},
30
+ { :zhs => '捌', :zht => '捌', :i => 8, :pyn => 'ba1'},
31
+ { :zhs => '九', :zht => '九', :i => 9, :pyn => 'jiu3'},
32
+ { :zhs => '玖', :zht => '玖', :i => 9, :pyn => 'jiu3'},
33
+ { :zhs => '十', :zht => '十', :i => 10, :pyn => 'shi2'},
34
+ { :zhs => '拾', :zht => '拾', :i => 10, :pyn => 'shi2'},
35
+ { :zhs => '廿', :zht => '廿', :i => 20, :pyn => ' nian4'},
36
+ { :zhs => '百', :zht => '百', :i => 100, :pyn => 'bai2'},
37
+ { :zhs => '佰', :zht => '佰', :i => 100, :pyn => 'bai2'},
38
+ { :zhs => '千', :zht => '千', :i => 1_000, :pyn => 'qian1'},
39
+ { :zhs => '仟', :zht => '仟', :i => 1_000, :pyn => 'qian1'},
40
+ { :zhs => '万', :zht => '萬', :i => 10_000, :pyn => 'wan4'},
41
+ { :zhs => '亿', :zht => '億', :i => 100_000_000, :pyn => 'yi4'},
42
+ ]
43
+ end
44
+ end