/* JavaScriptによるローマ字仮名変換ライブラリ ver 2.0 - 1.0 ( 2005-04-27 ) : 公開 - 2.0 ( 2005-09-20 ) : コードをかなり短く。 インスパイア http://www.karlson.ru/jstoys/index.php?module=input_ja 改造と高速化 by ma.la */ var roma2 = {}; roma2.hiragana = function(text){return roma2x(text,"hiragana")} roma2.katakana = function(text){return roma2x(text,"katakana")} roma2.fuzzy = function(text){return roma2reg(text)} function roma2x(text,to){ var nstr = []; var temp,kana; var skip = 0; var latin = /[a-zA-Z.,-]/; for(var pos=0; pos 0) {skip--; continue} temp = text.charAt(pos); if (!latin.test(temp)) {nstr.push(temp); continue} var slen = 5; var f = false; while(--slen){ temp = text.slice(pos,pos+slen); if (!roma[to].hasOwnProperty(temp)) continue; f = true; kana = roma[to][temp]; skip = (slen == 2) ? 1 : slen-1; //「っ」の場合、一文字戻す slen == 2 && kana.charAt(0) == roma[to].tt && pos--; nstr.push(kana); break } !f && nstr.push(temp) } return nstr.join(""); } //正規表現パターン function roma2reg(text){ var nstr = []; var temp,kana; var hira,kata; var skip = 0; var h = "hiragana"; var k = "katakana"; var latin = /[a-zA-Z.,-]/; for(var pos=0;pos 0) {skip--;continue} temp = text.charAt(pos); if(!latin.test(temp)){nstr.push([temp]);continue} var slen = 5; var f = false; while(--slen){ temp = text.slice(pos,pos+slen); if(!roma[h].hasOwnProperty(temp)) continue; f = true; hira = roma[h][temp]; kata = roma[k][temp]; skip = (slen == 2) ? 1 : slen-1; //「っ」の場合、一文字戻す slen == 2 && hira.charAt(0) == roma[h].tt && pos--; var last_m = nstr[nstr.length-1] ? nstr[nstr.length-1][0] : ""; nstr.push( (hira == kata) ? [temp,hira] : // tta → [tt,っ],[a,た] (last_m && roma[h][last_m] == roma[h].tt && last_m.length == 2 && temp.charAt(0) == last_m.charAt(1) ) ? [temp.slice(1),hira,kata] : [temp,hira,kata] ); break } var last_m = nstr[nstr.length-1] ? nstr[nstr.length-1][0] : ""; (last_m && roma[h][last_m] == roma[h].tt && last_m.length == 2 && temp.charAt(0) == last_m.charAt(1) ) ? 0 : !f && nstr.push([temp]) } nstr.toString = function(){ var to_esc = {"-" : "\\-" , "." : "\\."}; var reg_esc = "\\[](){}+*?^$|"; var buf = []; for(var i=0; i