Class: Romajify::Converter

Inherits:
Object
  • Object
show all
Defined in:
lib/romajify/converter.rb

Overview

Class to convert kana to romaji

Constant Summary collapse

MONOGRAPHS =
{
  あ: 'a', い: 'i', う: 'u', え: 'e', お: 'o',
  ア: 'a', イ: 'i', ウ: 'u', エ: 'e', オ: 'o',

  か: 'ka', き: 'ki', く: 'ku', け: 'ke', こ: 'ko',
  カ: 'ka', キ: 'ki', ク: 'ku', ケ: 'ke', コ: 'ko',

  が: 'ga', ぎ: 'gi', ぐ: 'gu', げ: 'ge', ご: 'go',
  ガ: 'ga', ギ: 'gi', グ: 'gu', ゲ: 'ge', ゴ: 'go',

  さ: 'sa', し: 'shi', す: 'su', せ: 'se', そ: 'so',
  サ: 'sa', シ: 'shi', ス: 'su', セ: 'se', ソ: 'so',

  ざ: 'za', じ: 'ji', ず: 'zu', ぜ: 'ze', ぞ: 'zo',
  ザ: 'za', ジ: 'ji', ズ: 'zu', ゼ: 'ze', ゾ: 'zo',

  た: 'ta', ち: 'chi', つ: 'tsu', て: 'te', と: 'to',
  タ: 'ta', チ: 'chi', ツ: 'tsu', テ: 'te', ト: 'to',

  だ: 'da', ぢ: 'ji', づ: 'zu', で: 'de', ど: 'do',
  ダ: 'da', ヂ: 'ji', ヅ: 'zu', デ: 'de', ド: 'do',

  な: 'na', に: 'ni', ぬ: 'nu', ね: 'ne', の: 'no',
  ナ: 'na', ニ: 'ni', ヌ: 'nu', ネ: 'ne', ノ: 'no',

  は: 'ha', ひ: 'hi', ふ: 'fu', へ: 'he', ほ: 'ho',
  ハ: 'ha', ヒ: 'hi', フ: 'fu', ヘ: 'he', ホ: 'ho',

  ば: 'ba', び: 'bi', ぶ: 'bu', べ: 'be', ぼ: 'bo',
  バ: 'ba', ビ: 'bi', ブ: 'bu', ベ: 'be', ボ: 'bo',

  ぱ: 'pa', ぴ: 'pi', ぷ: 'pu', ぺ: 'pe', ぽ: 'po',
  パ: 'pa', ピ: 'pi', プ: 'pu', ペ: 'pe', ポ: 'po',

  ま: 'ma', み: 'mi', む: 'mu', め: 'me', も: 'mo',
  マ: 'ma', ミ: 'mi', ム: 'mu', メ: 'me', モ: 'mo',

  や: 'ya', ゆ: 'yu', よ: 'yo',
  ヤ: 'ya', ユ: 'yu', ヨ: 'yo',

  ら: 'ra', り: 'ri', る: 'ru', れ: 're', ろ: 'ro',
  ラ: 'ra', リ: 'ri', ル: 'ru', レ: 're', ロ: 'ro',

  わ: 'wa', ゐ: 'i', ゑ: 'e', を: 'o', ん: 'n',
  ワ: 'wa', ヰ: 'i', ヱ: 'e', ヲ: 'o', ン: 'n',

  ぁ: 'a', ぃ: 'i', ぅ: 'u', ぇ: 'e', ぉ: 'o',
  ァ: 'a', ィ: 'i', ゥ: 'u', ェ: 'e', ォ: 'o',

  ゃ: 'ya', ゅ: 'yu', ょ: 'yo',
  ャ: 'ya', ュ: 'yu', ョ: 'yo',

  ゔ: 'bu', ヴ: 'bu', ー: '', _: '_'
}
DIGRAPHS =
{
  きゃ: 'kya', きゅ: 'kyu', きょ: 'kyo',
  キャ: 'kya', キュ: 'kyu', キョ: 'kyo',

  ぎゃ: 'gya', ぎゅ: 'gyu', ぎょ: 'gyo',
  ギャ: 'gya', ギュ: 'gyu', ギョ: 'gyo',

  しゃ: 'sha', しゅ: 'shu', しょ: 'sho',
  シャ: 'sha', シュ: 'shu', ショ: 'sho',

  じゃ: 'ja', じゅ: 'ju', じょ: 'jo',
  ジャ: 'ja', ジュ: 'ju', ジョ: 'jo',

  ちゃ: 'cha', ちゅ: 'chu', ちょ: 'cho',
  チャ: 'cha', チュ: 'chu', チョ: 'cho',

  ぢゃ: 'ja', ぢゅ: 'ju', ぢょ: 'jo',
  ヂャ: 'ja', ヂュ: 'ju', ヂョ: 'jo',

  にゃ: 'nya', にゅ: 'nyu', にょ: 'nyo',
  ニャ: 'nya', ニュ: 'nyu', ニョ: 'nyo',

  ひゃ: 'hya', ひゅ: 'hyu', ひょ: 'hyo',
  ヒャ: 'hya', ヒュ: 'hyu', ヒョ: 'hyo',

  びゃ: 'bya', びゅ: 'byu', びょ: 'byo',
  ビャ: 'bya', ビュ: 'byu', ビョ: 'byo',

  ぴゃ: 'pya', ぴゅ: 'pyu', ぴょ: 'pyo',
  ピャ: 'pya', ピュ: 'pyu', ピョ: 'pyo',

  みゃ: 'mya', みゅ: 'myu', みょ: 'myo',
  ミャ: 'mya', ミュ: 'myu', ミョ: 'myo',

  りゃ: 'rya', りゅ: 'ryu', りょ: 'ryo',
  リャ: 'rya', リュ: 'ryu', リョ: 'ryo'
}
NIHON_MONOGRAPHS =
{
  し: 'si', ち: 'ti', つ: 'tu', ふ: 'hu', じ: 'zi', ぢ: 'di', づ: 'du',
  シ: 'si', チ: 'ti', ツ: 'tu', フ: 'hu', ジ: 'zi', ヂ: 'di', ヅ: 'du',

  ゐ: 'wi', ゑ: 'we', を: 'wo',
  ヰ: 'wi', ヱ: 'we', ヲ: 'wo'
}
NIHON_DIGRAPHS =
{
  しゃ: 'sya', しゅ: 'syu', しょ: 'syo',
  シャ: 'sya', シュ: 'syu', ショ: 'syo',

  じゃ: 'zya', じゅ: 'zyu', じょ: 'zyo',
  ジャ: 'zya', ジュ: 'zyu', ジョ: 'zyo',

  ちゃ: 'tya', ちゅ: 'tyu', ちょ: 'tyo',
  チャ: 'tya', チュ: 'tyu', チョ: 'tyo',

  ぢゃ: 'dya', ぢゅ: 'dyu', ぢょ: 'dyo',
  ヂャ: 'dya', ヂュ: 'dyu', ヂョ: 'dyo'
}
KUNREI_MONOGRAPHS =
{
  し: 'si', ち: 'ti', つ: 'tu', ふ: 'hu', じ: 'zi', ぢ: 'zi',
  シ: 'si', チ: 'ti', ツ: 'tu', フ: 'hu', ジ: 'zi', ヂ: 'zi'
}
KUNREI_DIGRAPHS =
{
  しゃ: 'sya', しゅ: 'syu', しょ: 'syo',
  シャ: 'sya', シュ: 'syu', ショ: 'syo',

  じゃ: 'zya', じゅ: 'zyu', じょ: 'zyo',
  ジャ: 'zya', ジュ: 'zyu', ジョ: 'zyo',

  ちゃ: 'tya', ちゅ: 'tyu', ちょ: 'tyo',
  チャ: 'tya', チュ: 'tyu', チョ: 'tyo',

  ぢゃ: 'zya', ぢゅ: 'zyu', ぢょ: 'zyo',
  ヂャ: 'zya', ヂュ: 'zyu', ヂョ: 'zyo'
}

Class Method Summary collapse

Class Method Details

.hepburn(text, options = {}) ⇒ String

Convert kana to Hepburn romaji

Parameters:

  • text (String)

    Kana text

  • options (Hash) (defaults to: {})

    Options

Options Hash (options):

  • :upcase (Boolean)

    Whether to return upper case

  • :traditional (Boolean)

    Whether to convert to traditional hepburn

Returns:

  • (String)

    Romaji text



148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# 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 = {}) ⇒ String

Convert kana to Kunrei-shiki romaji

Parameters:

  • text (String)

    Kana text

  • options (Hash) (defaults to: {})

    Options

Options Hash (options):

  • :upcase (Boolean)

    Whether to return upper case

Returns:

  • (String)

    Romaji text



203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
# 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 = {}) ⇒ String

Convert kana to Nihon-shiki romaji

Parameters:

  • text (String)

    Kana text

  • options (Hash) (defaults to: {})

    Options

Options Hash (options):

  • :upcase (Boolean)

    Whether to return upper case

Returns:

  • (String)

    Romaji text



178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
# 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