]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/htmlpars.cpp
don't ignore cache hints with from == to
[wxWidgets.git] / src / html / htmlpars.cpp
index 9ed716fe817cb391a17355eccf01a519e5e61da6..ac2fc44880df4a532a87fa28afeef1d61a89da77 100644 (file)
@@ -127,6 +127,8 @@ void wxHtmlParser::CreateDOMTree()
     m_CurTextPiece = 0;
 }
 
     m_CurTextPiece = 0;
 }
 
+extern bool wxIsCDATAElement(const wxChar *tag);
+
 void wxHtmlParser::CreateDOMSubTree(wxHtmlTag *cur,
                                     int begin_pos, int end_pos,
                                     wxHtmlTagsCache *cache)
 void wxHtmlParser::CreateDOMSubTree(wxHtmlTag *cur,
                                     int begin_pos, int end_pos,
                                     wxHtmlTagsCache *cache)
@@ -137,6 +139,15 @@ void wxHtmlParser::CreateDOMSubTree(wxHtmlTag *cur,
     int i = begin_pos;
     int textBeginning = begin_pos;
 
     int i = begin_pos;
     int textBeginning = begin_pos;
 
+    // If the tag contains CDATA text, we include the text between beginning
+    // and ending tag verbosely. Setting i=end_pos will skip to the very
+    // end of this function where text piece is added, bypassing any child
+    // tags parsing (CDATA element can't have child elements by definition):
+    if (cur != NULL && wxIsCDATAElement(cur->GetName().c_str()))
+    {
+        i = end_pos;
+    }
+
     while (i < end_pos)
     {
         c = m_Source.GetChar(i);
     while (i < end_pos)
     {
         c = m_Source.GetChar(i);
@@ -209,6 +220,7 @@ void wxHtmlParser::CreateDOMSubTree(wxHtmlTag *cur,
                 }
                 else
                     i = chd->GetBeginPos();
                 }
                 else
                     i = chd->GetBeginPos();
+                
                 textBeginning = i;
             }
 
                 textBeginning = i;
             }