ローマ字をひらがなに変換するよ!
/**
* Copyright moriyak ( http://wonderfl.net/user/moriyak )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/dd2x
*/
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFieldType;
import flash.events.Event;
import flash.events.FocusEvent;
public class Main extends Sprite
{
protected var _input:TextField;
protected var _display:TextField;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
_input = new TextField();
_input.type = TextFieldType.INPUT;
_input.wordWrap = true;
_input.border = true;
_input.multiline = true;
_input.width = 300;
_input.x = (this.stage.stageWidth-300)/2;
this.addChild(_input)
_input.text = "uenotekisutofi-rudoniro-majiwonyuuryokusitene.";
_display = new TextField();
_display.y = _input.height;
_display.wordWrap = true;
_display.border = true;
_display.multiline = true;
_display.width = 300;
_display.x = (this.stage.stageWidth - 300)/2;
this.addChild(_display);
_input.addEventListener(Event.CHANGE, _onChange);
_input.addEventListener(FocusEvent.FOCUS_IN, _onFocus)
_onChange(null);
}
protected function _onChange(e:Event):void
{
_display.text = RomajiTranslator.translate(_input.text);
}
protected function _onFocus(e:FocusEvent):void
{
_input.removeEventListener(FocusEvent.FOCUS_IN, _onFocus)
_input.text = "";
}
}
}
class RomajiTranslator
{
private static var __table:Object;
private static function _initTable():void
{
__table = ROMA_HIRA_TABLE;
for (var key:String in __table) {
var numChars:int = key.length;
for (var i:int = 1; i < numChars; i++) {
__table[key.substr(0, i)] = true;
}
}
}
public static function translate(str:String):String
{
if (__table == null) {
_initTable();
}
str = str.toLowerCase();
var currentChar:String,
lastChar:String = "",
pendingChars:String = "",
currentHira:String = "",
result:String = "";
var numChars:int = str.length;
for (var charIndex:int = 0; charIndex < numChars; charIndex++) {
lastChar = currentChar;
currentChar = str.charAt(charIndex);
// irregular
if (_isAlphabet(currentChar) == false) {
result += (pendingChars + currentChar);
pendingChars = "";
continue;
}
// correct
if (__table[pendingChars + currentChar] is String) {
result += __table[pendingChars + currentChar];
pendingChars = "";
continue;
}
// pending
if (__table[pendingChars + currentChar] == true) {
pendingChars += currentChar;
continue;
}
// tttttttt
if (currentChar == lastChar && !_isBoin(currentChar)) {
result += (pendingChars.length == 1) ?
"っ" :
pendingChars.substring(pendingChars.length - 1) + "っ";
pendingChars = currentChar;
continue;
}
// wrong
pendingChars += currentChar;
do {
result += (pendingChars.charAt(0) == "n") ? "ん" : pendingChars.charAt(0);
pendingChars = pendingChars.substr(1);
} while (__table[pendingChars] == false);
if (__table[pendingChars] is String) {
result += __table[pendingChars];
pendingChars = "";
}
}
result += pendingChars;
return result;
}
private static function _isBoin(char:String):Boolean
{
return (char == "a" ||
char == "i" ||
char == "u" ||
char == "e" ||
char == "o");
}
private static const codeOfa:int = "a".charCodeAt();
private static const codeOfz:int = "z".charCodeAt();
private static function _isAlphabet(char:String):Boolean
{
var code:Number = char.charCodeAt(0);
return (code >= codeOfa && code <= codeOfz);
}
}
const ROMA_HIRA_TABLE:Object = {
a:"あ", i:"い", u:"う", e:"え", o:"お",
ka:"か", ki:"き", ku:"く", ke:"け", ko:"こ",
kya:"きゃ", kyi:"きぃ", kyu:"きゅ", kye:"きぇ", kyo:"きょ",
kwa:"くぁ", kwi:"くぃ", kwe:"くぇ", kwo:"くぉ",
ga:"が", gi:"ぎ", gu:"ぐ", ge:"げ", go:"ご",
gya:"ぎゃ", gyi:"ぎぃ", gyu:"ぎゅ", gye:"ぎぇ", gyo:"ぎょ",
gwa:"ぐぁ",
sa:"さ", si:"し", su:"す", se:"せ", so:"そ",
sya:"しゃ", syi:"しぃ", syu:"しゅ", sye:"しぇ", syo:"しょ",
sha:"しゃ", shi:"し", shu:"しゅ", she:"しぇ", sho:"しょ",
za:"ざ", zi:"じ", zu:"ず", ze:"ぜ", zo:"ぞ",
zya:"じゃ", zyi:"じぃ", zyu:"じゅ", zye:"じぇ", zyo:"じょ",
ta:"た", ti:"ち", tu:"つ", te:"て", to:"と",
tya:"ちゃ", tyi:"ちぃ", tyu:"ちゅ", tye:"ちぇ", tyo:"ちょ",
twa:"とぁ", twi:"とぃ", twu:"とぅ", twe:"とぇ", two:"とぉ",
tsa:"つぁ", tsi:"つぃ", tsu:"つ", tse:"つぇ", tso:"つぉ",
tha:"てゃ", thi:"てぃ", thu:"てゅ", the:"てぇ", tho:"てょ",
da:"だ", di:"ぢ", du:"づ", de:"で", "do":"ど",
dya:"ぢゃ", dyi:"ぢぃ", dyu:"ぢゅ", dye:"ぢぇ", dyo:"ぢょ",
dwa:"どぁ", dwi:"どぃ", dwu:"どぅ", dwe:"どぇ", dwo:"どぉ",
dha:"でゃ", dhi:"でぃ", dhu:"でゅ", dhe:"でぇ", dho:"でょ",
na:"な", ni:"に", nu:"ぬ", ne:"ね", no:"の",
nya:"にゃ", nyi:"にぃ", nyu:"にゅ", nye:"にぇ", nyo:"にょ",
nn:"ん",
ha:"は", hi:"ひ", hu:"ふ", he:"へ", ho:"ほ",
hya:"ひゃ", hyi:"ひぃ", hyu:"ひゅ", hye:"ひぇ", hyo:"ひょ",
hwa:"ふぁ", hwi:"ふぃ", hwe:"ふぇ", hwo:"ふぉ",
ba:"ば", bi:"び", bu:"ぶ", be:"べ", bo:"ぼ",
bya:"びゃ", byi:"びぃ", byu:"びゅ", bye:"びぇ", byo:"びょ",
pa:"ぱ", pi:"ぴ", pu:"ぷ", pe:"ぺ", po:"ぽ",
pya:"ぴゃ", pyi:"ぴぃ", pyu:"ぴゅ", pye:"ぴぇ", pyo:"ぴょ",
ma:"ま", mi:"み", mu:"む", me:"め", mo:"も",
mya:"みゃ", myi:"みぃ", myu:"みゅ", mye:"みぇ", myo:"みょ",
ya:"や", yi:"い", yu:"ゆ", ye:"いぇ", yo:"よ",
ra:"ら", ri:"り", ru:"る", re:"れ", ro:"ろ",
rya:"りゃ", ryi:"りぃ", ryu:"りゅ", rye:"りぇ", ryo:"りょ",
wa:"わ", wi:"うぃ", wu:"う", we:"うぇ", wo:"を",
wyi:"ゐ", wye:"ゑ",
ca:"か", ci:"し", cu:"く", ce:"せ", co:"こ",
cya:"ちゃ", cyi:"ちぃ", cyu:"ちゅ", cye:"ちぇ", cyo:"ちょ",
cha:"ちゃ", chi:"ち", chu:"ちゅ", che:"ちぇ", cho:"ちょ",
va:"ゔぁ", vi:"ゔぃ", vu:"ゔ", ve:"ゔぇ", vo:"ゔぉ",
vya:"ゔゃ", vyi:"ゔぃ", vyu:"ゔゅ", vye:"ゔぇ", vyo:"ゔょ",
qa:"くぁ", qi:"くぃ", qu:"く", qe:"くぇ", qo:"くぉ",
fa:"ふぁ", fi:"ふぃ", fu:"ふ", fe:"ふぇ", fo:"ふぉ",
fya:"ふゃ", fyi:"ふぃ", fyu:"ふゅ", fye:"ふぇ", fyo:"ふょ",
ja:"じゃ", ji:"じ", ju:"じゅ", je:"じぇ", jo:"じょ",
jya:"じゃ", jyi:"じ", jyu:"じゅ", jye:"じぇ", jyo:"じょ",
la:"ぁ", li:"ぃ", lu:"ぅ", le:"ぇ", lo:"ぉ",
lya:"ゃ", lyi:"ぃ", lyu:"ゅ", lye:"ぇ", lyo:"ょ",
lwa:"ゎ",
ltu:"っ",
ltsu:"っ",
xa:"ぁ", xi:"ぃ", xu:"ぅ", xe:"ぇ", xo:"ぉ",
xya:"ゃ", xyi:"ぃ", xyu:"ゅ", xye:"ぇ", xyo:"ょ",
xwa:"ゎ",
xtu:"っ",
xtsu:"っ"
}