You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by jm...@apache.org on 2014/09/04 00:50:08 UTC

[27/50] [abbrv] remove Adobe from directory names (package name still contains Adobe)

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/HaloWordProcessor.as
----------------------------------------------------------------------
diff --git a/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/HaloWordProcessor.as b/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/HaloWordProcessor.as
deleted file mode 100644
index 9360f0b..0000000
--- a/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/HaloWordProcessor.as
+++ /dev/null
@@ -1,109 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  Licensed to the Apache Software Foundation (ASF) under one or more
-//  contributor license agreements.  See the NOTICE file distributed with
-//  this work for additional information regarding copyright ownership.
-//  The ASF licenses this file to You under the Apache License, Version 2.0
-//  (the "License"); you may not use this file except in compliance with
-//  the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-//  Unless required by applicable law or agreed to in writing, software
-//  distributed under the License is distributed on an "AS IS" BASIS,
-//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//  See the License for the specific language governing permissions and
-//  limitations under the License.
-//
-////////////////////////////////////////////////////////////////////////////////
-
-package com.adobe.linguistics.spelling.ui
-{
-	import com.adobe.linguistics.utils.ITokenizer;
-	import com.adobe.linguistics.utils.TextTokenizer;
-	import com.adobe.linguistics.utils.Token;
-	
-	import flash.text.TextField;
-	import flash.text.TextFormat;
-	
-	import mx.controls.TextArea;
-	import mx.controls.TextInput;
-
-
-	public class HaloWordProcessor implements IWordProcessor
-	{
-		private var mTextField:TextField;
-
-		public function HaloWordProcessor(textField:TextField)
-		{
-			if (textField == null ) throw new Error("illegal argument."); 
-			mTextField = textField;
-		}
-
-		
-		public function replaceText(startIndex:int, endIndex:int, replacement:String):void {
-			
-			if ( replacement == null ) return;
-			
-			if (mTextField.text.length<endIndex || startIndex<0) {
-				return;
-			}
-			
-			var _misspellStart:int = startIndex;
-			var _misspellEnd:int = endIndex;
-			// Try to preserve the format, this works if the whole misspelled word is the same format
-			var tf:TextFormat = mTextField.getTextFormat(_misspellStart, _misspellEnd);
-			mTextField.replaceText(_misspellStart, _misspellEnd, replacement);	
-			mTextField.setTextFormat(tf, _misspellStart, _misspellStart+replacement.length);
-			
-			var ta:TextArea = mTextField.parent as TextArea;
-			var ti:TextInput = mTextField.parent as TextInput;
-			
-			if (ta != null) {
-				ta.selectionBeginIndex = _misspellStart + replacement.length;
-				ta.selectionEndIndex = _misspellStart + replacement.length;
-			}
-			else if (ti != null) {
-				ti.selectionBeginIndex = _misspellStart + replacement.length;
-				ti.selectionEndIndex = _misspellStart + replacement.length;				
-			}
-			else {
-				// Do nothing if it's not a valid text component
-			}
-		}
-
-
-		public function getWordAtPoint(x:uint, y:uint, externalTokenizer:ITokenizer=null):Token
-		{
-			var _token:Token = tryGetWordAtPoint(x,y, externalTokenizer);
-			return _token;
-		}
-		
-		private function tryGetWordAtPoint(x:uint, y:uint, externalTokenizer:ITokenizer=null):Token {
-			// TODO: use a better alternative than _misspellStart, end
-			var index:uint = mTextField.getCharIndexAtPoint(x + mTextField.scrollH, y);
-			if (index >= mTextField.text.length) return null;
-
-			var tmpToken:Token = new Token(index,index);
-			var tokenizer:ITokenizer;
-			if ( externalTokenizer == null ) {
-				tokenizer = new TextTokenizer(mTextField.text);	
-			}else {
-				tokenizer = externalTokenizer;
-			}
-			
-			var result:Token = new Token(0,0);
-			
-			var preToken:Token = tokenizer.getPreviousToken(tmpToken);
-			var nextToken:Token = tokenizer.getNextToken(tmpToken);
-			if ( preToken.last == nextToken.first ) {
-				result.first = preToken.first;
-				result.last = nextToken.last;
-				return result;		
-			}else {
-				return null;
-			}
-		}
-
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/IHighlighter.as
----------------------------------------------------------------------
diff --git a/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/IHighlighter.as b/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/IHighlighter.as
deleted file mode 100644
index ea702da..0000000
--- a/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/IHighlighter.as
+++ /dev/null
@@ -1,34 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  Licensed to the Apache Software Foundation (ASF) under one or more
-//  contributor license agreements.  See the NOTICE file distributed with
-//  this work for additional information regarding copyright ownership.
-//  The ASF licenses this file to You under the Apache License, Version 2.0
-//  (the "License"); you may not use this file except in compliance with
-//  the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-//  Unless required by applicable law or agreed to in writing, software
-//  distributed under the License is distributed on an "AS IS" BASIS,
-//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//  See the License for the specific language governing permissions and
-//  limitations under the License.
-//
-////////////////////////////////////////////////////////////////////////////////
-
-package com.adobe.linguistics.spelling.ui
-{
-	import com.adobe.linguistics.utils.Token;
-	import __AS3__.vec.Vector;
-	import flash.geom.Point;
-	
-	public interface IHighlighter
-	{
-		function drawSquiggles(tokens:Vector.<Token>):void;
-		function clearSquiggles():void;
-		function set offsetPoint(op:Point):void;
-		function get offsetPoint():Point;
-		
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/IWordProcessor.as
----------------------------------------------------------------------
diff --git a/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/IWordProcessor.as b/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/IWordProcessor.as
deleted file mode 100644
index 919acbd..0000000
--- a/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/IWordProcessor.as
+++ /dev/null
@@ -1,30 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  Licensed to the Apache Software Foundation (ASF) under one or more
-//  contributor license agreements.  See the NOTICE file distributed with
-//  this work for additional information regarding copyright ownership.
-//  The ASF licenses this file to You under the Apache License, Version 2.0
-//  (the "License"); you may not use this file except in compliance with
-//  the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-//  Unless required by applicable law or agreed to in writing, software
-//  distributed under the License is distributed on an "AS IS" BASIS,
-//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//  See the License for the specific language governing permissions and
-//  limitations under the License.
-//
-////////////////////////////////////////////////////////////////////////////////
-
-package com.adobe.linguistics.spelling.ui
-{
-	import com.adobe.linguistics.utils.ITokenizer;
-	import com.adobe.linguistics.utils.Token;
-	
-	public interface IWordProcessor
-	{
-		function getWordAtPoint(x:uint, y:uint, externalTokenizer:ITokenizer=null):Token;
-		function replaceText(startIndex:int, endIndex:int, replacement:String):void;
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/SparkHighlighter.as
----------------------------------------------------------------------
diff --git a/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/SparkHighlighter.as b/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/SparkHighlighter.as
deleted file mode 100644
index f847584..0000000
--- a/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/SparkHighlighter.as
+++ /dev/null
@@ -1,190 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  Licensed to the Apache Software Foundation (ASF) under one or more
-//  contributor license agreements.  See the NOTICE file distributed with
-//  this work for additional information regarding copyright ownership.
-//  The ASF licenses this file to You under the Apache License, Version 2.0
-//  (the "License"); you may not use this file except in compliance with
-//  the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-//  Unless required by applicable law or agreed to in writing, software
-//  distributed under the License is distributed on an "AS IS" BASIS,
-//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//  See the License for the specific language governing permissions and
-//  limitations under the License.
-//
-////////////////////////////////////////////////////////////////////////////////
-
-package com.adobe.linguistics.spelling.ui
-{
-	import com.adobe.linguistics.utils.Token;
-	import com.adobe.linguistics.utils.TextTokenizer;
-	import flash.geom.Point;
-	
-	import flash.display.Shape;
-	import flash.geom.Rectangle;
-	import flash.text.engine.TextLine;
-	
-	import flashx.textLayout.compose.TextFlowLine;
-	import flashx.textLayout.edit.SelectionManager;
-	import flashx.textLayout.elements.TextFlow;
-	import flashx.textLayout.tlf_internal;
-	
-	import spark.components.RichEditableText;
-	use namespace tlf_internal;	
-
-	public class SparkHighlighter implements IHighlighter
-	{
-		
-		private var mTextField:RichEditableText;
-		private var mHighlighter:Shape;
-		/*
-		* offset point:
-		*/
-		private var _offsetPoint:Point;
-
-
-		public function SparkHighlighter( textField:RichEditableText )
-		{
-			if (textField == null ) throw new Error("illegal argument."); 
-			mTextField = textField;
-			mHighlighter = null;
-			this._offsetPoint = new Point(0,0);
-		}
-
-		public function drawSquiggles(tokens:Vector.<Token>):void
-		{
-			spellCheckRange(tokens);
-		}
-		
-		public function clearSquiggles():void
-		{
-			if (mHighlighter) {
-				mTextField.removeChild(mHighlighter);
-				mHighlighter=null;
-			}		
-		}
-
-		public function set offsetPoint(op:Point):void{
-			_offsetPoint = op;
-		}
-		
-		public function get offsetPoint():Point{
-			return _offsetPoint;
-		}
-
-
-
-		// TODO: refactor this code to share with halo components, and support words that cross lines
-		private function spellCheckRange(tokens:Vector.<Token>):void {
-
-			var ta:RichEditableText = mTextField;
-			if (!ta) return;		
-
-			mHighlighter= new Shape();
-			mHighlighter.graphics.clear();
-			
-			for ( var i:int = 0; i< tokens.length; ++i ) {
-				var _token:Token = tokens[i];
-				drawSquigglyLineForRange(_token.first, _token.last);
-			}
-			
-			// Just adjust the left padding, top padding is not an issue 
-			//var pleft:uint = mTextField.getStyle("paddingLeft");
-			//mHighlighter.x += pleft;			
-			mTextField.addChild(mHighlighter);	
-			
-
-		}
-		
-		// Draw squiggly line
-		private function drawSquigglyLineForRange(start:Number, end:Number):void
-		{
-			// draw squiggly line
-			var tf:TextFlow = mTextField.textFlow;
-			var tflFirst:TextFlowLine = tf.flowComposer.findLineAtPosition(start);
-			var tflLast:TextFlowLine = tf.flowComposer.findLineAtPosition(end);
-			var tflIndexFirst:int = tf.flowComposer.findLineIndexAtPosition(start);
-			var tflIndexLast:int = tf.flowComposer.findLineIndexAtPosition(end);
-			
-			// Pointer
-			var tflIndex:int = tflIndexFirst;
-			var tfl:TextFlowLine = tflFirst;
-			
-			if (tflIndexFirst == tflIndexLast) {
-				// Draw one line
-				drawSquigglyLineAtIndex(tflIndexFirst, start - tflFirst.absoluteStart, end - tflFirst.absoluteStart);
-			} else {
-				// Multiple lines (very long word)
-				drawSquigglyLineAtIndex(tflIndexFirst, start - tflFirst.absoluteStart);
-				
-				tflIndex++;
-				while (tflIndex != tflIndexLast) {
-					drawSquigglyLineAtIndex(tflIndex);
-					tflIndex++;
-				}
-				
-				drawSquigglyLineAtIndex(tflIndexLast, 0, end - tflLast.absoluteStart);
-			}
-		}
-		
-		// Draw a squiggly line at specific line for specific index range
-		private function drawSquigglyLineAtIndex(lineIndex:Number, startIndex:Number=0, endIndex:Number=0x7FFFFFFF):void
-		{
-			var tf:TextFlow = mTextField.textFlow;
-			var tfl:TextFlowLine = tf.flowComposer.getLineAt(lineIndex);
-			var rectLine:Rectangle = tfl.getBounds();
-			if (endIndex == 0x7FFFFFFF) {
-				drawSquigglyLineAtPoint(rectLine.left, rectLine.bottom, rectLine.right - rectLine.left);
-			}
-			else {
-				// Force to have a valid TextLine
-				var tl:TextLine = tfl.getTextLine(true);
-				
-				// TODO: atom index and char index is not matching for some chars, use try/catch to avoid crash
-				try {
-					var rectFirst:Rectangle = tl.getAtomBounds(startIndex);
-					var rectLast:Rectangle = tl.getAtomBounds(endIndex);
-					drawSquigglyLineAtPoint(rectFirst.left + tfl.x, rectLine.bottom, rectLast.right - rectFirst.left);
-				} catch (err:Error)
-				{
-					//TODO: report error
-				}
-			}
-				
-		}
-		// Draw a squiggly from point x,y with given width, the line is drew in mHighlighter 
-		private function drawSquigglyLineAtPoint(x:Number, y:Number, width:Number):void
-		{
-			mHighlighter.graphics.lineStyle(1, 0xfa0707, .65);
-			mHighlighter.graphics.moveTo(x, y);
-			var upDirection:Boolean = false;
-			var offset:uint = 0;
-			var stepLength:uint = 2;
-			for ( var i:uint = 1; offset <= width; i++) {
-				offset = offset + stepLength;
-				if ( upDirection )
-					mHighlighter.graphics.lineTo(x+offset,y);
-				else
-					mHighlighter.graphics.lineTo(x+offset,y+stepLength);
-				upDirection = !upDirection;
-			}	
-		}
-		
-		private function getValidFirstWordIndex():int{
-			var index:int = SelectionManager.computeSelectionIndex(mTextField.textFlow, mTextField, mTextField, 0 + mTextField.horizontalScrollPosition, 0 + mTextField.verticalScrollPosition);
-			return index;
-
-			
-		}
-		
-		private function getValidLastWordIndex():int{
-			var index:int = SelectionManager.computeSelectionIndex(mTextField.textFlow, mTextField, mTextField, mTextField.width+mTextField.horizontalScrollPosition, mTextField.height+mTextField.verticalScrollPosition);
-			return index;
-
-		}
-
-	}
-}

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/SparkWordProcessor.as
----------------------------------------------------------------------
diff --git a/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/SparkWordProcessor.as b/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/SparkWordProcessor.as
deleted file mode 100644
index 81e155b..0000000
--- a/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/SparkWordProcessor.as
+++ /dev/null
@@ -1,104 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  Licensed to the Apache Software Foundation (ASF) under one or more
-//  contributor license agreements.  See the NOTICE file distributed with
-//  this work for additional information regarding copyright ownership.
-//  The ASF licenses this file to You under the Apache License, Version 2.0
-//  (the "License"); you may not use this file except in compliance with
-//  the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-//  Unless required by applicable law or agreed to in writing, software
-//  distributed under the License is distributed on an "AS IS" BASIS,
-//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//  See the License for the specific language governing permissions and
-//  limitations under the License.
-//
-////////////////////////////////////////////////////////////////////////////////
-
-package com.adobe.linguistics.spelling.ui
-{
-	import com.adobe.linguistics.utils.TextTokenizer;
-	import com.adobe.linguistics.utils.Token;
-	import com.adobe.linguistics.utils.ITokenizer;
-	
-	import flashx.textLayout.edit.SelectionManager;
-	import flashx.textLayout.tlf_internal;
-	
-	import spark.components.RichEditableText;
-	
-	use namespace tlf_internal;	
-	
-	public class SparkWordProcessor implements IWordProcessor
-	{
-		private var mTextField:RichEditableText;
-
-		public function SparkWordProcessor(textField:RichEditableText)
-		{
-			if (textField == null ) throw new Error("illegal argument."); 
-			mTextField = textField;
-		}
-		
-		
-		public function replaceText(startIndex:int, endIndex:int, replacement:String):void {
-			var ta:RichEditableText = mTextField;
-			var end:int = getValidLastWordIndex();
-			
-			if ( replacement == null ) return;
-			
-			if (mTextField.text.length<endIndex || startIndex<0) {
-				return;
-			}
-			
-			var _misspellStart:int = startIndex;
-			var _misspellEnd:int = endIndex;
-
-			// Workaround for Spark: changes in inactive components will trigger strange behavior			
-			ta.setFocus();
-			ta.text = ta.text.substr(0, _misspellStart) + replacement + ta.text.substr(_misspellEnd);
-			ta.textFlow;
-			ta.selectRange(_misspellStart + replacement.length, _misspellStart + replacement.length);
-			
-			// Workaround for unexpected jump
-			ta.scrollToRange(end, end);
-		}
-		
-		public function getWordAtPoint(x:uint, y:uint, externalTokenizer:ITokenizer=null):Token
-		{
-			// TODO: use a better alternative than _misspellStart, end
-			var ta:RichEditableText = mTextField;	
-			var index:int = SelectionManager.computeSelectionIndex(ta.textFlow, ta, ta, x, y);
-
-			if (index >= ta.text.length) return null;
-
-			var tmpToken:Token = new Token(index,index);
-			var tokenizer:ITokenizer;
-			if ( externalTokenizer == null ) {
-				tokenizer = new TextTokenizer(mTextField.text);	
-			}else {
-				tokenizer = externalTokenizer;
-			}
-			
-			var result:Token = new Token(0,0);
-			var preToken:Token = tokenizer.getPreviousToken(tmpToken);
-			var nextToken:Token = tokenizer.getNextToken(tmpToken);
-			if ( preToken.last == nextToken.first ) {
-				result.first = preToken.first;
-				result.last = nextToken.last;
-				return result;		
-			}else {
-				return null;
-			}
-				
-		}
-
-		// TODO: workaround for unexpected jump when word replaced, to be refactored for code sharing
-		private function getValidLastWordIndex():int{
-			var index:int = SelectionManager.computeSelectionIndex(mTextField.textFlow, mTextField, mTextField, mTextField.width+mTextField.horizontalScrollPosition, mTextField.height+mTextField.verticalScrollPosition);
-			return index;
-		}
-
-
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/SpellingHighlighter.as
----------------------------------------------------------------------
diff --git a/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/SpellingHighlighter.as b/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/SpellingHighlighter.as
deleted file mode 100644
index 2292a61..0000000
--- a/Squiggly/main/AdobeSpellingUIAPI/src/com/adobe/linguistics/spelling/ui/SpellingHighlighter.as
+++ /dev/null
@@ -1,179 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  Licensed to the Apache Software Foundation (ASF) under one or more
-//  contributor license agreements.  See the NOTICE file distributed with
-//  this work for additional information regarding copyright ownership.
-//  The ASF licenses this file to You under the Apache License, Version 2.0
-//  (the "License"); you may not use this file except in compliance with
-//  the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-//  Unless required by applicable law or agreed to in writing, software
-//  distributed under the License is distributed on an "AS IS" BASIS,
-//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//  See the License for the specific language governing permissions and
-//  limitations under the License.
-//
-////////////////////////////////////////////////////////////////////////////////
-
-package com.adobe.linguistics.spelling.ui
-{
-	import flash.display.Shape;
-	import flash.geom.Point;
-	import flash.geom.Rectangle;
-	import flash.text.TextLineMetrics;
-	
-	import mx.core.IUITextField;
-	import mx.flash.UIMovieClip;
-
-
-	public class SpellingHighlighter extends UIMovieClip
-	{
-		/*
-		* offset point:
-		*/
-		private var _offsetPoint:Point;
-		
-		/*
-		* Target TextField.
-		*/
-		private var _textField:IUITextField;
-		private static var InvalidIndexValue:int = -2;
-		public function SpellingHighlighter(textField:IUITextField) {
-			super();
-			this._textField = textField;
-			this._offsetPoint = new Point(0,0);
-		}
-		
-		public function drawSquigglyLine(firstCharIndex:int, lastCharIndex:int ):void {
-			var validFirstCharIndex:int = getValidFirstCharIndex(firstCharIndex);
-			var validLastCharIndex:int = getValidLastCharIndex(lastCharIndex);
-			if ( validFirstCharIndex == InvalidIndexValue || validLastCharIndex == InvalidIndexValue ){
-				return;
-			}
-			/* draw squiggly line here. */
-			if ( validFirstCharIndex <= validLastCharIndex ) {
-				var firstLine:int = _textField.getLineIndexOfChar(validFirstCharIndex);
-				var lastLine:int = _textField.getLineIndexOfChar(validLastCharIndex);
-				//only one line case.
-				if(lastLine==firstLine)
-				{
-					drawSingleSquigglyLine(validFirstCharIndex, validLastCharIndex);
-					return;
-				}
-				//more than one line.
-				//first line
-				drawSingleSquigglyLine(validFirstCharIndex, _textField.getLineOffset(firstLine)+_textField.getLineLength(firstLine)-1);
-				//middle....
-				for(var i:int=firstLine+1;i<lastLine;i++)
-				{
-					drawSingleSquigglyLine(_textField.getLineOffset(i), _textField.getLineOffset(i)+_textField.getLineLength(i)-1);
-				}
-				//last lines.
-				drawSingleSquigglyLine(_textField.getLineOffset(lastLine), validLastCharIndex);
-			}
-		}
-		
-		public function drawSingleSquigglyLine(firstCharIndex:int, lastCharIndex:int ):void {
-			var firstLine:int = _textField.getLineIndexOfChar(firstCharIndex);
-			var lastLine:int = _textField.getLineIndexOfChar(lastCharIndex);
-			if ( firstLine != lastLine ) {
-				return;
-			}else {
-				var rect1:Rectangle = _textField.getCharBoundaries(firstCharIndex);
-				var rect2:Rectangle = _textField.getCharBoundaries(lastCharIndex);
-				var x:Number = rect1.x+_offsetPoint.x - _textField.scrollH;
-				var y:Number = rect1.y + rect1.height + 2;
-				var width:Number = rect2.x+rect2.width-rect1.x;
-				
-				// Avoid drawing outside the textField
-				if (x<0) 
-				{
-					if (x+width > 0) {
-						width += x;
-						x = 0;
-					} 
-					else
-						return;
-				}
-				if (x+width > _textField.width) 
-				{
-					if (x < _textField.width) {
-						width = textField.width - x;
-					} 	
-					else
-						return;
-				}
-				
-				// The rectangle that bound the string you want
-				// actual work here.
-				var myShape:Shape = new Shape();
-				myShape.graphics.clear();
-				//myShape.graphics.beginFill(0x0099CC, .35); 
-				myShape.graphics.lineStyle(1, 0xfa0707, .65);
-				myShape.graphics.moveTo(x, y);
-				var upDirection:Boolean = false;
-				var offset:uint = 0;
-				var stepLength:uint = 2;
-				for ( var i:uint = 1; offset <= width; i++) {
-					offset = offset + stepLength;
-					if ( upDirection )
-						myShape.graphics.lineTo(x+offset,y);
-					else
-						myShape.graphics.lineTo(x+offset,y+stepLength);
-					upDirection = !upDirection;
-				}
-				//myShape.graphics.endFill();
-				this.addChild(myShape);	
-			}
-		}
-		
-		private function getValidFirstCharIndex(firstCharIndex:int):int{
-			if(firstCharIndex<0 || firstCharIndex>_textField.text.length-1) 
-			{
-				return InvalidIndexValue;
-			}
-			var firstLine:Number = _textField.getLineIndexOfChar(firstCharIndex);
-			
-			if(firstLine<_textField.scrollV-1)
-			{
-				firstLine = _textField.scrollV-1;
-				return _textField.getLineOffset(firstLine);
-			}
-			return firstCharIndex;
-		}
-		
-		private function getValidLastCharIndex(lastCharIndex:int):int{
-			if(lastCharIndex<0 || lastCharIndex>_textField.text.length-1) 
-			{
-				return InvalidIndexValue;
-			}
-			var lastLine:Number = _textField.getLineIndexOfChar(lastCharIndex);
-			if(lastLine>_textField.bottomScrollV-1)
-			{
-				lastLine = _textField.bottomScrollV-1;
-				return _textField.getLineOffset(lastLine)+_textField.getLineLength(lastLine)-1;
-			}
-			return lastCharIndex;
-		}
-					
-		public function set textField(tf:IUITextField):void{
-			_textField = tf;
-		}
-		
-		public function get textField():IUITextField{
-			return _textField;
-		}
-		
-		public function set offsetPoint(op:Point):void{
-			_offsetPoint = op;
-		}
-		
-		public function get offsetPoint():Point{
-			return _offsetPoint;
-		}
-
-
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingUIEx/src/com/adobe/linguistics/spelling/SpellUI.as
----------------------------------------------------------------------
diff --git a/Squiggly/main/AdobeSpellingUIEx/src/com/adobe/linguistics/spelling/SpellUI.as b/Squiggly/main/AdobeSpellingUIEx/src/com/adobe/linguistics/spelling/SpellUI.as
deleted file mode 100644
index 69c9aab..0000000
--- a/Squiggly/main/AdobeSpellingUIEx/src/com/adobe/linguistics/spelling/SpellUI.as
+++ /dev/null
@@ -1,577 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  Licensed to the Apache Software Foundation (ASF) under one or more
-//  contributor license agreements.  See the NOTICE file distributed with
-//  this work for additional information regarding copyright ownership.
-//  The ASF licenses this file to You under the Apache License, Version 2.0
-//  (the "License"); you may not use this file except in compliance with
-//  the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-//  Unless required by applicable law or agreed to in writing, software
-//  distributed under the License is distributed on an "AS IS" BASIS,
-//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//  See the License for the specific language governing permissions and
-//  limitations under the License.
-//
-////////////////////////////////////////////////////////////////////////////////
-
-package com.adobe.linguistics.spelling
-{
-	import com.adobe.linguistics.spelling.UserDictionary;
-	import com.adobe.linguistics.spelling.framework.ResourceTable;
-	import com.adobe.linguistics.spelling.framework.SpellingConfiguration;
-	import com.adobe.linguistics.spelling.framework.SpellingService;
-    import com.adobe.linguistics.spelling.ui.HaloHighlighter;
-    import com.adobe.linguistics.spelling.ui.IHighlighter;
-    import com.adobe.linguistics.spelling.ui.SparkHighlighter;
-    import com.adobe.linguistics.spelling.ui.HaloWordProcessor;
-    import com.adobe.linguistics.spelling.ui.IWordProcessor;
-    import com.adobe.linguistics.spelling.ui.SparkWordProcessor;
-	import com.adobe.linguistics.utils.TextTokenizer;
-	import com.adobe.linguistics.utils.Token;
-	
-	import flash.events.Event;
-	import flash.events.FocusEvent;
-	import flash.geom.Point;
-	import flash.geom.Rectangle;
-	import flash.net.SharedObject;
-	import flash.net.URLLoader;
-	import flash.net.URLRequest;
-	import flash.text.TextField;
-	import flash.utils.Dictionary;
-	
-	import mx.controls.RichTextEditor;
-	import mx.controls.TextArea;
-	import mx.controls.TextInput;
-	import mx.core.UIComponent;
-	import mx.core.mx_internal;
-	import mx.events.ScrollEvent;
-	
-	import spark.components.RichEditableText;
-	import spark.components.TextArea;
-	import spark.components.TextInput;
-	
-	import flashx.textLayout.tlf_internal;
-	import flashx.textLayout.compose.TextFlowLine;
-	import flashx.textLayout.edit.SelectionManager;
-	import flashx.textLayout.elements.TextFlow;
-	
-	use namespace mx_internal;
-	
-	use namespace tlf_internal;	
-	/**
-	 * UI implementation for spelling.
-	 *
-	 * <p>This class is a simple UI for some standard Flex UI components.
-	 *	It is not intended to address a complete user interface.
-	 *	Instead, it presents a basic user interface for some commonly used Flex UI components.</p>
-	 *
-	 * <p>For advanced text editing applications, more complex features are likely required.
-	 *	For those applications, we recommend bypassing this class and utilizing the <code>SpellChecker</code> class directly.</p>
-	 *
-	 * @playerversion Flash 10
-	 * @langversion 3.0
-	 */
-	public class SpellUI
-	{
-		private var hh:IHighlighter;
-		private var hw:IWordProcessor;
-		
-		private var _checkLastWord:Boolean = true;
-		private var _spellingEnabled:Boolean;
-		
-		private var _actualParent:*;
-		private var isHaloComponent:Boolean;
-		private var isSparkComponent:Boolean;
-
-        //New Added below
-		private var mTextField:*;
-		
-		//private var mTextField:RichEditableText;
-
-		private var _dictname:String = new String();			
-		private var _hundict:HunspellDictionary = new HunspellDictionary();		
-		private var _userdict:UserDictionary = null;
-		private var _sharedobj:SharedObject = null;
-		private var scm:SpellingContextMenu;
-		
-		private var _newchecker:SpellChecker = null;
-		private var _resource_locale:Object = null;
-		private var _spellingservice:SpellingService = null;
-
-		private static var _contextMenuEntries:Object = {enable:"Enable Spelling", disable:"Disable Spelling", add:"Add to dictionary"};		
-		private static var _spellingConfigUrl:String = "AdobeSpellingConfig.xml";
-		private static var _UITable:Dictionary= new Dictionary();
-		private static var _parentTable:Dictionary= new Dictionary();
-		private static var _cacheDictTable:Dictionary= new Dictionary();
-		
-		private static var _configXML:XML = null;
-		private static var _configXMLLoading:Boolean = false;
-		private static var _configXMLLoader:URLLoader = new URLLoader();
-		
-		// Work around for the memory usage problem, ideally a better fix is to provide a dicitonary unload function
-		private static var _cache:Object = new Object();
-
-		/**
-		 * Enables the spell checking feature for a UI component.
-		 * 
-		 * <p>Note: This version provides only enabling function but no disabling function.</p>
-		 *
-		 * @param comp	A text editing Flex UI component.
-		 				It can be a <code>TextArea</code>, <code>TextInput</code> or <code>RichTextEditor</code>.
-		 * @param dict	A URL for the dictionary to be used with the <code>SpellChecker.</code>
-		 *
-		 * @includeExample Examples/Flex/SquigglyUIExample/src/SquigglyUIExample.mxml
-		 * @playerversion Flash 10
-		 * @langversion 3.0
-		 */
-		public static function enableSpelling(comp:UIComponent, lang:String):void
-		{
-			if ( lang == null ) return;
-		 	// TODO: Change dict parameter type to a SpellCheck class or a URL string.
-			var txt:* = getComponentTextModel(comp);
-			/*var comp1:UIComponent = txt.parent;
-			var comp2:UIComponent = txt.owner;
-			var comp3:UIComponent = txt.parentApplication;
-			var comp4:UIComponent = txt.parentDocument;
-			var comp5:UIComponent = txt.parentDocument.hostComponent; <--spark parent UICOmponent*/
-			if ( txt==null || _UITable[comp]!=undefined )
-				return;	
-			
-			// TODO: dangerous, is garbage collection going to clear this?
-			_UITable[comp]=new SpellUI(txt, lang);
-			_parentTable[txt] = comp;
-			_cacheDictTable[comp]=lang;
-		}
-
-		// Customize the spelling related entry in spelling contextMenu
-		public static function setSpellingMenuEntries(entries:Object):Boolean
-		{
-			if (entries.enable && entries.disable && entries.add && (entries.enable != "") && (entries.disable != "") && (entries.add != ""))
-			{
-				_contextMenuEntries = entries;
-				return true;
-			}
-			else
-				return false;
-		}
-		
-		/**
-		 * Get the spelling context menu entries. 
-		 * 
-		 * @return A flex <code>Object</code> containing the spelling context menu entries. If you haven't customized the entries, you get the default associative array <code>{enable:"Enable Spelling", disable:"Disable Spelling", add:"Add to dictionary"}</code>
-		 * @playerversion Flash 10
-		 * @langversion 3.0
-		 */		
-		public static function getSpellingMenuEntries():Object
-		{
-			return _contextMenuEntries;
-		}
-		
-		/**
-		 * The URL for the spelling config xml file. If you haven't specify it, the default URL is [applicationDirectory]/AdobeSpellingConfig.xml. Note that we don't validate the URL, if the file doesn't exist, you will get an error when calling enableSpelling() function.
-		 *
-		 * @example The following code customize the spellingConfigUrl before enabling spell checking.
-		 * <listing version="3.0">
-		 * SpellUI.spellingConfigUrl = "./config/MySpellingConfig.xml";
-		 * SpellUI.enableSpelling(textArea, "en_US");
-		 * </listing>
-		 */
-		public static function get spellingConfigUrl():String
-		{
-			return _spellingConfigUrl;
-		}
-		
-		public static function set spellingConfigUrl(url:String):void
-		{
-			if (url == null) throw new Error("URL can't be null");
-			_spellingConfigUrl = url;
-		}
-		
-
-		
-		/**
-		 * Disable the spell checking feature for a UI component.
-		 * 
-		 * @param comp	A text editing Flex UI component.
-		 * @playerversion Flash 10
-		 * @langversion 3.0
-		 */
-		public static function disableSpelling(comp:UIComponent):void{
-			if ( _UITable[comp] == undefined )
-				return;
-			var _ui:SpellUI = _UITable[comp];
-			if ( _ui != null) _ui.cleanUp();
-			var dictName:String = _cacheDictTable[comp];
-			var cleanUPDictionaryCount:int = 0;
-			for each ( var _dictName:String in _cacheDictTable ) {
-				if ( _dictName == dictName  )
-					cleanUPDictionaryCount++;
-			}
-			if ( cleanUPDictionaryCount == 1 ) {
-				_cache[dictName] = undefined;
-			}
-			delete _UITable[comp];
-			delete _cacheDictTable[comp];
-			
-		}
-		
-		/**
-		 @private
-		 (This property is for Squiggly Developer use only.)
-		 */
-		public static function get UITable():Dictionary {
-			return _UITable;
-		}
-		
-		/**
-		 @private
-		 (This property is for Squiggly Developer use only.)
-		 */
-		public function set spellingEnabled(value:Boolean):void {
-			_spellingEnabled = value;
-		}
-		
-		/**
-		 @private
-		 (This property is for Squiggly Developer use only.)
-		 */
-		public static function get parentComp():Dictionary {
-			return _parentTable;
-		}
-		
-		private static function getComponentTextModel(comp:UIComponent):* {
-			var txt:TextField = null;
-			var txt2:RichEditableText = null;
-			if ( (comp == null) || !( (comp is mx.controls.TextArea) || (comp is mx.controls.TextInput) || (comp is RichTextEditor) 
-								|| (comp is spark.components.TextArea) || (comp is spark.components.TextInput) || (comp is spark.components.RichEditableText)) )
-				return null;
-			if ((comp as RichTextEditor) != null) {
-				txt = (comp as RichTextEditor).textArea.getTextField() as TextField;
-			}
-			else if ((comp as mx.controls.TextArea) != null){
-				txt = (comp as mx.controls.TextArea).getTextField() as TextField;
-			}
-			else if ((comp as mx.controls.TextInput) != null) {
-				txt = (comp as mx.controls.TextInput).getTextField() as TextField;
-			}
-			else if ((comp as spark.components.TextArea) != null) {
-                if ((comp as spark.components.TextArea).textDisplay is TextField)
-                    txt = (comp as spark.components.TextArea).textDisplay as TextField;
-                else
-    				txt2 = (comp as spark.components.TextArea).textDisplay as RichEditableText;
-			}
-			else if ((comp as spark.components.TextInput) != null) {
-                if ((comp as spark.components.TextInput).textDisplay is TextField)
-                    txt = (comp as spark.components.TextInput).textDisplay as TextField;
-                else
-    				txt2 = (comp as spark.components.TextInput).textDisplay as RichEditableText;
-			}
-			else if ((comp as spark.components.RichEditableText) !=null) {
-				txt2 = comp as RichEditableText;
-			}
-			else {
-				// do nothing if it's not a valid text component
-				return null;
-			}
-			if (txt != null) 
-				return txt;
-			else 
-				return txt2;
-		}
-		
-		/**
-		 * Constructs a SpellUI object.
-		 *
-		 *	@param	textFiled	A Flex UI component to include spell-check capability
-		 *	@param	dict		A URL for Squiggly spelling dictionary.
-		 *
-		 * @playerversion Flash 10
-		 * @langversion 3.0
-		 */			
-		public function SpellUI(textModel:*, lang:String)
-		{		
-			// TODO: Consider making this method invisible to user, only expose the static function.
-			if ( textModel is TextField ) {
-				isHaloComponent=true;
-				//New Added below -- check if text field needs to be extracted from textModel
-				//mTextField = textModel;
-			}else if (textModel is RichEditableText ) {
-				isSparkComponent=true;
-				textModel.setFocus();
-				textModel.selectRange(textModel.text.length, textModel.text.length);
-				//New Added below -- check if text field needs to be extracted from textModel
-				//mTextField = textModel ;
-			}else {
-				// do nothing, we only accept textField and TextFlow here....
-				return;
-			}
-			_actualParent = textModel;
-			mTextField = textModel ;
-									
-			mTextField.addEventListener(FocusEvent.FOCUS_OUT, handleFocusOut);
-			mTextField.addEventListener(FocusEvent.FOCUS_IN, handleFocusIn);
-			mTextField.addEventListener(ScrollEvent.SCROLL, spellCheckScreen);
-			mTextField.parent.addEventListener(Event.RENDER, spellCheckScreen);
-			mTextField.parent.addEventListener(Event.CHANGE, handleChangeEvent);
-			_dictname = lang;			
-			loadConfig();
-			
-		}
-		
-		private function spellCheckScreen(event:Event):void
-		{
-			doSpellingJob();
-		}
-		
-		private function handleFocusOut(event:FocusEvent):void
-		{
-			_checkLastWord = true;
-			doSpellingJob();
-		}
-						
-		private function handleFocusIn(event:FocusEvent):void
-		{
-			_checkLastWord = false;
-			doSpellingJob();
-		}
-		
-		private function handleChangeEvent( event:Event ) :void {
-			_checkLastWord = false;
-			spellCheckScreen(event);
-		}
-		
-		/*private function doSpelling():void
-		{
-			_checkLastWord = true;
-			doSpellingJob();
-		}*/
-				
-		/**
-		 @private
-		 (This property is for Squiggly Developer use only.)
-		 */		
-		public function doSpellingJob():void
-		{
-			if (_spellingEnabled == false) return;
-			spellCheckRange(getValidFirstWordIndex(), getValidLastWordIndex());
-		}
-		
-		private function spellCheckRange(start:uint, end:uint):void {
-			//hh.preSpellCheckRange(start, end);
-			hh.clearSquiggles();
-			if ( isHaloComponent ) {
-				//if (end <= start) return;
-				var firstLine:int = mTextField.getLineIndexOfChar(start);
-				var rect:Rectangle = mTextField.getCharBoundaries(start);
-				var counter:uint = start;
-				var numLines:Number = 0;
-				
-				/* mTextField.getCharBoundaries returns null for blank lines and for end of line characters. Placing this workaround
-				to count line heights until a non-null bounding rectangle is found */
-				while (rect == null) {
-					if (++counter > end) {
-						rect = new Rectangle(0,0,0,0);
-						break;
-					}
-					numLines += mTextField.getLineMetrics(firstLine).height;
-					firstLine++;
-					rect = mTextField.getCharBoundaries(counter);
-				}
-				
-				var yoffset:Number = rect.y - numLines;	
-				var pleft:uint = (mTextField.parent as UIComponent).getStyle("paddingLeft");
-				var ptop:uint = (mTextField.parent as UIComponent).getStyle("paddingTop");
-				
-				var offsetPoint:Point = new Point(pleft, ptop-yoffset); 
-								
-				hh.offsetPoint = offsetPoint;
-			}
-			
-			var tokenizer:TextTokenizer = new TextTokenizer(mTextField.text.substring(start,end));
-			var tokens:Vector.<Token> = new Vector.<Token>();
-			
-			for ( var token:Token = tokenizer.getFirstToken(); token != tokenizer.getLastToken(); token= tokenizer.getNextToken(token) ) {
-				var result:Boolean=_spellingservice.checkWord(mTextField.text.substring(token.first+start, token.last+start));					
-				if (!result){
-					if (_checkLastWord || (token.last+start != mTextField.text.length))
-						//hh.highlightWord(token.first+start, token.last+start-1);
-						//tokens.push(new Token(token.first+start, token.last+start-1));
-						hh.drawSquiggleAt(new Token(token.first+start, token.last+start-1));
-				}
-				
-			}
-			//hh.postSpellCheckRange(start, end);
-			//hh.offsetPoint = offsetPoint;
-			//hh.drawSquiggles(tokens);
-		}
-		
-		
-		
-		private function getValidFirstWordIndex():int{			
-			var index:int;
-			if ( mTextField is TextField ) {
-				index = mTextField.getLineOffset(mTextField.scrollV-1);
-			}else if (mTextField is RichEditableText ) {			
-				// Check for computeSelectionIndexInContainer which throws when lineindex == 0
-				try {
-					index = SelectionManager.computeSelectionIndex(mTextField.textFlow, mTextField, mTextField, 0 + mTextField.horizontalScrollPosition, 0 + mTextField.verticalScrollPosition);
-				
-				} catch (err:Error)
-				{
-					//TODO: report error
-					index = 0;
-				}
-			}
-			return index;
-		}
-		
-		private function getValidLastWordIndex():int{			
-			var index:int;
-			if ( mTextField is TextField ) {
-				index = mTextField.getLineOffset(mTextField.bottomScrollV-1)+mTextField.getLineLength(mTextField.bottomScrollV-1);
-			}else if (mTextField is RichEditableText ) {	
-				// Check for computeSelectionIndexInContainer which throws when lineindex == 0
-				try {
-					index = SelectionManager.computeSelectionIndex(mTextField.textFlow, mTextField, mTextField, mTextField.width+mTextField.horizontalScrollPosition, mTextField.height+mTextField.verticalScrollPosition);
-				} catch (err:Error)
-				{
-					//TODO: report error
-					index = 0;
-				}
-			}				
-			return index;
-		}
-
-			private function loadConfig():void{
-			_resource_locale = SpellingConfiguration.resourceTable.getResource(_dictname);
-			
-			if ((_resource_locale != null) || (SpellUI._configXML != null)) 
-				loadConfigComplete(null);
-			else {	
-				SpellUI._configXMLLoader.addEventListener(Event.COMPLETE, loadConfigComplete);
-			
-				if (SpellUI._configXMLLoading == false)
-				{
-					SpellUI._configXMLLoader.load(new URLRequest(_spellingConfigUrl));
-					SpellUI._configXMLLoading = true;
-				}
-			}
-		}
-		
-		private function loadConfigComplete(evt:Event):void{
-			if (_resource_locale == null) {
-			if (SpellUI._configXML == null)
-				SpellUI._configXML= new XML(evt.target.data);
-			
-				SpellingConfiguration.resourceTable.setResource(_dictname,{rule:SpellUI._configXML.LanguageResource.(@languageCode==_dictname).@ruleFile, 
-																		dict:SpellUI._configXML.LanguageResource.(@languageCode==_dictname).@dictionaryFile});
-		}
-                //New Added
-			_spellingservice = new SpellingService(_dictname);
-			_spellingservice.addEventListener(Event.COMPLETE, loadDictComplete);
-			_spellingservice.init();
-		}
-		
-				
-				
-		
-		private function loadDictComplete(evt:Event):void
-		{					
-			//_newchecker = new SpellChecker(_hundict);
-			
-			// Lazy loading the UD only when the main dict is loaded successfully
-			if ((SpellUI._cache["Squiggly_UD"] as UserDictionary) == null)
-			{
-				_sharedobj = SharedObject.getLocal("Squiggly_v03");
-				var vec:Vector.<String> = new Vector.<String>();
-				if (_sharedobj.data.ud) {
-					for each (var w:String in _sharedobj.data.ud)
-					vec.push(w);
-				}
-				_userdict = new UserDictionary(vec);
-				
-				SpellUI._cache["Squiggly_SO"] = _sharedobj;
-				SpellUI._cache["Squiggly_UD"] = _userdict;
-			}
-			else 
-			{
-				_sharedobj = SpellUI._cache["Squiggly_SO"];
-				_userdict = SpellUI._cache["Squiggly_UD"];
-			}
-			_spellingservice.addUserDictionary(_userdict);
-			
-			
-			// Add the context menu, this might be not successful
-			scm = null;
-			try {
-				addContextMenu(null);
-			}
-			catch (err:Error)
-			{
-				// TODO: error handling here
-			}
-			_actualParent.addEventListener(Event.ADDED_TO_STAGE, addContextMenu);
-		}
-		
-		
-		private function addContextMenu(event:Event):void
-		{
-			if ( scm != null ) return;
-			if ( isHaloComponent ) {
-				hh= new HaloHighlighter( _actualParent);
-				hw= new HaloWordProcessor( _actualParent );
-			}else if ( isSparkComponent ){
-				hh = new SparkHighlighter( _actualParent);
-				hw = new SparkWordProcessor( _actualParent);
-			} else {
-				trace("error now, later will be true");
-			}
-		
-			scm =  new SpellingContextMenu(hh, hw, _spellingservice, _actualParent, _actualParent.contextMenu); 
-			scm.setIgnoreWordCallback( addWordToUserDictionary );
-			
-			// Halo need this
-			if (_actualParent.contextMenu == null)
-			{
-				_actualParent.contextMenu = scm.contextMenu;
-			}
-			
-			//hh.spellingEnabled=true;
-			_spellingEnabled = true;
-			try {
-				doSpellingJob();
-			}
-			catch (err:Error)
-			{
-				// If it fails here, it should later triggered by the render event, so no need to do anything
-			}
-		}
-		
-		private function addWordToUserDictionary(word:String):void
-		{
-			_userdict.addWord(word);
-		
-			// TODO: serialization here might affect ther performance
-			_sharedobj.data.ud = _userdict.wordList;
-			
-		}
-		/**
-		 *	@private
-		 */
-		private function cleanUp():void {
-			hh.clearSquiggles();
-			scm.cleanUp();
-			_actualParent.removeEventListener(Event.ADDED_TO_STAGE, addContextMenu);
-			
-			mTextField.removeEventListener(ScrollEvent.SCROLL, spellCheckScreen);
-			mTextField.parent.removeEventListener(Event.RENDER, spellCheckScreen);
-			mTextField.parent.removeEventListener(Event.CHANGE, handleChangeEvent);
-			mTextField.removeEventListener(FocusEvent.FOCUS_OUT, handleFocusOut);
-			mTextField.removeEventListener(FocusEvent.FOCUS_IN, handleFocusIn);
-		}
-		
-	}
-}

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingUIEx/src/com/adobe/linguistics/spelling/SpellingContextMenu.as
----------------------------------------------------------------------
diff --git a/Squiggly/main/AdobeSpellingUIEx/src/com/adobe/linguistics/spelling/SpellingContextMenu.as b/Squiggly/main/AdobeSpellingUIEx/src/com/adobe/linguistics/spelling/SpellingContextMenu.as
deleted file mode 100644
index fc71ce3..0000000
--- a/Squiggly/main/AdobeSpellingUIEx/src/com/adobe/linguistics/spelling/SpellingContextMenu.as
+++ /dev/null
@@ -1,243 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  Licensed to the Apache Software Foundation (ASF) under one or more
-//  contributor license agreements.  See the NOTICE file distributed with
-//  this work for additional information regarding copyright ownership.
-//  The ASF licenses this file to You under the Apache License, Version 2.0
-//  (the "License"); you may not use this file except in compliance with
-//  the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-//  Unless required by applicable law or agreed to in writing, software
-//  distributed under the License is distributed on an "AS IS" BASIS,
-//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//  See the License for the specific language governing permissions and
-//  limitations under the License.
-//
-////////////////////////////////////////////////////////////////////////////////
-
-package com.adobe.linguistics.spelling
-{
-	import com.adobe.linguistics.spelling.SpellUI;
-	import com.adobe.linguistics.spelling.framework.SpellingService;
-	import com.adobe.linguistics.spelling.ui.*;
-	import com.adobe.linguistics.utils.Token;
-	import com.adobe.linguistics.utils.TextTokenizer;
-	
-	import flash.events.ContextMenuEvent;
-	import flash.events.Event;
-	import flash.events.EventDispatcher;
-	
-	import flash.ui.ContextMenu;
-	import flash.ui.ContextMenuItem;
-	
-	import flash.text.TextField;
-	import mx.core.UIComponent;
-	
-	import flash.geom.Point;
-	import flash.geom.Rectangle;
-	
-	public class SpellingContextMenu
-	{
-		private var disableMenuItem:ContextMenuItem = new ContextMenuItem("Disable spell checking",true);
-		private var enableMenuItem:ContextMenuItem = new ContextMenuItem("Enable spell checking");
-		private var controlMenuItemList:Array = new Array();
-		private var suggestionMenuItemList:Array = new Array();
-		private var _spellingEnabled:Boolean;
-		private var _contextMenu:ContextMenu;
-		private var mTextHighlighter:IHighlighter;
-		private var mWordProcessor:IWordProcessor;
-		private var mSpellEngine:SpellingService;
-		private var mParentTextField:*;
-		private var _ignoreWordFunctionProcessor:Function;
-		private var _misspelledToken:Token;
-		private var _misspelled:String;
-		public function SpellingContextMenu(textHighlighter:IHighlighter, wordProcessor:IWordProcessor, engine:SpellingService, actualParent:*, contextMenu:ContextMenu=null)
-		{
-			
-			if ( textHighlighter == null || wordProcessor == null ||  engine == null) throw new Error("illegal argument."); 
-			mTextHighlighter = textHighlighter;
-			mWordProcessor = wordProcessor;
-			mSpellEngine = engine;
-			mParentTextField = actualParent;
-			if (contextMenu != null) {
-				_contextMenu =contextMenu;
-			}else {
-				_contextMenu = new ContextMenu();
-			}
-			enableMenuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, handleEnableSpellCheck);
-			disableMenuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, handleDisableSpellCheck);
-			controlMenuItemList.push(enableMenuItem);
-			controlMenuItemList.push(disableMenuItem);
-			
-			_contextMenu.customItems.push(disableMenuItem);
-			_contextMenu.customItems.push(enableMenuItem);
-			spellingEnabled = true; //default value
-			//spellingEnabled= mTextHighlighter.spellingEnabled;
-			_contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, handleContextMenuSelect);
-			_ignoreWordFunctionProcessor=null;
-		}
-		
-		public function cleanUp():void
-		{
-			mTextHighlighter=null;
-			mWordProcessor=null;
-			spellingEnabled = false;
-			_ignoreWordFunctionProcessor=null;
-			
-			_contextMenu.removeEventListener(ContextMenuEvent.MENU_SELECT, handleContextMenuSelect);
-			
-			var removedNum:int = 0;
-			var count:uint = _contextMenu.customItems.length;
-			for (var j:uint=count; j>0; j--) {
-				if ( isWordItem(_contextMenu.customItems[j-1]) || isControlItem(_contextMenu.customItems[j-1]) ) {
-					_contextMenu.customItems.splice(j-1,1);
-					removedNum++
-				}
-			}
-			if ( removedNum != suggestionMenuItemList.length + controlMenuItemList.length ) {
-				trace("internal error");
-			}
-			
-			suggestionMenuItemList = null;
-			controlMenuItemList = null;
-		}
-		
-		public function get contextMenu():ContextMenu {
-			return this._contextMenu;
-		}
-
-		private function handleContextMenuSelect(event:ContextMenuEvent):void
-		{
-			/* Clear the context menu */
-			//spellingEnabled= mTextHighlighter.spellingEnabled;
-			//SpellUI.doSpelling1();
-			var removedNum:int = 0;
-			var count:uint = _contextMenu.customItems.length;
-			for (var j:uint=count; j>0; j--) {
-				if ( isWordItem(_contextMenu.customItems[j-1]) ) {
-					_contextMenu.customItems.splice(j-1,1);
-					removedNum++
-				}
-			}
-			if ( removedNum != suggestionMenuItemList.length ) {
-				trace("internal error");
-			}
-			
-			
-			suggestionMenuItemList = new Array();
-	
-			// localized entries
-			var entries:Object = SpellUI.getSpellingMenuEntries();
-			disableMenuItem.caption = entries.disable;
-			enableMenuItem.caption = entries.enable;				
-
-			if (spellingEnabled == true) {
-				_misspelledToken = mWordProcessor.getWordAtPoint(mParentTextField.mouseX, mParentTextField.mouseY);
-				if (_misspelledToken==null) return;
-				_misspelled = 	mParentTextField.text.substring(_misspelledToken.first, _misspelledToken.last);
-				if ((_misspelled==null) || (_misspelled == "")) return;
-				
-				if (mSpellEngine.checkWord(_misspelled)==true) return;				
-				
-				var suseAddToItem:ContextMenuItem = new ContextMenuItem(entries.add);
-				suseAddToItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, handleAddToItemSelect);
-				suggestionMenuItemList.push(suseAddToItem);
-				_contextMenu.customItems.splice(0,0,suseAddToItem);	
-				//var result:Array = mWordProcessor.getSuggestionsAtPoint();
-				var resultVector:Vector.<String> = mSpellEngine.getSuggestions(_misspelled);
-				var result:Array = new Array();
-				if (resultVector) {
-					for each (var w:String in resultVector)
-					result.push(w);
-				}
-				if (result!=null) {
-					for (var i:int=result.length-1;i>=0;i-- ) {
-						var suseMenuItem:ContextMenuItem = new ContextMenuItem(result[i]);
-						suseMenuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, handleSuseItemSelect);
-						suggestionMenuItemList.push(suseMenuItem);
-						//_contextMenu.customItems.push(suseMenuItem);
-						_contextMenu.customItems.splice(0,0,suseMenuItem);
-					}
-				}
-			}
-			
-
-			
-		}
-		
-		public function setIgnoreWordCallback(func:Function ) :void {
-			if ( func != null )
-			_ignoreWordFunctionProcessor = func;
-		}
-		
-		private function handleAddToItemSelect(event:ContextMenuEvent):void
-		{
-			if ( _ignoreWordFunctionProcessor == null ) return;
-			
-			/*
-			var menuEntry:String = (event.currentTarget as ContextMenuItem).caption;
-			var start:uint = 5;
-			var end:uint = menuEntry.length - 15;
-			var word:String = menuEntry.substring(start, end);
-			*/
-			_ignoreWordFunctionProcessor(_misspelled);
-			//SpellUI.UITable[SpellUI.parentComp[mParentTextField]].doSpellingJob();
-			//now implicitly calling dospelling on all text areas
-			for each (var tempUIComponent:SpellUI in SpellUI.UITable)
-			{
-				tempUIComponent.doSpellingJob();
-			}
-		}
-
-		private function isWordItem(item:ContextMenuItem):Boolean {
-			
-			for ( var i:int=0; i<suggestionMenuItemList.length; ++i ) {
-				if ( suggestionMenuItemList[i] == item ) return true;
-			}
-			return false;
-		}
-		
-		private function isControlItem(item:ContextMenuItem):Boolean {
-			for (var i:int=0; i<controlMenuItemList.length; ++i) {
-				if ( controlMenuItemList[i] == item) return true;
-			}
-			return false;
-		}
-
-		private function handleSuseItemSelect(event:ContextMenuEvent):void
-		{
-			mWordProcessor.replaceText(_misspelledToken, (event.currentTarget as ContextMenuItem).caption );
-			SpellUI.UITable[SpellUI.parentComp[mParentTextField]].doSpellingJob();
-		}
-
-		
-		private function set spellingEnabled(value:Boolean) :void {
-			_spellingEnabled = value;
-			disableMenuItem.visible=spellingEnabled;
-			enableMenuItem.visible=!spellingEnabled;
-		}
-		private function get spellingEnabled():Boolean {
-			return this._spellingEnabled;
-		}
-		private function handleEnableSpellCheck(event:ContextMenuEvent):void
-		{
-			spellingEnabled= true;
-			//mTextHighlighter.spellingEnabled= spellingEnabled;
-			//SpellUI.doSpellingJob();
-			//dispatchEvent(new Event(Event.RENDER));
-			
-			SpellUI.UITable[SpellUI.parentComp[mParentTextField]].spellingEnabled = spellingEnabled;
-			SpellUI.UITable[SpellUI.parentComp[mParentTextField]].doSpellingJob();
-			//spellCheckRange(getValidFirstWordIndex(), getValidLastWordIndex());
-		}
-		private function handleDisableSpellCheck(event:ContextMenuEvent):void
-		{
-			spellingEnabled= false;
-			SpellUI.UITable[SpellUI.parentComp[mParentTextField]].spellingEnabled = spellingEnabled;
-			mTextHighlighter.clearSquiggles();
-		}
-				
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingUITLF/src/com/adobe/linguistics/spelling/SpellUIForTLF.as
----------------------------------------------------------------------
diff --git a/Squiggly/main/AdobeSpellingUITLF/src/com/adobe/linguistics/spelling/SpellUIForTLF.as b/Squiggly/main/AdobeSpellingUITLF/src/com/adobe/linguistics/spelling/SpellUIForTLF.as
deleted file mode 100644
index 4128cd4..0000000
--- a/Squiggly/main/AdobeSpellingUITLF/src/com/adobe/linguistics/spelling/SpellUIForTLF.as
+++ /dev/null
@@ -1,522 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  Licensed to the Apache Software Foundation (ASF) under one or more
-//  contributor license agreements.  See the NOTICE file distributed with
-//  this work for additional information regarding copyright ownership.
-//  The ASF licenses this file to You under the Apache License, Version 2.0
-//  (the "License"); you may not use this file except in compliance with
-//  the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-//  Unless required by applicable law or agreed to in writing, software
-//  distributed under the License is distributed on an "AS IS" BASIS,
-//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//  See the License for the specific language governing permissions and
-//  limitations under the License.
-//
-////////////////////////////////////////////////////////////////////////////////
-
-package com.adobe.linguistics.spelling
-{
-	import com.adobe.linguistics.spelling.UserDictionary;
-	import com.adobe.linguistics.spelling.framework.ResourceTable;
-	import com.adobe.linguistics.spelling.framework.SpellingConfiguration;
-	import com.adobe.linguistics.spelling.framework.SpellingService;
-	import com.adobe.linguistics.spelling.ui.IHighlighter;
-	import com.adobe.linguistics.spelling.ui.IWordProcessor;
-	import com.adobe.linguistics.spelling.ui.TLFHighlighter;
-	import com.adobe.linguistics.spelling.ui.TLFWordProcessor;
-	import com.adobe.linguistics.utils.TextTokenizer;
-	import com.adobe.linguistics.utils.Token;
-	
-	import flash.events.Event;
-	import flash.events.FocusEvent;
-	import flash.geom.Point;
-	import flash.geom.Rectangle;
-	import flash.net.SharedObject;
-	import flash.net.URLLoader;
-	import flash.net.URLRequest;
-	import flash.utils.Dictionary;
-	
-	import flashx.textLayout.compose.StandardFlowComposer;
-	import flashx.textLayout.compose.TextFlowLine;
-	import flashx.textLayout.container.ContainerController;
-	import flashx.textLayout.conversion.TextConverter;
-	import flashx.textLayout.edit.SelectionManager;
-	import flashx.textLayout.elements.FlowLeafElement;
-	import flashx.textLayout.elements.ParagraphElement;
-	import flashx.textLayout.elements.TextFlow;
-	import flashx.textLayout.events.CompositionCompleteEvent;
-	
-	import flashx.textLayout.tlf_internal;
-	
-	
-	use namespace tlf_internal;	
-	/**
-	 * <p>A comprehensive convenience class that bundles a context menu UI, 
-	 * the spelling engine, the dictionary loader, and user dictionary support 
-	 * to enable a single-line integration of spell checking functionality into 
-	 * any custom UI component built around TLF TextFlow.  </p>
-	 * 
-	 *
-	 * <p>For advanced text editing applications, more complex features are likely required.
-	 *	For those applications, we recommend bypassing this class and utilizing the <code>SpellChecker</code> class directly.</p>
-	 *
-	 * In order to display Squiggly custom right-click context menu, SpellUIForTLF extends TLF <code>ContainerController</code> class and overrides createContextMenu() method 
-	 * of <code>ContainerController</code>. This could have the following side-effects for a Squiggly client:
-	 * <ul>
-	 * 		<li>In case the Squiggly client application uses a derived controller that inherits from ContainerController class in order to show custom context menu items, Squiggly
-	 * 			context menu will override that. That essentially means that after SpellUIForTLF.enableSpelling() is called, client's own custom right-click menu items, if any, will not be
-	 * 			accessible. </li>
-	 * 		<li>Incase any ContainerController api needs to be called after SpellUIForTLF.enableSpelling() has been called, the client application will need to get the controller objects afresh 
-	 * 			from the TextFlow's FlowComposer. This is needed since SpellUIForTLF replaces ContainerController objects with new SquigglyCustomContainerController(derived from ContainerController) objects. </li> 
-	 * </ul>
-	 * 
-	 * 
-	 * <p><code>SpellUIForTLF</code> uses the AdobeSpellingConfig.xml file to lookup corresponding resource files for a given locale.
-	 * The default location of AdobeSpellingConfig.xml is [yourapplicationDirectory]/AdobeSpellingConfig.xml. This could be customized using 
-	 * <code>spellingConfigUrl</code> property of <code>SpellUI</code>. You don't have to change the content of this file. However,
-	 * if you want to add a new language, to use an alternative dictionary or to customize the location for your dictionaries, you can modify it. 
-	 * There's an known issue with IIS web server when loading dictionary files with unknown extensions, in which case you can modify the XML to work around it.</p><p>
-	 * A sample AdobeSpellingConfig.xml will look as follows:
-	 * <listing version="3.0">
-	 * <pre class="preWrapper">
-	 * &lt;?xml version=&quot;1.0&quot; encoding='UTF-8'?&gt;
-	 * &lt;SpellingConfig&gt;
-	 *   	&lt;LanguageResource language=&quot;English&quot; 	  languageCode=&quot;en_US&quot; ruleFile=&quot;dictionaries/en_US/en_US.aff&quot; dictionaryFile=&quot;dictionaries/en_US/en_US.dic&quot;/&gt;
-	 *    	&lt;LanguageResource language=&quot;Spanish&quot;    languageCode=&quot;es_ES&quot; ruleFile=&quot;dictionaries/es_ES/es_ES.aff&quot; dictionaryFile=&quot;dictionaries/es_ES/es_ES.dic&quot;/&gt;
-	 *   	&lt;LanguageResource language=&quot;Portuguese&quot; languageCode=&quot;pt_PT&quot; ruleFile=&quot;dictionaries/pt_PT/pt_PT.aff&quot; dictionaryFile=&quot;dictionaries/pt_PT/pt_PT.dic&quot;/&gt;
-	 *  	 &lt;LanguageResource language=&quot;Italian&quot; 	  languageCode=&quot;it_IT&quot; ruleFile=&quot;dictionaries/it_IT/it_IT.aff&quot; dictionaryFile=&quot;dictionaries/it_IT/it_IT.dic&quot;/&gt;
-	 * &lt;/SpellingConfig&gt;</pre>
-	 *
-	 * </listing>
-	 * Note: The languageCode can be an arbitrary value, as long as you are consistent when passing them to the Squiggly classes. 
-	 * However, we highly encourage you to follow the two part Unicode language identifier format. 
-	 * For more information, please consult the latest Unicode Technical Standard that can be found at: http://unicode.org/reports/tr35/.</p>
-	 * 
-	 * @playerversion Flash 10
-	 * @langversion 3.0
-	 */
-	public class SpellUIForTLF
-	{
-		private var hh:IHighlighter;
-		private var hw:IWordProcessor;
-		
-		private var _checkLastWord:Boolean = true;
-		private var _spellingEnabled:Boolean;
-		
-		private var _actualParent:*;
-		
-
-        //New Added below
-		private var mTextFlow:TextFlow;
-		
-		
-		private var _dictname:String = new String();			
-
-		private var _userdict:UserDictionary = null;
-		private var _sharedobj:SharedObject = null;
-		private var scm:SpellingContextMenuForTLF;
-		
-		private var _newchecker:SpellChecker = null;
-		private var _resource_locale:Object = null;
-		private var _spellingservice:SpellingService = null;
-
-		private static var _contextMenuEntries:Object = {enable:"Enable Spelling", disable:"Disable Spelling", add:"Add to dictionary"};		
-		private static var _spellingConfigUrl:String = "AdobeSpellingConfig.xml";
-		private static var _UITable:Dictionary= new Dictionary();
-		private static var _parentTable:Dictionary= new Dictionary();
-		private static var _cacheDictTable:Dictionary= new Dictionary();
-		
-		private static var _configXML:XML = null;
-		private static var _configXMLLoading:Boolean = false;
-		private static var _configXMLLoader:URLLoader = new URLLoader();
-		
-		// Work around for the memory usage problem, ideally a better fix is to provide a dicitonary unload function
-		private static var _cache:Object = new Object();
-
-		/**
-		 * Enables the spell checking feature for a TLF TextFlow. Once a TextFlow is spell checking enabled, misspelled words will be highlighted with a squiggly line. Users can 
-		 * right click on a misspelled word to see the suggestions in the context menu.
-		 * 
-		 * @param comp	A TLF TextFlow object
-		 * @param lang	The language code used for spell checking, for example <code>en_US</code>. it will lookup the AdobeSpellingConfig.xml file to access corresponding resource files.
-		 * AdobeSpellingConfig.xml should located at the same folder as your main mxml source file. You don't have to change the content of this file. However,
-		 * if you want to add a new language, to use an alternative dictionary or to customize the location for your dictionaries, you can modify it. There's an known issue with
-		 * IIS web server when loading dictionary files with unknown extensions, in which case you can modify the XML to work around it.
-		 * 
-		 * 
-		 * @includeExample Examples/ActionScript/SquigglyTLFExample/src/SquigglyTLFExample.as
-		 * @playerversion Flash 10
-		 * @langversion 3.0
-		 */
-
-		public static function enableSpelling(comp:TextFlow, lang:String):void
-		{
-			if ( lang == null ) return;
-			if ( comp==null || _UITable[comp]!=undefined )
-				return;	
-			
-			// TODO: dangerous, is garbage collection going to clear this?
-			_UITable[comp]=new SpellUIForTLF(comp, lang);
-			_parentTable[comp] = comp;
-			_cacheDictTable[comp]=lang;			
-		}	
-	
-		/**
-		 * Set the spelling context menu entries. This uses the ActionScript Object class as an associative array for extensibility. 
-		 * <code>entries</code> should have all the customized contextMenu entries including <code>enable (spelling), 
-		 * disable (spelling) and add (to dictionary)</code>. To ensure a consistent contextMenu within your application, 
-		 * the spelling context menu entries you provide here are applied to all UI components. We recommend you use this API
-		 * to localize the context menu strings.
-		 *  
-		 * @param entries A Object that looks like <code>entries:Object = {enable:"Enable Spelling", disable:"Disable Spelling", 
-		 * add:"Add to dictionary"}</code>. If you don't customize the contextMenu, the default contextMenu in English will be used.
-		 * 
-		 * @return <code>True</code> if the spelling menu is successfully customized, <code>false</code> if it fails. Possible failure 
-		 * reasons include passing the wrong object or missing some required entries. If the function fails, the contextMenu is left unchanged.
-		 * 
-		 * 
-		 * @IncludeExample Examples/Flex/CustomContextMenu/src/CustomContextMenu.mxml
-		 * @IncludeExample Examples/Flex/ContextMenuWithResource/src/ContextMenuWithResource.mxml
-		 * @playerversion Flash 10
-		 * @langversion 3.0
-		 */
-		public static function setSpellingMenuEntries(entries:Object):Boolean
-		{
-			if (entries.enable && entries.disable && entries.add && (entries.enable != "") && (entries.disable != "") && (entries.add != ""))
-			{
-				_contextMenuEntries = entries;
-				return true;
-			}
-			else
-				return false;
-		}
-		
-		/**
-		 * Get the spelling context menu entries. 
-		 * 
-		 * @return A actionScript <code>Object</code> containing the spelling context menu entries. If you haven't customized the entries, you get the default associative array <code>{enable:"Enable Spelling", disable:"Disable Spelling", add:"Add to dictionary"}</code>
-		 * @playerversion Flash 10
-		 * @langversion 3.0
-		 */		
-		public static function getSpellingMenuEntries():Object
-		{
-			return _contextMenuEntries;
-		}
-		
-		/**
-		 * The URL for the spelling config xml file. If you haven't specify it, the default URL is [applicationDirectory]/AdobeSpellingConfig.xml. Note that we don't validate the URL, if the file doesn't exist, you will get an error when calling enableSpelling() function.
-		 *
-		 * @example The following code customize the spellingConfigUrl before enabling spell checking.
-		 * <listing version="3.0">
-		 * SpellUIForTLF.spellingConfigUrl = "./config/MySpellingConfig.xml";
-		 * SpellUIForTLF.enableSpelling(textFlow, "en_US");
-		 * </listing>
-		 */
-		public static function get spellingConfigUrl():String
-		{
-			return _spellingConfigUrl;
-		}
-		
-		public static function set spellingConfigUrl(url:String):void
-		{
-			if (url == null) throw new Error("URL can't be null");
-			_spellingConfigUrl = url;
-		}
-		
-
-		
-		/**
-		 * Disable the spell checking feature for a TLF TextFlow.
-		 * 
-		 * @param comp	TLF TextFlow object on which to disable spell check.
-		 * @playerversion Flash 10
-		 * @langversion 3.0
-		 */
-		public static function disableSpelling(comp:TextFlow):void{
-			if ( _UITable[comp] == undefined )
-				return;
-			var _ui:SpellUIForTLF = _UITable[comp];
-			if ( _ui != null) _ui.cleanUp();
-			var dictName:String = _cacheDictTable[comp];
-			var cleanUPDictionaryCount:int = 0;
-			for each ( var _dictName:String in _cacheDictTable ) {
-				if ( _dictName == dictName  )
-					cleanUPDictionaryCount++;
-			}
-			if ( cleanUPDictionaryCount == 1 ) {
-				_cache[dictName] = undefined;
-			}
-			delete _UITable[comp];
-			delete _cacheDictTable[comp];
-			
-		}
-		
-		/**
-		 @private
-		 (This property is for Squiggly Developer use only.)
-		 */
-		public static function get UITable():Dictionary {
-			return _UITable;
-		}
-		
-		/**
-		 @private
-		 (This property is for Squiggly Developer use only.)
-		 */
-		public function set spellingEnabled(value:Boolean):void {
-			_spellingEnabled = value;
-		}
-		
-		/**
-		 @private
-		 (This property is for Squiggly Developer use only.)
-		 */
-		public static function get parentComp():Dictionary {
-			return _parentTable;
-		}
-		
-				
-		/**
-		 * Constructs a SpellUI object.
-		 *  @private
-		 *	@param	textFiled	A Flex UI component to include spell-check capability
-		 *	@param	dict		A URL for Squiggly spelling dictionary.
-		 *
-		 * @playerversion Flash 10
-		 * @langversion 3.0
-		 */			
-		public function SpellUIForTLF(textModel:TextFlow, lang:String)
-		{		
-		
-			_actualParent = textModel;
-			mTextFlow = textModel;					
-			
-			mTextFlow.addEventListener(flashx.textLayout.events.CompositionCompleteEvent.COMPOSITION_COMPLETE, spellCheckScreen,false, 0,true);
-			//mTextFlow.addEventListener(flashx.textLayout.events.StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE, spellCheckScreen);
-			
-			_dictname = lang;			
-			loadConfig();			
-		}
-		
-		private function spellCheckScreen(event:Event):void
-		{
-			doSpellingJob();
-		}
-		
-				
-		/**
-		 @private
-		 (This property is for Squiggly Developer use only.)
-		 */		
-		public function doSpellingJob():void
-		{
-			if (_spellingEnabled == false) return;
-			
-			hh.clearSquiggles();
-			for (var idx:int = 0; idx < mTextFlow.flowComposer.numControllers; idx++)
-			{
-				var testController:ContainerController = mTextFlow.flowComposer.getControllerAt(idx); 
-				//if (getValidFirstWordIndexTLF(testController) != -1) 
-					spellCheckRangeTLF(getValidFirstWordIndexTLF(testController), getValidLastWordIndexTLF(testController));
-			}
-			
-		}
-			
-		
-		private function spellCheckRangeTLF(start:uint, end:uint):void {
-			var tokenizer:TextTokenizer;
-			//hh.clearSquiggles();
-			var tt:TextFlow = mTextFlow;
-			//var currentLeaf:FlowLeafElement = tt.getFirstLeaf();
-			var currentLeaf:FlowLeafElement = tt.findLeaf(start);
-			var currentParagraph:ParagraphElement = currentLeaf ? currentLeaf.getParagraph() : null;
-			while (currentParagraph) { // iterate over all paragraphs in the text flow
-				var paraStart:uint = currentParagraph.getAbsoluteStart();
-				if (paraStart > end)
-					break; 
-				
-				//var offsetPoint:Point = new Point(currentParagraph.paddingLeft, currentParagraph.paddingTop); 
-				//hh.offsetPoint = offsetPoint;
-				tokenizer = new TextTokenizer(currentParagraph.getText().substring());
-				//var tokens:Vector.<Token> = new Vector.<Token>();
-				
-				for ( var token:Token = tokenizer.getFirstToken(); token != tokenizer.getLastToken(); token= tokenizer.getNextToken(token) ) {
-					var result:Boolean=_spellingservice.checkWord(currentParagraph.getText().substring(token.first, token.last));					
-					if (!result){
-						//if (_checkLastWord || (token.last+paraStart != currentParagraph.getText().length))
-							//hh.highlightWord(token.first+start, token.last+start-1);
-							//tokens.push(new Token(token.first+start, token.last+start-1));
-							hh.drawSquiggleAt(new Token(token.first+paraStart, token.last+paraStart-1));
-					}
-					
-				}
-				currentParagraph = currentParagraph.getNextParagraph();
-				
-			}
-			//hh.postSpellCheckRange(start, end);
-			//hh.offsetPoint = offsetPoint;
-			//hh.drawSquiggles(tokens);
-		}
-		private function getValidFirstWordIndexTLF(containerController:ContainerController):int{			
-			var index:int;
-					
-			// Check for computeSelectionIndexInContainer which throws when lineindex == 0
-			try {
-				//index = SelectionManager.computeSelectionIndex(mTextFlow, containerController.container, containerController.container, 0 + containerController.horizontalScrollPosition, 0 + containerController.verticalScrollPosition);
-				// SelectionManager.computeSelectionIndex() sometimes gives index as -1. in the same scenarios below logic works better 
-				var tl:TextFlowLine = containerController.getFirstVisibleLine();
-				var firstVisiblePosition:int = tl.absoluteStart;
-				index = firstVisiblePosition;
-				
-			} catch (err:Error)
-			{
-				//TODO: report error
-				index = 0;
-			}
-				
-			return index;
-		}
-		
-		private function getValidLastWordIndexTLF(containerController:ContainerController):int{			
-			var index:int;
-			
-			// Check for computeSelectionIndexInContainer which throws when lineindex == 0
-			try {
-				//index = SelectionManager.computeSelectionIndex(mTextFlow, containerController.container, containerController.container, containerController.container.width+containerController.horizontalScrollPosition, containerController.container.height+containerController.verticalScrollPosition);
-				var tl:TextFlowLine = containerController.getLastVisibleLine();
-				var lastVisiblePosition:int = tl.absoluteStart + tl.textLength;
-				index = lastVisiblePosition;
-			} catch (err:Error)
-			{
-				//TODO: report error
-				index = 0;
-			}
-				
-			return index;
-		}
-		
-
-		private function loadConfig():void{
-			_resource_locale = SpellingConfiguration.resourceTable.getResource(_dictname);
-			
-			if ((_resource_locale != null) || (SpellUIForTLF._configXML != null)) 
-				loadConfigComplete(null);
-			else {	
-				SpellUIForTLF._configXMLLoader.addEventListener(Event.COMPLETE, loadConfigComplete);
-			
-				if (SpellUIForTLF._configXMLLoading == false)
-				{
-					SpellUIForTLF._configXMLLoader.load(new URLRequest(_spellingConfigUrl));
-					SpellUIForTLF._configXMLLoading = true;
-				}
-			}
-		}
-		
-		private function loadConfigComplete(evt:Event):void{
-			if (_resource_locale == null) {
-			if (SpellUIForTLF._configXML == null)
-				SpellUIForTLF._configXML= new XML(evt.target.data);
-			
-				SpellingConfiguration.resourceTable.setResource(_dictname,{rule:SpellUIForTLF._configXML.LanguageResource.(@languageCode==_dictname).@ruleFile, 
-																		dict:SpellUIForTLF._configXML.LanguageResource.(@languageCode==_dictname).@dictionaryFile});
-		}
-                //New Added
-			_spellingservice = new SpellingService(_dictname);
-			_spellingservice.addEventListener(Event.COMPLETE, loadDictComplete);
-			_spellingservice.init();
-		}
-		
-				
-				
-		
-		private function loadDictComplete(evt:Event):void
-		{					
-			//_newchecker = new SpellChecker(_hundict);
-			
-			// Lazy loading the UD only when the main dict is loaded successfully
-			if ((SpellUIForTLF._cache["Squiggly_UD"] as UserDictionary) == null)
-			{
-				_sharedobj = SharedObject.getLocal("Squiggly_v03");
-				var vec:Vector.<String> = new Vector.<String>();
-				if (_sharedobj.data.ud) {
-					for each (var w:String in _sharedobj.data.ud)
-					vec.push(w);
-				}
-				_userdict = new UserDictionary(vec);
-				
-				SpellUIForTLF._cache["Squiggly_SO"] = _sharedobj;
-				SpellUIForTLF._cache["Squiggly_UD"] = _userdict;
-			}
-			else 
-			{
-				_sharedobj = SpellUIForTLF._cache["Squiggly_SO"];
-				_userdict = SpellUIForTLF._cache["Squiggly_UD"];
-			}
-			_spellingservice.addUserDictionary(_userdict);
-			
-			
-			// Add the context menu, this might be not successful
-			scm = null;
-			try {
-				addContextMenu(null);
-			}
-			catch (err:Error)
-			{
-				// TODO: error handling here
-			}
-			_actualParent.addEventListener(Event.ADDED_TO_STAGE, addContextMenu);
-		}
-		
-		
-		private function addContextMenu(event:Event):void
-		{
-			if ( scm != null ) return;
-			
-			hh = new TLFHighlighter( _actualParent);
-			hw = new TLFWordProcessor( _actualParent);	
-						
-			scm =  new SpellingContextMenuForTLF(hh, hw, _spellingservice, _actualParent, addWordToUserDictionary); 
-			//scm.setIgnoreWordCallback( addWordToUserDictionary );
-			
-			// Halo need this
-			//if (_actualParent.contextMenu == null)
-			//{
-				//_actualParent.contextMenu = scm.contextMenu;
-			//}
-			
-			//hh.spellingEnabled=true;
-			_spellingEnabled = true;
-			try {
-				doSpellingJob();
-			}
-			catch (err:Error)
-			{
-				// If it fails here, it should later triggered by the render event, so no need to do anything
-			}
-		}
-		
-		private function addWordToUserDictionary(word:String):void
-		{
-			_userdict.addWord(word);
-		
-			// TODO: serialization here might affect ther performance
-			_sharedobj.data.ud = _userdict.wordList;
-			
-		}
-		/**
-		 *	@private
-		 */
-		private function cleanUp():void {
-			hh.clearSquiggles();
-			scm.cleanUp();
-			_actualParent.removeEventListener(Event.ADDED_TO_STAGE, addContextMenu);
-			
-			mTextFlow.removeEventListener(flashx.textLayout.events.CompositionCompleteEvent.COMPOSITION_COMPLETE, spellCheckScreen);
-			//mTextFlow.removeEventListener(flashx.textLayout.events.StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE, spellCheckScreen);
-		}
-		
-	}
-}

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingUITLF/src/com/adobe/linguistics/spelling/SpellingContextMenuForTLF.as
----------------------------------------------------------------------
diff --git a/Squiggly/main/AdobeSpellingUITLF/src/com/adobe/linguistics/spelling/SpellingContextMenuForTLF.as b/Squiggly/main/AdobeSpellingUITLF/src/com/adobe/linguistics/spelling/SpellingContextMenuForTLF.as
deleted file mode 100644
index ccc3c78..0000000
--- a/Squiggly/main/AdobeSpellingUITLF/src/com/adobe/linguistics/spelling/SpellingContextMenuForTLF.as
+++ /dev/null
@@ -1,249 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  Licensed to the Apache Software Foundation (ASF) under one or more
-//  contributor license agreements.  See the NOTICE file distributed with
-//  this work for additional information regarding copyright ownership.
-//  The ASF licenses this file to You under the Apache License, Version 2.0
-//  (the "License"); you may not use this file except in compliance with
-//  the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-//  Unless required by applicable law or agreed to in writing, software
-//  distributed under the License is distributed on an "AS IS" BASIS,
-//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//  See the License for the specific language governing permissions and
-//  limitations under the License.
-//
-////////////////////////////////////////////////////////////////////////////////
-
-package com.adobe.linguistics.spelling
-{
-	import com.adobe.linguistics.spelling.SpellUIForTLF;
-	import com.adobe.linguistics.spelling.SquigglyCustomContainerController;
-	import com.adobe.linguistics.spelling.framework.SpellingService;
-	import com.adobe.linguistics.spelling.ui.IHighlighter;
-	import com.adobe.linguistics.spelling.ui.IWordProcessor;
-	import com.adobe.linguistics.spelling.ui.TLFHighlighter;
-	import com.adobe.linguistics.spelling.ui.TLFWordProcessor;
-	import com.adobe.linguistics.utils.TextTokenizer;
-	import com.adobe.linguistics.utils.Token;
-	
-	import flash.events.ContextMenuEvent;
-	import flash.events.Event;
-	import flash.events.EventDispatcher;
-	import flash.geom.Point;
-	import flash.geom.Rectangle;
-	import flash.ui.ContextMenu;
-	import flash.ui.ContextMenuItem;
-	import flash.utils.describeType;
-	import flash.utils.getQualifiedClassName;
-		
-	import flashx.textLayout.compose.StandardFlowComposer;
-	import flashx.textLayout.compose.TextFlowLine;
-	import flashx.textLayout.container.ContainerController;
-	import flashx.textLayout.conversion.TextConverter;
-	import flashx.textLayout.edit.SelectionManager;
-	import flashx.textLayout.elements.FlowLeafElement;
-	import flashx.textLayout.elements.ParagraphElement;
-	import flashx.textLayout.elements.TextFlow;
-	import flashx.textLayout.events.CompositionCompleteEvent;
-	import flashx.textLayout.events.StatusChangeEvent;
-	import flashx.textLayout.tlf_internal;
-	
-	
-	use namespace tlf_internal;	
-	
-	public class SpellingContextMenuForTLF
-	{
-		private var disableMenuItem:ContextMenuItem = new ContextMenuItem("Disable spell checking",true);
-		private var enableMenuItem:ContextMenuItem = new ContextMenuItem("Enable spell checking");		
-		
-		private var controlMenuItemList:Array = new Array();
-		private var suggestionMenuItemList:Array = new Array();
-		private var _spellingEnabled:Boolean;
-		private var _contextMenu:ContextMenu;
-		private var mTextHighlighter:IHighlighter;
-		private var mWordProcessor:IWordProcessor;
-		private var mSpellEngine:SpellingService;
-		private var mTextFlow:TextFlow;
-		private var _ignoreWordFunctionProcessor:Function;
-		private var _misspelledToken:Token;
-		private var _misspelled:String;
-		public function SpellingContextMenuForTLF(textHighlighter:IHighlighter, wordProcessor:IWordProcessor, engine:SpellingService, actualParent:*, func:Function)
-		{
-			
-			if ( textHighlighter == null || wordProcessor == null ||  engine == null) throw new Error("illegal argument."); 
-			mTextHighlighter = textHighlighter;
-			mWordProcessor = wordProcessor;
-			mSpellEngine = engine;
-			mTextFlow = actualParent;
-			
-			
-			var numControllers:int = mTextFlow.flowComposer.numControllers;
-			for (var idx:int = 0; idx < numControllers; idx++)
-			{	
-				var containerController:ContainerController = mTextFlow.flowComposer.getControllerAt(idx);
-				var squigglyContainerController:SquigglyCustomContainerController = new SquigglyCustomContainerController(containerController.container, mTextHighlighter, mWordProcessor, 
-																								mSpellEngine, func, containerController.compositionWidth, containerController.compositionHeight);	
-				copyObject(containerController, squigglyContainerController);
-				mTextFlow.flowComposer.removeController(containerController);
-				containerController = null; // make it null so that the associated memory is garbage collected
-				mTextFlow.flowComposer.addControllerAt(squigglyContainerController, idx);
-				
-			}
-			mTextFlow.flowComposer.updateAllControllers();
-			
-			
-			spellingEnabled = true; //default value
-			//spellingEnabled= mTextHighlighter.spellingEnabled;
-			
-			_ignoreWordFunctionProcessor=null;
-		}
-		
-		/**
-		 * copies a source object to a destination object
-		 * @param sourceObject the source object
-		 * @param destinationObject the destination object
-		 *
-		 */
-		private function copyObject(sourceObject:ContainerController, destinationObject:SquigglyCustomContainerController):void
-		{
-			// check if the objects are not null
-			if((sourceObject) && (destinationObject)) {
-				try
-				{
-					//retrive information about the source object via XML
-					var sourceInfo:XML = describeType(sourceObject);
-					var objectProperty:XML;
-					var propertyName:String;
-					
-					// loop through the properties
-					for each(objectProperty in sourceInfo.variable)
-					{
-						propertyName = objectProperty.@name;
-						if(sourceObject[objectProperty.@name] != null)
-						{
-							if(destinationObject.hasOwnProperty(objectProperty.@name)) {
-								destinationObject[objectProperty.@name] = sourceObject[objectProperty.@name];
-							}
-						}
-					}
-					//loop through the accessors
-					for each(objectProperty in sourceInfo.accessor) {
-						if(objectProperty.@access == "readwrite") {
-							propertyName = objectProperty.@name;
-							if(sourceObject[objectProperty.@name] != null)
-							{
-								if(destinationObject.hasOwnProperty(objectProperty.@name)) {
-									destinationObject[objectProperty.@name] = sourceObject[objectProperty.@name];
-								}
-							}
-						}
-					}
-				}
-				catch (err:*) {
-					;
-				}
-			}
-		}
-		
-		public function cleanUp():void
-		{
-			mTextHighlighter=null;
-			mWordProcessor=null;
-			spellingEnabled = false;
-			_ignoreWordFunctionProcessor=null;
-			
-			var numControllers:int = mTextFlow.flowComposer.numControllers;
-			for (var idx:int = 0; idx < numControllers; idx++)
-			{	
-				 //if (getQualifiedClassName(mTextFlow.flowComposer.getControllerAt(idx)) == "SquigglyCustomContainerController"){
-					 var containerController:ContainerController = mTextFlow.flowComposer.getControllerAt(idx);
-					 //Use try-catch incase some controller not of type SquigglyCustomContainerController comes across
-					 try {
-					 (containerController as SquigglyCustomContainerController).cleanUpContextMenu();
-					 }
-					 catch (err:Error)
-					 {
-						 // TODO: error handling here
-					 }
-				 //}
-				
-			}
-			
-		}
-		
-		public function get contextMenu():ContextMenu {
-			return this._contextMenu;
-		}
-		
-		public function setIgnoreWordCallback(func:Function ) :void {
-			if ( func != null )
-			_ignoreWordFunctionProcessor = func;
-		}
-		
-		private function handleAddToItemSelect(event:ContextMenuEvent):void
-		{
-			if ( _ignoreWordFunctionProcessor == null ) return;
-			
-			/*
-			var menuEntry:String = (event.currentTarget as ContextMenuItem).caption;
-			var start:uint = 5;
-			var end:uint = menuEntry.length - 15;
-			var word:String = menuEntry.substring(start, end);
-			*/
-			_ignoreWordFunctionProcessor(_misspelled);
-			SpellUIForTLF.UITable[SpellUIForTLF.parentComp[mTextFlow]].doSpellingJob();
-		}
-
-		private function isWordItem(item:ContextMenuItem):Boolean {
-			
-			for ( var i:int=0; i<suggestionMenuItemList.length; ++i ) {
-				if ( suggestionMenuItemList[i] == item ) return true;
-			}
-			return false;
-		}
-		
-		private function isControlItem(item:ContextMenuItem):Boolean {
-			for (var i:int=0; i<controlMenuItemList.length; ++i) {
-				if ( controlMenuItemList[i] == item) return true;
-			}
-			return false;
-		}
-
-		private function handleSuseItemSelect(event:ContextMenuEvent):void
-		{
-			mWordProcessor.replaceText(_misspelledToken, (event.currentTarget as ContextMenuItem).caption );
-			SpellUIForTLF.UITable[SpellUIForTLF.parentComp[mTextFlow]].doSpellingJob();
-		}
-
-		
-		private function set spellingEnabled(value:Boolean) :void {
-			_spellingEnabled = value;
-			disableMenuItem.visible=spellingEnabled;
-			enableMenuItem.visible=!spellingEnabled;
-		}
-		private function get spellingEnabled():Boolean {
-			return this._spellingEnabled;
-		}
-		private function handleEnableSpellCheck(event:ContextMenuEvent):void
-		{
-			spellingEnabled= true;
-			//mTextHighlighter.spellingEnabled= spellingEnabled;
-			//SpellUI.doSpellingJob();
-			//dispatchEvent(new Event(Event.RENDER));
-			
-			SpellUIForTLF.UITable[SpellUIForTLF.parentComp[mTextFlow]].spellingEnabled = spellingEnabled;
-			SpellUIForTLF.UITable[SpellUIForTLF.parentComp[mTextFlow]].doSpellingJob();
-			//spellCheckRange(getValidFirstWordIndex(), getValidLastWordIndex());
-		}
-		private function handleDisableSpellCheck(event:ContextMenuEvent):void
-		{
-			spellingEnabled= false;
-			SpellUIForTLF.UITable[SpellUIForTLF.parentComp[mTextFlow]].spellingEnabled = spellingEnabled;
-			mTextHighlighter.clearSquiggles();
-		}
-				
-	}
-}