romankana 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest.txt +3 -0
- data/README.rdoc +4 -1
- data/lib/romankana/k2r.rb +121 -0
- data/lib/romankana/r2k.rb +110 -0
- data/lib/romankana/romankana.rb +83 -0
- data/lib/romankana.rb +4 -4
- metadata +5 -2
data/Manifest.txt
CHANGED
data/README.rdoc
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
= RomanKana : Roman Alphabet <-> Japanese Hiragana/Katkakana Convert Library for Ruby
|
2
2
|
|
3
|
-
* https://github.com/ymrl/
|
3
|
+
* https://github.com/ymrl/romankana
|
4
|
+
|
4
5
|
|
5
6
|
== SYNOPSIS:
|
6
7
|
|
8
|
+
require 'romankana'
|
7
9
|
RomanKana.kanaroman 'ほげほげ' #=> 'hogehoge'
|
8
10
|
RomanKana.kanaroman 'ホゲホゲ' #=> 'hogehoge'
|
9
11
|
RomanKana.romankana 'hogehoge' #=> 'ほげほげ'
|
@@ -17,6 +19,7 @@
|
|
17
19
|
'ほげほげhogehogeホゲホゲ'.roman_to_hiragana #=> 'ほげほげほげほげホゲホゲ'
|
18
20
|
|
19
21
|
== REQUIREMENTS:
|
22
|
+
|
20
23
|
* ruby (VERSION >= 1.8.7)
|
21
24
|
|
22
25
|
== LICENSE:
|
@@ -0,0 +1,121 @@
|
|
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
|
+
'シ' => 'si',
|
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
|
+
'二ャ' => 'nya',
|
87
|
+
'二ュ' => 'nyu',
|
88
|
+
'二ョ' => 'nyo',
|
89
|
+
'ヒャ' => 'hya',
|
90
|
+
'ヒュ' => 'hyu',
|
91
|
+
'ヒョ' => 'hyo',
|
92
|
+
'ミャ' => 'mya',
|
93
|
+
'ミュ' => 'myu',
|
94
|
+
'ミョ' => 'myo',
|
95
|
+
'リャ' => 'rya',
|
96
|
+
'リュ' => 'ryu',
|
97
|
+
'リョ' => 'ryo',
|
98
|
+
'ギャ' => 'gya',
|
99
|
+
'ギュ' => 'gyu',
|
100
|
+
'ギョ' => 'gyo',
|
101
|
+
'ジャ' => 'ja',
|
102
|
+
'ジュ' => 'ju',
|
103
|
+
'ジョ' => 'jo',
|
104
|
+
'ビャ' => 'bya',
|
105
|
+
'ビュ' => 'byu',
|
106
|
+
'ビョ' => 'byo',
|
107
|
+
'ピャ' => 'pya',
|
108
|
+
'ピュ' => 'pyu',
|
109
|
+
'ピョ' => 'pyo',
|
110
|
+
'ヴァ' => 'va',
|
111
|
+
'ヴィ' => 'vi',
|
112
|
+
'ヴ' => 'vu',
|
113
|
+
'ヴェ' => 've',
|
114
|
+
'ヴォ' => 'vo',
|
115
|
+
'ファ' => 'fa',
|
116
|
+
'フィ' => 'fi',
|
117
|
+
'フェ' => 'fe',
|
118
|
+
'フォ' => 'fo',
|
119
|
+
'ー' => '',
|
120
|
+
}
|
121
|
+
end
|
@@ -0,0 +1,110 @@
|
|
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
|
+
'za' => 'ザ', 'zya' => 'ジャ',
|
105
|
+
'zi' => 'ジ', 'zyi' => 'ジィ',
|
106
|
+
'zu' => 'ズ', 'zyu' => 'ジュ',
|
107
|
+
'ze' => 'ゼ', 'zye' => 'ジェ',
|
108
|
+
'zo' => 'ゾ', 'zyo' => 'ジョ'
|
109
|
+
}
|
110
|
+
end
|
@@ -0,0 +1,83 @@
|
|
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
|
+
|
7
|
+
module RomanKana
|
8
|
+
|
9
|
+
def RomanKana.romankana str
|
10
|
+
ret = ''
|
11
|
+
array = NKF.nkf('-wZ0',str).downcase.split('')
|
12
|
+
buff = [array.shift]
|
13
|
+
i = 0
|
14
|
+
while i <= array.length
|
15
|
+
if a = RomanKana::R2K_table[buff.join('')]
|
16
|
+
ret += a
|
17
|
+
buff.clear
|
18
|
+
elsif buff.length >=2 and buff[0] == 'n' and buff[1] !~ /[aeiou]/
|
19
|
+
ret += 'ン'
|
20
|
+
buff.shift
|
21
|
+
elsif buff.length >=2 and buff[0] == 'm' and buff[1] != /[bmp]/
|
22
|
+
ret += 'ン'
|
23
|
+
buff.shift
|
24
|
+
elsif buff.length >= 2 and buff[0] == buff[1]
|
25
|
+
ret += 'ッ'
|
26
|
+
buff.shift
|
27
|
+
elsif buff.length >= 3
|
28
|
+
ret += buff.shift
|
29
|
+
next
|
30
|
+
end
|
31
|
+
buff << array[i]
|
32
|
+
i += 1
|
33
|
+
end
|
34
|
+
return ret+buff.join('')
|
35
|
+
end
|
36
|
+
|
37
|
+
def RomanKana.kanaroman str
|
38
|
+
ret = []
|
39
|
+
array = NKF.nkf('-wh2',str).split('')
|
40
|
+
buff = [array.shift]
|
41
|
+
i = 0
|
42
|
+
while i <= array.length
|
43
|
+
if a = RomanKana::K2R_table[buff.join('')]
|
44
|
+
ret << a
|
45
|
+
buff.clear
|
46
|
+
elsif buff.length >= 2
|
47
|
+
ret << buff.shift
|
48
|
+
next
|
49
|
+
end
|
50
|
+
buff << array[i]
|
51
|
+
i += 1
|
52
|
+
end
|
53
|
+
ret += buff
|
54
|
+
while a = ret.index('ッ')
|
55
|
+
ret[a] = ret[a+1].split('').first
|
56
|
+
end
|
57
|
+
|
58
|
+
return ret.join('')
|
59
|
+
end
|
60
|
+
end
|
61
|
+
class String
|
62
|
+
def roman_to_hiragana
|
63
|
+
Kconv.kconv(self.toutf8.split(/([a-zA-Z]+)/u).map{|e|e =~ /[a-zA-Z]+/u?NKF.nkf("-wh1",RomanKana.romankana(e)):e}.join(''),Kconv.guess(self),Kconv::UTF8)
|
64
|
+
end
|
65
|
+
def roman_to_katakana
|
66
|
+
Kconv.kconv(self.toutf8.split(/([a-zA-Z]+)/u).map{|e|e =~ /[a-zA-Z]+/u?RomanKana.romankana(e):e}.join(''),Kconv.guess(self),Kconv::UTF8)
|
67
|
+
end
|
68
|
+
def katakana_to_roman
|
69
|
+
Kconv.kconv(self.toutf8.split(/([ァ-ヴ]+)/u).map{|e|e =~ /[ァ-ヴ]+/u?RomanKana.kanaroman(e):e}.join(''),Kconv.guess(self),Kconv::UTF8)
|
70
|
+
end
|
71
|
+
def hiragana_to_roman
|
72
|
+
Kconv.kconv(self.toutf8.split(/([ぁ-ん]+)/u).map{|e|e =~ /[ぁ-ん]+/u?NKF.nkf("-wh1",RomanKana.kanaroman(e)):e}.join(''),Kconv.guess(self),Kconv::UTF8)
|
73
|
+
end
|
74
|
+
def to_roman
|
75
|
+
Kconv.kconv(RomanKana.kanaroman(self),Kconv.guess(self),Kconv::UTF8)
|
76
|
+
end
|
77
|
+
def to_hiragana
|
78
|
+
Kconv.kconv(NKF.nkf("-wh1",RomanKana.romankana(self)),Kconv.guess(self),Kconv::UTF8)
|
79
|
+
end
|
80
|
+
def to_katakana
|
81
|
+
Kconv.kconv(NKF.nkf("-wh2",RomanKana.romankana(self)),Kconv.guess(self),Kconv::UTF8)
|
82
|
+
end
|
83
|
+
end
|
data/lib/romankana.rb
CHANGED
@@ -3,10 +3,10 @@ $:.unshift(File.dirname(__FILE__)) unless
|
|
3
3
|
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
4
4
|
|
5
5
|
directory = File.expand_path(File.dirname(__FILE__))
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
6
|
+
require directory+'/romankana/r2k.rb'
|
7
|
+
require directory+'/romankana/k2r.rb'
|
8
|
+
require directory+'/romankana/RomanKana.rb'
|
9
9
|
|
10
10
|
module RomanKana
|
11
|
-
VERSION = '0.0.
|
11
|
+
VERSION = '0.0.2'
|
12
12
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: romankana
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- ymrl
|
@@ -42,6 +42,9 @@ files:
|
|
42
42
|
- README.rdoc
|
43
43
|
- Rakefile
|
44
44
|
- lib/romankana.rb
|
45
|
+
- lib/romankana/romankana.rb
|
46
|
+
- lib/romankana/r2k.rb
|
47
|
+
- lib/romankana/k2r.rb
|
45
48
|
- script/console
|
46
49
|
- script/destroy
|
47
50
|
- script/generate
|
@@ -51,7 +54,7 @@ files:
|
|
51
54
|
- tasks/rspec.rake
|
52
55
|
- .gemtest
|
53
56
|
has_rdoc: true
|
54
|
-
homepage: https://github.com/ymrl/
|
57
|
+
homepage: https://github.com/ymrl/romankana
|
55
58
|
licenses: []
|
56
59
|
|
57
60
|
post_install_message:
|