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.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/README.md +74 -165
- data/Rakefile +0 -1
- data/lib/zhongwen_tools/{string/caps.rb → caps.rb} +19 -1
- data/lib/zhongwen_tools/core.rb +19 -0
- data/lib/zhongwen_tools/core_ext/integer.rb +8 -0
- data/lib/zhongwen_tools/core_ext/string.rb +10 -0
- data/lib/zhongwen_tools/fullwidth.rb +102 -0
- data/lib/zhongwen_tools/integer_extension.rb +31 -0
- data/lib/zhongwen_tools/number/number_table.rb +44 -0
- data/lib/zhongwen_tools/number.rb +221 -0
- data/lib/zhongwen_tools/regex.rb +38 -22
- data/lib/zhongwen_tools/romanization/pinyin.rb +231 -0
- data/lib/zhongwen_tools/romanization/{pyn_to_py.rb → pinyin_table.rb} +2 -1
- data/lib/zhongwen_tools/romanization/romanization_table.rb +425 -0
- data/lib/zhongwen_tools/romanization.rb +199 -136
- data/lib/zhongwen_tools/{string/ruby19.rb → ruby_19.rb} +1 -2
- data/lib/zhongwen_tools/{conversion → script}/conversion_data +0 -0
- data/lib/zhongwen_tools/{conversion.rb → script.rb} +21 -34
- data/lib/zhongwen_tools/string_extension.rb +136 -0
- data/lib/zhongwen_tools/unicode.rb +25 -0
- data/lib/zhongwen_tools/uri.rb +14 -0
- data/lib/zhongwen_tools/version.rb +1 -1
- data/lib/zhongwen_tools/zhongwen.rb +29 -0
- data/lib/zhongwen_tools.rb +2 -3
- data/test/test_caps.rb +26 -0
- data/test/test_core.rb +13 -0
- data/test/test_fullwidth.rb +30 -0
- data/test/test_helper.rb +4 -12
- data/test/test_helpers/unload_zhongwen_tools_script.rb +5 -0
- data/test/test_integer_extension.rb +34 -0
- data/test/test_number.rb +79 -0
- data/test/test_pinyin.rb +68 -0
- data/test/test_regex.rb +41 -0
- data/test/test_romanization.rb +110 -133
- data/test/{test_conversion.rb → test_script.rb} +41 -44
- data/test/test_string_extension.rb +94 -0
- data/test/test_unicode.rb +27 -0
- data/test/test_uri.rb +16 -0
- data/test/test_zhongwen.rb +37 -0
- data/zhongwen_tools.gemspec +1 -1
- metadata +93 -52
- data/Gemfile.1.8.7 +0 -8
- data/lib/zhongwen_tools/conversion/string.rb +0 -19
- data/lib/zhongwen_tools/integer.rb +0 -28
- data/lib/zhongwen_tools/numbers.rb +0 -195
- data/lib/zhongwen_tools/regex/ruby18.rb +0 -15
- data/lib/zhongwen_tools/romanization/conversion_table.rb +0 -425
- data/lib/zhongwen_tools/romanization/detect.rb +0 -141
- data/lib/zhongwen_tools/romanization/string.rb +0 -36
- data/lib/zhongwen_tools/string/fullwidth.rb +0 -85
- data/lib/zhongwen_tools/string/ruby18.rb +0 -96
- data/lib/zhongwen_tools/string.rb +0 -164
- data/test/test_integer.rb +0 -31
- data/test/test_numbers.rb +0 -68
- data/test/test_string.rb +0 -133
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f0892b76a8079a31b85cb39141d4a71d2d35f4dc
|
4
|
+
data.tar.gz: 75d2bab50cbde53afd7a98aa331e9d40e01b376d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 522d46768adfbff771b16d0007e80b00aaceaa757d86d791d0811b2d495ee0cbe297ca11ade973dc2ae6dd7937c455cb27d1ad85c1e6769e0c707643f3a13cd9
|
7
|
+
data.tar.gz: b2e9b8739311ccdf49d637af1f633752088e002086e4a99578edd1d82d7f8509277029dbf51f8c95bbe30cd3583f818da8e981137a534748f72b04c92ccd9ee6
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#Zhongwen Tools:
|
2
|
-
|
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
|
-
|
17
|
+
You can monkey patch the String class or use refinements (Ruby 2.0+).
|
29
18
|
|
30
|
-
|
19
|
+
### Monkey Patch
|
31
20
|
|
32
|
-
|
33
|
-
include ZhongwenTools::Romanization
|
34
|
-
end
|
21
|
+
You can monkey patch the String class.
|
35
22
|
|
36
|
-
|
37
|
-
|
38
|
-
#=> 'nǐ hǎo'
|
23
|
+
require 'zhongwen_tools'
|
24
|
+
require 'zhongwen_tools/core_ext/string'
|
39
25
|
|
40
|
-
|
41
|
-
#=> '
|
26
|
+
# normalizes the behavior between Ruby 1.9.2, 1.9.3, 2+
|
27
|
+
'中国'chars #=> ['中', '国']
|
42
28
|
|
43
|
-
|
44
|
-
mzd.to_pinyin
|
45
|
-
#=> 'Mao Zedong'
|
29
|
+
'zhōngguó'.capitalize #=> 'Zhōngguó'
|
46
30
|
|
47
|
-
|
31
|
+
'Zhōngguó'.zh_downcase #=> 'zhōngguó'
|
48
32
|
|
49
|
-
|
33
|
+
'ālābó'.zh_upcase #=> 'ĀLĀBÓ'
|
50
34
|
|
51
|
-
|
52
|
-
#=> 'yi1-bai2-er4-shi2'
|
35
|
+
'你好Kailin!'.has_zh? # => true
|
53
36
|
|
54
|
-
|
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
|
-
|
39
|
+
'你好'.zh? #=> true
|
59
40
|
|
60
|
-
|
61
|
-
#=> true #non-multibyle strings
|
41
|
+
'你好'.uri_encode
|
62
42
|
|
63
|
-
|
64
|
-
#=> true #multibtye strings
|
43
|
+
'你好'.uri_escape
|
65
44
|
|
66
|
-
|
67
|
-
#=> true
|
45
|
+
'你好!'.strip_zh_punctuation #=> '你好'
|
68
46
|
|
69
|
-
|
70
|
-
#=> true
|
47
|
+
'hello'.ascii?
|
71
48
|
|
72
|
-
|
73
|
-
#=> 'hello'
|
49
|
+
'你好'.multibyte?
|
74
50
|
|
75
|
-
|
76
|
-
#=> '%E6%88%91%E5%A4%AA%E6%87%92'
|
51
|
+
'hello'.halfwidth?
|
77
52
|
|
78
|
-
|
79
|
-
|
53
|
+
'hello'.fullwidth?
|
54
|
+
|
55
|
+
'hello'.to_halfwidth?
|
80
56
|
|
81
|
-
|
82
|
-
#=> '中文' #converts string from a utf-8 codepoint.
|
57
|
+
'\u4e2d\u6587'.from_codepoint #=> '中文'
|
83
58
|
|
59
|
+
'中文'.to_codepoint #=> '\u4e2d\u6587'
|
84
60
|
|
85
|
-
|
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
|
-
|
90
|
-
ZhongwenTools::String.has_zh? '1月'
|
91
|
-
#=> true
|
63
|
+
'Zhong1guo2'.to_py #=> 'Zhōngguó'
|
92
64
|
|
93
|
-
|
94
|
-
#=> false #(The string can't be mixed.)
|
65
|
+
'Zhōngguó'.to_py #=> 'Zhong1guo2'
|
95
66
|
|
96
|
-
|
97
|
-
#=> true
|
98
|
-
ZhongwenTools::String.strip_zh_punctuation? '你在哪里?'
|
99
|
-
#=> '你在哪里'
|
67
|
+
'nǐ hǎo'.to_bpmf #=> 'ㄋㄧ3 ㄏㄠ3'
|
100
68
|
|
101
|
-
|
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
|
-
|
71
|
+
'nǐ hǎo'.to_zhyfh #=> 'ㄋㄧ3 ㄏㄠ3'
|
107
72
|
|
108
|
-
|
109
|
-
#=> true
|
110
|
-
ZhongwenTools::String.zht? '中国'
|
111
|
-
#=> false
|
73
|
+
'nǐ hǎo'.to_bopomofo #=> 'ㄋㄧ3 ㄏㄠ3'
|
112
74
|
|
113
|
-
|
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
|
-
|
77
|
+
'nǐ hǎo'.to_typy #=> 'ni3 hao3',
|
118
78
|
|
119
|
-
|
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
|
-
|
124
|
-
The following capitalization methods work for pinyin.
|
83
|
+
'nǐ hǎo'.to_wg #=> 'ni3 hao3',
|
125
84
|
|
126
|
-
|
85
|
+
'nǐ hǎo'.to_wade_giles #=> 'ni3 hao3',
|
127
86
|
|
128
|
-
|
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
|
-
|
137
|
-
Functions for converting to and from Chinese numbers.
|
91
|
+
'你们好'.zht? #=> false
|
138
92
|
|
139
|
-
|
93
|
+
'你們好'.to_zhs #=> '你们好'
|
140
94
|
|
141
|
-
|
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
|
-
|
153
|
-
Monkey-patch your integers for Chinese.
|
97
|
+
'金枪鱼'.to_zhtw #=> '鮪魚'
|
154
98
|
|
155
|
-
|
99
|
+
'鮪魚'.to_zhcn #=> '金枪鱼'
|
156
100
|
|
157
|
-
|
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
|
-
|
168
|
-
|
169
|
-
|
106
|
+
You can also monkey patch the Integer class!
|
107
|
+
require 'zhongwen_tools'
|
108
|
+
require 'zhongwen_tools/core_ext/integer'
|
170
109
|
|
171
|
-
|
172
|
-
|
110
|
+
1.to_pyn #=> 'yi1'
|
111
|
+
10_000.to_zht #=> '一萬'
|
112
|
+
10_000.to_zhs #=> '一万'
|
173
113
|
|
174
|
-
|
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
|
-
|
180
|
-
|
118
|
+
# some_class.rb
|
119
|
+
require 'zhongwen_tools'
|
120
|
+
using ZhongwenTools
|
181
121
|
|
182
|
-
|
183
|
-
#=> 'nǐ hǎo'
|
184
|
-
str.to_py
|
185
|
-
#=> 'nǐ hǎo'
|
122
|
+
class SomeClass
|
186
123
|
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
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
|
-
|
210
|
-
'dong1xi1'.split_pyn # => ['dong1', 'xi1']
|
211
|
-
'dongxi'.split_pyn # => ['dong', 'xi']
|
129
|
+
SomeClass.new.hi #=> 你們好
|
212
130
|
|
213
|
-
###
|
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
|
-
|
220
|
-
|
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
|
-
|
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
|
-
##
|
235
|
-
1.
|
143
|
+
##TODO:
|
144
|
+
1. create a generic ZhongwenTools::Romanization.split method for convenience
|
data/Rakefile
CHANGED
@@ -1,7 +1,24 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
module ZhongwenTools
|
4
|
-
|
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
|