ya_kansuji 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ChangeLog +9 -0
- data/README.md +13 -15
- data/lib/ya_kansuji.rb +5 -1
- data/lib/ya_kansuji/formatter/gov.rb +26 -0
- data/lib/ya_kansuji/formatter/judic_h.rb +28 -0
- data/lib/ya_kansuji/formatter/judic_v.rb +28 -0
- data/lib/ya_kansuji/formatter/lawyer.rb +27 -0
- data/lib/ya_kansuji/formatter/simple.rb +29 -20
- data/lib/ya_kansuji/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b533562701ef0ed367dc665df6190ad55d8e967b6301b2edd915c594eb96337
|
4
|
+
data.tar.gz: 81f83784f8e57fc41efff6a9c1f757aad7e3d9c3dcb9b406296f771de09b214b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc82119a8fb4b6d60513e12816c08f1e7d61e53678bef560036d6084f13a1e72ac3c4b19277b94dc4eab8e286f2d7dddd9c8b728c51dcca4b3ac437e356ec486
|
7
|
+
data.tar.gz: 9600d3bc5233393c6ce2c1fdae3cddc119e1f38c12bd6643da8ce8dffb151791d9edb7d4edaff66c6d42c103d2e59dcdc57eabf786556f977fdfdc876753afcb
|
data/ChangeLog
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# TODO: THIS GEM IS STILL BETA VERSION.
|
2
|
-
|
3
1
|
# YaKansuji - もう一つの (やりすぎ) ruby 漢数字ライブラリ
|
4
2
|
|
5
3
|
[<img src="https://badge.fury.io/rb/ya_kansuji.svg" alt="Gem Version" />](https://badge.fury.io/rb/ya_kansuji)
|
@@ -13,7 +11,7 @@ YaKansuji は ruby 用の日本語の漢数字ライブラリです。 和暦ラ
|
|
13
11
|
|
14
12
|
現状のサポートは日本語で万進な10進数だけです。歴史的に使われたことのあった万万進や他の漢字圏の漢数字はサポートしていません。
|
15
13
|
|
16
|
-
## 機能
|
14
|
+
## 機能
|
17
15
|
|
18
16
|
* 読み取り: 以下の混在したテキストを数値に変換出来ます
|
19
17
|
* 漢数字 (二万三千五百六十七)
|
@@ -21,13 +19,13 @@ YaKansuji は ruby 用の日本語の漢数字ライブラリです。 和暦ラ
|
|
21
19
|
* 単位なし / ゼロ (一六九〇)
|
22
20
|
* 位取り (2億0010万 / 千〇〇二)
|
23
21
|
* 大字 (千皕卅肆)
|
24
|
-
* カンマ表現 (12,345 / 5億3,456万 / 二万、五十
|
22
|
+
* カンマ表現 (12,345 / 5億3,456万 / 二万、五十)
|
25
23
|
* 数値から漢数字, 漢字混じり数値文字列フォーマット
|
26
24
|
* 複数のビルトインフォーマッタ
|
27
25
|
* フォーマッタプラグイン機構
|
28
26
|
* (オプション) 標準の String, Interger クラスの拡張
|
29
27
|
|
30
|
-
## インストール
|
28
|
+
## インストール
|
31
29
|
|
32
30
|
Gemfile に以下のようにして、bundle を実行するか、
|
33
31
|
|
@@ -43,7 +41,7 @@ gem 'ya_kansuji'
|
|
43
41
|
|
44
42
|
### 読み取り (漢数字 → 数値)
|
45
43
|
|
46
|
-
`YaKansuji
|
44
|
+
`YaKansuji.to_i` に文字を渡すと数値に変換できます。読み取りに関してはオプションはありません。
|
47
45
|
|
48
46
|
```ruby
|
49
47
|
YaKansuji.to_i("一〇二四") # => 1024
|
@@ -51,13 +49,13 @@ YaKansuji.to_i("一〇二四") # => 1024
|
|
51
49
|
|
52
50
|
### フォーマット (数値 → 漢数字)
|
53
51
|
|
54
|
-
`YaKansuji
|
52
|
+
`YaKansuji.to_kan` に数値を渡すことで、漢数字や漢字混じりの文字列に変換します。
|
55
53
|
|
56
54
|
```ruby
|
57
55
|
YaKansuji.to_kan(12345) # => 一万二千三百四十五
|
58
56
|
```
|
59
57
|
|
60
|
-
このさい、2
|
58
|
+
このさい、2つめの引数にシンボルを渡すことにより、フォーマッタを切り替えることができます。
|
61
59
|
|
62
60
|
```ruby
|
63
61
|
YaKansuji.to_kan(12340005, :simple) # => "千二百三十四万五"
|
@@ -70,15 +68,15 @@ YaKansuji.to_kan(12340005, :judic_h) # => "1234万0005"
|
|
70
68
|
現在あるフォーマッタは以下のとおりです。
|
71
69
|
|
72
70
|
* `simple` - 標準 (例: 千二百三十四万五)
|
73
|
-
*
|
74
|
-
*
|
75
|
-
*
|
76
|
-
*
|
71
|
+
* `gov` - 「公用文作成の要領」方式 (100億, 30万円 / 5,000)
|
72
|
+
* `lawyer` - 行政司法協会方式 (1,200億 / 2億58万6,300)
|
73
|
+
* `judic_v` - 裁判判例縦書き方式 (一二万〇〇五六)
|
74
|
+
* `judic_h` - 最高裁判例横書き方式 (5万0539)
|
77
75
|
|
78
76
|
#### 独自フォーマッタ
|
79
77
|
|
80
78
|
`YaKansuji#register_formatter` を使うと独自のフォーマッタを登録できます。
|
81
|
-
|
79
|
+
`#call` を持つ任意のオブジェクトもしくはブロックを渡します。第1引数に数字、第2引数にオプションが渡ります。
|
82
80
|
|
83
81
|
```ruby
|
84
82
|
YaKansuji.register_formatter :hoge, -> (num, opts = {}) {
|
@@ -123,7 +121,7 @@ puts "12万".to_i(16) # => 18
|
|
123
121
|
|
124
122
|
#### メソッド上書き
|
125
123
|
|
126
|
-
Refinements を使わずに、全域でビルトインクラスを上書きしたい場合は `ya_kansuji/core_ext`
|
124
|
+
Refinements を使わずに、全域でビルトインクラスを上書きしたい場合は `ya_kansuji/core_ext` を読み込んでください。**これは破壊的にコアライブラリのメソッドを置き換えるため、影響範囲に注意して下さい。**
|
127
125
|
上書きや提供されるメソッドは Refinements と同じです。
|
128
126
|
|
129
127
|
```ruby
|
@@ -138,7 +136,7 @@ gem 'ya_kansuji', require: 'ya_kansuji/core_ext'
|
|
138
136
|
|
139
137
|
## Contributing
|
140
138
|
|
141
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/sugi/
|
139
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/sugi/ya_kansuji.
|
142
140
|
|
143
141
|
## License
|
144
142
|
|
data/lib/ya_kansuji.rb
CHANGED
@@ -97,7 +97,7 @@ module YaKansuji
|
|
97
97
|
end
|
98
98
|
|
99
99
|
def to_kan(num, formatter = :simple, options = {})
|
100
|
-
num
|
100
|
+
num.respond_to?(:_to_i_ya_kansuji_orig) ? num = num._to_i_ya_kansuji_orig : num = num.to_i
|
101
101
|
if formatter.respond_to? :call
|
102
102
|
formatter.call num, options
|
103
103
|
elsif @@formatters[formatter]
|
@@ -109,3 +109,7 @@ module YaKansuji
|
|
109
109
|
end
|
110
110
|
|
111
111
|
require 'ya_kansuji/formatter/simple'
|
112
|
+
require 'ya_kansuji/formatter/gov'
|
113
|
+
require 'ya_kansuji/formatter/lawyer'
|
114
|
+
require 'ya_kansuji/formatter/judic_v'
|
115
|
+
require 'ya_kansuji/formatter/judic_h'
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Simple kansuji formatter
|
2
|
+
module YaKansuji
|
3
|
+
module Formatter
|
4
|
+
module Gov
|
5
|
+
module_function
|
6
|
+
|
7
|
+
def call(num, _options = {})
|
8
|
+
return '0' if num.zero?
|
9
|
+
|
10
|
+
parts = []
|
11
|
+
(UNIT_EXP4.reverse + ['']).each_with_index do |unit4, ridx4|
|
12
|
+
i4 = (num / 10_000**(UNIT_EXP4.size - ridx4)).to_i % 10_000
|
13
|
+
next if i4.zero?
|
14
|
+
|
15
|
+
if i4 == 1
|
16
|
+
parts << "1#{unit4}"
|
17
|
+
next
|
18
|
+
end
|
19
|
+
parts << i4.to_s + unit4
|
20
|
+
end
|
21
|
+
parts.join(', ')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
YaKansuji.register_formatter :gov, Formatter::Gov
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# Simple kansuji formatter
|
2
|
+
module YaKansuji
|
3
|
+
module Formatter
|
4
|
+
module JudicH
|
5
|
+
module_function
|
6
|
+
|
7
|
+
def call(num, _options = {})
|
8
|
+
return '0' if num.zero?
|
9
|
+
|
10
|
+
ret = ''
|
11
|
+
head = true
|
12
|
+
(UNIT_EXP4.reverse + ['']).each_with_index do |unit4, ridx4|
|
13
|
+
i4 = (num / 10_000**(UNIT_EXP4.size - ridx4)).to_i % 10_000
|
14
|
+
next if i4.zero?
|
15
|
+
|
16
|
+
if head
|
17
|
+
ret << i4.to_s + unit4
|
18
|
+
else
|
19
|
+
ret << ('%04d' % i4) + unit4
|
20
|
+
end
|
21
|
+
head = false
|
22
|
+
end
|
23
|
+
ret.tr('0-9', '0-9')
|
24
|
+
end
|
25
|
+
YaKansuji.register_formatter :judic_h, self
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# Simple kansuji formatter
|
2
|
+
module YaKansuji
|
3
|
+
module Formatter
|
4
|
+
module JudicV
|
5
|
+
module_function
|
6
|
+
|
7
|
+
def call(num, _options = {})
|
8
|
+
return '〇' if num.zero?
|
9
|
+
|
10
|
+
ret = ''
|
11
|
+
head = true
|
12
|
+
(UNIT_EXP4.reverse + ['']).each_with_index do |unit4, ridx4|
|
13
|
+
i4 = (num / 10_000**(UNIT_EXP4.size - ridx4)).to_i % 10_000
|
14
|
+
next if i4.zero?
|
15
|
+
|
16
|
+
if head
|
17
|
+
ret << i4.to_s + unit4
|
18
|
+
else
|
19
|
+
ret << ('%04d' % i4) + unit4
|
20
|
+
end
|
21
|
+
head = false
|
22
|
+
end
|
23
|
+
ret.tr('0-9', '〇一二三四五六七八九')
|
24
|
+
end
|
25
|
+
YaKansuji.register_formatter :judic_v, self
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Simple kansuji formatter
|
2
|
+
module YaKansuji
|
3
|
+
module Formatter
|
4
|
+
module Lawyer
|
5
|
+
module_function
|
6
|
+
|
7
|
+
def call(num, _options = {})
|
8
|
+
return '0' if num.zero?
|
9
|
+
|
10
|
+
ret = ''
|
11
|
+
(UNIT_EXP4.reverse + ['']).each_with_index do |unit4, ridx4|
|
12
|
+
i4 = (num / 10_000**(UNIT_EXP4.size - ridx4)).to_i % 10_000
|
13
|
+
next if i4.zero?
|
14
|
+
|
15
|
+
if i4 == 1
|
16
|
+
ret << "1#{unit4}"
|
17
|
+
next
|
18
|
+
end
|
19
|
+
|
20
|
+
ret << (i4 >= 1000 ? "#{i4.to_s[0]},#{i4.to_s[1..-1]}" : i4.to_s) + unit4
|
21
|
+
end
|
22
|
+
ret
|
23
|
+
end
|
24
|
+
YaKansuji.register_formatter :lawyer, self
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -1,29 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Simple kansuji formatter
|
2
4
|
module YaKansuji
|
3
|
-
|
4
|
-
|
5
|
+
module Formatter
|
6
|
+
module Simple
|
7
|
+
module_function
|
5
8
|
|
6
|
-
|
7
|
-
|
8
|
-
i4 = (num / 10_000**(UNIT_EXP4.size - ridx4)).to_i % 10_000
|
9
|
-
next if i4.zero?
|
9
|
+
def call(num, _options = {})
|
10
|
+
return '零' if num.zero?
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
ret = ''
|
13
|
+
(UNIT_EXP4.reverse + ['']).each_with_index do |unit4, ridx4|
|
14
|
+
i4 = (num / 10_000**(UNIT_EXP4.size - ridx4)).to_i % 10_000
|
15
|
+
next if i4.zero?
|
16
|
+
|
17
|
+
if i4 == 1
|
18
|
+
ret += "一#{unit4}"
|
19
|
+
next
|
20
|
+
end
|
21
|
+
(UNIT_EXP3.reverse + ['']).each_with_index do |unit3, ridx3|
|
22
|
+
i3 = (i4 / 10**(UNIT_EXP3.size - ridx3)).to_i % 10
|
23
|
+
next if i3.zero?
|
18
24
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
25
|
+
if i3 == 1 && unit3 != ''
|
26
|
+
ret += unit3
|
27
|
+
else
|
28
|
+
ret += i3.to_s.tr('123456789', '一二三四五六七八九') + unit3
|
29
|
+
end
|
30
|
+
end
|
31
|
+
ret += unit4
|
23
32
|
end
|
33
|
+
ret
|
24
34
|
end
|
25
|
-
|
35
|
+
YaKansuji.register_formatter :simple, self
|
26
36
|
end
|
27
|
-
|
28
|
-
}
|
37
|
+
end
|
29
38
|
end
|
data/lib/ya_kansuji/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ya_kansuji
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tatsuki Sugiura
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-04-
|
11
|
+
date: 2019-04-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -67,6 +67,10 @@ files:
|
|
67
67
|
- lib/ya_kansuji.rb
|
68
68
|
- lib/ya_kansuji/core_ext.rb
|
69
69
|
- lib/ya_kansuji/core_refine.rb
|
70
|
+
- lib/ya_kansuji/formatter/gov.rb
|
71
|
+
- lib/ya_kansuji/formatter/judic_h.rb
|
72
|
+
- lib/ya_kansuji/formatter/judic_v.rb
|
73
|
+
- lib/ya_kansuji/formatter/lawyer.rb
|
70
74
|
- lib/ya_kansuji/formatter/simple.rb
|
71
75
|
- lib/ya_kansuji/version.rb
|
72
76
|
homepage: https://github.com/sugi/ya_kansuji
|