人が作ったのを使って楽したかったんだけどいいのが無かったので、ひらがなをローマ字に変換するクラスを自作した。
タイピングゲーム製作でどうしても必要になる問題文章を、ひらがな(数字+一部記号も可)で作るだけで全部ローマ字に変換します。
※mootools.1.2が必要
日本語は母音と子音の組み合わせで出来てる。
「く」ならK+U、「し」ならS+I/SH+I/C+I、「わ」ならW+A。
入力方式が変わるのは、「し」や「じ」等特定の文字と、「ん」、小文字のや行、小文字の「つ」との組み合わせの時だけで
あとは特定の子音1種と母音5種類の組み合わせで成り立つ。
で、大体次のような流れで変換を行います。
- パブリックメソッドに文章投入→「このぶんしょうはさんぷるっぽいなにかです!」
- 1文字または2文字単位に分割して配列化。小文字は前後の文字とセットにする。
→[こ,の,ぶ,ん,しょ,う,は,さ,ん,ぷ,る,っぽ,い,な,に,か,で,す]
「っ」で終わる場合や記号・数字とセットになる場合はそれぞれを1文字とする。 - ループ文で1文字か2文字か判別。変換関数に飛ばす
→こ:1文字 しょ:2文字 - 1文字の場合はそのまま変換。この時、入力方式の設定がある文字についてはその方式に従う。
→こ:K+O ん:NまたはNN - 2文字の場合、最初に「つ」があるかどうか捜査。
【小文字のつがある場合】
2文字目を1文字変換のメソッドに通して子音を2つに増やす。
→っぽ:P+PO →っと:T + TO
【小文字のつがない場合】
switch文で入力方式の設定がある文字(し+小文字や行、じ+小文字や行等)を変換。
他は、1文字変換のメソッドに通して子音+小文字や行ローマ字にする。
→しゃ:(SH)(SY)+A にゃ:N(i)+YA - 結果を返す
→[ko,no,bu,nn,syo,u,ha,sa,nn,pu,ru,ppo,i,na,ni,ka,de,su,!]
→[k,o,n,o,b,u,n,n,s,y,o,u,h,a,s,a,n,n,p,u,r,u,p,p,o,i,n,a,n,i,k,a,d,e,s,u,!]
以下全文。長いw
※全角スペースが混じってたりすることがあるかも
配列からテキストにするときはjoin(“”)で。
mootools依存はClass、flatten()、indexOf()
テスト用ソース
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Convert Roma test</title> <script type="text/javascript" src="js/mootools.js"></script> <script type="text/javascript" src="js/convert.js"></script> <script type="text/javascript"> //<![CDATA[ window.addEvent('domready', function(){ $("text").addEvent('keydown',function(event){ if(event.key=="enter"){ var converter = new HiraganaToRoman("k","x","cy","sh","zy","s","j","t","h","t","n"); var txt = converter.convert(this.value); $("test").set("text",txt); } }); }); //]]> </script> </head> <body id="body"> <input type="text" id="text" size="40" /> <div id="test"></div> </body> </html>