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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c656f63ea94bda4d45c761b6069382c8114b120ebfeef6d55d80834ab5afa81c
4
- data.tar.gz: 288269c2187031293ab0b719a120519bc52ba3182b844333d82dbaab204b588a
3
+ metadata.gz: 9b533562701ef0ed367dc665df6190ad55d8e967b6301b2edd915c594eb96337
4
+ data.tar.gz: 81f83784f8e57fc41efff6a9c1f757aad7e3d9c3dcb9b406296f771de09b214b
5
5
  SHA512:
6
- metadata.gz: c91c48a86ddfb27e5b7e8958b5a03c9403daf8f6ab9896ab74de107e016145ecec1abaa853e45faaa00a66eea44d2a6b40e7e1830fc5d5e771f2339a86b7ff6e
7
- data.tar.gz: 0be580e33f96d9cdfaf4a7bc7983dcbf7dbb061e4f1ddfc58dd78a6c7beb83f0302787fa5ef0558e341986581305f6555e554d75f5cc50806342413648121a2f
6
+ metadata.gz: dc82119a8fb4b6d60513e12816c08f1e7d61e53678bef560036d6084f13a1e72ac3c4b19277b94dc4eab8e286f2d7dddd9c8b728c51dcca4b3ac437e356ec486
7
+ data.tar.gz: 9600d3bc5233393c6ce2c1fdae3cddc119e1f38c12bd6643da8ce8dffb151791d9edb7d4edaff66c6d42c103d2e59dcdc57eabf786556f977fdfdc876753afcb
data/ChangeLog CHANGED
@@ -0,0 +1,9 @@
1
+ 2019-04-21 Tatsuki Sugiura <sugi@nemui.org>
2
+
3
+ * Version: 0.2.0
4
+ * Add formatters (gov, lawyer, judic_h, judic_v)
5
+
6
+ 2019-04-15 Tatsuki Sugiura <sugi@nemui.org>
7
+
8
+ * Version: 0.1.0
9
+
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
- ## 機能 / Features
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
- ## インストール / Installation
28
+ ## インストール
31
29
 
32
30
  Gemfile に以下のようにして、bundle を実行するか、
33
31
 
@@ -43,7 +41,7 @@ gem 'ya_kansuji'
43
41
 
44
42
  ### 読み取り (漢数字 → 数値)
45
43
 
46
- `YaKansuji#to_i` に文字を渡すと数値に変換できます。読み取りに関してはオプションはありません。
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#to_kan` に数値を渡すことで、漢数字や漢字混じりの文字列に変換します。
52
+ `YaKansuji.to_kan` に数値を渡すことで、漢数字や漢字混じりの文字列に変換します。
55
53
 
56
54
  ```ruby
57
55
  YaKansuji.to_kan(12345) # => 一万二千三百四十五
58
56
  ```
59
57
 
60
- このさい、2つめの引数にシンボルを渡すことにより、フォーマッタを切り替えることができます(TODO: 予定)。
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
- * TODO ~~`gov` - 「公用文作成の要領」方式 (100億, 30万円 / 5,000)~~
74
- * TODO ~~`lawyer` - 行政司法協会方式 (1,200億 / 2億58万6,300)~~
75
- * TODO ~~`judic_v` - 裁判判例縦書き方式 (一二万〇〇五六)~~
76
- * TODO ~~`judic_h` - 最高裁判例横書き方式 (5万0539)~~
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
- `call` を持つオブジェクトなら何でも渡せます。第1引数に数字、第2引数にオプションが渡ります。
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/ya\_kansuji.
139
+ Bug reports and pull requests are welcome on GitHub at https://github.com/sugi/ya_kansuji.
142
140
 
143
141
  ## License
144
142
 
@@ -97,7 +97,7 @@ module YaKansuji
97
97
  end
98
98
 
99
99
  def to_kan(num, formatter = :simple, options = {})
100
- num = num.respond_to?(:_to_i_ya_kansuji_orig) ? num._to_i_ya_kansuji_orig : num.to_i
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
- register_formatter :simple, lambda { |num, _options = {}|
4
- return '零' if num.zero?
5
+ module Formatter
6
+ module Simple
7
+ module_function
5
8
 
6
- ret = ''
7
- (UNIT_EXP4.reverse + ['']).each_with_index do |unit4, ridx4|
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
- if i4 == 1
12
- ret += "一#{unit4}"
13
- next
14
- end
15
- (UNIT_EXP3.reverse + ['']).each_with_index do |unit3, ridx3|
16
- i3 = (i4 / 10**(UNIT_EXP3.size - ridx3)).to_i % 10
17
- next if i3.zero?
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
- if i3 == 1 && unit3 != ''
20
- ret += unit3
21
- else
22
- ret += i3.to_s.tr('123456789', '一二三四五六七八九') + unit3
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
- ret += unit4
35
+ YaKansuji.register_formatter :simple, self
26
36
  end
27
- ret
28
- }
37
+ end
29
38
  end
@@ -1,3 +1,3 @@
1
1
  module YaKansuji
2
- VERSION = '0.1.0'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  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
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-15 00:00:00.000000000 Z
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