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