├── spec
├── spec.opts
├── spec_helper.rb
├── string_spec.rb
└── romankana_spec.rb
├── lib
├── romankana
│ ├── version.rb
│ ├── utils.rb
│ ├── string.rb
│ ├── romankana.rb
│ ├── k2r.rb
│ └── r2k.rb
└── romankana.rb
├── .travis.yml
├── Gemfile
├── Rakefile
├── Manifest.txt
├── .gitignore
├── script
├── destroy
├── generate
└── console
├── tasks
└── rspec.rake
├── romankana.gemspec
├── README.rdoc
└── test
└── romankana_test.rb
/spec/spec.opts:
--------------------------------------------------------------------------------
1 | --colour
--------------------------------------------------------------------------------
/lib/romankana/version.rb:
--------------------------------------------------------------------------------
1 | module RomanKana
2 | VERSION = '0.2.1'
3 | end
4 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: ruby
2 | rvm:
3 | - 2.1.0
4 | - 2.0.0
5 | - 1.9.3
6 | - 1.9.2
7 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source 'https://rubygems.org'
2 |
3 | gem 'coveralls', require: false
4 |
5 | # Specify your gem's dependencies in romankana.gemspec
6 | gemspec
7 |
--------------------------------------------------------------------------------
/Rakefile:
--------------------------------------------------------------------------------
1 | require "bundler/gem_tasks"
2 | require "rspec/core/rake_task"
3 |
4 | RSpec::Core::RakeTask.new do |spec|
5 | spec.pattern = 'spec/**/*_spec.rb'
6 | #spec.rspec_opts = ['--backtrace']
7 | end
8 |
9 | task :default => [:spec]
10 |
--------------------------------------------------------------------------------
/spec/spec_helper.rb:
--------------------------------------------------------------------------------
1 | require 'coveralls'
2 | Coveralls.wear!
3 | begin
4 | require 'rspec'
5 | rescue LoadError
6 | require 'rubygems' unless ENV['NO_RUBYGEMS']
7 | gem 'rspec'
8 | require 'rspec'
9 | end
10 |
11 | $:.unshift(File.dirname(__FILE__) + '/../lib')
12 | require 'romankana'
13 |
--------------------------------------------------------------------------------
/Manifest.txt:
--------------------------------------------------------------------------------
1 | History.txt
2 | Manifest.txt
3 | PostInstall.txt
4 | README.rdoc
5 | Rakefile
6 | lib/romankana.rb
7 | lib/romankana/romankana.rb
8 | lib/romankana/r2k.rb
9 | lib/romankana/k2r.rb
10 | script/console
11 | script/destroy
12 | script/generate
13 | spec/romankana_spec.rb
14 | spec/spec.opts
15 | spec/spec_helper.rb
16 | tasks/rspec.rake
17 | test/romankana_test.rb
18 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .*.swp
2 | .*.swo
3 | *~
4 | pkg/*
5 |
6 | .DS_Store
7 |
8 | nbproject/private/rake-d.txt
9 |
10 | nbproject/project.properties
11 |
12 | nbproject/project.xml
13 |
14 | *.gem
15 | *.rbc
16 | .bundle
17 | .config
18 | .yardoc
19 | Gemfile.lock
20 | InstalledFiles
21 | _yardoc
22 | coverage
23 | doc/
24 | lib/bundler/man
25 | pkg
26 | rdoc
27 | spec/reports
28 | test/tmp
29 | test/version_tmp
30 | tmp
31 |
--------------------------------------------------------------------------------
/lib/romankana/utils.rb:
--------------------------------------------------------------------------------
1 | module RomanKana
2 | module Utils
3 | def self.set_encoding_of_before before, after
4 | e = before.encoding
5 | return (e == Encoding::US_ASCII or e == Encoding::ASCII_8BIT) ? after : after.encode(e)
6 | end
7 |
8 | def self.convert_utf8 str
9 | return (str.encoding != Encoding::UTF_8) ? str.encode(Encoding::UTF_8) : str
10 | end
11 | end
12 | end
13 |
14 |
--------------------------------------------------------------------------------
/script/destroy:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3 |
4 | begin
5 | require 'rubigen'
6 | rescue LoadError
7 | require 'rubygems'
8 | require 'rubigen'
9 | end
10 | require 'rubigen/scripts/destroy'
11 |
12 | ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13 | RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14 | RubiGen::Scripts::Destroy.new.run(ARGV)
15 |
--------------------------------------------------------------------------------
/script/generate:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3 |
4 | begin
5 | require 'rubigen'
6 | rescue LoadError
7 | require 'rubygems'
8 | require 'rubigen'
9 | end
10 | require 'rubigen/scripts/generate'
11 |
12 | ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13 | RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14 | RubiGen::Scripts::Generate.new.run(ARGV)
15 |
--------------------------------------------------------------------------------
/script/console:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | # File: script/console
3 | irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4 |
5 | libs = " -r irb/completion"
6 | # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7 | # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8 | libs << " -r #{File.dirname(__FILE__) + '/../lib/romankana.rb'}"
9 | puts "Loading romankana gem"
10 | exec "#{irb} #{libs} --simple-prompt"
--------------------------------------------------------------------------------
/lib/romankana.rb:
--------------------------------------------------------------------------------
1 | #coding:utf-8
2 | $:.unshift(File.dirname(__FILE__)) unless
3 | $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
4 |
5 | directory = File.expand_path(File.dirname(__FILE__))
6 | require directory+'/romankana/r2k.rb'
7 | require directory+'/romankana/k2r.rb'
8 | require directory+'/romankana/utils.rb'
9 | require directory+'/romankana/romankana.rb'
10 | require directory+'/romankana/string.rb'
11 | require directory+'/romankana/version.rb'
12 |
13 | module RomanKana
14 | end
15 |
--------------------------------------------------------------------------------
/tasks/rspec.rake:
--------------------------------------------------------------------------------
1 | begin
2 | require 'rspec'
3 | rescue LoadError
4 | require 'rubygems' unless ENV['NO_RUBYGEMS']
5 | require 'rspec'
6 | end
7 | begin
8 | require 'rspec/core/rake_task'
9 | rescue LoadError
10 | puts <<-EOS
11 | To use rspec for testing you must install rspec gem:
12 | gem install rspec
13 | EOS
14 | exit(0)
15 | end
16 |
17 | desc "Run the specs under spec/models"
18 | RSpec::Core::RakeTask.new do |t|
19 | t.rspec_opts = ['--options', "spec/spec.opts"]
20 | t.pattern = 'spec/**/*_spec.rb'
21 | end
22 |
--------------------------------------------------------------------------------
/romankana.gemspec:
--------------------------------------------------------------------------------
1 | lib = File.expand_path('../lib', __FILE__)
2 | $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3 | require 'romankana/version'
4 |
5 | Gem::Specification.new do |spec|
6 | spec.name = "romankana"
7 | spec.version = RomanKana::VERSION
8 | spec.authors = ["ymrl"]
9 | spec.email = ["ymrl@ymrl.net"]
10 | spec.summary = %q{Roman Alphabet <-> Japanese Hiragana/Katkakana Convert Library for Ruby}
11 | spec.description = spec.summary
12 | spec.homepage = "https://github.com/ymrl/romankana"
13 | spec.license = "MIT"
14 | spec.required_ruby_version = ">= 1.9"
15 |
16 | spec.files = `git ls-files`.split($/)
17 | spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18 | spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19 | spec.require_paths = ["lib"]
20 |
21 | spec.add_development_dependency "bundler", "~> 1.5"
22 | spec.add_development_dependency "rake"
23 | spec.add_development_dependency "rspec"
24 | end
25 |
--------------------------------------------------------------------------------
/lib/romankana/string.rb:
--------------------------------------------------------------------------------
1 | #coding:UTF-8
2 | $:.unshift(File.dirname(__FILE__)) unless
3 | $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
4 |
5 | require 'romankana'
6 |
7 | class String
8 | def roman_to_hiragana
9 | r = self.split(/([a-zA-Z]+)/u).map{|e|e =~ /[a-zA-Z]+/u?NKF.nkf("-Wwh1",RomanKana.romankana(e)):e}.join('')
10 | return RomanKana::Utils.set_encoding_of_before(self,r)
11 | end
12 | def roman_to_katakana
13 | r = self.split(/([a-zA-Z]+)/u).map{|e|e =~ /[a-zA-Z]+/u?RomanKana.romankana(e):e}.join('')
14 | return RomanKana::Utils.set_encoding_of_before(self,r)
15 | end
16 | def katakana_to_roman
17 | r = self.split(/([ァ-ヴ]+)/u).map{|e|e =~ /[ァ-ヴ]+/u?RomanKana.kanaroman(e):e}.join('')
18 | return RomanKana::Utils.set_encoding_of_before(self,r)
19 | end
20 | def hiragana_to_roman
21 | r = self.split(/([ぁ-ゔ]+)/u).map{|e|e =~ /[ぁ-ゔ]+/u?NKF.nkf("-Wwh1",RomanKana.kanaroman(e)):e}.join('')
22 | return RomanKana::Utils.set_encoding_of_before(self,r)
23 | end
24 | def to_roman
25 | r = RomanKana.kanaroman(self)
26 | return RomanKana::Utils.set_encoding_of_before(self,r)
27 | end
28 | def to_hiragana
29 | r = NKF.nkf('-Wwh1',RomanKana.romankana(self))
30 | return RomanKana::Utils.set_encoding_of_before(self,r)
31 | end
32 | def to_katakana
33 | r = NKF.nkf('-Wwh2',RomanKana.romankana(self))
34 | return RomanKana::Utils.set_encoding_of_before(self,r)
35 | end
36 | def to_hankaku
37 | r = NKF.nkf('-Z4xwW',RomanKana::Utils.convert_utf8(self))
38 | return RomanKana::Utils.set_encoding_of_before(self,r)
39 | end
40 | end
41 |
--------------------------------------------------------------------------------
/spec/string_spec.rb:
--------------------------------------------------------------------------------
1 | #coding:UTF-8
2 | require 'spec_helper'
3 | describe String do
4 |
5 | describe '#roman_to_hiragana' do
6 | it 'converts roman-ji to hiragana' do
7 | expect('ほげほげhogehogeホゲホゲ'.roman_to_hiragana).to eq 'ほげほげほげほげホゲホゲ'
8 | end
9 | end
10 |
11 | describe '#roman_to_katakana' do
12 | it 'converts roman-ji to katakana' do
13 | expect('ほげほげhogehogeホゲホゲ'.roman_to_katakana).to eq 'ほげほげホゲホゲホゲホゲ'
14 | end
15 | end
16 |
17 | describe '#katakana_to_roman' do
18 | it 'converts katakana to roman' do
19 | expect('ほげほげhogehogeホゲホゲ'.katakana_to_roman).to eq 'ほげほげhogehogehogehoge'
20 | end
21 | end
22 |
23 | describe '#hiragana_to_roman' do
24 | it 'converts hiragana to roman' do
25 | expect('ほげほげhogehogeホゲホゲ'.hiragana_to_roman).to eq 'hogehogehogehogeホゲホゲ'
26 | end
27 | end
28 |
29 | describe '#to_roman' do
30 | it 'converts all kana to roman' do
31 | expect('ほげほげhogehogeホゲホゲ'.to_roman).to eq 'hogehogehogehogehogehoge'
32 | end
33 | end
34 |
35 |
36 | describe '#to_hiragana' do
37 | it 'converts all roman-ji and katakana to hiragana' do
38 | expect('ほげほげhogehogeホゲホゲ'.to_hiragana).to eq 'ほげほげほげほげほげほげ'
39 | end
40 | end
41 |
42 | describe '#to_katakana' do
43 | it 'converts all roman-ji and hiragana to katakana' do
44 | expect('ほげほげhogehogeホゲホゲ'.to_katakana).to eq 'ホゲホゲホゲホゲホゲホゲ'
45 | end
46 | end
47 |
48 |
49 | describe '#to_hankaku' do
50 | it 'converts katkana and zenkaku alphabet to hankaku' do
51 | expect('ほげほげhogehogeホゲホゲhogehoge'.to_hankaku).to eq 'ほげほげhogehogeホゲホゲhogehoge'
52 | end
53 | end
54 |
55 | end
56 |
--------------------------------------------------------------------------------
/lib/romankana/romankana.rb:
--------------------------------------------------------------------------------
1 | #coding:utf-8
2 | $:.unshift(File.dirname(__FILE__)) unless
3 | $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
4 |
5 | require 'kconv'
6 | require 'utils'
7 |
8 | module RomanKana
9 | def self.find_kana_from_str str
10 | return '' if !str || str.length == 0
11 | found = R2K_TABLE[str]
12 | if found
13 | return found
14 | elsif str.length >= 2 && str[0] == 'n' && str[1] == 'n'
15 | return "ン#{find_kana_from_str(str[2..-1])}"
16 | elsif str.length > 2 && str[0] == 'n' && str[1] !~ /[aiueoy]/
17 | return "ン#{find_kana_from_str(str[1..-1])}"
18 | elsif str.length > 2 && str[0] == 'm' && str[1] =~ /[bmp]/
19 | return "ン#{find_kana_from_str(str[1..-1])}"
20 | elsif str.length >= 2 && str[0] == str[1] && str[0] =~ /[bcdfghjklmnpqrstvwxyz]/
21 | return "ッ#{find_kana_from_str(str[1..-1])}"
22 | elsif str.length >= 2
23 | return "#{find_kana_from_str(str[0])}#{find_kana_from_str(str[1..-1])}"
24 | else
25 | return str
26 | end
27 | end
28 |
29 | def self.romankana str
30 | str = RomanKana::Utils.convert_utf8(str)
31 | ret = ''
32 | array = NKF.nkf('-WwZ0',str).downcase.split(/([^a-z])/).map do |e|
33 | e.split(/([^aiueo]*[aiueo])/).delete_if{|e|e.length == 0}
34 | end.flatten
35 | ret = array.map{|e| find_kana_from_str e }
36 | return ret.join('')
37 | end
38 |
39 | def self.kanaroman str
40 | str = RomanKana::Utils.convert_utf8(str)
41 | ret = nil
42 |
43 | temp = NKF.nkf('-Wwh2',str).split('')
44 | array = []
45 | temp.each_with_index do |s,i|
46 | if i + 1 < temp.length
47 | next_str = temp[i+1]
48 | if next_str =~ /[ァィゥェォャュョ]/u
49 | s = "#{s}#{next_str}"
50 | temp[i+1] = nil
51 | end
52 | end
53 | array.push s if s
54 | end
55 |
56 | ret = array.map{|e| K2R_TABLE[e] || e }
57 | ret.each_with_index do |s,i|
58 | if s == 'ッ'
59 | if i + 1 < ret.length
60 | c = ret[i+1].split('').first
61 | ret[i] = c if c !~ /[aiueo]/
62 | end
63 | elsif s == 'ー'
64 | if i - 1 >= 0
65 | c = ret[i-1].split('').last
66 | ret[i] = c if c =~ /[aiueo]/
67 | end
68 | end
69 | end
70 | return ret.join('')
71 | end
72 | end
73 |
--------------------------------------------------------------------------------
/README.rdoc:
--------------------------------------------------------------------------------
1 | = RomanKana:
2 | {
}[https://travis-ci.org/ymrl/romankana]
3 | {
}[https://coveralls.io/r/ymrl/romankana]
4 |
5 |
6 | * https://github.com/ymrl/romankana
7 |
8 | == DESCRIPTION:
9 |
10 | Roman Alphabet <-> Japanese Hiragana/Katkakana Convert Library for Ruby
11 |
12 | == SYNOPSIS:
13 |
14 | require 'romankana'
15 | RomanKana.kanaroman 'ほげほげ' #=> 'hogehoge'
16 | RomanKana.kanaroman 'ホゲホゲ' #=> 'hogehoge'
17 | RomanKana.romankana 'hogehoge' #=> 'ほげほげ'
18 | 'hogehoge'.to_hiragana #=> 'ほげほげ'
19 | 'hogehoge'.to_katakana #=> 'ホゲホゲ'
20 | 'ほげほげホゲホゲ'.to_roman #=> 'hogehogehogehoge'
21 | 'ほげほげhogehogeホゲホゲ'.to_roman #=> 'hogehogehogehoge'
22 | 'ほげほげhogehogeホゲホゲ'.hiragana_to_roman #=> 'hogehogehogehogeホゲホゲ'
23 | 'ほげほげhogehogeホゲホゲ'.katakana_to_roman #=> 'ほげほげhogehogehogehoge'
24 | 'ほげほげhogehogeホゲホゲ'.roman_to_katakana #=> 'ほげほげホゲホゲホゲホゲ'
25 | 'ほげほげhogehogeホゲホゲ'.roman_to_hiragana #=> 'ほげほげほげほげホゲホゲ'
26 |
27 | == REQUIREMENTS:
28 |
29 | * ruby (VERSION >= 1.9)
30 |
31 | == INSTALL:
32 | gem install romankana
33 |
34 | == LICENSE:
35 |
36 | (The MIT License)
37 |
38 | Copyright (c) 2011 Allu Yamane
39 |
40 | Permission is hereby granted, free of charge, to any person obtaining
41 | a copy of this software and associated documentation files (the
42 | 'Software'), to deal in the Software without restriction, including
43 | without limitation the rights to use, copy, modify, merge, publish,
44 | distribute, sublicense, and/or sell copies of the Software, and to
45 | permit persons to whom the Software is furnished to do so, subject to
46 | the following conditions:
47 |
48 | The above copyright notice and this permission notice shall be
49 | included in all copies or substantial portions of the Software.
50 |
51 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
52 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
53 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
54 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
55 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
56 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
57 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
58 |
--------------------------------------------------------------------------------
/lib/romankana/k2r.rb:
--------------------------------------------------------------------------------
1 | #coding:utf-8
2 | module RomanKana
3 | K2R_TABLE = {
4 | 'ア' => 'a',
5 | 'イ' => 'i',
6 | 'ウ' => 'u',
7 | 'エ' => 'e',
8 | 'オ' => 'o',
9 | 'カ' => 'ka',
10 | 'キ' => 'ki',
11 | 'ク' => 'ku',
12 | 'ケ' => 'ke',
13 | 'コ' => 'ko',
14 | 'サ' => 'sa',
15 | 'シ' => 'shi',
16 | 'ス' => 'su',
17 | 'セ' => 'se',
18 | 'ソ' => 'so',
19 | 'タ' => 'ta',
20 | 'チ' => 'chi',
21 | 'ツ' => 'tsu',
22 | 'テ' => 'te',
23 | 'ト' => 'to',
24 | 'ナ' => 'na',
25 | 'ニ' => 'ni',
26 | 'ヌ' => 'nu',
27 | 'ネ' => 'ne',
28 | 'ノ' => 'no',
29 | 'ハ' => 'ha',
30 | 'ヒ' => 'hi',
31 | 'フ' => 'fu',
32 | 'ヘ' => 'he',
33 | 'ホ' => 'ho',
34 | 'マ' => 'ma',
35 | 'ミ' => 'mi',
36 | 'ム' => 'mu',
37 | 'メ' => 'me',
38 | 'モ' => 'mo',
39 | 'ヤ' => 'ya',
40 | 'ユ' => 'yu',
41 | 'ヨ' => 'yo',
42 | 'ラ' => 'ra',
43 | 'リ' => 'ri',
44 | 'ル' => 'ru',
45 | 'レ' => 're',
46 | 'ロ' => 'ro',
47 | 'ワ' => 'wa',
48 | 'ヰ' => 'i',
49 | 'ヱ' => 'e',
50 | 'ヲ' => 'o',
51 | 'ン' => 'n',
52 | 'ガ' => 'ga',
53 | 'ギ' => 'gi',
54 | 'グ' => 'gu',
55 | 'ゲ' => 'ge',
56 | 'ゴ' => 'go',
57 | 'ザ' => 'za',
58 | 'ジ' => 'ji',
59 | 'ズ' => 'zu',
60 | 'ゼ' => 'ze',
61 | 'ゾ' => 'zo',
62 | 'ダ' => 'da',
63 | 'ヂ' => 'ji',
64 | 'ヅ' => 'zu',
65 | 'デ' => 'de',
66 | 'ド' => 'do',
67 | 'バ' => 'ba',
68 | 'ビ' => 'bi',
69 | 'ブ' => 'bu',
70 | 'ベ' => 'be',
71 | 'ボ' => 'bo',
72 | 'パ' => 'pa',
73 | 'ピ' => 'pi',
74 | 'プ' => 'pu',
75 | 'ペ' => 'pe',
76 | 'ポ' => 'po',
77 | 'キャ' => 'kya',
78 | 'キュ' => 'kyu',
79 | 'キョ' => 'kyo',
80 | 'シャ' => 'sha',
81 | 'シュ' => 'shu',
82 | 'ショ' => 'sho',
83 | 'チャ' => 'cha',
84 | 'チュ' => 'chu',
85 | 'チョ' => 'cho',
86 | 'ヂャ' => 'ja',
87 | 'ヂュ' => 'ju',
88 | 'ヂョ' => 'jo',
89 | 'ニャ' => 'nya',
90 | 'ニュ' => 'nyu',
91 | 'ニョ' => 'nyo',
92 | 'ヒャ' => 'hya',
93 | 'ヒュ' => 'hyu',
94 | 'ヒョ' => 'hyo',
95 | 'ミャ' => 'mya',
96 | 'ミュ' => 'myu',
97 | 'ミョ' => 'myo',
98 | 'リャ' => 'rya',
99 | 'リュ' => 'ryu',
100 | 'リョ' => 'ryo',
101 | 'ギャ' => 'gya',
102 | 'ギュ' => 'gyu',
103 | 'ギョ' => 'gyo',
104 | 'ジャ' => 'ja',
105 | 'ジュ' => 'ju',
106 | 'ジョ' => 'jo',
107 | 'ビャ' => 'bya',
108 | 'ビュ' => 'byu',
109 | 'ビョ' => 'byo',
110 | 'ピャ' => 'pya',
111 | 'ピュ' => 'pyu',
112 | 'ピョ' => 'pyo',
113 | 'ヴァ' => 'va',
114 | 'ヴィ' => 'vi',
115 | 'ヴ' => 'vu',
116 | 'ヴェ' => 've',
117 | 'ヴォ' => 'vo',
118 | 'ファ' => 'fa',
119 | 'フィ' => 'fi',
120 | 'フェ' => 'fe',
121 | 'フォ' => 'fo',
122 | }
123 | end
124 |
--------------------------------------------------------------------------------
/lib/romankana/r2k.rb:
--------------------------------------------------------------------------------
1 | #coding:utf-8
2 | module RomanKana
3 | R2K_TABLE = {
4 | 'a' => 'ア',
5 | 'i' => 'イ',
6 | 'u' => 'ウ',
7 | 'e' => 'エ',
8 | 'o' => 'オ',
9 | 'ba' => 'バ', 'bya' => 'ビャ',
10 | 'bi' => 'ビ', 'byi' => 'ビィ',
11 | 'bu' => 'ブ', 'byu' => 'ビュ',
12 | 'be' => 'ベ', 'bye' => 'ビェ',
13 | 'bo' => 'ボ', 'byo' => 'ビョ',
14 | 'ca' => 'カ', 'cya' => 'チャ', 'cha' => 'チャ',
15 | 'ci' => 'シ', 'cyi' => 'チィ', 'chi' => 'チ',
16 | 'cu' => 'ス', 'cyu' => 'チュ', 'chu' => 'チュ',
17 | 'ce' => 'セ', 'cye' => 'チェ', 'che' => 'チェ',
18 | 'co' => 'コ', 'cyo' => 'チョ', 'cho' => 'チョ',
19 | 'da' => 'ダ', 'dya' => 'ヂャ', 'dha' => 'ドャ',
20 | 'di' => 'ヂ', 'dyi' => 'ヂィ', 'dhi' => 'ドィ',
21 | 'du' => 'ヅ', 'dyu' => 'ヂュ', 'dhu' => 'ドュ',
22 | 'de' => 'デ', 'dye' => 'ヂェ', 'dhe' => 'ドェ',
23 | 'do' => 'ド', 'dyo' => 'ヂョ', 'dho' => 'ドョ',
24 | 'fa' => 'ファ', 'fya' => 'フャ',
25 | 'fi' => 'フィ', 'fyi' => 'フィ',
26 | 'fu' => 'フ', 'fyu' => 'フュ',
27 | 'fe' => 'フェ', 'fye' => 'フェ',
28 | 'fo' => 'フォ', 'fyo' => 'フョ',
29 | 'ga' => 'ガ', 'gya' => 'ギャ',
30 | 'gi' => 'ギ', 'gyi' => 'ギィ',
31 | 'gu' => 'グ', 'gyu' => 'ギュ',
32 | 'ge' => 'ゲ', 'gye' => 'ギェ',
33 | 'go' => 'ゴ', 'gyo' => 'ギョ',
34 | 'ha' => 'ハ', 'hya' => 'ヒャ',
35 | 'hi' => 'ヒ', 'hyi' => 'ヒィ',
36 | 'hu' => 'フ', 'hyu' => 'ヒュ',
37 | 'he' => 'ヘ', 'hye' => 'ヒェ',
38 | 'ho' => 'ホ', 'hyo' => 'ヒョ',
39 | 'ja' => 'ジャ', 'jya' => 'ジャ',
40 | 'ji' => 'ジ', 'jyi' => 'ジィ',
41 | 'ju' => 'ジュ', 'jyu' => 'ジュ',
42 | 'je' => 'ジェ', 'jye' => 'ジェ',
43 | 'jo' => 'ジョ', 'jyo' => 'ジョ',
44 | 'ka' => 'カ', 'kya' => 'キャ',
45 | 'ki' => 'キ', 'kyi' => 'キィ',
46 | 'ku' => 'ク', 'kyu' => 'キュ',
47 | 'ke' => 'ケ', 'kye' => 'キェ',
48 | 'ko' => 'コ', 'kyo' => 'キョ',
49 | 'la' => 'ラ', 'lya' => 'リャ',
50 | 'li' => 'リ', 'lyi' => 'リィ',
51 | 'lu' => 'ル', 'lyu' => 'リュ',
52 | 'le' => 'レ', 'lye' => 'リェ',
53 | 'lo' => 'ロ', 'lyo' => 'リョ',
54 | 'ma' => 'マ', 'mya' => 'ミャ',
55 | 'mi' => 'ミ', 'myi' => 'ミィ',
56 | 'mu' => 'ム', 'myu' => 'ミュ',
57 | 'me' => 'メ', 'mye' => 'ミェ',
58 | 'mo' => 'モ', 'myo' => 'ミョ',
59 | 'na' => 'ナ', 'nya' => 'ニャ',
60 | 'ni' => 'ニ', 'nyi' => 'ニィ',
61 | 'nu' => 'ヌ', 'nyu' => 'ニュ',
62 | 'ne' => 'ネ', 'nye' => 'ニェ',
63 | 'no' => 'ノ', 'nyo' => 'ニョ',
64 | 'pa' => 'パ', 'pya' => 'ピャ',
65 | 'pi' => 'ピ', 'pyi' => 'ピィ',
66 | 'pu' => 'プ', 'pyu' => 'ピュ',
67 | 'pe' => 'ペ', 'pye' => 'ピェ',
68 | 'po' => 'ポ', 'pyo' => 'ピョ',
69 | 'qa' => 'クァ',
70 | 'qi' => 'クィ',
71 | 'qu' => 'ク',
72 | 'qe' => 'クェ',
73 | 'qo' => 'クォ',
74 | 'ra' => 'ラ', 'rya' => 'リャ', 'sha' => 'シャ',
75 | 'ri' => 'リ', 'ryi' => 'リィ', 'shi' => 'シ',
76 | 'ru' => 'ル', 'ryu' => 'リュ', 'shu' => 'シュ',
77 | 're' => 'レ', 'rye' => 'リェ', 'she' => 'シェ',
78 | 'ro' => 'ロ', 'ryo' => 'リョ', 'sho' => 'ショ',
79 | 'sa' => 'サ', 'sya' => 'シャ',
80 | 'si' => 'シ', 'syi' => 'シィ',
81 | 'su' => 'ス', 'syu' => 'シュ',
82 | 'se' => 'セ', 'sye' => 'シェ',
83 | 'so' => 'ソ', 'syo' => 'ショ',
84 | 'ta' => 'タ', 'tya' => 'チャ', 'tha' => 'テャ',
85 | 'ti' => 'チ', 'tyi' => 'チィ', 'thi' => 'ティ',
86 | 'tu' => 'ツ', 'tyu' => 'チュ', 'thu' => 'テュ',
87 | 'te' => 'テ', 'tye' => 'チェ', 'the' => 'テェ',
88 | 'to' => 'ト', 'tyo' => 'チョ', 'tho' => 'テョ',
89 | 'va' => 'ヴァ', 'vya' => 'ヴャ',
90 | 'vi' => 'ヴィ', 'vyi' => 'ヴィ',
91 | 'vu' => 'ヴ', 'vyu' => 'ヴュ',
92 | 've' => 'ヴェ', 'vye' => 'ヴェ',
93 | 'vo' => 'ヴォ', 'vyo' => 'ヴョ',
94 | 'wa' => 'ワ', 'wha' => 'ウァ',
95 | 'wi' => 'ウィ', 'wyi' => 'ヰ', 'whi' => 'ウィ',
96 | 'wu' => 'ウ', 'whu' => 'ウ',
97 | 'we' => 'ウェ', 'wye' => 'ヱ', 'whe' => 'ウェ',
98 | 'wo' => 'ヲ', 'who' => 'ウォ',
99 | 'xa' => 'ザ',
100 | 'xi' => 'ジ',
101 | 'xu' => 'ズ',
102 | 'xe' => 'ゼ',
103 | 'xo' => 'ゾ',
104 | 'ya' => 'ヤ',
105 | 'yi' => 'ヰ',
106 | 'yu' => 'ユ',
107 | 'ye' => 'ヱ',
108 | 'yo' => 'ヨ',
109 | 'za' => 'ザ', 'zya' => 'ジャ',
110 | 'zi' => 'ジ', 'zyi' => 'ジィ',
111 | 'zu' => 'ズ', 'zyu' => 'ジュ',
112 | 'ze' => 'ゼ', 'zye' => 'ジェ',
113 | 'zo' => 'ゾ', 'zyo' => 'ジョ',
114 | 'nn' => 'ン',
115 | 'tsu' => 'ツ',
116 | }
117 | end
118 |
--------------------------------------------------------------------------------
/spec/romankana_spec.rb:
--------------------------------------------------------------------------------
1 | # coding:UTF-8
2 | require 'spec_helper.rb'
3 |
4 | describe RomanKana do
5 |
6 | describe "#find_kana_from_str" do
7 | let(:given){ '' }
8 | before do
9 | @got = RomanKana.find_kana_from_str given
10 | end
11 |
12 | context 'non-alphabet string given' do
13 | let(:given){ 'あ' }
14 |
15 | it 'returns given string' do
16 | expect(@got).to eq given
17 | end
18 | end
19 |
20 | context 'string starts with nn given' do
21 | let(:given){ 'nnya' }
22 |
23 | it 'returns ン...' do
24 | expect(@got).to eq 'ンヤ'
25 | end
26 | end
27 |
28 | context 'string stats with n given' do
29 | context 'next to consonant' do
30 | let(:given){ 'nga' }
31 |
32 | it 'returns ンガ' do
33 | expect(@got).to eq 'ンガ'
34 | end
35 | end
36 | context 'next to vowel' do
37 | let(:given){ 'nya' }
38 |
39 | it 'returns ニャ' do
40 | expect(@got).to eq 'ニャ'
41 | end
42 | end
43 | end
44 |
45 | context 'string stats with m given' do
46 | context 'means ン' do
47 | let(:given){ 'mba' }
48 |
49 | it 'returns ンバ' do
50 | expect(@got).to eq 'ンバ'
51 | end
52 | end
53 |
54 | context 'next to vowel' do
55 | let(:given){ 'ma' }
56 |
57 | it 'returns マ' do
58 | expect(@got).to eq 'マ'
59 | end
60 | end
61 |
62 | context 'nonsense' do
63 | let(:given){ 'mdo' }
64 |
65 | it 'returns mド' do
66 | expect(@got).to eq 'mド'
67 | end
68 | end
69 | end
70 |
71 | context 'string starts with same 2 alphabet given' do
72 | context 'that is consonant' do
73 | let(:given){'tto'}
74 |
75 | it 'returns ット' do
76 | expect(@got).to eq 'ット'
77 | end
78 | end
79 |
80 | context 'that is vowel' do
81 | let(:given){'aada'}
82 |
83 | it 'returns アアダ' do
84 | expect(@got).to eq 'アアダ'
85 | end
86 | end
87 | end
88 |
89 | context 'long string given' do
90 | let(:given){ 'aaaaaaaa' }
91 |
92 | it 'returns アアアアアアア' do
93 | expect(@got).to eq 'アアアアアアアア'
94 | end
95 | end
96 | end
97 |
98 | describe "#romankana" do
99 | let(:given){ '' }
100 | before do
101 | @got = RomanKana.romankana given
102 | end
103 |
104 | context 'hiragana given' do
105 | let(:given) { 'あのいーはとーゔぉのすきとおったかぜ' }
106 |
107 | it 'does nothing' do
108 | expect(@got).to eq given
109 | end
110 | end
111 |
112 | context 'katakana given' do
113 | let(:given) { 'アノイーハトーヴォノスキトオッタカゼ' }
114 |
115 | it 'does nothing' do
116 | expect(@got).to eq given
117 | end
118 |
119 | end
120 |
121 |
122 | context 'roman-ji given' do
123 | let(:given) { 'ano iihatoovo no sukitootta kaze' }
124 | it 'returns katakana' do
125 | expect(@got).to eq 'アノ イイハトオヴォ ノ スキトオッタ カゼ'
126 | end
127 | end
128 |
129 | context 'ン given' do
130 | context 'in nn' do
131 | let(:given){'kouennji himonnya'}
132 |
133 | it 'handles nn as ン' do
134 | expect(@got).to eq 'コウエンジ ヒモンヤ'
135 | end
136 | end
137 |
138 | context 'in n' do
139 | let(:given){'kouenji himonya'}
140 |
141 | it 'handles n as ン' do
142 | expect(@got).to eq 'コウエンジ ヒモニャ'
143 | end
144 | end
145 | end
146 |
147 | context 'the Hepburn system given' do
148 | let(:given){'nishinippori hambaagu'}
149 |
150 | it 'handles in the Hepburn system' do
151 | expect(@got).to eq 'ニシニッポリ ハンバアグ'
152 | end
153 | end
154 |
155 | context 'the kunrei system given' do
156 | let(:given){'nisinippori hanbaagu'}
157 |
158 | it 'handles in the kunrei system' do
159 | expect(@got).to eq 'ニシニッポリ ハンバアグ'
160 | end
161 | end
162 | end
163 |
164 | describe "#kanaroman" do
165 | let(:given){ '' }
166 | before do
167 | @got = RomanKana.kanaroman given
168 | end
169 |
170 | context 'roman-ji given' do
171 | let(:given) { 'ano iihatoovo no sukitootta kaze' }
172 |
173 | it 'does nothing' do
174 | expect(@got).to eq given
175 | end
176 | end
177 |
178 | context 'hiragana given' do
179 | let(:given) { 'あのいーはとーゔぉのすきとおったかぜ' }
180 |
181 | it 'converts to roman-ji' do
182 | expect(@got).to eq 'anoiihatoovonosukitoottakaze'
183 | end
184 |
185 | end
186 |
187 | context 'katakana given' do
188 | let(:given) { 'アノイーハトーヴォノスキトオッタカゼ' }
189 |
190 | it 'converts to roman-ji' do
191 | expect(@got).to eq 'anoiihatoovonosukitoottakaze'
192 | end
193 | end
194 |
195 | context 'ン given' do
196 | context 'in nn' do
197 | let(:given){'コウエンジ ヒモンヤ'}
198 |
199 | it 'handles ン' do
200 | expect(@got).to eq 'kouenji himonya'
201 | end
202 | end
203 | end
204 |
205 | context 'ー and ッ given' do
206 | let(:given){'マークザッカーバーグ アーノルドシュワルツネッガー'}
207 |
208 | it 'changes ー' do
209 | expect(@got).to eq 'maakuzakkaabaagu aanorudoshuwarutsuneggaa'
210 | end
211 | end
212 | end
213 | end
214 |
--------------------------------------------------------------------------------
/test/romankana_test.rb:
--------------------------------------------------------------------------------
1 | #!/bin/env ruby
2 | # -*- coding: utf-8 -*-
3 |
4 | # romankanaを設置するファイル構成に合わせて調整してね!
5 | $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
6 |
7 | require 'test/unit'
8 | require 'romankana'
9 |
10 | class RomankanaTest < Test::Unit::TestCase
11 | @@roma_data = {
12 | 'A'=>['あ','ア'],
13 | 'I'=>['い','イ'],
14 | 'U'=>['う','ウ'],
15 | 'E'=>['え','エ'],
16 | 'O'=>['お','オ'],
17 | 'LA'=>['ら','ラ'],
18 | 'LI'=>['り','リ'],
19 | 'LU'=>['る','ル'],
20 | 'LE'=>['れ','レ'],
21 | 'LO'=>['ろ','ロ'],
22 | 'KA'=>['か','カ'],
23 | 'KI'=>['き','キ'],
24 | 'KU'=>['く','ク'],
25 | 'KE'=>['け','ケ'],
26 | 'KO'=>['こ','コ'],
27 | 'KYA'=>['きゃ','キャ'],
28 | 'KYU'=>['きゅ','キュ'],
29 | 'KYO'=>['きょ','キョ'],
30 | 'SA'=>['さ','サ'],
31 | 'SI'=>['し','シ'],
32 | 'SHI'=>['し','シ'],
33 | 'SU'=>['す','ス'],
34 | 'SE'=>['せ','セ'],
35 | 'SO'=>['そ','ソ'],
36 | 'SYA'=>['しゃ','シャ'],
37 | 'SHA'=>['しゃ','シャ'],
38 | 'SYU'=>['しゅ','シュ'],
39 | 'SHU'=>['しゅ','シュ'],
40 | 'SYO'=>['しょ','ショ'],
41 | 'SHO'=>['しょ','ショ'],
42 | 'TA'=>['た','タ'],
43 | 'TI'=>['ち','チ'],
44 | 'CHI'=>['ち','チ'],
45 | 'TU'=>['つ','ツ'],
46 | 'TSU'=>['つ','ツ'],
47 | 'TE'=>['て','テ'],
48 | 'TO'=>['と','ト'],
49 | 'TYA'=>['ちゃ','チャ'],
50 | 'CHA'=>['ちゃ','チャ'],
51 | 'TYU'=>['ちゅ','チュ'],
52 | 'CHU'=>['ちゅ','チュ'],
53 | 'TYO'=>['ちょ','チョ'],
54 | 'CHO'=>['ちょ','チョ'],
55 | 'NA'=>['な','ナ'],
56 | 'NI'=>['に','ニ'],
57 | 'NU'=>['ぬ','ヌ'],
58 | 'NE'=>['ね','ネ'],
59 | 'NO'=>['の','ノ'],
60 | 'NYA'=>['にゃ','ニャ'],
61 | 'NYU'=>['にゅ','ニュ'],
62 | 'NYO'=>['にょ','ニョ'],
63 | 'HA'=>['は','ハ'],
64 | 'HI'=>['ひ','ヒ'],
65 | 'HU'=>['ふ','フ'],
66 | 'FU'=>['ふ','フ'],
67 | 'HE'=>['へ','ヘ'],
68 | 'HO'=>['ほ','ホ'],
69 | 'HYA'=>['ひゃ','ヒャ'],
70 | 'HYU'=>['ひゅ','ヒュ'],
71 | 'HYO'=>['ひょ','ヒョ'],
72 | 'MA'=>['ま','マ'],
73 | 'MI'=>['み','ミ'],
74 | 'MU'=>['む','ム'],
75 | 'ME'=>['め','メ'],
76 | 'MO'=>['も','モ'],
77 | 'MYA'=>['みゃ','ミャ'],
78 | 'MYU'=>['みゅ','ミュ'],
79 | 'MYO'=>['みょ','ミョ'],
80 | 'YA'=>['や','ヤ'],
81 | 'YU'=>['ゆ','ユ'],
82 | 'YO'=>['よ','ヨ'],
83 | 'RA'=>['ら','ラ'],
84 | 'RI'=>['り','リ'],
85 | 'RU'=>['る','ル'],
86 | 'RE'=>['れ','レ'],
87 | 'RO'=>['ろ','ロ'],
88 | 'RYA'=>['りゃ','リャ'],
89 | 'RYU'=>['りゅ','リュ'],
90 | 'RYO'=>['りょ','リョ'],
91 | 'WA'=>['わ','ワ'],
92 | 'WO'=>['を','ヲ'],
93 | 'NN'=>['ん','ン'],
94 | 'GA'=>['が','ガ'],
95 | 'GI'=>['ぎ','ギ'],
96 | 'GU'=>['ぐ','グ'],
97 | 'GE'=>['げ','ゲ'],
98 | 'GO'=>['ご','ゴ'],
99 | 'GYA'=>['ぎゃ','ギャ'],
100 | 'GYU'=>['ぎゅ','ギュ'],
101 | 'GYO'=>['ぎょ','ギョ'],
102 | 'ZA'=>['ざ','ザ'],
103 | 'ZI'=>['じ','ジ'],
104 | 'JI'=>['じ','ジ'],
105 | 'ZU'=>['ず','ズ'],
106 | 'ZE'=>['ぜ','ゼ'],
107 | 'ZO'=>['ぞ','ゾ'],
108 | 'ZYA'=>['じゃ','ジャ'],
109 | 'JA'=>['じゃ','ジャ'],
110 | 'ZYU'=>['じゅ','ジュ'],
111 | 'JU'=>['じゅ','ジュ'],
112 | 'ZYO'=>['じょ','ジョ'],
113 | 'JO'=>['じょ','ジョ'],
114 | 'DA'=>['だ','ダ'],
115 | 'DI'=>['ぢ','ヂ'],
116 | 'DU'=>['づ','ヅ'],
117 | 'DE'=>['で','デ'],
118 | 'DO'=>['ど','ド'],
119 | 'DYA'=>['ぢゃ','ヂャ'],
120 | 'DYU'=>['ぢゅ','ヂュ'],
121 | 'DYO'=>['ぢょ','ヂョ'],
122 | 'BA'=>['ば','バ'],
123 | 'BI'=>['び','ビ'],
124 | 'BU'=>['ぶ','ブ'],
125 | 'BE'=>['べ','ベ'],
126 | 'BO'=>['ぼ','ボ'],
127 | 'BYA'=>['びゃ','ビャ'],
128 | 'BYU'=>['びゅ','ビュ'],
129 | 'BYO'=>['びょ','ビョ'],
130 | 'PA'=>['ぱ','パ'],
131 | 'PI'=>['ぴ','ピ'],
132 | 'PU'=>['ぷ','プ'],
133 | 'PE'=>['ぺ','ペ'],
134 | 'PO'=>['ぽ','ポ'],
135 | 'PYA'=>['ぴゃ','ピャ'],
136 | 'PYU'=>['ぴゅ','ピュ'],
137 | 'PYO'=>['ぴょ','ピョ'],
138 | 'FA'=>['ふぁ','ファ'],
139 | 'FI'=>['ふぃ','フィ'],
140 | 'FE'=>['ふぇ','フェ'],
141 | 'FO'=>['ふぉ','フォ'],
142 | 'FYA'=>['ふゃ','フャ'],
143 | 'FYU'=>['ふゅ','フュ'],
144 | 'FYO'=>['ふょ','フョ'],
145 | 'a'=>['あ','ア'],
146 | 'i'=>['い','イ'],
147 | 'u'=>['う','ウ'],
148 | 'e'=>['え','エ'],
149 | 'o'=>['お','オ'],
150 | 'ka'=>['か','カ'],
151 | 'ki'=>['き','キ'],
152 | 'ku'=>['く','ク'],
153 | 'ke'=>['け','ケ'],
154 | 'ko'=>['こ','コ'],
155 | 'kya'=>['きゃ','キャ'],
156 | 'kyu'=>['きゅ','キュ'],
157 | 'kyo'=>['きょ','キョ'],
158 | 'sa'=>['さ','サ'],
159 | 'si'=>['し','シ'],
160 | 'shi'=>['し','シ'],
161 | 'su'=>['す','ス'],
162 | 'se'=>['せ','セ'],
163 | 'so'=>['そ','ソ'],
164 | 'sya'=>['しゃ','シャ'],
165 | 'sha'=>['しゃ','シャ'],
166 | 'syu'=>['しゅ','シュ'],
167 | 'shu'=>['しゅ','シュ'],
168 | 'syo'=>['しょ','ショ'],
169 | 'sho'=>['しょ','ショ'],
170 | 'ta'=>['た','タ'],
171 | 'ti'=>['ち','チ'],
172 | 'chi'=>['ち','チ'],
173 | 'tu'=>['つ','ツ'],
174 | 'tsu'=>['つ','ツ'],
175 | 'te'=>['て','テ'],
176 | 'to'=>['と','ト'],
177 | 'tya'=>['ちゃ','チャ'],
178 | 'cha'=>['ちゃ','チャ'],
179 | 'tyu'=>['ちゅ','チュ'],
180 | 'chu'=>['ちゅ','チュ'],
181 | 'tyo'=>['ちょ','チョ'],
182 | 'cho'=>['ちょ','チョ'],
183 | 'na'=>['な','ナ'],
184 | 'ni'=>['に','ニ'],
185 | 'nu'=>['ぬ','ヌ'],
186 | 'ne'=>['ね','ネ'],
187 | 'no'=>['の','ノ'],
188 | 'nya'=>['にゃ','ニャ'],
189 | 'nyu'=>['にゅ','ニュ'],
190 | 'nyo'=>['にょ','ニョ'],
191 | 'ha'=>['は','ハ'],
192 | 'hi'=>['ひ','ヒ'],
193 | 'hu'=>['ふ','フ'],
194 | 'fu'=>['ふ','フ'],
195 | 'he'=>['へ','ヘ'],
196 | 'ho'=>['ほ','ホ'],
197 | 'hya'=>['ひゃ','ヒャ'],
198 | 'hyu'=>['ひゅ','ヒュ'],
199 | 'hyo'=>['ひょ','ヒョ'],
200 | 'ma'=>['ま','マ'],
201 | 'mi'=>['み','ミ'],
202 | 'mu'=>['む','ム'],
203 | 'me'=>['め','メ'],
204 | 'mo'=>['も','モ'],
205 | 'mya'=>['みゃ','ミャ'],
206 | 'myu'=>['みゅ','ミュ'],
207 | 'myo'=>['みょ','ミョ'],
208 | 'ya'=>['や','ヤ'],
209 | 'yu'=>['ゆ','ユ'],
210 | 'yo'=>['よ','ヨ'],
211 | 'ra'=>['ら','ラ'],
212 | 'ri'=>['り','リ'],
213 | 'ru'=>['る','ル'],
214 | 're'=>['れ','レ'],
215 | 'ro'=>['ろ','ロ'],
216 | 'rya'=>['りゃ','リャ'],
217 | 'ryu'=>['りゅ','リュ'],
218 | 'ryo'=>['りょ','リョ'],
219 | 'wa'=>['わ','ワ'],
220 | 'wo'=>['を','ヲ'],
221 | 'nn'=>['ん','ン'],
222 | 'ga'=>['が','ガ'],
223 | 'gi'=>['ぎ','ギ'],
224 | 'gu'=>['ぐ','グ'],
225 | 'ge'=>['げ','ゲ'],
226 | 'go'=>['ご','ゴ'],
227 | 'gya'=>['ぎゃ','ギャ'],
228 | 'gyu'=>['ぎゅ','ギュ'],
229 | 'gyo'=>['ぎょ','ギョ'],
230 | 'za'=>['ざ','ザ'],
231 | 'zi'=>['じ','ジ'],
232 | 'ji'=>['じ','ジ'],
233 | 'zu'=>['ず','ズ'],
234 | 'ze'=>['ぜ','ゼ'],
235 | 'zo'=>['ぞ','ゾ'],
236 | 'zya'=>['じゃ','ジャ'],
237 | 'ja'=>['じゃ','ジャ'],
238 | 'zyu'=>['じゅ','ジュ'],
239 | 'ju'=>['じゅ','ジュ'],
240 | 'zyo'=>['じょ','ジョ'],
241 | 'jo'=>['じょ','ジョ'],
242 | 'da'=>['だ','ダ'],
243 | 'di'=>['ぢ','ヂ'],
244 | 'du'=>['づ','ヅ'],
245 | 'de'=>['で','デ'],
246 | 'do'=>['ど','ド'],
247 | 'dya'=>['ぢゃ','ヂャ'],
248 | 'dyu'=>['ぢゅ','ヂュ'],
249 | 'dyo'=>['ぢょ','ヂョ'],
250 | 'ba'=>['ば','バ'],
251 | 'bi'=>['び','ビ'],
252 | 'bu'=>['ぶ','ブ'],
253 | 'be'=>['べ','ベ'],
254 | 'bo'=>['ぼ','ボ'],
255 | 'bya'=>['びゃ','ビャ'],
256 | 'byu'=>['びゅ','ビュ'],
257 | 'byo'=>['びょ','ビョ'],
258 | 'pa'=>['ぱ','パ'],
259 | 'pi'=>['ぴ','ピ'],
260 | 'pu'=>['ぷ','プ'],
261 | 'pe'=>['ぺ','ペ'],
262 | 'po'=>['ぽ','ポ'],
263 | 'pya'=>['ぴゃ','ピャ'],
264 | 'pyu'=>['ぴゅ','ピュ'],
265 | 'pyo'=>['ぴょ','ピョ'],
266 | 'fa'=>['ふぁ','ファ'],
267 | 'fi'=>['ふぃ','フィ'],
268 | 'fe'=>['ふぇ','フェ'],
269 | 'fo'=>['ふぉ','フォ'],
270 | 'fya'=>['ふゃ','フャ'],
271 | 'fyu'=>['ふゅ','フュ'],
272 | 'fyo'=>['ふょ','フョ'],
273 | 'kouenji'=>['こうえんじ','コウエンジ'],
274 | 'kouennji'=>['こうえんじ','コウエンジ'],
275 | 'nisinippori'=>['にしにっぽり','ニシニッポリ'],
276 | 'nishinippori'=>['にしにっぽり','ニシニッポリ'],
277 | 'himonnya'=>['ひもんや','ヒモンヤ'],
278 | }
279 |
280 | @@hiragana_data = {
281 | 'あ'=>['a','ア'],
282 | 'い'=>['i','イ'],
283 | 'う'=>['u','ウ'],
284 | 'え'=>['e','エ'],
285 | 'お'=>['o','オ'],
286 | 'か'=>['ka','カ'],
287 | 'き'=>['ki','キ'],
288 | 'く'=>['ku','ク'],
289 | 'け'=>['ke','ケ'],
290 | 'こ'=>['ko','コ'],
291 | 'きゃ'=>['kya','キャ'],
292 | 'きゅ'=>['kyu','キュ'],
293 | 'きょ'=>['kyo','キョ'],
294 | 'さ'=>['sa','サ'],
295 | 'し'=>['shi','シ'],
296 | 'す'=>['su','ス'],
297 | 'せ'=>['se','セ'],
298 | 'そ'=>['so','ソ'],
299 | 'しゃ'=>['sha','シャ'],
300 | 'しゅ'=>['shu','シュ'],
301 | 'しょ'=>['sho','ショ'],
302 | 'た'=>['ta','タ'],
303 | 'ち'=>['chi','チ'],
304 | 'つ'=>['tsu','ツ'],
305 | 'て'=>['te','テ'],
306 | 'と'=>['to','ト'],
307 | 'ちゃ'=>['cha','チャ'],
308 | 'ちゅ'=>['chu','チュ'],
309 | 'ちょ'=>['cho','チョ'],
310 | 'な'=>['na','ナ'],
311 | 'に'=>['ni','ニ'],
312 | 'ぬ'=>['nu','ヌ'],
313 | 'ね'=>['ne','ネ'],
314 | 'の'=>['no','ノ'],
315 | 'にゃ'=>['nya','ニャ'],
316 | 'にゅ'=>['nyu','ニュ'],
317 | 'にょ'=>['nyo','ニョ'],
318 | 'は'=>['ha','ハ'],
319 | 'ひ'=>['hi','ヒ'],
320 | 'ふ'=>['fu','フ'],
321 | 'へ'=>['he','ヘ'],
322 | 'ほ'=>['ho','ホ'],
323 | 'ひゃ'=>['hya','ヒャ'],
324 | 'ひゅ'=>['hyu','ヒュ'],
325 | 'ひょ'=>['hyo','ヒョ'],
326 | 'ま'=>['ma','マ'],
327 | 'み'=>['mi','ミ'],
328 | 'む'=>['mu','ム'],
329 | 'め'=>['me','メ'],
330 | 'も'=>['mo','モ'],
331 | 'みゃ'=>['mya','ミャ'],
332 | 'みゅ'=>['myu','ミュ'],
333 | 'みょ'=>['myo','ミョ'],
334 | 'や'=>['ya','ヤ'],
335 | 'ゆ'=>['yu','ユ'],
336 | 'よ'=>['yo','ヨ'],
337 | 'ら'=>['ra','ラ'],
338 | 'り'=>['ri','リ'],
339 | 'る'=>['ru','ル'],
340 | 'れ'=>['re','レ'],
341 | 'ろ'=>['ro','ロ'],
342 | 'りゃ'=>['rya','リャ'],
343 | 'りゅ'=>['ryu','リュ'],
344 | 'りょ'=>['ryo','リョ'],
345 | 'わ'=>['wa','ワ'],
346 | 'を'=>['o','ヲ'],
347 | 'ん'=>['n','ン'],
348 | 'が'=>['ga','ガ'],
349 | 'ぎ'=>['gi','ギ'],
350 | 'ぐ'=>['gu','グ'],
351 | 'げ'=>['ge','ゲ'],
352 | 'ご'=>['go','ゴ'],
353 | 'ぎゃ'=>['gya','ギャ'],
354 | 'ぎゅ'=>['gyu','ギュ'],
355 | 'ぎょ'=>['gyo','ギョ'],
356 | 'ざ'=>['za','ザ'],
357 | 'じ'=>['ji','ジ'],
358 | 'ず'=>['zu','ズ'],
359 | 'ぜ'=>['ze','ゼ'],
360 | 'ぞ'=>['zo','ゾ'],
361 | 'じゃ'=>['ja','ジャ'],
362 | 'じゅ'=>['ju','ジュ'],
363 | 'じょ'=>['jo','ジョ'],
364 | 'だ'=>['da','ダ'],
365 | 'ぢ'=>['ji','ヂ'],
366 | 'づ'=>['zu','ヅ'],
367 | 'で'=>['de','デ'],
368 | 'ど'=>['do','ド'],
369 | 'ぢゃ'=>['ja','ヂャ'],
370 | 'ぢゅ'=>['ju','ヂュ'],
371 | 'ぢょ'=>['jo','ヂョ'],
372 | 'ば'=>['ba','バ'],
373 | 'び'=>['bi','ビ'],
374 | 'ぶ'=>['bu','ブ'],
375 | 'べ'=>['be','ベ'],
376 | 'ぼ'=>['bo','ボ'],
377 | 'びゃ'=>['bya','ビャ'],
378 | 'びゅ'=>['byu','ビュ'],
379 | 'びょ'=>['byo','ビョ'],
380 | 'ぱ'=>['pa','パ'],
381 | 'ぴ'=>['pi','ピ'],
382 | 'ぷ'=>['pu','プ'],
383 | 'ぺ'=>['pe','ペ'],
384 | 'ぽ'=>['po','ポ'],
385 | 'ぴゃ'=>['pya','ピャ'],
386 | 'ぴゅ'=>['pyu','ピュ'],
387 | 'ぴょ'=>['pyo','ピョ'],
388 | 'ふぁ'=>['fa','ファ'],
389 | 'ふぃ'=>['fi','フィ'],
390 | 'ふぇ'=>['fe','フェ'],
391 | 'ふぉ'=>['fo','フォ'],
392 | # 'ふゃ'=>['fya','フャ'],
393 | # 'ふゅ'=>['fyu','フュ'],
394 | # 'ふょ'=>['fyo','フョ'],
395 | 'ゔぁ'=>['va','ヴァ'],
396 | 'ゔぃ'=>['vi','ヴィ'],
397 | 'ゔ'=>['vu','ヴ'],
398 | 'ゔぇ'=>['ve','ヴェ'],
399 | 'ゔぉ'=>['vo','ヴォ'],
400 | 'こうえんじ'=>['kouenji','コウエンジ'],
401 | 'にしにっぽり'=>['nishinippori','ニシニッポリ'],
402 | }
403 |
404 | @@katakana_data = {
405 | 'ア'=>['a','あ'],
406 | 'イ'=>['i','い'],
407 | 'ウ'=>['u','う'],
408 | 'エ'=>['e','え'],
409 | 'オ'=>['o','お'],
410 | 'カ'=>['ka','か'],
411 | 'キ'=>['ki','き'],
412 | 'ク'=>['ku','く'],
413 | 'ケ'=>['ke','け'],
414 | 'コ'=>['ko','こ'],
415 | 'キャ'=>['kya','きゃ'],
416 | 'キュ'=>['kyu','きゅ'],
417 | 'キョ'=>['kyo','きょ'],
418 | 'サ'=>['sa','さ'],
419 | 'シ'=>['shi','し'],
420 | 'ス'=>['su','す'],
421 | 'セ'=>['se','せ'],
422 | 'ソ'=>['so','そ'],
423 | 'シャ'=>['sha','しゃ'],
424 | 'シュ'=>['shu','しゅ'],
425 | 'ショ'=>['sho','しょ'],
426 | 'タ'=>['ta','た'],
427 | 'チ'=>['chi','ち'],
428 | 'ツ'=>['tsu','つ'],
429 | 'テ'=>['te','て'],
430 | 'ト'=>['to','と'],
431 | 'チャ'=>['cha','ちゃ'],
432 | 'チュ'=>['chu','ちゅ'],
433 | 'チョ'=>['cho','ちょ'],
434 | 'ナ'=>['na','な'],
435 | 'ニ'=>['ni','に'],
436 | 'ヌ'=>['nu','ぬ'],
437 | 'ネ'=>['ne','ね'],
438 | 'ノ'=>['no','の'],
439 | 'ニャ'=>['nya','にゃ'],
440 | 'ニュ'=>['nyu','にゅ'],
441 | 'ニョ'=>['nyo','にょ'],
442 | 'ハ'=>['ha','は'],
443 | 'ヒ'=>['hi','ひ'],
444 | 'フ'=>['fu','ふ'],
445 | 'ヘ'=>['he','へ'],
446 | 'ホ'=>['ho','ほ'],
447 | 'ヒャ'=>['hya','ひゃ'],
448 | 'ヒュ'=>['hyu','ひゅ'],
449 | 'ヒョ'=>['hyo','ひょ'],
450 | 'マ'=>['ma','ま'],
451 | 'ミ'=>['mi','み'],
452 | 'ム'=>['mu','む'],
453 | 'メ'=>['me','め'],
454 | 'モ'=>['mo','も'],
455 | 'ミャ'=>['mya','みゃ'],
456 | 'ミュ'=>['myu','みゅ'],
457 | 'ミョ'=>['myo','みょ'],
458 | 'ヤ'=>['ya','や'],
459 | 'ユ'=>['yu','ゆ'],
460 | 'ヨ'=>['yo','よ'],
461 | 'ラ'=>['ra','ら'],
462 | 'リ'=>['ri','り'],
463 | 'ル'=>['ru','る'],
464 | 'レ'=>['re','れ'],
465 | 'ロ'=>['ro','ろ'],
466 | 'リャ'=>['rya','りゃ'],
467 | 'リュ'=>['ryu','りゅ'],
468 | 'リョ'=>['ryo','りょ'],
469 | 'ワ'=>['wa','わ'],
470 | 'ヲ'=>['o','を'],
471 | 'ン'=>['n','ん'],
472 | 'ガ'=>['ga','が'],
473 | 'ギ'=>['gi','ぎ'],
474 | 'グ'=>['gu','ぐ'],
475 | 'ゲ'=>['ge','げ'],
476 | 'ゴ'=>['go','ご'],
477 | 'ギャ'=>['gya','ぎゃ'],
478 | 'ギュ'=>['gyu','ぎゅ'],
479 | 'ギョ'=>['gyo','ぎょ'],
480 | 'ザ'=>['za','ざ'],
481 | 'ジ'=>['ji','じ'],
482 | 'ズ'=>['zu','ず'],
483 | 'ゼ'=>['ze','ぜ'],
484 | 'ゾ'=>['zo','ぞ'],
485 | 'ジャ'=>['ja','じゃ'],
486 | 'ジュ'=>['ju','じゅ'],
487 | 'ジョ'=>['jo','じょ'],
488 | 'ダ'=>['da','だ'],
489 | 'ヂ'=>['ji','ぢ'],
490 | 'ヅ'=>['zu','づ'],
491 | 'デ'=>['de','で'],
492 | 'ド'=>['do','ど'],
493 | 'ヂャ'=>['ja','ぢゃ'],
494 | 'ヂュ'=>['ju','ぢゅ'],
495 | 'ヂョ'=>['jo','ぢょ'],
496 | 'バ'=>['ba','ば'],
497 | 'ビ'=>['bi','び'],
498 | 'ブ'=>['bu','ぶ'],
499 | 'ベ'=>['be','べ'],
500 | 'ボ'=>['bo','ぼ'],
501 | 'ビャ'=>['bya','びゃ'],
502 | 'ビュ'=>['byu','びゅ'],
503 | 'ビョ'=>['byo','びょ'],
504 | 'パ'=>['pa','ぱ'],
505 | 'ピ'=>['pi','ぴ'],
506 | 'プ'=>['pu','ぷ'],
507 | 'ペ'=>['pe','ぺ'],
508 | 'ポ'=>['po','ぽ'],
509 | 'ピャ'=>['pya','ぴゃ'],
510 | 'ピュ'=>['pyu','ぴゅ'],
511 | 'ピョ'=>['pyo','ぴょ'],
512 | 'ファ'=>['fa','ふぁ'],
513 | 'フィ'=>['fi','ふぃ'],
514 | 'フェ'=>['fe','ふぇ'],
515 | 'フォ'=>['fo','ふぉ'],
516 | # 'フャ'=>['fya','ふゃ'],
517 | # 'フュ'=>['fyu','ふゅ'],
518 | # 'フョ'=>['fyo','ふょ'],
519 | 'ヴァ'=>['va','ゔぁ'],
520 | 'ヴィ'=>['vi','ゔぃ'],
521 | 'ヴ'=>['vu','ゔ'],
522 | 'ヴェ'=>['ve','ゔぇ'],
523 | 'ヴォ'=>['vo','ゔぉ'],
524 | 'コウエンジ'=>['kouenji','こうえんじ'],
525 | 'ニシニッポリ'=>['nishinippori','にしにっぽり'],
526 | }
527 |
528 |
529 | def test_roman_to_hiragana1
530 | puts "\n\n#{@method_name}\n"
531 |
532 | puts 'ローマ字→ひらがな(to_hiragana)'
533 | puts '{'
534 | @@roma_data.each{|key, value|
535 | assert_equal(value[0], key.to_hiragana)
536 | puts "'#{key}'=>'#{key.to_hiragana}',"
537 | }
538 | puts'}'
539 | puts "\n\n"
540 | end
541 |
542 | def test_roman_to_hiragana2
543 | puts "\n\n#{@method_name}\n"
544 |
545 | puts 'ローマ字→ひらがな(to_hiragana)'
546 | puts '{'
547 | @@roma_data.each{|key, value|
548 | assert_equal(value[0], key.roman_to_hiragana)
549 | puts "'#{key}'=>'#{key.roman_to_hiragana}',"
550 | }
551 | puts'}'
552 | puts "\n\n"
553 | end
554 |
555 | def test_roman_to_katakana1
556 | puts "\n\n#{@method_name}\n"
557 |
558 | puts 'ローマ字→カタカナ(to_katakana)'
559 | puts '{'
560 | @@roma_data.each{|key, value|
561 | assert_equal(value[1], key.to_katakana)
562 | puts "'#{key}'=>'#{key.to_katakana}',"
563 | }
564 | puts'}'
565 | puts "\n\n"
566 | end
567 |
568 | def test_roman_to_katakana2
569 | puts "\n\n#{@method_name}\n"
570 |
571 | puts 'ローマ字→カタカナ(roman_to_katakana)'
572 | puts '{'
573 | @@roma_data.each{|key, value|
574 | assert_equal(value[1], key.roman_to_katakana)
575 | puts "'#{key}'=>'#{key.roman_to_katakana}',"
576 | }
577 | puts'}'
578 | puts "\n\n"
579 | end
580 |
581 | def test_hiragana_to_roman1
582 | puts "\n\n#{@method_name}\n"
583 |
584 | puts 'ひらがな→ローマ字(to_roman)'
585 | puts '{'
586 | @@hiragana_data.each{|key, value|
587 | assert_equal(value[0], key.to_roman)
588 | puts "'#{key}'=>'#{key.to_roman}',"
589 | }
590 | puts'}'
591 | puts "\n\n"
592 | end
593 |
594 | def test_hiragana_to_roman2
595 | puts "\n\n#{@method_name}\n"
596 |
597 | puts 'ひらがな→ローマ字(hiragana_to_roman)'
598 | puts '{'
599 | @@hiragana_data.each{|key, value|
600 | assert_equal(value[0], key.hiragana_to_roman)
601 | puts "'#{key}'=>'#{key.hiragana_to_roman}',"
602 | }
603 | puts'}'
604 | puts "\n\n"
605 | end
606 |
607 | def test_katakana_to_roman1
608 | puts "\n\n#{@method_name}\n"
609 |
610 | puts 'カタカナ→ローマ字(to_roman)'
611 | puts '{'
612 | @@katakana_data.each{|key, value|
613 | assert_equal(value[0], key.to_roman)
614 | puts "'#{key}'=>'#{key.to_roman}',"
615 | }
616 | puts'}'
617 | puts "\n\n"
618 | end
619 |
620 | def test_katakana_to_roman2
621 | puts "\n\n#{@method_name}\n"
622 |
623 | puts 'カタカナ→ローマ字(katakana_to_roman)'
624 | puts '{'
625 | @@katakana_data.each{|key, value|
626 | assert_equal(value[0], key.katakana_to_roman)
627 | puts "'#{key}'=>'#{key.katakana_to_roman}',"
628 | }
629 | puts'}'
630 | puts "\n\n"
631 | end
632 |
633 | def test_hiragana_to_katakana
634 | puts "\n\n#{@method_name}\n"
635 |
636 | puts 'ひらがな→カタカナ(to_katakana)'
637 | puts '{'
638 | @@hiragana_data.each{|key, value|
639 | assert_equal(value[1], key.to_katakana)
640 | puts "'#{key}'=>'#{key.to_katakana}',"
641 | }
642 | puts'}'
643 | puts "\n\n"
644 | end
645 |
646 | def test_katakana_to_hiragana
647 | puts "\n\n#{@method_name}\n"
648 |
649 | puts 'カタカナ→ひらがな(to_hiragana)'
650 | puts '{'
651 | @@katakana_data.each{|key, value|
652 | assert_equal(value[1], key.to_hiragana)
653 | puts "'#{key}'=>'#{key.to_hiragana}',"
654 | }
655 | puts'}'
656 | puts "\n\n"
657 | end
658 |
659 | end
660 |
--------------------------------------------------------------------------------