You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ha...@apache.org on 2014/10/06 07:11:22 UTC

git commit: [flex-tlf] [refs/heads/tables] - Added missing files

Repository: flex-tlf
Updated Branches:
  refs/heads/tables 33df98ab9 -> a0a0749ea


Added missing files


Project: http://git-wip-us.apache.org/repos/asf/flex-tlf/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-tlf/commit/a0a0749e
Tree: http://git-wip-us.apache.org/repos/asf/flex-tlf/tree/a0a0749e
Diff: http://git-wip-us.apache.org/repos/asf/flex-tlf/diff/a0a0749e

Branch: refs/heads/tables
Commit: a0a0749eab37bd5284b1cf56fed780ecd5ed1bfb
Parents: 33df98a
Author: Harbs <ha...@in-tools.com>
Authored: Mon Oct 6 08:11:15 2014 +0300
Committer: Harbs <ha...@in-tools.com>
Committed: Mon Oct 6 08:11:15 2014 +0300

----------------------------------------------------------------------
 .../textLayout/compose/TextFlowTableBlock.as    | 215 +++++++++
 .../src/flashx/textLayout/edit/SelectionType.as |  30 ++
 .../textLayout/elements/CellCoordinates.as      |  89 ++++
 .../src/flashx/textLayout/elements/CellRange.as | 147 +++++++
 .../textLayout/elements/TableBlockContainer.as  |  31 ++
 .../textLayout/elements/TableCellElement.as     | 434 +++++++++++++++++++
 .../textLayout/elements/TableLeafElement.as     | 120 +++++
 .../textLayout/formats/ITextLayoutFormat.as     |  88 +++-
 .../textLayout/formats/TextLayoutFormat.as      | 174 +++++++-
 .../textLayout/formats/TextLayoutFormatInc.as   | 141 ++++++
 10 files changed, 1467 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/a0a0749e/textLayout/src/flashx/textLayout/compose/TextFlowTableBlock.as
----------------------------------------------------------------------
diff --git a/textLayout/src/flashx/textLayout/compose/TextFlowTableBlock.as b/textLayout/src/flashx/textLayout/compose/TextFlowTableBlock.as
new file mode 100644
index 0000000..b5e3329
--- /dev/null
+++ b/textLayout/src/flashx/textLayout/compose/TextFlowTableBlock.as
@@ -0,0 +1,215 @@
+package flashx.textLayout.compose
+{
+	
+	import flash.text.engine.TextLine;
+	
+	import flashx.textLayout.container.ContainerController;
+	import flashx.textLayout.elements.CellContainer;
+	import flashx.textLayout.elements.CellCoordinates;
+	import flashx.textLayout.elements.ParagraphElement;
+	import flashx.textLayout.elements.TableBlockContainer;
+	import flashx.textLayout.elements.TableCellElement;
+	import flashx.textLayout.elements.TableElement;
+	import flashx.textLayout.elements.TextFlow;
+	import flashx.textLayout.tlf_internal;
+	
+	use namespace tlf_internal;
+
+	/**
+	 * 
+	 **/
+	public class TextFlowTableBlock extends TextFlowLine
+	{
+		
+		private var _textHeight:Number;
+		
+		/** Constructor - creates a new TextFlowTableBlock instance. 
+		 *  <p><strong>Note</strong>: No client should call this. It's exposed for writing your own composer.</p>
+		 *
+		 * @param index The index in the Table text flow.
+		 * */
+		public function TextFlowTableBlock(index:uint)
+		{
+			blockIndex = index;
+			_container = new TableBlockContainer();
+			super(null,null);
+		}
+		
+		/**
+		 * @inheritDoc
+		 **/
+		override tlf_internal function initialize(paragraph:ParagraphElement, outerTargetWidth:Number = 0, lineOffset:Number = 0, absoluteStart:int = 0, numChars:int = 0, textLine:TextLine = null):void
+		{
+			_container.userData = this;
+			_lineOffset = lineOffset;
+
+			super.initialize(paragraph, outerTargetWidth, lineOffset, absoluteStart, numChars, textLine);
+		}
+		override tlf_internal function setController(cont:ContainerController,colNumber:int):void
+		{
+			super.setController(cont, colNumber);
+			if(cont)
+				controller.addComposedTableBlock(container);
+		}
+
+		
+		/**
+		 * The table that owns this table block
+		 **/
+		public var parentTable:TableElement;
+		
+		/**
+		 * The index of this block in the table text flow layout
+		 **/
+		public var blockIndex:uint = 0;
+		
+		/**
+		 * @private
+		 **/
+		private var _container:TableBlockContainer;
+		
+		private var _cells:Array;
+		
+		/**
+		 * Returns an array of table cells. 
+		 * @private
+		 **/
+		private function getCells():Array{
+			if(_cells == null){
+				_cells = [];
+			}
+			return _cells;
+		}
+		
+		/**
+		 * Returns a vector of table cell elements in the given cell range. 
+		 **/
+		public function getCellsInRange(anchorCoords:CellCoordinates,activeCoords:CellCoordinates):Vector.<TableCellElement>
+		{
+			if(!parentTable)
+				return null;
+			return parentTable.getCellsInRange(anchorCoords,activeCoords,this);
+		}
+		
+		/**
+		 * Clears the cells in the table block. Wraps clearCells(). 
+		 **/
+		public function clear():void{
+			clearCells();
+		}
+		
+		/**
+		 * Clears the cells in the table block
+		 **/
+		public function clearCells():void{
+			_container.removeChildren();
+			getCells().length = 0;
+		}
+		
+		/**
+		 * Adds a cell container to table container. This adds it to the display list. 
+		 * If the cell is already added it does not add it twice. 
+		 **/
+		public function addCell(cell:CellContainer):void{
+			var cells:Array = getCells();
+			if(cells.indexOf(cell) < 0){
+				cells.push(cell);
+				_container.addChild(cell);
+			}
+		}
+		
+		
+		public function drawBackground(backgroundInfo:*):void{
+			//TODO: need to figure this out...
+			
+		}
+		
+		/**
+		 * Container that displays this collection of cells
+		 **/
+		public function get container():TableBlockContainer
+		{
+			return _container;
+		}
+		
+		/**
+		 * Triggers drawing of composed cell contents
+		 **/
+		public function updateCompositionShapes():void{
+			var cells:Array = getCells();
+			for each(var cell:CellContainer in cells){
+				cell.element.updateCompositionShapes();
+			}
+		}
+
+		/**
+		 * Sets the height of the container 
+		 **/
+		public function set height(value:Number):void{
+			//_container.height = value;
+			_textHeight = value;
+		}
+		
+		/**
+		 * @inheritDoc
+		 **/
+		override public function get height():Number{
+			return _textHeight;
+		}
+		/**
+		 * Sets the width of the container 
+		 **/
+		public function set width(value:Number):void{
+			_container.width = value;
+		}
+		
+		/**
+		 * Gets the width of the container 
+		 **/
+		public function get width():Number{
+			return _container.width;
+		}
+		
+		/**
+		 * Sets the x position of the container
+		 **/
+		override public function set x(value:Number):void{
+			super.x = _container.x = value;
+		}
+		
+		override public function get x():Number{
+			return _container.x;
+		}
+		
+		/**
+		 * Sets the y value of the container
+		 **/
+		override public function set y(value:Number):void{
+			super.y = _container.y = value;
+		}
+		override public function get y():Number{
+			return _container.y;
+		}
+		
+		/**
+		 * Returns a vector of table cell elements.
+		 **/
+		public function getTableCells():Vector.<TableCellElement>
+		{
+			var tCells:Vector.<TableCellElement> = new Vector.<TableCellElement>();
+			var cells:Array = getCells();
+			
+			for each(var cellContainer:CellContainer in cells){
+				tCells.push(cellContainer.element);
+			}
+			
+			return tCells;
+		}
+
+		public override function get textHeight():Number
+		{
+			return _textHeight;
+		}
+
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/a0a0749e/textLayout/src/flashx/textLayout/edit/SelectionType.as
----------------------------------------------------------------------
diff --git a/textLayout/src/flashx/textLayout/edit/SelectionType.as b/textLayout/src/flashx/textLayout/edit/SelectionType.as
new file mode 100644
index 0000000..7188bb8
--- /dev/null
+++ b/textLayout/src/flashx/textLayout/edit/SelectionType.as
@@ -0,0 +1,30 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flashx.textLayout.edit
+{
+	public class SelectionType
+	{
+		public static const TEXT:String = "text";
+		public static const CELLS:String = "cells";
+		public static const NONE:String = "none";
+		public function SelectionType()
+		{
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/a0a0749e/textLayout/src/flashx/textLayout/elements/CellCoordinates.as
----------------------------------------------------------------------
diff --git a/textLayout/src/flashx/textLayout/elements/CellCoordinates.as b/textLayout/src/flashx/textLayout/elements/CellCoordinates.as
new file mode 100644
index 0000000..d28a100
--- /dev/null
+++ b/textLayout/src/flashx/textLayout/elements/CellCoordinates.as
@@ -0,0 +1,89 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flashx.textLayout.elements
+{
+	/**
+	 * Describes the location of table cell by row and column 
+	 **/
+	public class CellCoordinates
+	{
+		private var _column:int;
+		private var _row:int;
+		
+		/**
+		 * @constructor
+		 **/
+		public function CellCoordinates(row:int, column:int, table:TableElement = null)
+		{
+			_row = row;
+			_column = column;
+			this.table = table;
+		}
+
+		/**
+		 * The column the cell belongs to
+		 **/
+		public function get column():int
+			{return _column;}
+		
+		/**
+		 * @private
+		 **/
+		public function set column(value:int):void
+			{_column = value;}
+
+		/**
+		 * The row the cell belongs to
+		 **/
+		public function get row():int
+			{return _row;}
+		
+		/**
+		 * @private
+		 **/
+		public function set row(value:int):void
+			{_row = value;}
+		
+		/**
+		 * Checks if two coordiates are in the same location
+		 **/
+		public static function areEqual(coords1:CellCoordinates, coords2:CellCoordinates):Boolean
+		{
+			return coords1.row == coords2.row && coords1.column == coords2.column;
+		}
+		
+		/**
+		 * Returns true if the column and row are greater than -1
+		 **/
+		public function isValid():Boolean
+		{
+			return column > -1 && row > -1;
+		}
+		
+		/**
+		 * Creates a new CellCoordinates with the same row and column values
+		 **/
+		public function clone():CellCoordinates
+		{
+			return new CellCoordinates(row, column);
+		}
+
+		public var table:TableElement;
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/a0a0749e/textLayout/src/flashx/textLayout/elements/CellRange.as
----------------------------------------------------------------------
diff --git a/textLayout/src/flashx/textLayout/elements/CellRange.as b/textLayout/src/flashx/textLayout/elements/CellRange.as
new file mode 100644
index 0000000..27e8490
--- /dev/null
+++ b/textLayout/src/flashx/textLayout/elements/CellRange.as
@@ -0,0 +1,147 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flashx.textLayout.elements
+{
+	import flashx.textLayout.tlf_internal;
+	
+	use namespace tlf_internal;
+	
+	/**
+	 * A read only class that describes a range of contiguous table cells. Such a range occurs when you select a
+	 * section of table cells. The range consists of the anchor point of the selection, <code>anchorPosition</code>,
+	 * and the point that is to be modified by actions, <code>activePosition</code>.  As block selections are 
+	 * modified and extended <code>anchorPosition</code> remains fixed and <code>activePosition</code> is modified.  
+	 * The anchor position may be placed in the text before or after the active position.
+	 * @playerversion Flash 10
+	 * @playerversion AIR 1.5
+	 * @langversion 3.0
+	 *
+	 * @see flashx.textLayout.elements.TextFlow TextFlow
+	 * @see flashx.textLayout.edit.SelectionState SelectionState
+	 */
+	public class CellRange
+	{
+		
+		private var _table:TableElement
+		
+		// current range of selection
+		private var _anchorCoords:CellCoordinates;
+		private var _activeCoords:CellCoordinates;
+		
+		/**
+		 * Limits the row and column values to 0 or the number of rows or column. 
+		 **/
+		private function clampToRange(coords:CellCoordinates):CellCoordinates
+		{
+			if(coords == null)
+				return null;
+			if (coords.row < 0)
+				coords.row = 0;
+			if (coords.row >= _table.numRows)
+				coords.row = _table.numRows-1;
+			if (coords.column < 0)
+				coords.column = 0;
+			if (coords.column >= _table.numColumns)
+				coords.column = _table.numColumns-1;
+			return coords;
+		}
+
+		public function CellRange(table:TableElement, anchorCoords:CellCoordinates, activeCoords:CellCoordinates)
+		{
+			_table = table;
+			_anchorCoords = clampToRange(anchorCoords);
+			_activeCoords = clampToRange(activeCoords);
+			
+		}
+		
+		/** 
+		 * Update the range with new anchor or active position values.
+		 *
+		 * @playerversion Flash 10
+		 * @playerversion AIR 1.5
+		 * @langversion 3.0
+		 *  @param newAnchorPosition	the anchor index of the selection.
+		 *  @param newActivePosition	the active index of the selection.
+		 *  @return true if selection is changed.
+		 */
+		public function updateRange(newAnchorCoordinates:CellCoordinates, newActiveCoordinates:CellCoordinates):Boolean
+		{
+			clampToRange(newAnchorCoordinates);
+			clampToRange(newActiveCoordinates);
+			
+			if (!CellCoordinates.areEqual(_anchorCoords, newAnchorCoordinates) || !CellCoordinates.areEqual(_activeCoords, newActiveCoordinates))
+			{
+				_anchorCoords = newAnchorCoordinates;
+				_activeCoords = newActiveCoordinates;
+				return true;
+			}
+			return false;
+		}
+
+		/** The TableElement of the selection.
+		 */
+		public function get table():TableElement
+		{
+			return _table;
+		}
+
+		/**
+		 * @private
+		 */
+		public function set table(value:TableElement):void
+		{
+			_table = value;
+		}
+
+		/** 
+		 * Anchor point of the current selection, as a CellCoordinates in the TableElement. 
+		 */
+		public function get anchorCoordinates():CellCoordinates
+		{
+			return _anchorCoords;
+		}
+
+		/**
+		 * @private
+		 */
+		public function set anchorCoordinates(value:CellCoordinates):void
+		{
+			_anchorCoords = value;
+		}
+
+		/** 
+		 * Active end of the current selection, as a CellCoordinates in the TableElement. 
+		 */
+		public function get activeCoordinates():CellCoordinates
+		{
+			return _activeCoords;
+		}
+
+		/**
+		 * @private
+		 */
+		public function set activeCoordinates(value:CellCoordinates):void
+		{
+			_activeCoords = value;
+		}
+
+
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/a0a0749e/textLayout/src/flashx/textLayout/elements/TableBlockContainer.as
----------------------------------------------------------------------
diff --git a/textLayout/src/flashx/textLayout/elements/TableBlockContainer.as b/textLayout/src/flashx/textLayout/elements/TableBlockContainer.as
new file mode 100644
index 0000000..d5aef05
--- /dev/null
+++ b/textLayout/src/flashx/textLayout/elements/TableBlockContainer.as
@@ -0,0 +1,31 @@
+package flashx.textLayout.elements
+{
+	import flash.display.Sprite;
+	
+	import flashx.textLayout.compose.TextFlowTableBlock;
+	
+	/**
+	 * The sprite that contains the table cells. 
+	 **/
+	public class TableBlockContainer extends Sprite
+	{
+		
+		public function TableBlockContainer()
+		{
+			super();
+		}
+		
+		/**
+		 * A reference to the TextFlowTableBlock
+		 **/
+		public var userData:TextFlowTableBlock;
+		public function getTableWidth():Number
+		{
+			if(!userData)
+				return NaN;
+			if(!userData.parentTable)
+				return NaN;
+			return userData.parentTable.width;
+		}
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/a0a0749e/textLayout/src/flashx/textLayout/elements/TableCellElement.as
----------------------------------------------------------------------
diff --git a/textLayout/src/flashx/textLayout/elements/TableCellElement.as b/textLayout/src/flashx/textLayout/elements/TableCellElement.as
new file mode 100644
index 0000000..7f04939
--- /dev/null
+++ b/textLayout/src/flashx/textLayout/elements/TableCellElement.as
@@ -0,0 +1,434 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 flashx.textLayout.elements
+{
+	import flash.display.Graphics;
+	import flash.display.Shape;
+	import flash.display.Sprite;
+	import flash.events.MouseEvent;
+	import flash.geom.Point;
+	import flash.text.engine.GraphicElement;
+	import flash.utils.getDefinitionByName;
+	import flash.utils.getQualifiedClassName;
+	
+	import flashx.textLayout.compose.TextFlowLine;
+	import flashx.textLayout.container.ContainerController;
+	import flashx.textLayout.edit.EditManager;
+	import flashx.textLayout.edit.IEditManager;
+	import flashx.textLayout.edit.ISelectionManager;
+	import flashx.textLayout.events.DamageEvent;
+	import flashx.textLayout.events.ModelChange;
+	import flashx.textLayout.formats.BlockProgression;
+	import flashx.textLayout.formats.Float;
+	import flashx.textLayout.tlf_internal;
+	import flashx.undo.UndoManager;
+	
+	use namespace tlf_internal;
+	
+	/** 
+	 * TableCellElement is an item in a TableElement. It most commonly contains one or more ParagraphElement objects.
+	 *
+	 * 
+	 * @playerversion Flash 10
+	 * @playerversion AIR 1.5
+	 * @langversion 3.0
+	 *
+	 */
+	public final class TableCellElement extends TableFormattedElement
+	{		
+		private var _x:Number;
+		private var _y:Number;
+		private var _width:Number;
+		private var _height:Number;
+
+		private var _parcelIndex:int;
+		private var _container:CellContainer;
+		private var _enableIME:Boolean = true;
+		private var _damaged:Boolean = true;
+		private var _controller:ContainerController;
+
+		private var _rowSpan:uint = 1;
+		private var _columnSpan:uint = 1;
+		private var _rowIndex:int = -1;
+		private var _colIndex:int = -1;
+		private var _includeDescentInCellBounds:Boolean;
+		
+		public function TableCellElement()
+		{
+			super();
+			_controller = new ContainerController(container,NaN,NaN);
+		}
+
+		/** @private */
+		override protected function get abstract():Boolean
+		{ return false; }
+		
+		/** @private */
+		tlf_internal override function get defaultTypeName():String
+		{ return "td"; }
+		
+		/** @private */
+		tlf_internal override function canOwnFlowElement(elem:FlowElement):Boolean
+		{// Table cells have no TLF children. Instead it contains its own TextFlow.
+			return (elem is FlowElement);
+		}
+
+		public function isDamaged():Boolean {
+			return _damaged;
+		}
+		
+		public function compose():Boolean {
+			var table:TableElement = getTable();
+			width = 0;
+			for(var i:int=0;i<columnSpan;i++)
+			{
+				if (table && table.getColumnAt(colIndex+i)) {
+					width += table.getColumnAt(colIndex+i).columnWidth;
+				}
+				
+			}
+			
+			_damaged = false;
+			_controller.paddingTop = getEffectivePaddingTop();
+			_controller.paddingBottom = getEffectivePaddingBottom();
+			_controller.paddingLeft = getEffectivePaddingLeft();
+			_controller.paddingRight = getEffectivePaddingRight();
+			
+			if (_textFlow && _textFlow.flowComposer) {
+				return _textFlow.flowComposer.compose();
+			}
+			
+			return false;
+		}
+		
+		public function update():Boolean
+		{
+			if(_textFlow && _textFlow.flowComposer){
+				return _textFlow.flowComposer.updateAllControllers();
+			}
+			return false;
+		}
+		
+		public function get parcelIndex():int
+		{
+			return _parcelIndex;
+		}
+		
+		public function set parcelIndex(value:int):void
+		{
+			_parcelIndex = value;
+		}
+		
+		public function get rowIndex():int
+		{
+			return _rowIndex;
+		}
+		
+		public function set rowIndex(value:int):void
+		{
+			_rowIndex = value;
+		}
+		
+		public function get colIndex():int
+		{
+			return _colIndex;
+		}
+		
+		public function set colIndex(value:int):void
+		{
+			_colIndex = value;
+		}
+		
+		protected var _textFlow:TextFlow;
+		
+		public function get textFlow():TextFlow {
+			
+			if (_textFlow == null) {
+				var flow:TextFlow = new TextFlow();
+				
+				if (table && table.getTextFlow() && table.getTextFlow().interactionManager is IEditManager) {
+					flow.interactionManager = new EditManager(IEditManager(_textFlow.interactionManager).undoManager);
+				}
+				else if(table && table.getTextFlow() && table.getTextFlow().interactionManager) {
+					var im:Class = getDefinitionByName(getQualifiedClassName(table.getTextFlow().interactionManager)) as Class;
+					flow.interactionManager = new im();
+				}
+				else {
+					flow.normalize();
+				}
+				
+				textFlow = flow;
+
+			}
+			
+			return _textFlow;
+		}
+		
+		public function set textFlow(value:TextFlow):void
+		{
+			if (_textFlow) {
+				_textFlow.removeEventListener(DamageEvent.DAMAGE, handleCellDamage);
+				_textFlow.flowComposer.removeAllControllers();
+			}
+			
+			_textFlow = value;
+			_textFlow.parentElement = this;
+			_textFlow.flowComposer.addController(_controller);
+			_textFlow.addEventListener(DamageEvent.DAMAGE, handleCellDamage);
+			
+		}
+		
+		public function get controller():ContainerController {
+			return _controller;
+		}
+		
+		private function handleCellDamage(ev:DamageEvent):void{
+			damage();
+		}
+
+		public function get enableIME():Boolean
+		{
+			return _enableIME;
+		}
+
+		public function set enableIME(value:Boolean):void
+		{
+			_enableIME = value;
+		}
+		
+		public function get container():CellContainer{
+			if(!_container){
+				_container = new CellContainer(enableIME);
+				_container.element = this;
+			}
+			
+			return _container;
+		}
+
+		/**
+		 * Gets the width.
+		 **/
+		public function get width():Number
+		{
+			return _width;
+		}
+
+		/**
+		 * @private
+		 **/
+		public function set width(value:Number):void
+		{
+			if(_width != value) {
+				_damaged = true;
+			}
+			
+			_width = value;
+			
+			_controller.setCompositionSize(_width, _controller.compositionHeight);
+		}
+		
+		/**
+		 * Returns the height of the cell. 
+		 **/
+		public function get height():Number
+		{
+			//return getRowHeight(); not sure if we should always use row height
+			return _height;
+		}
+
+		/**
+		 * @private
+		 **/
+		public function set height(value:Number):void
+		{
+			if (_height != value) {
+				_damaged = true;
+			}
+			
+			_height = value;
+			
+			_controller.setCompositionSize(_controller.compositionWidth, _height);
+		}
+		
+		public function getComposedHeight():Number
+		{
+			var descent:Number = 0;
+			if(!includeDescentInCellBounds)
+			{
+				if(_textFlow.flowComposer && _textFlow.flowComposer.numLines)
+				{
+					var lastLine:TextFlowLine = _textFlow.flowComposer.getLineAt(_textFlow.flowComposer.numLines-1);
+					if(lastLine)
+						descent = lastLine.descent;
+				}
+			}
+			return (_controller.getContentBounds().height - descent);
+		}
+		
+		public function getRowHeight():Number
+		{
+			return getRow() ? getRow().composedHeight : NaN;
+		}
+
+		public function get rowSpan():uint
+		{
+			return _rowSpan;
+		}
+
+		public function set rowSpan(value:uint):void
+		{
+			if(value >= 1)
+				_rowSpan = value;
+		}
+
+		public function get columnSpan():uint
+		{
+			return _columnSpan;
+		}
+
+		public function set columnSpan(value:uint):void
+		{
+			if(value >= 1)
+				_columnSpan = value;
+		}
+		
+		public function updateCompositionShapes():void{
+			_controller.updateCompositionShapes();
+		}
+		
+		/**
+		 * Return the row that this cell is part of or null 
+		 * if not part of a row.
+		 **/
+		public function getRow():TableRowElement
+		{
+			return table ? table.getRowAt(rowIndex) : null;
+		}
+		
+		/**
+		 * Returns the next cell in the table or null if not part of a
+		 * table or no cells exist after this cell.
+		 **/
+		public function getNextCell():TableCellElement {
+			return table ? table.getNextCell(this) : null;
+		}
+		
+		/**
+		 * Returns the previous cell in the table or null if not part of a
+		 * table or no cells exist before this cell.
+		 **/
+		public function getPreviousCell():TableCellElement {
+			return table ? table.getPreviousCell(this) : null;
+		}
+
+		public function get x():Number
+		{
+			return container.x;
+		}
+
+		public function set x(value:Number):void
+		{
+			container.x = value;
+		}
+
+		public function get y():Number
+		{
+			return container.y;
+		}
+
+		public function set y(value:Number):void
+		{
+			container.y = value;
+		}
+
+		public function damage():void
+		{
+			if (table) {
+				table.hasCellDamage = true;
+			}
+			
+			_damaged = true;
+		}
+		
+		/**
+		 * Adds in the table cell spacing, border stroke width. 
+		 * We may be able to set this value when the format changes. 
+		 * For now we just want to get it to work. 
+		 **/
+		public function getTotalPaddingWidth():Number {
+			var paddingAmount:Number = 0;
+			
+			// no textflow is no padding
+			if (!textFlow) {
+				return 0;
+			}
+			
+			if (table && table.cellSpacing!=undefined) {
+				paddingAmount += table.cellSpacing;
+			}
+			
+			if (textFlow.computedFormat.blockProgression == BlockProgression.RL) {
+				paddingAmount += Math.max(getEffectivePaddingTop() + getEffectivePaddingBottom(), getEffectiveBorderTopWidth() + getEffectiveBorderBottomWidth());
+			}
+			else {
+				paddingAmount += Math.max(getEffectivePaddingLeft() + getEffectivePaddingRight(), getEffectiveBorderLeftWidth() + getEffectiveBorderRightWidth());
+			}
+			
+			return paddingAmount;
+		}
+		
+		/**
+		 * Adds in the table cell spacing, border stroke height. 
+		 * We may be able to set this value when the format changes. 
+		 **/
+		public function getTotalPaddingHeight():Number {
+			var paddingAmount:Number = 0;
+			
+			// no textflow is no padding
+			if (!textFlow) {
+				return 0;
+			}
+			
+			if (table && table.cellSpacing!=undefined) {
+				paddingAmount += table.cellSpacing;
+			}
+			
+			if (textFlow.computedFormat.blockProgression == BlockProgression.RL) {
+				paddingAmount += Math.max(getEffectivePaddingLeft() + getEffectivePaddingRight(), getEffectiveBorderLeftWidth() + getEffectiveBorderRightWidth());
+			}
+			else {
+				paddingAmount += Math.max(getEffectivePaddingTop() + getEffectivePaddingBottom(), getEffectiveBorderTopWidth() + getEffectiveBorderBottomWidth());
+			}
+			
+			return paddingAmount;
+		}
+
+		public function get includeDescentInCellBounds():Boolean
+		{
+			return _includeDescentInCellBounds;
+		}
+
+		public function set includeDescentInCellBounds(value:Boolean):void
+		{
+			_includeDescentInCellBounds = value;
+		}
+
+		
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/a0a0749e/textLayout/src/flashx/textLayout/elements/TableLeafElement.as
----------------------------------------------------------------------
diff --git a/textLayout/src/flashx/textLayout/elements/TableLeafElement.as b/textLayout/src/flashx/textLayout/elements/TableLeafElement.as
new file mode 100644
index 0000000..44e62a4
--- /dev/null
+++ b/textLayout/src/flashx/textLayout/elements/TableLeafElement.as
@@ -0,0 +1,120 @@
+package flashx.textLayout.elements
+{
+	import flash.text.engine.ElementFormat;
+	import flash.text.engine.TextElement;
+	import flash.text.engine.TextLine;
+	
+	import flashx.textLayout.compose.BaseCompose;
+	import flashx.textLayout.compose.IFlowComposer;
+	import flashx.textLayout.compose.ISWFContext;
+	import flashx.textLayout.formats.ITextLayoutFormat;
+	import flashx.textLayout.tlf_internal;
+	
+	use namespace tlf_internal;
+	
+	public class TableLeafElement extends FlowLeafElement
+	{
+		private var _table:TableElement;
+		public function TableLeafElement(table:TableElement)
+		{
+			super();
+			_table = table;
+		}
+
+		/** @private */
+		override tlf_internal function createContentElement():void
+		{
+			// not sure if this makes sense...
+			if (_blockElement)
+				return;
+			
+			computedFormat;	// BEFORE creating the element
+			var flowComposer:IFlowComposer = getTextFlow().flowComposer;
+			var swfContext:ISWFContext = flowComposer && flowComposer.swfContext ? flowComposer.swfContext : BaseCompose.globalSWFContext;
+
+			var format:ElementFormat = FlowLeafElement.computeElementFormatHelper (_table.computedFormat, _table.getParagraph(), swfContext) 
+			_blockElement = new TextElement(_text,format);
+			CONFIG::debug { Debugging.traceFTECall(_blockElement,null,"new TextElement()"); }
+			CONFIG::debug { Debugging.traceFTEAssign(_blockElement, "text", _text); }
+			super.createContentElement();
+
+		}
+
+		/** @private */
+		override protected function get abstract():Boolean
+		{ return false; }		
+		
+		/** @private */
+		tlf_internal override function get defaultTypeName():String
+		{ return "table"; }
+		
+		/** @private */
+		public override function get text():String
+		{
+			return "\u0016";
+		}
+		
+		/** @private */
+		public override function getText(relativeStart:int=0, relativeEnd:int=-1, paragraphSeparator:String="\n"):String
+		{
+			return _table.getText(relativeStart, relativeEnd, paragraphSeparator);
+		}
+		
+		/** @private */
+		tlf_internal override function normalizeRange(normalizeStart:uint,normalizeEnd:uint):void
+		{
+			// not sure what to do here (see SpanElement)...
+			super.normalizeRange(normalizeStart,normalizeEnd);
+		}
+		
+		/** @private */
+		tlf_internal override function mergeToPreviousIfPossible():Boolean
+		{
+			// not sure what to do here (see SpanElement)...
+			return false;
+		}
+		
+		public override function getNextLeaf(limitElement:FlowGroupElement=null):FlowLeafElement
+		{
+			return _table.getNextLeafHelper(limitElement,this);
+		}
+		
+		public override function getPreviousLeaf(limitElement:FlowGroupElement=null):FlowLeafElement
+		{
+			return _table.getPreviousLeafHelper(limitElement,this);
+		}
+		/** @private */
+		public override function getCharAtPosition(relativePosition:int):String
+		{
+			return getText(relativePosition,relativePosition);
+		}
+		public override function get computedFormat():ITextLayoutFormat
+		{
+			return _table.computedFormat;
+		}
+		public override function get textLength():int
+		{
+			return _table.textLength;
+		}
+		tlf_internal override function updateAdornments(tLine:TextLine, blockProgression:String):int
+		{
+			return 0;
+		}
+
+		override public function get parent():FlowGroupElement
+		{ 
+			return _table; 
+		}
+
+		override public function getTextFlow():TextFlow
+		{
+			return _table.getTextFlow();
+		}
+		
+		override public function getParagraph():ParagraphElement
+		{
+			return _table.getParagraph();
+		}
+
+	}
+}

http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/a0a0749e/textLayout/src/flashx/textLayout/formats/ITextLayoutFormat.as
----------------------------------------------------------------------
diff --git a/textLayout/src/flashx/textLayout/formats/ITextLayoutFormat.as b/textLayout/src/flashx/textLayout/formats/ITextLayoutFormat.as
index e25b683..8e3099d 100644
--- a/textLayout/src/flashx/textLayout/formats/ITextLayoutFormat.as
+++ b/textLayout/src/flashx/textLayout/formats/ITextLayoutFormat.as
@@ -1161,6 +1161,62 @@ package flashx.textLayout.formats
 		function get borderBottomColor():*;
 
 		/**
+		 * Specifies the priority when drawing cell boundaries. When settings between two adjacent cells conflict, the border with the higher priority wins. If the priorities are equal, the latter of the two cells takes priority.
+		 * <p>Legal values are any rational number. Conflicts are resolved with the properties of the higher number being drawn.</p>
+		 * <p>Default value is undefined indicating not set.</p>
+		 * <p>If undefined during the cascade this property will inherit, and default to 0.</p>
+		 * 
+		 * @throws RangeError when set value is not within range for this property
+		 * 
+		 * @playerversion Flash 10
+		 * @playerversion AIR 1.5
+		 * @langversion 3.0
+		 */
+		function get borderLeftPriority():*;
+		
+		/**
+		 * Specifies the priority when drawing cell boundaries. When settings between two adjacent cells conflict, the border with the higher priority wins. If the priorities are equal, the latter of the two cells takes priority.
+		 * <p>Legal values are any rational number. Conflicts are resolved with the properties of the higher number being drawn.</p>
+		 * <p>Default value is undefined indicating not set.</p>
+		 * <p>If undefined during the cascade this property will inherit, and default to 0.</p>
+		 * 
+		 * @throws RangeError when set value is not within range for this property
+		 * 
+		 * @playerversion Flash 10
+		 * @playerversion AIR 1.5
+		 * @langversion 3.0
+		 */
+		function get borderRightPriority():*;
+		
+		/**
+		 * Specifies the priority when drawing cell boundaries. When settings between two adjacent cells conflict, the border with the higher priority wins. If the priorities are equal, the latter of the two cells takes priority.
+		 * <p>Legal values are any rational number. Conflicts are resolved with the properties of the higher number being drawn.</p>
+		 * <p>Default value is undefined indicating not set.</p>
+		 * <p>If undefined during the cascade this property will inherit, and default to 0.</p>
+		 * 
+		 * @throws RangeError when set value is not within range for this property
+		 * 
+		 * @playerversion Flash 10
+		 * @playerversion AIR 1.5
+		 * @langversion 3.0
+		 */
+		function get borderTopPriority():*;
+		
+		/**
+		 * Specifies the priority when drawing cell boundaries. When settings between two adjacent cells conflict, the border with the higher priority wins. If the priorities are equal, the latter of the two cells takes priority.
+		 * <p>Legal values are any rational number. Conflicts are resolved with the properties of the higher number being drawn.</p>
+		 * <p>Default value is undefined indicating not set.</p>
+		 * <p>If undefined during the cascade this property will inherit, and default to 0.</p>
+		 * 
+		 * @throws RangeError when set value is not within range for this property
+		 * 
+		 * @playerversion Flash 10
+		 * @playerversion AIR 1.5
+		 * @langversion 3.0
+		 */
+		function get borderBottomPriority():*;
+
+		/**
 		 * left margin in pixels(adopts default value if undefined during cascade).
 		 * <p>Legal values are numbers from -8000 to 8000 and FormatValue.INHERIT.</p>
 		 * <p>Default value is undefined indicating not set.</p>
@@ -1245,7 +1301,7 @@ package flashx.textLayout.formats
 		 * @langversion 3.0
 		 */
 		function get cellPadding():*;
-
+		
 		/**
 		 * Width of table element specifies the desired width of the entire table and is intended for visual user agents. When the value is a percentage value, the value is relative to the user agent's available horizontal space.
 		 * <p>Legal values as a number are from 0 to 8000.</p>
@@ -1277,6 +1333,36 @@ package flashx.textLayout.formats
 		 * @langversion 3.0
 		 */
 		function get tableColumnWidth():*;
+		
+		/**
+		 * Minimum height of a table cell. If there is no maximum, the cell will grow in height to fit the content. Minimum and maximum of the same values will give the cell a fixed height.
+		 * <p>Legal values as a number are from 2 to 10000.</p>
+		 * <p>Legal values include FormatValue.INHERIT.</p>
+		 * <p>Default value is undefined indicating not set.</p>
+		 * <p>If undefined during the cascade this property will have a value of 2.</p>
+		 * 
+		 * @throws RangeError when set value is not within range for this property
+		 * 
+		 * @playerversion Flash 10
+		 * @playerversion AIR 1.5
+		 * @langversion 3.0
+		 */
+		function get minCellHeight():*;
+		
+		/**
+		 * Maximum height of a table cell. If there is no maximum, the cell will grow in height to fit the content. Minimum and maximum of the same values will give the cell a fixed height.
+		 * <p>Legal values as a number are from 2 to 10000.</p>
+		 * <p>Legal values include FormatValue.INHERIT.</p>
+		 * <p>Default value is undefined indicating not set.</p>
+		 * <p>If undefined during the cascade this property will have a value of 2.</p>
+		 * 
+		 * @throws RangeError when set value is not within range for this property
+		 * 
+		 * @playerversion Flash 10
+		 * @playerversion AIR 1.5
+		 * @langversion 3.0
+		 */
+		function get maxCellHeight():*;
 
 		/**
 		 * frame specifies which sides of the frame surrounding a table will be visible. Possible values:

http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/a0a0749e/textLayout/src/flashx/textLayout/formats/TextLayoutFormat.as
----------------------------------------------------------------------
diff --git a/textLayout/src/flashx/textLayout/formats/TextLayoutFormat.as b/textLayout/src/flashx/textLayout/formats/TextLayoutFormat.as
index b532c40..aa8166a 100644
--- a/textLayout/src/flashx/textLayout/formats/TextLayoutFormat.as
+++ b/textLayout/src/flashx/textLayout/formats/TextLayoutFormat.as
@@ -74,7 +74,7 @@ package flashx.textLayout.formats
 
 	/**
 	 * The TextLayoutFormat class holds all of the text layout properties. These properties affect the format and style of a text flow at the container level, paragraph level, and text level.  Both the ContainerController class and the FlowElement base class have <code>format</code> properties that enable you to assign a TextLayoutFormat instance to them. Assign a TextLayoutFormat object to a container to affect the format of all of the container's content. Assign a TextLayoutFormat object to a FlowElement descendant to specify formatting for that particular element: TextFlow, ParagraphElement, DivElement, SpanElement, InlineGraphicElement, LinkElement, and TCYElement.
-	 * In addition to the <code>format</code> property, these classes also define each of the individual TextLayoutFormat properties so that you can override the setting of a particular style property for that element, if you wish. <p>Because you can set a given style at multiple levels, it is possible to have conflicts. For example, the color of the text at the TextFlow level could be set to black while a SpanElement object sets it to blue. The general rule is that the setting at the lowest level on the text flow tree takes precedence. So if the ligature level is set for a TextFlow instance and also set for a DivElement, the DivElement setting takes precedence. </p><p>Cascading styles refers to the process of adopting styles from a higher level in the text flow if a style value is undefined at a lower level. When a style is undefined on an element at the point it is about to be rendered, it either takes its default value or the value cascades or descends from the value on a parent ele
 ment. For example, if the transparency (<code>textAlpha</code> property) of the text is undefined on a SpanElement object, but is set on the TextFlow, the value of the <code>TextFlow.textAlpha</code> property cascades to the SpanElement object and is applied to the text for that span. The result of the cascade, or the sum of the styles that is applied to the element, is stored in the element's <code>computedFormat</code> property.</p><p>In the same way, you can apply user styles using the <code>userStyles</code> property of the ContainerController and FlowElement classes. This  property allows you to read or write a dictionary of user styles and apply its settings to a container or a text flow element. The user styles dictionary is an object that consists of <em>stylename-value</em> pairs. Styles specified by the <code>userStyles</code> property take precedence over all others.</p><p>Most styles that are undefined inherit the value of their immediate parent during a cascade. A small
  number of styles, however, do not inherit their parent�s value and take on their default values instead.</p><p><strong>Style properties that adopt their default values, if undefined, include:</strong> <code>backgroundAlpha</code>, <code>backgroundColor</code>, <code>columnCount</code>, <code>columnGap</code>, <code>columnWidth</code>, <code>lineBreak</code>, <code>paddingBottom</code>, <code>paddingLeft</code>, <code>paddingRight</code>, <code>paddingTop</code>, <code>verticalAlign</code></p>.
+	 * In addition to the <code>format</code> property, these classes also define each of the individual TextLayoutFormat properties so that you can override the setting of a particular style property for that element, if you wish. <p>Because you can set a given style at multiple levels, it is possible to have conflicts. For example, the color of the text at the TextFlow level could be set to black while a SpanElement object sets it to blue. The general rule is that the setting at the lowest level on the text flow tree takes precedence. So if the ligature level is set for a TextFlow instance and also set for a DivElement, the DivElement setting takes precedence. </p><p>Cascading styles refers to the process of adopting styles from a higher level in the text flow if a style value is undefined at a lower level. When a style is undefined on an element at the point it is about to be rendered, it either takes its default value or the value cascades or descends from the value on a parent ele
 ment. For example, if the transparency (<code>textAlpha</code> property) of the text is undefined on a SpanElement object, but is set on the TextFlow, the value of the <code>TextFlow.textAlpha</code> property cascades to the SpanElement object and is applied to the text for that span. The result of the cascade, or the sum of the styles that is applied to the element, is stored in the element's <code>computedFormat</code> property.</p><p>In the same way, you can apply user styles using the <code>userStyles</code> property of the ContainerController and FlowElement classes. This  property allows you to read or write a dictionary of user styles and apply its settings to a container or a text flow element. The user styles dictionary is an object that consists of <em>stylename-value</em> pairs. Styles specified by the <code>userStyles</code> property take precedence over all others.</p><p>Most styles that are undefined inherit the value of their immediate parent during a cascade. A small
  number of styles, however, do not inherit their parent�s value and take on their default values instead.</p><p><strong>Style properties that adopt their default values, if undefined, include:</strong> <code>backgroundAlpha</code>, <code>backgroundColor</code>, <code>columnCount</code>, <code>columnGap</code>, <code>columnWidth</code>, <code>lineBreak</code>, <code>paddingBottom</code>, <code>paddingLeft</code>, <code>paddingRight</code>, <code>paddingTop</code>, <code>verticalAlign</code></p>.
 	 * @includeExample examples\TextLayoutFormatExample.as -noswf
 	 * @includeExample examples\TextLayoutFormatExample2.as -noswf
 	 * @see flashx.textLayout.elements.FlowElement#format
@@ -953,6 +953,38 @@ package flashx.textLayout.formats
 			return _borderBottomColorProperty;
 		}
 		/** @private */
+		static private var _borderLeftPriorityProperty:Property;
+		static public function get borderLeftPriorityProperty():Property
+		{
+			if (!_borderLeftPriorityProperty)
+				_borderLeftPriorityProperty = Property.NewNumberProperty("borderLeftPriority",0,false,Vector.<String>([Category.TABLE,Category.TABLECELL,Category.TABLECOLUMN,Category.TABLEROW]),-8000,8000);
+			return _borderLeftPriorityProperty;
+		}
+		/** @private */
+		static private var _borderRightPriorityProperty:Property;
+		static public function get borderRightPriorityProperty():Property
+		{
+			if (!_borderRightPriorityProperty)
+				_borderRightPriorityProperty = Property.NewNumberProperty("borderRightPriority",0,false,Vector.<String>([Category.TABLE,Category.TABLECELL,Category.TABLECOLUMN,Category.TABLEROW]),-8000,8000);
+			return _borderRightPriorityProperty;
+		}
+		/** @private */
+		static private var _borderTopPriorityProperty:Property;
+		static public function get borderTopPriorityProperty():Property
+		{
+			if (!_borderTopPriorityProperty)
+				_borderTopPriorityProperty = Property.NewNumberProperty("borderTopPriority",0,false,Vector.<String>([Category.TABLE,Category.TABLECELL,Category.TABLECOLUMN,Category.TABLEROW]),-8000,8000);
+			return _borderTopPriorityProperty;
+		}
+		/** @private */
+		static private var _borderBottomPriorityProperty:Property;
+		static public function get borderBottomPriorityProperty():Property
+		{
+			if (!_borderBottomPriorityProperty)
+				_borderBottomPriorityProperty = Property.NewNumberProperty("borderBottomPriority",0,false,Vector.<String>([Category.TABLE,Category.TABLECELL,Category.TABLECOLUMN,Category.TABLEROW]),-8000,8000);
+			return _borderBottomPriorityProperty;
+		}
+		/** @private */
 		static private var _marginLeftProperty:Property;
 		static public function get marginLeftProperty():Property
 		{
@@ -1017,6 +1049,22 @@ package flashx.textLayout.formats
 			return _tableColumnWidthProperty;
 		}
 		/** @private */
+		static private var _minCellHeightProperty:Property;
+		static public function get minCellHeightProperty():Property
+		{
+			if (!_minCellHeightProperty)
+				_minCellHeightProperty = Property.NewNumberOrEnumProperty("minCellHeight",2,false,Vector.<String>([Category.TABLE,Category.TABLECELL]),2,8000);
+			return _minCellHeightProperty;
+		}
+		/** @private */
+		static private var _maxCellHeightProperty:Property;
+		static public function get maxCellHeightProperty():Property
+		{
+			if (!_maxCellHeightProperty)
+				_maxCellHeightProperty = Property.NewNumberOrEnumProperty("maxCellHeight",8000,false,Vector.<String>([Category.TABLE,Category.TABLECELL]),2,8000);
+			return _maxCellHeightProperty;
+		}
+		/** @private */
 		static private var _frameProperty:Property;
 		static public function get frameProperty():Property
 		{
@@ -1136,6 +1184,12 @@ package flashx.textLayout.formats
 			, tableColumnWidth:tableColumnWidthProperty
 			, frame:frameProperty
 			, rules:rulesProperty
+			, borderLeftPriority:borderLeftPriorityProperty
+			, borderRightPriority:borderRightPriorityProperty
+			, borderTopPriority:borderTopPriorityProperty
+			, borderBottomPriority:borderBottomPriorityProperty
+			, minCellHeight:minCellHeightProperty
+			, maxCellHeight:maxCellHeightProperty
 		}
 
 		/** Property descriptions accessible by name. @private */
@@ -2962,6 +3016,74 @@ package flashx.textLayout.formats
 		{ setStyleByProperty(TextLayoutFormat.borderBottomColorProperty,value); }
 
 		/**
+		 * Specifies the priority when drawing cell boundaries. When settings between two adjacent cells conflict, the border with the higher priority wins. If the priorities are equal, the latter of the two cells takes priority.
+		 * <p>Legal values are any rational number. Conflicts are resolved with the properties of the higher number being drawn.</p>
+		 * <p>Default value is undefined indicating not set.</p>
+		 * <p>If undefined during the cascade this property will inherit, and default to 0.</p>
+		 * 
+		 * @throws RangeError when set value is not within range for this property
+		 * 
+		 * @playerversion Flash 10
+		 * @playerversion AIR 1.5
+		 * @langversion 3.0
+		 */
+		public function get borderLeftPriority():*
+		{ return _styles.borderLeftPriority; }
+		public function set borderLeftPriority(value:*):void
+		{ setStyleByProperty(TextLayoutFormat.borderLeftPriorityProperty,value); }
+		
+		/**
+		 * Specifies the priority when drawing cell boundaries. When settings between two adjacent cells conflict, the border with the higher priority wins. If the priorities are equal, the latter of the two cells takes priority.
+		 * <p>Legal values are any rational number. Conflicts are resolved with the properties of the higher number being drawn.</p>
+		 * <p>Default value is undefined indicating not set.</p>
+		 * <p>If undefined during the cascade this property will inherit, and default to 0.</p>
+		 * 
+		 * @throws RangeError when set value is not within range for this property
+		 * 
+		 * @playerversion Flash 10
+		 * @playerversion AIR 1.5
+		 * @langversion 3.0
+		 */
+		public function get borderRightPriority():*
+		{ return _styles.borderRightPriority; }
+		public function set borderRightPriority(value:*):void
+		{ setStyleByProperty(TextLayoutFormat.borderRightPriorityProperty,value); }
+		
+		/**
+		 * Specifies the priority when drawing cell boundaries. When settings between two adjacent cells conflict, the border with the higher priority wins. If the priorities are equal, the latter of the two cells takes priority.
+		 * <p>Legal values are any rational number. Conflicts are resolved with the properties of the higher number being drawn.</p>
+		 * <p>Default value is undefined indicating not set.</p>
+		 * <p>If undefined during the cascade this property will inherit, and default to 0.</p>
+		 * 
+		 * @throws RangeError when set value is not within range for this property
+		 * 
+		 * @playerversion Flash 10
+		 * @playerversion AIR 1.5
+		 * @langversion 3.0
+		 */
+		public function get borderTopPriority():*
+		{ return _styles.borderTopPriority; }
+		public function set borderTopPriority(value:*):void
+		{ setStyleByProperty(TextLayoutFormat.borderTopPriorityProperty,value); }
+		
+		/**
+		 * Specifies the priority when drawing cell boundaries. When settings between two adjacent cells conflict, the border with the higher priority wins. If the priorities are equal, the latter of the two cells takes priority.
+		 * <p>Legal values are any rational number. Conflicts are resolved with the properties of the higher number being drawn.</p>
+		 * <p>Default value is undefined indicating not set.</p>
+		 * <p>If undefined during the cascade this property will inherit, and default to 0.</p>
+		 * 
+		 * @throws RangeError when set value is not within range for this property
+		 * 
+		 * @playerversion Flash 10
+		 * @playerversion AIR 1.5
+		 * @langversion 3.0
+		 */
+		public function get borderBottomPriority():*
+		{ return _styles.borderBottomPriority; }
+		public function set borderBottomPriority(value:*):void
+		{ setStyleByProperty(TextLayoutFormat.borderBottomPriorityProperty,value); }
+
+		/**
 		 * left margin in pixels(adopts default value if undefined during cascade).
 		 * <p>Legal values are numbers from -8000 to 8000 and FormatValue.INHERIT.</p>
 		 * <p>Default value is undefined indicating not set.</p>
@@ -3102,6 +3224,44 @@ package flashx.textLayout.formats
 		{ return _styles.tableColumnWidth; }
 		public function set tableColumnWidth(value:*):void
 		{ setStyleByProperty(TextLayoutFormat.tableColumnWidthProperty,value); }
+		
+		/**
+		 * Minimum height of a table cell. If there is no maximum, the cell will grow in height to fit the content. Minimum and maximum of the same values will give the cell a fixed height.
+		 * <p>Legal values as a number are from 2 to 10000.</p>
+		 * <p>Legal values include FormatValue.INHERIT.</p>
+		 * <p>Default value is undefined indicating not set.</p>
+		 * <p>If undefined during the cascade this property will have a value of 2.</p>
+		 * 
+		 * @throws RangeError when set value is not within range for this property
+		 * 
+		 * @playerversion Flash 10
+		 * @playerversion AIR 1.5
+		 * @langversion 3.0
+		 */
+		public function get minCellHeight():*
+		{ return _styles.minCellHeight; }
+		public function set minCellHeight(value:*):void
+		{ setStyleByProperty(TextLayoutFormat.minCellHeightProperty,value); }
+		
+		/**
+		 * Maximum height of a table cell. If there is no maximum, the cell will grow in height to fit the content. Minimum and maximum of the same values will give the cell a fixed height.
+		 * <p>Legal values as a number are from 2 to 10000.</p>
+		 * <p>Legal values include FormatValue.INHERIT.</p>
+		 * <p>Default value is undefined indicating not set.</p>
+		 * <p>If undefined during the cascade this property will have a value of 2.</p>
+		 * 
+		 * @throws RangeError when set value is not within range for this property
+		 * 
+		 * @playerversion Flash 10
+		 * @playerversion AIR 1.5
+		 * @langversion 3.0
+		 */
+		public function get maxCellHeight():*
+		{ return _styles.maxCellHeight; }
+		public function set maxCellHeight(value:*):void
+		{ setStyleByProperty(TextLayoutFormat.maxCellHeightProperty,value); }
+
+
 
 		[Inspectable(enumeration="void,above,below,hsides,vsides,lhs,rhs,box,border,inherit")]
 		/**
@@ -3241,6 +3401,18 @@ package flashx.textLayout.formats
 				stylesObject.frame = TextLayoutFormat.frameProperty.defaultValue;
 			if (stylesObject.rules != undefined && stylesObject.rules != TextLayoutFormat.rulesProperty.defaultValue)
 				stylesObject.rules = TextLayoutFormat.rulesProperty.defaultValue;
+			if( stylesObject.borderBottomPriority != undefined &&  stylesObject.borderBottomPriority != TextLayoutFormat.borderBottomPriorityProperty.defaultValue)
+				stylesObject.borderBottomPriority = TextLayoutFormat.borderBottomPriorityProperty.defaultValue;
+			if( stylesObject.borderTopPriority != undefined &&  stylesObject.borderTopPriority != TextLayoutFormat.borderTopPriorityProperty.defaultValue)
+				stylesObject.borderTopPriority = TextLayoutFormat.borderTopPriorityProperty.defaultValue;
+			if( stylesObject.borderLeftPriority != undefined &&  stylesObject.borderLeftPriority != TextLayoutFormat.borderLeftPriorityProperty.defaultValue)
+				stylesObject.borderLeftPriority = TextLayoutFormat.borderLeftPriorityProperty.defaultValue;
+			if( stylesObject.borderRightPriority != undefined &&  stylesObject.borderRightPriority != TextLayoutFormat.borderRightPriorityProperty.defaultValue)
+				stylesObject.borderRightPriority = TextLayoutFormat.borderRightPriorityProperty.defaultValue;
+			if (stylesObject.minCellHeight != undefined && stylesObject.minCellHeight != TextLayoutFormat.minCellHeightProperty.defaultValue)
+				stylesObject.minCellHeight = TextLayoutFormat.minCellHeightProperty.defaultValue;
+			if (stylesObject.maxCellHeight != undefined && stylesObject.maxCellHeight != TextLayoutFormat.maxCellHeightProperty.defaultValue)
+				stylesObject.maxCellHeight = TextLayoutFormat.maxCellHeightProperty.defaultValue;
 		}
 
 		/**

http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/a0a0749e/textLayout/src/flashx/textLayout/formats/TextLayoutFormatInc.as
----------------------------------------------------------------------
diff --git a/textLayout/src/flashx/textLayout/formats/TextLayoutFormatInc.as b/textLayout/src/flashx/textLayout/formats/TextLayoutFormatInc.as
index c263433..2c1f6f6 100644
--- a/textLayout/src/flashx/textLayout/formats/TextLayoutFormatInc.as
+++ b/textLayout/src/flashx/textLayout/formats/TextLayoutFormatInc.as
@@ -1837,6 +1837,98 @@
 		}
 
 		/**
+ 		* TextLayoutFormat:
+ 		* Specifies the priority when drawing cell boundaries. When settings between two adjacent cells conflict, the border with the higher priority wins. If the priorities are equal, the latter of the two cells takes priority.
+ 		* <p>Legal values are any rational number. Conflicts are resolved with the properties of the higher number being drawn.</p>
+ 		* <p>Default value is undefined indicating not set.</p>
+ 		* <p>If undefined during the cascade this property will inherit, and default to 0.</p>
+ 		* 
+ 		* @throws RangeError when set value is not within range for this property
+ 		* 
+ 		* @playerversion Flash 10
+ 		* @playerversion AIR 1.5
+ 		* @langversion 3.0
+ 		*/
+		public function get borderLeftPriority():*
+		{
+			return _format ? _format.borderLeftPriority : undefined;
+		}
+		public function set borderLeftPriority(value:*):void
+		{ 
+			writableTextLayoutFormat().borderLeftPriority = value;
+			formatChanged();
+		}
+
+		/**
+		 * TextLayoutFormat:
+		 * Specifies the priority when drawing cell boundaries. When settings between two adjacent cells conflict, the border with the higher priority wins. If the priorities are equal, the latter of the two cells takes priority.
+		 * <p>Legal values are any rational number. Conflicts are resolved with the properties of the higher number being drawn.</p>
+		 * <p>Default value is undefined indicating not set.</p>
+		 * <p>If undefined during the cascade this property will inherit, and default to 0.</p>
+		 * 
+		 * @throws RangeError when set value is not within range for this property
+		 * 
+		 * @playerversion Flash 10
+		 * @playerversion AIR 1.5
+		 * @langversion 3.0
+		 */
+		public function get borderRightPriority():*
+		{
+			return  _format ? _format.borderRightPriority : undefined;
+		}
+		public function set borderRightPriority(value:*):void
+		{
+			writableTextLayoutFormat().borderRightPriority = value;
+			formatChanged();
+		}
+		
+		/**
+		 * TextLayoutFormat:
+		 * Specifies the priority when drawing cell boundaries. When settings between two adjacent cells conflict, the border with the higher priority wins. If the priorities are equal, the latter of the two cells takes priority.
+		 * <p>Legal values are any rational number. Conflicts are resolved with the properties of the higher number being drawn.</p>
+		 * <p>Default value is undefined indicating not set.</p>
+		 * <p>If undefined during the cascade this property will inherit, and default to 0.</p>
+		 * 
+		 * @throws RangeError when set value is not within range for this property
+		 * 
+		 * @playerversion Flash 10
+		 * @playerversion AIR 1.5
+		 * @langversion 3.0
+		 */
+		public function get borderTopPriority():*
+		{
+			return  _format ? _format.borderTopPriority : undefined;
+		}
+		public function set borderTopPriority(value:*):void
+		{
+			writableTextLayoutFormat().borderTopPriority = value;
+			formatChanged();
+		}
+		
+		/**
+		 * TextLayoutFormat:
+		 * Specifies the priority when drawing cell boundaries. When settings between two adjacent cells conflict, the border with the higher priority wins. If the priorities are equal, the latter of the two cells takes priority.
+		 * <p>Legal values are any rational number. Conflicts are resolved with the properties of the higher number being drawn.</p>
+		 * <p>Default value is undefined indicating not set.</p>
+		 * <p>If undefined during the cascade this property will inherit, and default to 0.</p>
+		 * 
+		 * @throws RangeError when set value is not within range for this property
+		 * 
+		 * @playerversion Flash 10
+		 * @playerversion AIR 1.5
+		 * @langversion 3.0
+		 */
+		public function get borderBottomPriority():*
+		{
+			return  _format ? _format.borderBottomPriority : undefined;
+		}
+		public function set borderBottomPriority(value:*):void
+		{
+			writableTextLayoutFormat().borderBottomPriority = value;
+			formatChanged();
+		}
+
+		/**
 		 * TextLayoutFormat:
 		 * left margin in pixels(adopts default value if undefined during cascade).
 		 * <p>Legal values are numbers from -8000 to 8000 and FormatValue.INHERIT.</p>
@@ -1849,6 +1941,7 @@
 		 * @playerversion AIR 1.5
 		 * @langversion 3.0
 		 */
+
 		public function get marginLeft():*
 		{
 			return _format ? _format.marginLeft : undefined;
@@ -2026,6 +2119,54 @@
 			formatChanged();
 		}
 
+		/**
+		 * TextLayoutFormat:
+		 * Minimum height of a table cell. If there is no maximum, the cell will grow in height to fit the content. Minimum and maximum of the same values will give the cell a fixed height.
+		 * <p>Legal values as a number are from 2 to 10000.</p>
+		 * <p>Legal values include FormatValue.INHERIT.</p>
+		 * <p>Default value is undefined indicating not set.</p>
+		 * <p>If undefined during the cascade this property will have a value of 2.</p>
+		 * 
+		 * @throws RangeError when set value is not within range for this property
+		 * 
+		 * @playerversion Flash 10
+		 * @playerversion AIR 1.5
+		 * @langversion 3.0
+		 */
+		public function get minCellHeight():*
+		{
+			return _format ? _format.minCellHeight : undefined;
+		}
+		public function set minCellHeight(value:*):void
+		{
+			writableTextLayoutFormat().minCellHeight = value;
+			formatChanged();
+		}
+		
+		/**
+		 * TextLayoutFormat:
+		 * Maximum height of a table cell. If there is no maximum, the cell will grow in height to fit the content. Minimum and maximum of the same values will give the cell a fixed height.
+		 * <p>Legal values as a number are from 2 to 10000.</p>
+		 * <p>Legal values include FormatValue.INHERIT.</p>
+		 * <p>Default value is undefined indicating not set.</p>
+		 * <p>If undefined during the cascade this property will have a value of 2.</p>
+		 * 
+		 * @throws RangeError when set value is not within range for this property
+		 * 
+		 * @playerversion Flash 10
+		 * @playerversion AIR 1.5
+		 * @langversion 3.0
+		 */
+		public function get maxCellHeight():*
+		{
+			return _format ? _format.maxCellHeight : undefined;
+		}
+		public function set maxCellHeight(value:*):void
+		{
+			writableTextLayoutFormat().maxCellHeight = value;
+			formatChanged();
+		}
+
 		[Inspectable(enumeration="void,above,below,hsides,vsides,lhs,rhs,box,border,inherit")]
 		/**
 		 * TextLayoutFormat: