gazayas / nihonjin

日本語の文字や数字などの変換を行うためのgemです
2 stars 1 forks source link

#hiraganaで「っ」を実装すること #12

Closed gazayas closed 7 years ago

gazayas commented 7 years ago

romajiで#small_tsu_to_romajiを呼ぶことができるけど、#hiraganaの場合は「dokkkan」みたいな文字列を渡したら「kk」は「っ」に変換されてほしい

下記のはダメだ... また再帰的にした方がいい 今回は str[place + 1] じゃなくて str[place - 1] ただ、「dokkkan」だと... 「どkkっかん」になって... 適当に文字が残っていたら「っ」に変える訳にはいかない... if str[place + 1] == "っ" then str[place] == "っ" end... でも最後の文字からmatchしないとダメだ...

# 処理後
while str.match(/[a-zA-Z]/)
  place = str =~ /[a-zA-Z]/
  Hiragana.each do |key, value|
    if str[place + 1] == value
      romaji_str = key.to_s
      str[place] = romaji_str[0]
  end
end
gazayas commented 7 years ago

んんんん、できたけど、気になる 文字列は 「macccho」から「まっcちょ」になるから str[place-1]をしないといけない(#romaji_to_small_tsuで)

gazayas commented 7 years ago

とにかく放っとく。今一番大事な問題じゃない

gazayas commented 7 years ago

いや〜まだダメだと思う。 コメントの方にこう書いた:

# while文が良くないかもしれない
# 最後に/([a-zA-Z])/にマッチしてしまったらエラーを返したいけど、
# while文だと、もしそのエラーを生じるはずのものが次のwhile文に入っていたら、
# while文を出ることはない。それは困る。

romaji_to_small_tsuを入れなかったら、"mattttte"みたいな文字列を書くと次のようになる

2016-12-06 19 48 09

何かできるかもしれない

gazayas commented 7 years ago
str_ary = str.split("")
str_ary.each do |char|
  if char =~ /([a-z])/ # str.downcaseをした筈だから
    place = str =~ (/[a-z]/)
    romaji_to_small_tsu(str, place)
  end
end

それでも再起は要らないよつな気がする。 とにかくこれで解決できると思う。 もっとすっきりした書き方にしたい。

実装したらこのIssueをcloseして、コードの方に

# fixme: refactoring (Issue #12)

を書いたらいいかもしれない。

gazayas commented 7 years ago

できたけど、また見直した方がいいかもしれない わーい