class Romajify::Converter

Class to convert kana to romaji

Constants

DIGRAPHS
KUNREI_DIGRAPHS
KUNREI_MONOGRAPHS
MONOGRAPHS
NIHON_DIGRAPHS
NIHON_MONOGRAPHS

Public Class Methods

hepburn(text, options = {}) click to toggle source

Convert kana to Hepburn romaji

@param text [String] Kana text @param options [Hash] Options @option options [Boolean] :upcase Whether to return upper case @option options [Boolean] :traditional Whether to convert to traditional hepburn @return [String] Romaji text

# File lib/romajify/converter.rb, line 148
def self.hepburn(text, options = {})
  result_text = text.dup
  result_text.encode!(Encoding::UTF_8)

  result_text = romanize(result_text, DIGRAPHS)
  result_text = romanize(result_text, MONOGRAPHS)

  # Double consonants: 促音
  result_text.gsub!(/[っッ]c/, 'tc')
  result_text.gsub!(/[っッ](.)/, '\1\1')

  # Syllabic n: 撥音
  result_text.gsub!(/n([bmp])/, 'm\1') if options[:traditional]

  # Long vowels: 長音
  result_text.gsub!(/oo(.+)/, 'o\1')
  result_text.gsub!(/ou/, 'o')
  result_text.gsub!(/uu/, 'u')

  result_text.upcase! if options[:upcase]

  result_text
end
kunrei(text, options = {}) click to toggle source

Convert kana to Kunrei-shiki romaji

@param text [String] Kana text @param options [Hash] Options @option options [Boolean] :upcase Whether to return upper case @return [String] Romaji text

# File lib/romajify/converter.rb, line 203
def self.kunrei(text, options = {})
  result_text = text.dup
  result_text.encode!(Encoding::UTF_8)

  result_text = romanize(result_text, DIGRAPHS.merge(KUNREI_DIGRAPHS))
  result_text = romanize(result_text, MONOGRAPHS.merge(KUNREI_MONOGRAPHS))

  # Double consonants: 促音
  result_text.gsub!(/[っッ](.)/, '\1\1')

  # Long vowels: 長音
  result_text.gsub!(/ou|oo/, 'o')
  result_text.gsub!(/uu/, 'u')

  result_text.upcase! if options[:upcase]

  result_text
end
nihon(text, options = {}) click to toggle source

Convert kana to Nihon-shiki romaji

@param text [String] Kana text @param options [Hash] Options @option options [Boolean] :upcase Whether to return upper case @return [String] Romaji text

# File lib/romajify/converter.rb, line 178
def self.nihon(text, options = {})
  result_text = text.dup
  result_text.encode!(Encoding::UTF_8)

  result_text = romanize(result_text, DIGRAPHS.merge(NIHON_DIGRAPHS))
  result_text = romanize(result_text, MONOGRAPHS.merge(NIHON_MONOGRAPHS))

  # Double consonants: 促音
  result_text.gsub!(/[っッ](.)/, '\1\1')

  # Long vowels: 長音
  result_text.gsub!(/ou|oo/, 'o')
  result_text.gsub!(/uu/, 'u')

  result_text.upcase! if options[:upcase]

  result_text
end

Private Class Methods

romanize(text, chars) click to toggle source
# File lib/romajify/converter.rb, line 222
def self.romanize(text, chars)
  result_text = text.dup

  chars.each do |kana, romaji|
    result_text.gsub!(/#{kana}/, romaji)
  end

  result_text
end