         var textJustify:String = getStyle("textJustify");
 
 		// Set the TextBlock's content.
-        staticTextElement.text = text;
+		// Note: If there is no text, we do what TLF does and compose
+		// a paragraph terminator character, so that a TextLine
+		// gets created and we can measure it.
+		// It will have a width of 0 but a height equal
+		// to the font's ascent plus descent.
+        staticTextElement.text = text.length > 0 ? text : "\u2029";
 		staticTextElement.elementFormat = elementFormat;
 		staticTextBlock.content = staticTextElement;
 

     *  Returns true if all the text was composed into textLines.
	 */
	private function createTextLinesFromTextBlock(textBlock:TextBlock,
                	                              textLines:Array,
                	                              bounds:Rectangle):Boolean
	{
       // Start with 0 text lines.
	   mx_internal::releaseTextLines(textLines);
	       
		// Get CSS styles for formats that we have to apply ourselves.
		var direction:String = getStyle("direction");

    private function getNextTruncationPosition(truncationLineIndex:int,
                                               truncateAtCharPosition:int):int
    {
        var textLines:Vector.<DisplayObject> = mx_internal::textLines;

        // 1. Get the position of the last character of the preceding atom
        // truncateAtCharPosition-1, because truncateAtCharPosition is an 
