module ZenToI::Mixin
Public Instance Methods
zen_to_i()
click to toggle source
# File lib/zen_to_i/mixin.rb, line 9 def zen_to_i result = kanji2num(self) zen2han(result) end
Private Instance Methods
convert_kansuuji(array)
click to toggle source
4桁ごとの単位(万、億、兆など)でまずわけ、 それぞれに対して漢数字→数字を実行している。
# File lib/zen_to_i/mixin.rb, line 59 def convert_kansuuji(array) array.map do |a| if /([#{ALL_KANSUUJI.join('')}]+)/.match?(a) a.scan(KANORDER_F_KEYS_REGEX).inject(0) do |ret, (unit, order_f)| unit_i = unit.scan(KANORDER_KEYS_REGEX).inject(-1) do |tmp, (kanji, order)| tmp + KANNUM[kanji].to_i * KANORDER[order].to_i end ret + unit_i * KANORDER_F[order_f].to_i end else a end end end
format_location(string)
click to toggle source
# File lib/zen_to_i/mixin.rb, line 74 def format_location(string) location_map.each do |key, value| string.gsub!(/#{key}/, value) end string end
kanji2num(str)
click to toggle source
# File lib/zen_to_i/mixin.rb, line 16 def kanji2num(str) array = split_kansuuji(str) array = split_kansuuji_detail(array) result = convert_kansuuji(array) result.join("") end
split_kansuuji(string)
click to toggle source
漢数字のところだけ切り出す
# File lib/zen_to_i/mixin.rb, line 28 def split_kansuuji(string) string.split(/([#{ALL_KANSUUJI.join('')}]+)/) end
split_kansuuji_detail(array)
click to toggle source
位を表す数ではない普通の漢数字が続いていたらわける
# File lib/zen_to_i/mixin.rb, line 33 def split_kansuuji_detail(array) array_tmp = array.clone array_result = array.clone (1..MAX_LOOP).each do |_i| array_result = split_kansuuji_detail_inner(array_result) return array_result if array_result == array_tmp array_tmp = array_result.clone end array_result end
split_kansuuji_detail_inner(array)
click to toggle source
# File lib/zen_to_i/mixin.rb, line 45 def split_kansuuji_detail_inner(array) ary = array.map do |a| if /([#{ALL_KANSUUJI.join('')}]+)/.match?(a) kannum = KANNUM.keys.join("") a.gsub(/([#{kannum}])([#{kannum}])/, '\1,\2').split(",") else a end end ary.flatten end
zen2han(str)
click to toggle source
# File lib/zen_to_i/mixin.rb, line 23 def zen2han(str) str.tr("0-9", "0-9") end