Here is a basic blueprint for doing that.
First code will work when you place it on Flash timeline. You just need to compile swf.
Second - class variation if you feel like you are comfortable with classes.
Read comments.
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFieldType;
import flash.text.TextFormat;
import flash.utils.Dictionary;
// map of letters and integers regualar expressions to Morse code conventions
var charMap:Dictionary;
// five spaces per convention
var wordSeparator:String = " ";
// three spaces per convention
var letterSeparator:String = " ";
var input:TextField;
var output:TextField;
var prompt:TextField;
init();
function init():void
{
createMap();
drawUI();
}
function drawUI():void
{
drawInput();
drawOutput();
drawPrompt();
placeUI();
}
/**
* Places UI elements and positions them relative to each other
*/
function placeUI():void
{
addChild(prompt);
addChild(input);
addChild(output);
prompt.x = input.x = output.x = prompt.y = 20;
input.y = prompt.y + prompt.height;
output.y = input.y + input.height + 10;
}
/**
* Creates prompt text field
*/
function drawPrompt():void
{
prompt = new TextField();
prompt.defaultTextFormat = new TextFormat("Arial", 11, 0x004040);
prompt.multiline = output.wordWrap = false;
prompt.autoSize = TextFieldAutoSize.LEFT;
prompt.text = "enter text:"
}
/**
* Creates output text field
*/
function drawOutput():void
{
output = new TextField();
output.defaultTextFormat = new TextFormat("Arial", 12, 0x000000, "bold");
output.multiline = output.wordWrap = false;
output.border = true;
output.borderColor = 0x008040;
output.background = true;
output.backgroundColor = 0xDFFFEF;
output.width = 500;
output.height = 22;
}
/**
* Creates input text field
*/
function drawInput():void
{
input = new TextField();
input.defaultTextFormat = new TextFormat("Arial", 12);
input.type = TextFieldType.INPUT;
input.restrict = "A-Z 0-9";
input.multiline = input.wordWrap = false;
input.border = true;
input.borderColor = 0x808080;
input.background = true;
input.backgroundColor = 0xF0F0F0;
input.width = 500;
input.height = 22;
input.addEventListener(Event.CHANGE, onInput);
}
/**
* Handles input text field change event
* @param e
*/
function onInput(e:Event):void
{
var outString:String = input.text;
// append word separator to words
outString = outString.replace(/\b\w+\b/g, addWordSeparator);
// append letter separator to letters
outString = outString.replace(/\w/g, addLetterSeparator);
// loop through the map and replace characers with corresponding Morse codes
for (var prop:Object in charMap)
outString = outString.replace(RegExp(prop), charMap[prop]);
output.text = outString;
}
/**
* Used in String.replace() to inject word separator
* @return
*/
function addWordSeparator():String
{
return [arguments[0], wordSeparator].join("");
}
/**
* Used in String.replace() to inject letter separator
* @return
*/
function addLetterSeparator():String
{
return [arguments[0], letterSeparator].join("");
}
/**
* Creates mapping of alphanumerical characters to Morse code conventions
*/
function createMap():void
{
// international convention
charMap = new Dictionary();
charMap[/A/g] = ".-";
charMap[/B/g] = "-...";
charMap[/C/g] = "-.-.";
charMap[/D/g] = "-..";
charMap[/E/g] = ".";
charMap[/F/g] = "..-.";
charMap[/G/g] = "--.";
charMap[/H/g] = "....";
charMap[/I/g] = "..";
charMap[/J/g] = ".---";
charMap[/K/g] = "-.-";
charMap[/L/g] = ".-..";
charMap[/M/g] = "--";
charMap[/N/g] = "-.";
charMap[/O/g] = "---";
charMap[/P/g] = ".--.";
charMap[/Q/g] = "--.-";
charMap[/R/g] = ".-.";
charMap[/S/g] = "...";
charMap[/T/g] = "-";
charMap[/U/g] = "..-";
charMap[/V/g] = "...-";
charMap[/W/g] = ".--";
charMap[/X/g] = "-..-";
charMap[/Y/g] = "-.--";
charMap[/Z/g] = "--..";
charMap[/0/g] = "-----";
charMap[/1/g] = ".----";
charMap[/2/g] = "..---";
charMap[/3/g] = "...--";
charMap[/4/g] = "....-";
charMap[/5/g] = ".....";
charMap[/6/g] = "-....";
charMap[/7/g] = "--...";
charMap[/8/g] = "---..";
charMap[/9/g] = "----.";
}
Class version:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFieldType;
import flash.text.TextFormat;
import flash.utils.Dictionary;
public class Morse extends Sprite
{
// map of letters and integers regualr expressions to Morse code conventions
private var charMap:Dictionary;
// five spaces per convention
private var wordSeparator:String = " ";
// three spaces per convention
private var letterSeparator:String = " ";
private var input:TextField;
private var output:TextField;
private var prompt:TextField;
public function Morse()
{
init();
}
private function init():void
{
createMap();
drawUI();
}
private function drawUI():void
{
drawInput();
drawOutput();
drawPrompt();
placeUI();
}
/**
* Places UI elements and positions them relative to each other
*/
private function placeUI():void
{
addChild(prompt);
addChild(input);
addChild(output);
prompt.x = input.x = output.x = prompt.y = 20;
input.y = prompt.y + prompt.height;
output.y = input.y + input.height + 10;
}
/**
* Creates prompt text field
*/
private function drawPrompt():void
{
prompt = new TextField();
prompt.defaultTextFormat = new TextFormat("Arial", 11, 0x004040);
prompt.multiline = output.wordWrap = false;
prompt.autoSize = TextFieldAutoSize.LEFT;
prompt.text = "enter text:"
}
/**
* Creates output text field
*/
private function drawOutput():void
{
output = new TextField();
output.defaultTextFormat = new TextFormat("Arial", 12, 0x000000, "bold");
output.multiline = output.wordWrap = false;
output.border = true;
output.borderColor = 0x008040;
output.background = true;
output.backgroundColor = 0xDFFFEF;
output.width = 500;
output.height = 22;
}
/**
* Creates input text field
*/
private function drawInput():void
{
input = new TextField();
input.defaultTextFormat = new TextFormat("Arial", 12);
input.type = TextFieldType.INPUT;
input.restrict = "A-Z 0-9";
input.multiline = input.wordWrap = false;
input.border = true;
input.borderColor = 0x808080;
input.background = true;
input.backgroundColor = 0xF0F0F0;
input.width = 500;
input.height = 22;
input.addEventListener(Event.CHANGE, onInput);
}
/**
* Handles input text field change event
* @param e
*/
private function onInput(e:Event):void
{
var outString:String = input.text;
// append word separator to words
outString = outString.replace(/\b\w+\b/g, addWordSeparator);
// append letter separator to letters
outString = outString.replace(/\w/g, addLetterSeparator);
// loop through the map and replace characers with corresponding Morse codes
for (var prop:Object in charMap)
outString = outString.replace(RegExp(prop), charMap[prop]);
output.text = outString;
}
/**
* Used in String.replace() to inject word separator
* @return
*/
private function addWordSeparator():String
{
return [arguments[0], wordSeparator].join("");
}
/**
* Used in String.replace() to inject letter separator
* @return
*/
private function addLetterSeparator():String
{
return [arguments[0], letterSeparator].join("");
}
/**
* Creates mapping of alphanumerical characters to Morse code conventions
*/
private function createMap():void
{
// international convention
charMap = new Dictionary();
charMap[/A/g] = ".-";
charMap[/B/g] = "-...";
charMap[/C/g] = "-.-.";
charMap[/D/g] = "-..";
charMap[/E/g] = ".";
charMap[/F/g] = "..-.";
charMap[/G/g] = "--.";
charMap[/H/g] = "....";
charMap[/I/g] = "..";
charMap[/J/g] = ".---";
charMap[/K/g] = "-.-";
charMap[/L/g] = ".-..";
charMap[/M/g] = "--";
charMap[/N/g] = "-.";
charMap[/O/g] = "---";
charMap[/P/g] = ".--.";
charMap[/Q/g] = "--.-";
charMap[/R/g] = ".-.";
charMap[/S/g] = "...";
charMap[/T/g] = "-";
charMap[/U/g] = "..-";
charMap[/V/g] = "...-";
charMap[/W/g] = ".--";
charMap[/X/g] = "-..-";
charMap[/Y/g] = "-.--";
charMap[/Z/g] = "--..";
charMap[/0/g] = "-----";
charMap[/1/g] = ".----";
charMap[/2/g] = "..---";
charMap[/3/g] = "...--";
charMap[/4/g] = "....-";
charMap[/5/g] = ".....";
charMap[/6/g] = "-....";
charMap[/7/g] = "--...";
charMap[/8/g] = "---..";
charMap[/9/g] = "----.";
}
}
}