Now I’m in the process of creating Action Script (or any script) color highlighter in flash. Which can be used in forums to post the ActionScript
As and when the user types a property or keyword it will highlight in the specified color.

I’m planning to set the .htmlText property every time he types some thing.
That is I will find and replace all the keywords with appropriate <font> tags.
This process will become complicated when the string is too long (too many looping) to avoid this what I’m planning is to split the string in to words & non words put into an Array

For example

txt=”Huh! Multimedia?”
will be kept in Words List like this
WordsArr=[“Huh”, “! “, “Multimedia”, “?”]
in which first element is the word and second is the nonword and so on

Once I have this array I can get the HTML formatting just by replacing the keywords in the array with <font color=”#0000DD”>+keyword+</font>
finally setting the .htmlText as wordArr.join(”);
When the user continues typing with the Caret position I will find out and add it to the appropriate portion of the array or append a new element to the array.
for splitting up the words I use the following function

[UPDATE] included the ActionScript 3 version as well 🙂 It became lot more simpler with the regular expressions

[cc lang=”actionscript3″]/* ************************************************************ Developed by R.Arul Kumaran [[email protected]] for more code keep visiting [www.luracast.com/all/blog] ************************************************************ */ //getWords returns Array of words and non words from a string

//gets the words in to array elements function getWords(text:String):Array { var r:RegExp = /(w*)(W+)(w*)/gm; var o:Object; var a:Array = []; while ((o = r.exec(text)) != null) { if (o[1] != ”) a.push(o[1]) a.push(o[2]) if (o[3] != ”) a.push(o[3]) } return a } /* Usage:- txt=”Huh! Multimedia?” //get the words array wordsArr=getWords(txt); //wordsArr now contatins [“Huh”, “! “, “Multimedia”, “?”] //in which first element is the word and second is the nonword and so on */[/cc]

[cc lang=”actionscript3″]/* /* ************************************************************ Developed by R.Arul Kumaran [[email protected]] for more code keep visiting [www.luracast.com/all/blog] ************************************************************ */ //getWords returns Array of words and non words from a string

//gets the words in to array elements _global.getWords = function(txt) { var Arr = new Array(); var lastIndex = 0; for (var i = 0; i < txt.length; i++) { var code = txt.charCodeAt(i); var char = txt.charAt(i); if (isWord(code)) { //trace(" '"+char+"' "+"isWord"); } else { //trace(" '"+char+"' "+"is Not Word"); var word = txt.substring(lastIndex, i); if (word == '') { /* empty string that means we have 2 or more non word chars together so add them together */ if (Arr.length != 0) { Arr[Arr.length - 1] = Arr[Arr.length - 1] + char; } else { Arr.push(''); Arr.push(char); } } else { Arr.push(word); Arr.push(char); } lastIndex = i + 1; } } if (lastIndex != txt.length) { //last char is not a non-word so add the lost word to list word = txt.substring(lastIndex, txt.length); Arr.push(word); Arr.push(''); } trace(Arr.length); return Arr; } _global.isWord = function(c) { /* Charcode range for non word chars 9,10,13 32 to 47 58 to 64 91 to 96 123 to 126 */ //trace(c); if (c == 10 || c == 9 || c == 13 || (c >= 32 && c <= 44) || (c >= 46 && c <= 47) || (c >= 58 && c <= 64) || (c >= 91 && c <= 96) || (c >= 123 && c <= 126)) { return false; } else { return true; } } //HTML Encodes the char _global.htmlEncode = function(chr) { switch (chr) { case ' ': chr = " "; break; case '<': chr = "<"; break; case '>‘: chr = “>”; break; case ‘&’: chr = “&”; break; case ‘”‘: chr = ‘"’; break; case “‘”: chr = “'”; break; } return chr; } /* Usage:- txt=”Huh! Multimedia?” //get the words array wordsArr=getWords(txt); //wordsArr now contatins [“Huh”, “! “, “Multimedia”, “?”] //in which first element is the word and second is the nonword and so on */ [/cc]