ya_kansuji 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c656f63ea94bda4d45c761b6069382c8114b120ebfeef6d55d80834ab5afa81c
4
- data.tar.gz: 288269c2187031293ab0b719a120519bc52ba3182b844333d82dbaab204b588a
3
+ metadata.gz: de9deb8ed6a818c9939482fc8c6408ec00659a67810dfc0eb034ae9bcc821a43
4
+ data.tar.gz: 701f44b2de1b5186c1f92f8779840af3ae2ca873fd820a4120e4d653ed194888
5
5
  SHA512:
6
- metadata.gz: c91c48a86ddfb27e5b7e8958b5a03c9403daf8f6ab9896ab74de107e016145ecec1abaa853e45faaa00a66eea44d2a6b40e7e1830fc5d5e771f2339a86b7ff6e
7
- data.tar.gz: 0be580e33f96d9cdfaf4a7bc7983dcbf7dbb061e4f1ddfc58dd78a6c7beb83f0302787fa5ef0558e341986581305f6555e554d75f5cc50806342413648121a2f
6
+ metadata.gz: c8c3263df051a72dc07c1a8a38acf59f1f94c8b896bb9f2d718637f0b808d7d6b0c02bf43975c892fb1c634a5affd9f02f094be4911a926d5218ab467a6ff794
7
+ data.tar.gz: 69c8d4b5413a6ec864ac3d7e4e70d258c0f01ecd7684f30ff6c4a414b59751403807eb2850be44489a900df306e54e4f16e50f36555a165675c9f16c4ba33e55
data/ChangeLog CHANGED
@@ -0,0 +1,15 @@
1
+ 2025-03-09 Tatsuki Sugiura <sug@nemui.org>
2
+
3
+ * Version: 1.0.0
4
+ * Minor changes to cleanup build with ruby 3.x
5
+ * Strip whitespace on parsing.
6
+
7
+ 2019-04-21 Tatsuki Sugiura <sugi@nemui.org>
8
+
9
+ * Version: 0.2.0
10
+ * Add formatters (gov, lawyer, judic_h, judic_v)
11
+
12
+ 2019-04-15 Tatsuki Sugiura <sugi@nemui.org>
13
+
14
+ * Version: 0.1.0
15
+
data/README.md CHANGED
@@ -1,11 +1,10 @@
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)
6
4
  [<img src="https://travis-ci.org/sugi/ya_kansuji.svg?branch=master" alt="Build Status" />](https://travis-ci.org/sugi/ya_kansuji)
7
5
  [<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
6
  [![Maintainability](https://api.codeclimate.com/v1/badges/007f79c6f7f6e82daa20/maintainability)](https://codeclimate.com/github/sugi/ya_kansuji/maintainability)
7
+ [![Codacy Badge](https://app.codacy.com/project/badge/Grade/048e7a2f52cb48908c4deba7ce696f08)](https://app.codacy.com/gh/sugi/ya_kansuji/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
9
8
 
10
9
  Yet another (ultimate) Japanese Kansuji library for ruby.
11
10
 
@@ -13,7 +12,7 @@ YaKansuji は ruby 用の日本語の漢数字ライブラリです。 和暦ラ
13
12
 
14
13
  現状のサポートは日本語で万進な10進数だけです。歴史的に使われたことのあった万万進や他の漢字圏の漢数字はサポートしていません。
15
14
 
16
- ## 機能 / Features
15
+ ## 機能
17
16
 
18
17
  * 読み取り: 以下の混在したテキストを数値に変換出来ます
19
18
  * 漢数字 (二万三千五百六十七)
@@ -21,13 +20,13 @@ YaKansuji は ruby 用の日本語の漢数字ライブラリです。 和暦ラ
21
20
  * 単位なし / ゼロ (一六九〇)
22
21
  * 位取り (2億0010万 / 千〇〇二)
23
22
  * 大字 (千皕卅肆)
24
- * カンマ表現 (12,345 / 5億3,456万 / 二万、五十 )
23
+ * カンマ表現 (12,345 / 5億3,456万 / 二万、五十)
25
24
  * 数値から漢数字, 漢字混じり数値文字列フォーマット
26
25
  * 複数のビルトインフォーマッタ
27
26
  * フォーマッタプラグイン機構
28
27
  * (オプション) 標準の String, Interger クラスの拡張
29
28
 
30
- ## インストール / Installation
29
+ ## インストール
31
30
 
32
31
  Gemfile に以下のようにして、bundle を実行するか、
33
32
 
@@ -43,7 +42,7 @@ gem 'ya_kansuji'
43
42
 
44
43
  ### 読み取り (漢数字 → 数値)
45
44
 
46
- `YaKansuji#to_i` に文字を渡すと数値に変換できます。読み取りに関してはオプションはありません。
45
+ `YaKansuji.to_i` に文字を渡すと数値に変換できます。読み取りに関してはオプションはありません。
47
46
 
48
47
  ```ruby
49
48
  YaKansuji.to_i("一〇二四") # => 1024
@@ -51,13 +50,13 @@ YaKansuji.to_i("一〇二四") # => 1024
51
50
 
52
51
  ### フォーマット (数値 → 漢数字)
53
52
 
54
- `YaKansuji#to_kan` に数値を渡すことで、漢数字や漢字混じりの文字列に変換します。
53
+ `YaKansuji.to_kan` に数値を渡すことで、漢数字や漢字混じりの文字列に変換します。
55
54
 
56
55
  ```ruby
57
56
  YaKansuji.to_kan(12345) # => 一万二千三百四十五
58
57
  ```
59
58
 
60
- このさい、2つめの引数にシンボルを渡すことにより、フォーマッタを切り替えることができます(TODO: 予定)。
59
+ このさい、2つめの引数にシンボルを渡すことにより、フォーマッタを切り替えることができます。
61
60
 
62
61
  ```ruby
63
62
  YaKansuji.to_kan(12340005, :simple) # => "千二百三十四万五"
@@ -70,15 +69,15 @@ YaKansuji.to_kan(12340005, :judic_h) # => "1234万0005"
70
69
  現在あるフォーマッタは以下のとおりです。
71
70
 
72
71
  * `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)~~
72
+ * `gov` - 「公用文作成の要領」方式 (100億, 30万円 / 5,000)
73
+ * `lawyer` - 行政司法協会方式 (1,200億 / 2億58万6,300)
74
+ * `judic_v` - 裁判判例縦書き方式 (一二万〇〇五六)
75
+ * `judic_h` - 最高裁判例横書き方式 (5万0539)
77
76
 
78
77
  #### 独自フォーマッタ
79
78
 
80
79
  `YaKansuji#register_formatter` を使うと独自のフォーマッタを登録できます。
81
- `call` を持つオブジェクトなら何でも渡せます。第1引数に数字、第2引数にオプションが渡ります。
80
+ `#call` を持つ任意のオブジェクトもしくはブロックを渡します。第1引数に数字、第2引数にオプションが渡ります。
82
81
 
83
82
  ```ruby
84
83
  YaKansuji.register_formatter :hoge, -> (num, opts = {}) {
@@ -123,7 +122,7 @@ puts "12万".to_i(16) # => 18
123
122
 
124
123
  #### メソッド上書き
125
124
 
126
- Refinements を使わずに、全域でビルトインクラスを上書きしたい場合は `ya_kansuji/core_ext` を読み込んでください。*これは破壊的にコアライブラリのメソッドを置き換えるため、影響範囲に注意して下さい。*
125
+ Refinements を使わずに、全域でビルトインクラスを上書きしたい場合は `ya_kansuji/core_ext` を読み込んでください。**これは破壊的にコアライブラリのメソッドを置き換えるため、影響範囲に注意して下さい。**
127
126
  上書きや提供されるメソッドは Refinements と同じです。
128
127
 
129
128
  ```ruby
@@ -138,7 +137,7 @@ gem 'ya_kansuji', require: 'ya_kansuji/core_ext'
138
137
 
139
138
  ## Contributing
140
139
 
141
- Bug reports and pull requests are welcome on GitHub at https://github.com/sugi/ya\_kansuji.
140
+ Bug reports and pull requests are welcome on GitHub at https://github.com/sugi/ya_kansuji.
142
141
 
143
142
  ## License
144
143
 
@@ -2,15 +2,15 @@
2
2
 
3
3
  require 'ya_kansuji'
4
4
 
5
- # String and Integer refinements with YaKansuji
6
5
  module YaKansuji
6
+ # String and Integer refinements with YaKansuji
7
7
  module CoreRefine
8
8
  refine String do
9
9
  def to_i(base = nil)
10
10
  if base.nil? || base == :kan || base == :kansuji
11
11
  YaKansuji.to_i self
12
12
  else
13
- super base
13
+ super
14
14
  end
15
15
  end
16
16
  end
@@ -0,0 +1,26 @@
1
+ module YaKansuji
2
+ module Formatter
3
+ # Formatter for Japan government-style kansuji
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,29 @@
1
+ # Simple kansuji formatter
2
+ module YaKansuji
3
+ module Formatter
4
+ # Formatter for Jpanese judicial style kansuji (arabic numerals version)
5
+ module JudicH
6
+ module_function
7
+
8
+ def call(num, _options = {})
9
+ return '0' if num.zero?
10
+
11
+ ret = ''
12
+ head = true
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 head
18
+ ret << (i4.to_s + unit4)
19
+ else
20
+ ret << (('%04d' % i4) + unit4)
21
+ end
22
+ head = false
23
+ end
24
+ ret.tr('0-9', '0-9')
25
+ end
26
+ YaKansuji.register_formatter :judic_h, self
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ # Simple kansuji formatter
2
+ module YaKansuji
3
+ module Formatter
4
+ # Formatter for Jpanese judicial style kansuji (kanji numerals version)
5
+ module JudicV
6
+ module_function
7
+
8
+ def call(num, _options = {})
9
+ return '〇' if num.zero?
10
+
11
+ ret = ''
12
+ head = true
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 head
18
+ ret << (i4.to_s + unit4)
19
+ else
20
+ ret << (('%04d' % i4) + unit4)
21
+ end
22
+ head = false
23
+ end
24
+ ret.tr('0-9', '〇一二三四五六七八九')
25
+ end
26
+ YaKansuji.register_formatter :judic_v, self
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,28 @@
1
+ # Simple kansuji formatter
2
+ module YaKansuji
3
+ module Formatter
4
+ # Formatter for Jpanese lawyer style kansuji
5
+ module Lawyer
6
+ module_function
7
+
8
+ def call(num, _options = {})
9
+ return '0' if num.zero?
10
+
11
+ ret = ''
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 i4 == 1
17
+ ret << "1#{unit4}"
18
+ next
19
+ end
20
+
21
+ ret << ((i4 >= 1000 ? "#{i4.to_s[0]},#{i4.to_s[1..-1]}" : i4.to_s) + unit4)
22
+ end
23
+ ret
24
+ end
25
+ YaKansuji.register_formatter :lawyer, self
26
+ end
27
+ end
28
+ end
@@ -1,29 +1,38 @@
1
- # Simple kansuji formatter
1
+ # frozen_string_literal: true
2
+
2
3
  module YaKansuji
3
- register_formatter :simple, lambda { |num, _options = {}|
4
- return '零' if num.zero?
4
+ module Formatter
5
+ # Simple kansuji 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 = '1.0.0'.freeze
3
3
  end
data/lib/ya_kansuji.rb CHANGED
@@ -7,8 +7,9 @@ require 'ya_kansuji/core_refine'
7
7
  module YaKansuji
8
8
  UNIT_EXP3 = %w(十 百 千).freeze
9
9
  UNIT_EXP4 = %w(万 億 兆 京 垓 𥝱 穣 溝 澗 正 載 極 恒河沙 阿僧祇 那由他 不可思議 無量大数).freeze
10
- NUM_ALT_CHARS = '〇一二三四五六七八九0123456789零壱壹弌弐貳貮参參弎肆伍陸漆質柒捌玖拾什陌佰阡仟萬秭'.freeze
11
- NUM_NORMALIZED_CHARS = '01234567890123456789011122233345677789十十百百千千万𥝱'.freeze
10
+ NUM_ALT_CHARS = '〇一二三四五六七八九0123456789零壱壹弌弐貳貮参參弎肆伍陸漆質柒捌玖拾什陌佰阡仟萬秭'
11
+ NUM_NORMALIZED_CHARS = '01234567890123456789011122233345677789十十百百千千万𥝱'
12
+ # rubocop:disable Lint/DuplicateRegexpCharacterClassElement
12
13
  REGEXP_PART = %r{
13
14
  [
14
15
  #{(NUM_ALT_CHARS + NUM_NORMALIZED_CHARS).chars.uniq.join}
@@ -17,6 +18,7 @@ module YaKansuji
17
18
  ] |
18
19
  #{UNIT_EXP4.find_all { |u| u.length > 1 }.join('|')}
19
20
  }x.freeze
21
+ # rubocop:enable Lint/DuplicateRegexpCharacterClassElement
20
22
  REGEXP = /(?:#{REGEXP_PART})+/.freeze
21
23
  @@formatters = {}
22
24
 
@@ -24,7 +26,7 @@ module YaKansuji
24
26
 
25
27
  def to_i(str)
26
28
  str = str.to_s.tr(NUM_ALT_CHARS, NUM_NORMALIZED_CHARS)
27
- str.gsub!(/[,,、:space:]/, '')
29
+ str.gsub!(/[,,、[:space:]]/, '')
28
30
  matched = REGEXP.match(str) or return 0
29
31
  ret3 = 0
30
32
  ret4 = 0
@@ -63,11 +65,11 @@ module YaKansuji
63
65
  curnum = nil
64
66
  end
65
67
  ret3 = 1 if ret3.zero?
66
- ret4 += ret3 * 10**((UNIT_EXP4.index(c) + 1) * 4)
68
+ ret4 += ret3 * (10**((UNIT_EXP4.index(c) + 1) * 4))
67
69
  ret3 = 0
68
70
  when *UNIT_EXP3
69
71
  curnum ||= 1
70
- ret3 += curnum * 10**(UNIT_EXP3.index(c) + 1)
72
+ ret3 += curnum * (10**(UNIT_EXP3.index(c) + 1))
71
73
  curnum = nil
72
74
  end
73
75
  end
@@ -97,7 +99,7 @@ module YaKansuji
97
99
  end
98
100
 
99
101
  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
102
+ num.respond_to?(:_to_i_ya_kansuji_orig) ? num = num._to_i_ya_kansuji_orig : num = num.to_i
101
103
  if formatter.respond_to? :call
102
104
  formatter.call num, options
103
105
  elsif @@formatters[formatter]
@@ -109,3 +111,7 @@ module YaKansuji
109
111
  end
110
112
 
111
113
  require 'ya_kansuji/formatter/simple'
114
+ require 'ya_kansuji/formatter/gov'
115
+ require 'ya_kansuji/formatter/lawyer'
116
+ require 'ya_kansuji/formatter/judic_v'
117
+ require 'ya_kansuji/formatter/judic_h'
metadata CHANGED
@@ -1,57 +1,15 @@
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: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tatsuki Sugiura
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-15 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '1.9'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '1.9'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '10.0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '10.0'
41
- - !ruby/object:Gem::Dependency
42
- name: rspec
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '3.0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '3.0'
11
+ date: 2025-03-09 00:00:00.000000000 Z
12
+ dependencies: []
55
13
  description: |
56
14
  Pure ruby library of Japanese kansuji.
57
15
  Bi-directional convert support between number and kanji string.
@@ -67,13 +25,18 @@ files:
67
25
  - lib/ya_kansuji.rb
68
26
  - lib/ya_kansuji/core_ext.rb
69
27
  - lib/ya_kansuji/core_refine.rb
28
+ - lib/ya_kansuji/formatter/gov.rb
29
+ - lib/ya_kansuji/formatter/judic_h.rb
30
+ - lib/ya_kansuji/formatter/judic_v.rb
31
+ - lib/ya_kansuji/formatter/lawyer.rb
70
32
  - lib/ya_kansuji/formatter/simple.rb
71
33
  - lib/ya_kansuji/version.rb
72
34
  homepage: https://github.com/sugi/ya_kansuji
73
35
  licenses:
74
36
  - MIT
75
- metadata: {}
76
- post_install_message:
37
+ metadata:
38
+ rubygems_mfa_required: 'true'
39
+ post_install_message:
77
40
  rdoc_options: []
78
41
  require_paths:
79
42
  - lib
@@ -88,9 +51,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
88
51
  - !ruby/object:Gem::Version
89
52
  version: '0'
90
53
  requirements: []
91
- rubyforge_project:
92
- rubygems_version: 2.7.6.2
93
- signing_key:
54
+ rubygems_version: 3.1.6
55
+ signing_key:
94
56
  specification_version: 4
95
57
  summary: Japanese kansuji library for ruby
96
58
  test_files: []