1//////////////////////////////////////////////////////////////////////////////// 2// 3// ADOBE SYSTEMS INCORPORATED 4// Copyright 2007-2010 Adobe Systems Incorporated 5// All Rights Reserved. 6// 7// NOTICE: Adobe permits you to use, modify, and distribute this file 8// in accordance with the terms of the license agreement accompanying it. 9// 10//////////////////////////////////////////////////////////////////////////////// 11package flashx.textLayout.edit 12{ 13 import flashx.textLayout.debug.Debugging; 14 import flashx.textLayout.debug.assert; 15 import flashx.textLayout.elements.TextFlow; 16 import flashx.textLayout.elements.FlowElement; 17 import flashx.textLayout.elements.FlowGroupElement; 18 19 import flashx.textLayout.tlf_internal; 20 use namespace tlf_internal; 21 22 [ExcludeClass] 23 /** @private - Marks an element by its position in the hierarchy. */ 24 public class ElementMark 25 { 26 /** @private */ 27 tlf_internal var _elemStart:int; 28 /** @private */ 29 tlf_internal var _indexChain:Array; 30 CONFIG::debug { private var _originalElement:String; } 31 32 public function ElementMark(elem:FlowElement,relativeStartPosition:int) 33 { 34 _elemStart = relativeStartPosition; 35 _indexChain = []; 36 37 CONFIG::debug { var origElem:FlowElement = elem; } 38 CONFIG::debug { _originalElement = Debugging.getIdentity(origElem); } 39 40 var p:FlowGroupElement = elem.parent; 41 while (p != null) 42 { 43 _indexChain.splice(0,0,p.getChildIndex(elem)); 44 elem = p; 45 p = p.parent; 46 } 47 48 CONFIG::debug { 49 var foundElem:FlowElement = findElement(origElem.getTextFlow()); 50 assert(origElem == findElement(origElem.getTextFlow()),"Bad ElementMarker"); 51 } 52 } 53 54 public function get elemStart():int 55 { return _elemStart; } 56 57 public function findElement(textFlow:TextFlow):FlowElement 58 { 59 var element:FlowElement = textFlow; 60 for each (var idx:int in _indexChain) 61 element = (element as FlowGroupElement).getChildAt(idx); 62 63 CONFIG::debug { assert(element != null,"ElementMarker:findElement No element found"); } 64 65 return element; 66 } 67 } 68}