roka 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +35 -13
- data/exe/roka +5 -2
- data/lib/roka/converter.rb +50 -20
- data/lib/roka/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f288807db01ef8354ddb642a8202e1709243751e
|
4
|
+
data.tar.gz: e019147f12f3a784f10012bdfa5bad85d635aa0a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 38bcbf0086694e5d59619e98a940147eec56e53d01d398a27a6da8336fa20cdd006a690d49bf849585fce4459ee5f71852e493c2816895f11b55fb172d96c3a6
|
7
|
+
data.tar.gz: d795cba70b0b04a0a64a256c4d60660bbac4cabcc803c8c7d4a20aea066ad97984a3f5db7799d75b7835738a5d14e8023f376a43185a7d349f352a9e4e48a478
|
data/README.md
CHANGED
@@ -30,7 +30,7 @@ require 'roka'
|
|
30
30
|
'kondo',
|
31
31
|
'kyari-pamyupamyu',
|
32
32
|
'hohno',
|
33
|
-
'
|
33
|
+
'hyougaki',
|
34
34
|
].each do |romaji|
|
35
35
|
puts romaji
|
36
36
|
p Roka.convert(romaji)
|
@@ -38,32 +38,54 @@ end
|
|
38
38
|
# oyasai
|
39
39
|
# ["オヤサイ"]
|
40
40
|
# ono
|
41
|
-
# ["オノ", "
|
41
|
+
# ["オンオ", "オノ", "オオンオ", "オオノ", "オウンオ", "オウノ"]
|
42
42
|
# ohno
|
43
|
-
# ["
|
43
|
+
# ["オンオ", "オノ", "オオンオ", "オオノ"]
|
44
44
|
# omi
|
45
|
-
# ["オミ"
|
45
|
+
# ["オミ"]
|
46
46
|
# otto
|
47
|
-
# ["オット"
|
47
|
+
# ["オット"]
|
48
48
|
# kohama
|
49
49
|
# ["コハマ"]
|
50
50
|
# kondo
|
51
|
-
# ["コンド", "
|
51
|
+
# ["コンド", "コンドウ"]
|
52
52
|
# kyari-pamyupamyu
|
53
53
|
# ["キャリーパミュパミュ"]
|
54
54
|
# hohno
|
55
|
-
# ["
|
56
|
-
#
|
57
|
-
# ["
|
55
|
+
# ["ホンオ", "ホノ", "ホオンオ", "ホオノ"]
|
56
|
+
# hyougaki
|
57
|
+
# ["ヒョウガキ"]
|
58
58
|
```
|
59
59
|
|
60
60
|
### CLI
|
61
61
|
|
62
62
|
```sh
|
63
|
-
$ roka
|
64
|
-
|
65
|
-
|
66
|
-
|
63
|
+
$ roka koniro kono konno konyakku konnyaku ann koh kondo
|
64
|
+
--- koniro
|
65
|
+
コンイロ
|
66
|
+
コニロ
|
67
|
+
--- kono
|
68
|
+
コンオ
|
69
|
+
コノ
|
70
|
+
コオンオ
|
71
|
+
コオノ
|
72
|
+
コウンオ
|
73
|
+
コウノ
|
74
|
+
--- konno
|
75
|
+
コンノ
|
76
|
+
コンノウ
|
77
|
+
--- konyakku
|
78
|
+
コニャック
|
79
|
+
--- konnyaku
|
80
|
+
コンニャク
|
81
|
+
--- ann
|
82
|
+
アン
|
83
|
+
--- koh
|
84
|
+
コ
|
85
|
+
コウ
|
86
|
+
--- kondo
|
87
|
+
コンド
|
88
|
+
コンドウ
|
67
89
|
```
|
68
90
|
|
69
91
|
|
data/exe/roka
CHANGED
data/lib/roka/converter.rb
CHANGED
@@ -36,18 +36,19 @@ class Roka::Converter
|
|
36
36
|
}
|
37
37
|
|
38
38
|
PATTERN_CHANGES = {
|
39
|
-
/n([^aeiou])/ => 'nn\1',
|
40
|
-
/([^aeiou])\1/ => 'xtu\1',
|
41
39
|
/([kg])w([aeiou])/ => '\1ux\2',
|
42
40
|
/([td])w([aeiou])/ => '\1ox\2',
|
43
41
|
/([sc])h([aeiou])/ => '\1ixy\2',
|
44
42
|
/([kgszjtcdnhbpmrl])y([aeiou])/ => '\1ixy\2',
|
45
43
|
/([td])h([aeiou])/ => '\1exy\2',
|
44
|
+
/n([^aeioun])/ => 'n\1',
|
45
|
+
/([^aeioun])\1/ => 'xtu\1',
|
46
|
+
/nn\b/ => 'n',
|
47
|
+
/^(n[^aeiou]o)([^h]|\b)/ => '\1h\2',
|
46
48
|
}
|
47
49
|
|
48
50
|
EXCEPTIONS = {
|
49
51
|
'-' => 'ー',
|
50
|
-
'nn' => 'ン',
|
51
52
|
'xka' => 'ヵ',
|
52
53
|
'xke' => 'ヶ',
|
53
54
|
'xtu' => 'ッ',
|
@@ -60,7 +61,7 @@ class Roka::Converter
|
|
60
61
|
attr_reader :determined
|
61
62
|
|
62
63
|
def initialize(str)
|
63
|
-
@buffer
|
64
|
+
@buffer = regulate(str)
|
64
65
|
@determined = []
|
65
66
|
end
|
66
67
|
|
@@ -74,7 +75,7 @@ class Roka::Converter
|
|
74
75
|
|| parse_pattern \
|
75
76
|
|| parse_prefix \
|
76
77
|
|| parse_vowel \
|
77
|
-
||
|
78
|
+
|| parse_last
|
78
79
|
end
|
79
80
|
|
80
81
|
def parse_exception
|
@@ -109,8 +110,12 @@ class Roka::Converter
|
|
109
110
|
vowel = @buffer[l]
|
110
111
|
|
111
112
|
if (i = VOWELS_INDEX.index(vowel))
|
112
|
-
|
113
|
-
|
113
|
+
if 'n' == @buffer[0] && 'x' != @buffer[l + 1] && 'ン' != @determined[@determined.size - 1]
|
114
|
+
consume(l + 1, ['ン' + VOWELS_KANA[i], changes[i]])
|
115
|
+
else
|
116
|
+
consume(l + 1, changes[i])
|
117
|
+
end
|
118
|
+
expand_long_sound(prefix, vowel)
|
114
119
|
return true
|
115
120
|
end
|
116
121
|
end
|
@@ -123,13 +128,21 @@ class Roka::Converter
|
|
123
128
|
vowel = @buffer[0]
|
124
129
|
if (i = VOWELS_INDEX.index(vowel))
|
125
130
|
consume(1, VOWELS_KANA[i])
|
126
|
-
expand_long_sound(vowel)
|
131
|
+
expand_long_sound(nil, vowel)
|
127
132
|
true
|
128
133
|
else
|
129
134
|
false
|
130
135
|
end
|
131
136
|
end
|
132
137
|
|
138
|
+
def parse_last
|
139
|
+
if 'n' == @buffer[0]
|
140
|
+
consume(1, 'ン')
|
141
|
+
else
|
142
|
+
consume(1)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
133
146
|
def consume(len, replacement = nil)
|
134
147
|
replacement = @buffer[0...len] if replacement.nil?
|
135
148
|
@determined << replacement if replacement
|
@@ -137,18 +150,23 @@ class Roka::Converter
|
|
137
150
|
true
|
138
151
|
end
|
139
152
|
|
140
|
-
def expand_long_sound(vowel)
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
153
|
+
def expand_long_sound(prefix, vowel)
|
154
|
+
c = @buffer[0]
|
155
|
+
|
156
|
+
case vowel
|
157
|
+
when 'o'
|
158
|
+
if 'h' == c && !@buffer[1]
|
159
|
+
consume(1, ['', 'ウ'])
|
160
|
+
elsif 'h' == c
|
161
|
+
d, _ = peak
|
162
|
+
if d[0] == 'h'
|
163
|
+
consume(1, ['', 'オ'])
|
164
|
+
end
|
165
|
+
elsif !(VOWELS_INDEX + %w[y]).include?(c) && ('n' == c && 'o' == @buffer[1])
|
166
|
+
@determined << ['', 'オ', 'ウ']
|
149
167
|
end
|
150
|
-
|
151
|
-
@determined << ['
|
168
|
+
when 'u'
|
169
|
+
@determined << ['', 'ウ'] if 'y' == prefix
|
152
170
|
end
|
153
171
|
end
|
154
172
|
|
@@ -161,7 +179,7 @@ class Roka::Converter
|
|
161
179
|
|
162
180
|
@determined.each do |det|
|
163
181
|
if det.is_a?(Array)
|
164
|
-
tree
|
182
|
+
tree = tree.product(det).map(&:join)
|
165
183
|
else
|
166
184
|
tree.each { |t| t << det }
|
167
185
|
end
|
@@ -174,4 +192,16 @@ class Roka::Converter
|
|
174
192
|
NKF.nkf('-m0 -Z1 -w', str.to_s.downcase).gsub(/[^a-z-]+/, ' ')
|
175
193
|
end
|
176
194
|
|
195
|
+
def peak(_buffer = nil)
|
196
|
+
determined = @determined
|
197
|
+
buffer = @buffer
|
198
|
+
@determined = []
|
199
|
+
@buffer = _buffer unless _buffer.nil?
|
200
|
+
parse while @determined.empty? || !eos?
|
201
|
+
[@determined, @buffer].tap do
|
202
|
+
@determined = determined
|
203
|
+
@buffer = buffer
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
177
207
|
end
|
data/lib/roka/version.rb
CHANGED