roka 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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