Working on the Acid2 test, Row 1.
authorhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 12 Apr 2005 22:49:41 +0000 (22:49 +0000)
committerhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 12 Apr 2005 22:49:41 +0000 (22:49 +0000)
Improve checkChild for the DTD so that it knows what mode a document is in.  This allows it to adhere more
strictly to the actual DTD in strict mode and almost strict mode.

Change the <table>-inside-<p> check so that <table> is disallowed inside <p> in
strict mode and almost strict mode.  This matches Firefox behavior, which allows <table>
inside <p> only in quirks mode.

        * khtml/html/dtd.cpp:
        (DOM::checkChild):
        * khtml/html/dtd.h:
        * khtml/html/htmlparser.cpp:
        (KHTMLParser::insertNode):
        * khtml/html/htmltokenizer.cpp:
        (khtml::HTMLTokenizer::parseTag):
        * khtml/xml/dom_elementimpl.cpp:
        (ElementImpl::childAllowed):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@9005 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog-2005-08-23
WebCore/khtml/html/dtd.cpp
WebCore/khtml/html/dtd.h
WebCore/khtml/html/htmlparser.cpp
WebCore/khtml/html/htmltokenizer.cpp
WebCore/khtml/xml/dom_elementimpl.cpp

index 0601fe5e3d60a922d56ee8bb5313d8507c089c2c..0c2855c25655b3d2ce1b1a0cdc16713835d2a051 100644 (file)
@@ -1,3 +1,24 @@
+2005-04-12  David Hyatt  <hyatt@apple.com>
+
+       Working on the Acid2 test, Row 1.
+
+       Improve checkChild for the DTD so that it knows what mode a document is in.  This allows it to adhere more
+       strictly to the actual DTD in strict mode and almost strict mode.
+
+       Change the <table>-inside-<p> check so that <table> is disallowed inside <p> in 
+       strict mode and almost strict mode.  This matches Firefox behavior, which allows <table>
+       inside <p> only in quirks mode.
+
+        * khtml/html/dtd.cpp:
+        (DOM::checkChild):
+        * khtml/html/dtd.h:
+        * khtml/html/htmlparser.cpp:
+        (KHTMLParser::insertNode):
+        * khtml/html/htmltokenizer.cpp:
+        (khtml::HTMLTokenizer::parseTag):
+        * khtml/xml/dom_elementimpl.cpp:
+        (ElementImpl::childAllowed):
+
 2005-04-12  Vicki Murley  <vicki@apple.com>
 
         Reviewed by Maciej. 
index efe10658571e612d96764ddde4da3351693ce0e4..3f08b4d2d43f55e7c0b83aa3a4898b2ca7d74769 100644 (file)
@@ -553,7 +553,7 @@ bool check_array(ushort child, const ushort *tagList)
 }
 
 
-bool DOM::checkChild(ushort tagID, ushort childID)
+bool DOM::checkChild(ushort tagID, ushort childID, bool strict)
 {
     //kdDebug( 6030 ) << "checkChild: " << tagID << "/" << childID << endl;
 
@@ -597,7 +597,7 @@ bool DOM::checkChild(ushort tagID, ushort childID)
         return check_array(childID, tag_list_1);
     case ID_P:
         // P: ( _0 | TABLE ) *
-        return check_array(childID, tag_list_0) || childID == ID_TABLE;
+        return check_array(childID, tag_list_0) || (!strict && childID == ID_TABLE);
     case ID_H1:
     case ID_H2:
     case ID_H3:
index 37ce8ce6c6b64c9030ba831c58f767289d9f3365..707895fc0c5794c471a2643b9a26153c27a6a1d1 100644 (file)
@@ -33,7 +33,7 @@ void removeForbidden(int tagId, ushort *forbiddenTags);
 
 enum tagStatus { OPTIONAL, REQUIRED, FORBIDDEN };
 
-bool checkChild(ushort tagID, ushort childID);
+bool checkChild(ushort tagID, ushort childID, bool strict);
 
 extern const unsigned short tagPriorityArray[];
 extern const tagStatus endTagArray[];
index 7a609d442e5a8430be536b4d4d601e2bc64d5a80..899d99798123f71f1d638eaf3092f86d88670c9e 100644 (file)
@@ -650,7 +650,7 @@ bool KHTMLParser::insertNode(NodeImpl *n, bool flat)
                      ( parent->id() == ID_THEAD ||
                       parent->id() == ID_TBODY ||
                       parent->id() == ID_TFOOT ) && parentparent->id() == ID_TABLE ) ||
-                    ( !checkChild( ID_TR, id ) && ( node->id() == ID_THEAD || node->id() == ID_TBODY || node->id() == ID_TFOOT ) &&
+                    ( !checkChild(ID_TR, id, !doc()->inCompatMode()) && ( node->id() == ID_THEAD || node->id() == ID_TBODY || node->id() == ID_TFOOT ) &&
                      parent->id() == ID_TABLE ))
                 {
                     node = (node->id() == ID_TABLE) ? node :
index bd914381ceea5ee55a1e9a0b0b23252afa76c4be..cbb60a0be24cef5dc3f7ebb220468ecfa80829ea 100644 (file)
@@ -1398,7 +1398,7 @@ void HTMLTokenizer::parseTag(TokenizerString &src)
 
             // we have to take care to close the pre block in
             // case we encounter an unallowed element....
-            if(pre && beginTag && !DOM::checkChild(ID_PRE, tagID)) {
+            if(pre && beginTag && !DOM::checkChild(ID_PRE, tagID, !parser->doc()->inCompatMode())) {
                 kdDebug(6036) << " not allowed in <pre> " << (int)tagID << endl;
                 pre = false;
             }
index 3bfeae68760a8d44c28cff4b1c0096a488ab3edd..a10e1caa5861532a98d4428bb1c5d1bc26131a85 100644 (file)
@@ -527,7 +527,7 @@ bool ElementImpl::childAllowed( NodeImpl *newChild )
 
     // For XML documents, we are non-validating and do not check against a DTD, even for HTML elements.
     if (getDocument()->isHTMLDocument())
-        return checkChild(id(), newChild->id());
+        return checkChild(id(), newChild->id(), !getDocument()->inCompatMode());
     return true;
 }