2007-07-13  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=14395
          When a <p> is inside <li> two <BR>s are rendered

        Test: fast/lists/marker-before-empty-inline.html

        * rendering/RenderBlock.h:
        * rendering/RenderListItem.cpp:
        (WebCore::getParentOfFirstLineBox): Changed to skip empty inline flows that
        do not actually generate any line boxes. Limited the nested lists quirk to
        the case where the list is a child of the list item, to match Firefox.
        * rendering/bidi.cpp:
        (WebCore::requiresLineBox): Added. Factored out of skipWhitespace.
        (WebCore::RenderBlock::generatesLineBoxesForInlineChild): Added. Checkes
        whether the child or any of its siblings following it will generate a line
        box in the flow.
        (WebCore::RenderBlock::skipWhitespace):

2007-07-13  Mitz Pettel  <mitz@webkit.org>

        Reviewed by Dave Hyatt.

        - test and updated results for http://bugs.webkit.org/show_bug.cgi?id=14395
          When a <p> is inside <li> two <BR>s are rendered

        * editing/pasteboard/4861080-expected.checksum:
        * editing/pasteboard/4861080-expected.png:
        * editing/pasteboard/4861080-expected.txt:
        * fast/lists/marker-before-empty-inline-expected.checksum: Added.
        * fast/lists/marker-before-empty-inline-expected.png: Added.
        * fast/lists/marker-before-empty-inline-expected.txt: Added.
        * fast/lists/marker-before-empty-inline.html: Added.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@24255 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/rendering/RenderListItem.cpp b/WebCore/rendering/RenderListItem.cpp
index 61cf61c..ba77300 100644
--- a/WebCore/rendering/RenderListItem.cpp
+++ b/WebCore/rendering/RenderListItem.cpp
@@ -135,7 +135,7 @@
     return lastChild() == m_marker;
 }
 
-static RenderObject* getParentOfFirstLineBox(RenderObject* curr, RenderObject* marker)
+static RenderObject* getParentOfFirstLineBox(RenderBlock* curr, RenderObject* marker)
 {
     RenderObject* firstChild = curr->firstChild();
     if (!firstChild)
@@ -145,7 +145,7 @@
         if (currChild == marker)
             continue;
 
-        if (currChild->isInline())
+        if (currChild->isInline() && (!currChild->isInlineFlow() || curr->generatesLineBoxesForInlineChild(currChild)))
             return curr;
 
         if (currChild->isFloating() || currChild->isPositioned())
@@ -154,11 +154,11 @@
         if (currChild->isTable() || !currChild->isRenderBlock())
             break;
 
-        if (currChild->style()->htmlHacks() && currChild->element() &&
+        if (curr->isListItem() && currChild->style()->htmlHacks() && currChild->element() &&
             (currChild->element()->hasTagName(ulTag)|| currChild->element()->hasTagName(olTag)))
             break;
 
-        RenderObject* lineBox = getParentOfFirstLineBox(currChild, marker);
+        RenderObject* lineBox = getParentOfFirstLineBox(static_cast<RenderBlock*>(currChild), marker);
         if (lineBox)
             return lineBox;
     }