In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

ローマ字をひらがなに変換するよ!

Get Adobe Flash player
by moriyak 27 Mar 2010
    Embed
/**
 * 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:"っ"
	}