X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/313ffa19c69de498897bb312db6c6f2d127bebd0..1ae82ba9f23ee688bc4db2cd449eca5bf97cfdf0:/src/html/htmltag.cpp diff --git a/src/html/htmltag.cpp b/src/html/htmltag.cpp index 5c0a0442a5..6686cb9cba 100644 --- a/src/html/htmltag.cpp +++ b/src/html/htmltag.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: htmltag.cpp +// Name: src/html/htmltag.cpp // Purpose: wxHtmlTag class (represents single tag) // Author: Vaclav Slavik // RCS-ID: $Id$ @@ -7,26 +7,21 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// +#include "wx/wxprec.h" -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "htmltag.h" +#ifdef __BORLANDC__ + #pragma hdrstop #endif -#include "wx/wxprec.h" - -#include "wx/defs.h" #if wxUSE_HTML -#ifdef __BORLANDC__ -#pragma hdrstop -#endif +#include "wx/html/htmltag.h" #ifndef WXPRECOMP + #include "wx/colour.h" #endif -#include "wx/html/htmltag.h" #include "wx/html/htmlpars.h" -#include "wx/colour.h" #include // for vsscanf #include @@ -66,7 +61,7 @@ bool wxIsCDATAElement(const wxChar *tag) wxHtmlTagsCache::wxHtmlTagsCache(const wxString& source) { const wxChar *src = source.c_str(); - int lng = source.Length(); + int lng = source.length(); wxChar tagBuffer[256]; m_Cache = NULL; @@ -114,14 +109,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; + wxInt32 old_pos = pos; bool foundCloseTag = false; - + // find next matching tag int tag_len = wxStrlen(tagBuffer); while (pos < lng) @@ -152,7 +147,7 @@ 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; @@ -194,6 +189,16 @@ void wxHtmlTagsCache::QueryTag(int at, int* end1, int* end2) int delta = (at < m_Cache[m_CachePos].Key) ? -1 : 1; do { + if ( m_CachePos < 0 || m_CachePos == m_CacheSize ) + { + // something is very wrong with HTML, give up by returning an + // impossibly large value which is going to be ignored by the + // caller + *end1 = + *end2 = INT_MAX; + return; + } + m_CachePos += delta; } while (m_Cache[m_CachePos].Key != at); @@ -355,12 +360,12 @@ wxHtmlTag::wxHtmlTag(wxHtmlTag *parent, } #undef IS_WHITE - } - m_Begin = i; + } + m_Begin = i; - cache->QueryTag(pos, &m_End1, &m_End2); - if (m_End1 > end_pos) m_End1 = end_pos; - if (m_End2 > end_pos) m_End2 = end_pos; + cache->QueryTag(pos, &m_End1, &m_End2); + if (m_End1 > end_pos) m_End1 = end_pos; + if (m_End2 > end_pos) m_End2 = end_pos; } wxHtmlTag::~wxHtmlTag() @@ -406,20 +411,13 @@ int wxHtmlTag::ScanParam(const wxString& par, bool wxHtmlTag::GetParamAsColour(const wxString& par, wxColour *clr) const { + wxASSERT(clr); wxString str = GetParam(par); - if (str.empty()) return false; - if (str.GetChar(0) == wxT('#')) - { - unsigned long tmp; - if (ScanParam(par, wxT("#%lX"), &tmp) != 1) - return false; - *clr = wxColour((unsigned char)((tmp & 0xFF0000) >> 16), - (unsigned char)((tmp & 0x00FF00) >> 8), - (unsigned char)(tmp & 0x0000FF)); + if (clr->Set(str)) return true; - } - else + + if (!str.empty()) { // Handle colours defined in HTML 4.0: #define HTML_COLOUR(name,r,g,b) \ @@ -458,7 +456,7 @@ bool wxHtmlTag::GetParamAsInt(const wxString& par, int *clr) const wxString wxHtmlTag::GetAllParams() const { - // VS: this function is for backward compatiblity only, + // VS: this function is for backward compatibility only, // never used by wxHTML wxString s; size_t cnt = m_ParamNames.GetCount(); @@ -511,13 +509,4 @@ 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