module RomanKana

coding:utf-8

coding:utf-8

Constants

K2R_TABLE
R2K_TABLE
VERSION

Public Class Methods

find_kana_from_str(str) click to toggle source
# File lib/romankana/romankana.rb, line 9
def self.find_kana_from_str str
  return '' if !str || str.length == 0
  found = R2K_TABLE[str]
  if found
    return found
  elsif str.length >= 2 && str[0] == 'n' && str[1] == 'n'
    return "ン#{find_kana_from_str(str[2..-1])}"
  elsif str.length > 2 && str[0] == 'n' && str[1] !~ /[aiueoy]/
    return "ン#{find_kana_from_str(str[1..-1])}"
  elsif str.length > 2 && str[0] == 'm' && str[1] =~ /[bmp]/
    return "ン#{find_kana_from_str(str[1..-1])}"
  elsif str.length >= 2 && str[0] == str[1] && str[0] =~ /[bcdfghjklmnpqrstvwxyz]/
    return "ッ#{find_kana_from_str(str[1..-1])}"
  elsif str.length >= 2
    return "#{find_kana_from_str(str[0])}#{find_kana_from_str(str[1..-1])}"
  else
    return str
  end
end
kanaroman(str) click to toggle source
# File lib/romankana/romankana.rb, line 39
def self.kanaroman str
  str = RomanKana::Utils.convert_utf8(str)
  ret = nil

  temp = NKF.nkf('-Wwh2',str).split('')
  array = []
  temp.each_with_index do |s,i|
    if i + 1 < temp.length
      next_str = temp[i+1]
      if next_str =~ /[ァィゥェォャュョ]/u
        s = "#{s}#{next_str}"
        temp[i+1] = nil
      end
    end
    array.push s if s
  end

  ret = array.map{|e| K2R_TABLE[e] || e }
  ret.each_with_index do |s,i|
    if s == 'ッ'
      if i + 1 < ret.length
        c = ret[i+1].split('').first
        ret[i] = c if c !~ /[aiueo]/
      end
    elsif s == 'ー'
      if i - 1 >= 0
        c = ret[i-1].split('').last
        ret[i] = c if c =~ /[aiueo]/
      end
    end
  end
  return ret.join('')
end
romankana(str) click to toggle source
# File lib/romankana/romankana.rb, line 29
def self.romankana str
  str = RomanKana::Utils.convert_utf8(str)
  ret = ''
  array = NKF.nkf('-WwZ0',str).downcase.split(/([^a-z])/).map do |e|
      e.split(/([^aiueo]*[aiueo])/).delete_if{|e|e.length == 0}
    end.flatten
  ret = array.map{|e| find_kana_from_str e }
  return ret.join('')
end