ya_kansuji 0.1.0.pre.1 → 0.1.0.pre.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +88 -20
- data/lib/ya_kansuji/core_ext.rb +9 -9
- data/lib/ya_kansuji/core_refine.rb +25 -0
- data/lib/ya_kansuji/version.rb +1 -1
- data/lib/ya_kansuji.rb +16 -8
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e5a2d3c5ef4a6e85650ee610c2229d4a38bc6cc3de114dbfd72ee6b45a56193
|
4
|
+
data.tar.gz: c2149b79c9bf353a65a114f0b8ff956507d8af4be218513a1231a2b8f302e43f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7d64bc09467ec751d93a46b48d5713eba82487dfdeecfd670b101bb0c9894c93e62b94e14a1d5807de244c9854357bf763a346d30d947851f9d944005a6119d
|
7
|
+
data.tar.gz: 450015e6531cbc12abe862bc3c15bab180d5a0ad24c60f18301b9b03fe9119569ea45174695b71281520ea26b4653cdf26a770b02e3aac47125c41f81ec090c2
|
data/README.md
CHANGED
@@ -1,27 +1,31 @@
|
|
1
|
-
# TODO: THIS GEM IS ALPHA VERSION
|
1
|
+
# TODO: THIS GEM IS STILL ALPHA VERSION.
|
2
2
|
|
3
3
|
# YaKansuji - もう一つの (やりすぎ) ruby 漢数字ライブラリ
|
4
4
|
|
5
|
+
[<img src="https://badge.fury.io/rb/ya_kansuji.svg" alt="Gem Version" />](https://badge.fury.io/rb/ya_kansuji)
|
6
|
+
[<img src="https://travis-ci.org/sugi/ya_kansuji.svg?branch=master" alt="Build Status" />](https://travis-ci.org/sugi/ya_kansuji)
|
7
|
+
[<img src="https://coveralls.io/repos/sugi/ya_kansuji/badge.svg?branch=master&service=github" alt="Coverage Status" />](https://coveralls.io/github/sugi/ya_kansuji?branch=master)
|
8
|
+
[![Maintainability](https://api.codeclimate.com/v1/badges/007f79c6f7f6e82daa20/maintainability)](https://codeclimate.com/github/sugi/ya_kansuji/maintainability)
|
9
|
+
|
5
10
|
Yet another (ultimate) Japanese Kansuji library for ruby.
|
6
11
|
|
7
|
-
YaKansuji は ruby 用の日本語の漢数字ライブラリです。 和暦ライブラリの [wareki](https://github.com/sugi/wareki)
|
12
|
+
YaKansuji は ruby 用の日本語の漢数字ライブラリです。 和暦ライブラリの [wareki](https://github.com/sugi/wareki) から派生していますが、アラビア数字混じりの漢数字表記など、もう少し多彩な表現を数値と相互変換することができます。
|
8
13
|
|
9
14
|
日本語以外の漢数字に関しては一切サポートしていません。
|
10
15
|
|
11
16
|
## 機能 / Features
|
12
17
|
|
13
18
|
* 読み取り: 以下の混在したテキストを数値に変換出来ます
|
14
|
-
* 漢数字
|
15
|
-
* 全角数字 ()
|
16
|
-
* 単位なし (
|
17
|
-
*
|
18
|
-
*
|
19
|
-
*
|
20
|
-
* カンマ表現
|
19
|
+
* 漢数字 (二万三千五百六十七)
|
20
|
+
* 全角数字 (1234)
|
21
|
+
* 単位なし / ゼロ (一六九〇)
|
22
|
+
* 位取り (2億0010万 / 千〇〇二)
|
23
|
+
* 大字 (千皕卅肆)
|
24
|
+
* カンマ表現 (12,345 / 5億3,456万 / 二万、五十 )
|
21
25
|
* 数値から漢数字, 漢字混じり数値文字列フォーマット
|
22
26
|
* 複数のビルトインフォーマッタ
|
23
27
|
* フォーマッタプラグイン機構
|
24
|
-
* 標準の String,
|
28
|
+
* (オプション) 標準の String, Interger クラスの拡張
|
25
29
|
|
26
30
|
## インストール / Installation
|
27
31
|
|
@@ -35,30 +39,93 @@ gem 'ya_kansuji'
|
|
35
39
|
|
36
40
|
$ gem install ya_kansuji
|
37
41
|
|
38
|
-
## 使い方
|
42
|
+
## 使い方
|
43
|
+
|
44
|
+
### 読み取り (漢数字 → 数値)
|
39
45
|
|
40
|
-
|
46
|
+
`YaKansuji#to_i` に文字を渡すと数値に変換できます。読み取りに関してはオプションはありません。
|
41
47
|
|
42
|
-
|
48
|
+
```ruby
|
49
|
+
YaKansuji.to_i("一〇二四") # => 1024
|
50
|
+
```
|
43
51
|
|
44
|
-
|
52
|
+
### フォーマット (数値 → 漢数字)
|
53
|
+
|
54
|
+
`YaKansuji#to_kan` に数値を渡すことで、漢数字や漢字混じりの文字列に変換します。
|
45
55
|
|
46
56
|
```ruby
|
57
|
+
YaKansuji.to_kan(12345) # => 一万二千三百四十五
|
58
|
+
```
|
59
|
+
|
60
|
+
このさい、2つめの引数にシンボルを渡すことにより、フォーマッタを切り替えることができます(TODO: 予定)。
|
47
61
|
|
62
|
+
```ruby
|
63
|
+
YaKansuji.to_kan(12340005, :simple) # => "千二百三十四万五"
|
64
|
+
YaKansuji.to_kan(12340005, :gov) # => "1234万, 5"
|
65
|
+
YaKansuji.to_kan(12340005, :lawyer) # => "1,234万5"
|
66
|
+
YaKansuji.to_kan(12340005, :judic_v) # => "一二三四万〇〇〇五"
|
67
|
+
YaKansuji.to_kan(12340005, :judic_h) # => "1234万0005"
|
48
68
|
```
|
49
69
|
|
70
|
+
現在あるフォーマッタは以下のとおりです。
|
71
|
+
|
72
|
+
* simple - 標準 (例: 千二百三十四万五)
|
73
|
+
* TODO ~~gov - 「公用文作成の要領」方式 (100億, 30万円 / 5,000)~~
|
74
|
+
* TODO ~~lawyer - 行政司法協会方式 (1,200億 / 2億58万6,300)~~
|
75
|
+
* TOD ~~judic_v - 裁判判例縦書き方式 (一二万〇〇五六)~~
|
76
|
+
* TODO ~~judic_h - 最高裁判例横書き方式 (5万0539)~~
|
77
|
+
|
78
|
+
#### 独自フォーマッタ
|
79
|
+
|
80
|
+
`YaKansuji#register_formatter` を使うと独自のフォーマッタを登録できます。
|
81
|
+
`call` を持つオブジェクトなら何でも渡せます。第1引数に数字、第2引数にオプションが渡ります。
|
82
|
+
|
83
|
+
```ruby
|
84
|
+
YaKansuji.register_formatter :hoge, -> (num, opts = {}) {
|
85
|
+
if num == 0; ""
|
86
|
+
elsif num == 1; "いち"
|
87
|
+
elsif num == 2; "に"
|
88
|
+
else; "たくさん"
|
89
|
+
end
|
90
|
+
}
|
91
|
+
YaKansuji.to_kan(2, :hoge) # => "に"
|
92
|
+
YaKansuji.to_kan(123, :hoge) # => "たくさん"
|
93
|
+
```
|
50
94
|
|
51
|
-
###
|
95
|
+
### 標準クラス拡張
|
52
96
|
|
53
|
-
|
97
|
+
標準では YaKansuji のクラスメソッドを直接呼ぶことで使用できますが、短く書く場合、必要応じてビルトインクラス (String, Integer) の拡張を使うことができます。
|
54
98
|
|
55
|
-
|
99
|
+
クラス拡張では `String#to_i` を置き換え、 `Integer#to_kan` を追加します。
|
100
|
+
このさい、Refinements と直接拡張の好きな方を選択できます。
|
56
101
|
|
57
|
-
|
102
|
+
#### Refinements による拡張
|
58
103
|
|
59
|
-
|
104
|
+
`YaKansuji::CoreRefine` を using すると、 `String#to_i` を置き換え、 `Integer#to_kan` を追加します。
|
60
105
|
|
61
|
-
|
106
|
+
```ruby
|
107
|
+
puts "二万".to_i # => 0
|
108
|
+
|
109
|
+
using YaKansuji::CoreRefine
|
110
|
+
|
111
|
+
puts "二万".to_i # => 20000
|
112
|
+
puts 20000.to_kan #= > "二万"
|
113
|
+
```
|
114
|
+
|
115
|
+
#### メソッド上書き
|
116
|
+
|
117
|
+
Refinements をいちいち使わずに、全域でビルトインクラスを上書きしたい場合は `ya_kansuji/core_ext` を読み込んでください。
|
118
|
+
上書きや提供されるメソッドは Refinements と同じです。
|
119
|
+
|
120
|
+
```ruby
|
121
|
+
require 'ya_kansuji/core_ext'
|
122
|
+
```
|
123
|
+
|
124
|
+
bundler を使っている場合は、 `Gemfile` 中で以下のようにできます。
|
125
|
+
|
126
|
+
```ruby
|
127
|
+
gem 'ya_kansuji', require: 'ya_kansuji/core_ext'
|
128
|
+
```
|
62
129
|
|
63
130
|
## Contributing
|
64
131
|
|
@@ -71,3 +138,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
71
138
|
## Author
|
72
139
|
|
73
140
|
Tatsuki Sugiura <sugi@nemui.org>
|
141
|
+
\\
|
data/lib/ya_kansuji/core_ext.rb
CHANGED
@@ -1,22 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'ya_kansuji'
|
2
4
|
|
3
5
|
# Core extension by kansuji
|
4
6
|
class String
|
5
|
-
|
6
|
-
YaKansuji.to_i self
|
7
|
-
end
|
7
|
+
alias _to_i_ya_kansuji_orig to_i unless defined?(_to_i_ya_kansuji_orig)
|
8
8
|
|
9
|
-
def
|
10
|
-
|
9
|
+
def to_i(base = nil)
|
10
|
+
if base.nil? || base == :kan
|
11
|
+
YaKansuji.to_i self
|
12
|
+
else
|
13
|
+
_to_i_ya_kansuji_orig(base)
|
14
|
+
end
|
11
15
|
end
|
12
16
|
end
|
13
17
|
|
14
18
|
# Core extension by kansuji
|
15
19
|
class Integer
|
16
|
-
def to_kansuji
|
17
|
-
YaKansuji.to_kan self
|
18
|
-
end
|
19
|
-
|
20
20
|
def to_kan
|
21
21
|
YaKansuji.to_kan self
|
22
22
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ya_kansuji'
|
4
|
+
|
5
|
+
# String and Integer refinements with YaKansuji
|
6
|
+
module YaKansuji
|
7
|
+
module CoreRefine
|
8
|
+
refine String do
|
9
|
+
alias_method :_to_i_ya_kansuji_orig, :to_i unless defined?(_to_i_ya_kansuji_orig)
|
10
|
+
def to_i(base = nil)
|
11
|
+
if base.nil? || base == :kan || base == :kansuji
|
12
|
+
YaKansuji.to_i self
|
13
|
+
else
|
14
|
+
_to_i_ya_kansuji_orig base
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
refine Integer do
|
20
|
+
def to_kan(formatter = :simple)
|
21
|
+
YaKansuji.to_kan self, formatter
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/ya_kansuji/version.rb
CHANGED
data/lib/ya_kansuji.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'ya_kansuji/version'
|
4
|
+
require 'ya_kansuji/core_refine'
|
4
5
|
|
5
6
|
# Yet another Kansuji library for ruby.
|
6
7
|
module YaKansuji
|
@@ -22,10 +23,17 @@ module YaKansuji
|
|
22
23
|
module_function
|
23
24
|
|
24
25
|
def to_i(str)
|
25
|
-
|
26
|
+
str = str.to_s.tr(NUM_ALT_CHARS, NUM_NORMALIZED_CHARS)
|
27
|
+
str.gsub!(/[,,、:space:]/, '')
|
28
|
+
matched = REGEXP.match(str) or return 0
|
26
29
|
ret3 = 0
|
27
30
|
ret4 = 0
|
28
31
|
curnum = nil
|
32
|
+
if str.respond_to? :_to_i_ya_kansuji_orig
|
33
|
+
to_i_meth = :_to_i_ya_kansuji_orig
|
34
|
+
else
|
35
|
+
to_i_meth = :to_i
|
36
|
+
end
|
29
37
|
matched[0].scan(REGEXP_PART).each do |c|
|
30
38
|
case c
|
31
39
|
when '1', '2', '3', '4', '5', '6', '7', '8', '9'
|
@@ -34,7 +42,7 @@ module YaKansuji
|
|
34
42
|
else
|
35
43
|
curnum = 0
|
36
44
|
end
|
37
|
-
curnum += c.
|
45
|
+
curnum += c.public_send(to_i_meth)
|
38
46
|
when '0'
|
39
47
|
curnum and curnum *= 10
|
40
48
|
when '卄', '廿'
|
@@ -72,16 +80,16 @@ module YaKansuji
|
|
72
80
|
|
73
81
|
def register_formatter(sym, proc = nil, &block)
|
74
82
|
if block_given?
|
75
|
-
@@formatters[sym
|
83
|
+
@@formatters[sym] = block
|
76
84
|
elsif proc.respond_to? :call
|
77
|
-
@@formatters[sym
|
85
|
+
@@formatters[sym] = proc
|
78
86
|
else
|
79
87
|
raise ArgumentError, 'Registering invalid formatter.'
|
80
88
|
end
|
81
89
|
end
|
82
90
|
|
83
91
|
def formatter(sym)
|
84
|
-
@@formatters[sym
|
92
|
+
@@formatters[sym]
|
85
93
|
end
|
86
94
|
|
87
95
|
def formatters
|
@@ -89,11 +97,11 @@ module YaKansuji
|
|
89
97
|
end
|
90
98
|
|
91
99
|
def to_kan(num, formatter = :simple, options = {})
|
92
|
-
num = num.to_i
|
100
|
+
num = num.respond_to?(:_to_i_ya_kansuji_orig) ? num._to_i_ya_kansuji_orig : num.to_i
|
93
101
|
if formatter.respond_to? :call
|
94
102
|
formatter.call num, options
|
95
|
-
elsif @@formatters[formatter
|
96
|
-
@@formatters[formatter
|
103
|
+
elsif @@formatters[formatter]
|
104
|
+
@@formatters[formatter].call num, options
|
97
105
|
else
|
98
106
|
raise ArgumentError, "Unable to find formatter #{formatter}"
|
99
107
|
end
|
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.1.0.pre.
|
4
|
+
version: 0.1.0.pre.3
|
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-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,6 +66,7 @@ files:
|
|
66
66
|
- README.md
|
67
67
|
- lib/ya_kansuji.rb
|
68
68
|
- lib/ya_kansuji/core_ext.rb
|
69
|
+
- lib/ya_kansuji/core_refine.rb
|
69
70
|
- lib/ya_kansuji/formatter/simple.rb
|
70
71
|
- lib/ya_kansuji/version.rb
|
71
72
|
homepage: https://github.com/sugi/ya_kansuji
|