X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/655719367ac5e131d9642e5783f3ecf64d1a3385..ef00dc091740aca65dcd1861cfd09fbccbb46a89:/src/html/htmltag.cpp diff --git a/src/html/htmltag.cpp b/src/html/htmltag.cpp index e74bb142be..5c0a0442a5 100644 --- a/src/html/htmltag.cpp +++ b/src/html/htmltag.cpp @@ -90,7 +90,7 @@ wxHtmlTagsCache::wxHtmlTagsCache(const wxString& source) src[pos] != wxT('>') && !wxIsspace(src[pos]); i++, pos++ ) { - tagBuffer[i] = wxToupper(src[pos]); + tagBuffer[i] = (wxChar)wxToupper(src[pos]); } tagBuffer[i] = _T('\0'); @@ -114,9 +114,14 @@ wxHtmlTagsCache::wxHtmlTagsCache(const wxString& source) else { m_Cache[tg].End1 = m_Cache[tg].End2 = -1; - + if (wxIsCDATAElement(tagBuffer)) { + // store the orig pos in case we are missing the closing + // tag (see below) + wxInt32 old_pos = pos; + bool foundCloseTag = false; + // find next matching tag int tag_len = wxStrlen(tagBuffer); while (pos < lng) @@ -127,7 +132,7 @@ wxHtmlTagsCache::wxHtmlTagsCache(const wxString& source) ++pos; if (src[pos] == '<') ++pos; - + // see if it matches int match_pos = 0; while (pos < lng && match_pos < tag_len && src[pos] != '>' && src[pos] != '<') { @@ -135,7 +140,7 @@ wxHtmlTagsCache::wxHtmlTagsCache(const wxString& source) // Unicode build if ((wxChar)wxToupper(src[pos]) == tagBuffer[match_pos]) { ++match_pos; - } + } else if (src[pos] == wxT(' ') || src[pos] == wxT('\n') || src[pos] == wxT('\r') || src[pos] == wxT('\t')) { // need to skip over these @@ -147,14 +152,25 @@ wxHtmlTagsCache::wxHtmlTagsCache(const wxString& source) } // found a match - if (match_pos == tag_len) { + if (match_pos == tag_len) + { pos = pos - tag_len - 3; + foundCloseTag = true; break; } - else { + else // keep looking for the closing tag + { ++pos; } } + if (!foundCloseTag) + { + // we didn't find closing tag; this means the markup + // is incorrect and the best thing we can do is to + // ignore the unclosed tag and continue parsing as if + // it didn't exist: + pos = old_pos; + } } } } @@ -392,7 +408,7 @@ bool wxHtmlTag::GetParamAsColour(const wxString& par, wxColour *clr) const { wxString str = GetParam(par); - if (str.IsEmpty()) return false; + if (str.empty()) return false; if (str.GetChar(0) == wxT('#')) { unsigned long tmp; @@ -495,4 +511,13 @@ wxHtmlTag *wxHtmlTag::GetNextTag() const return cur->m_Next; } +#if WXWIN_COMPATIBILITY_2_2 + +bool wxHtmlTag::IsEnding() const +{ + return false; +} + +#endif // WXWIN_COMPATIBILITY_2_2 + #endif