X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/614f97138990406a2dec8d3af6eda4cce6b64224..611bed35118d838abdec90a23a90e492a6cc75d1:/src/html/htmltag.cpp diff --git a/src/html/htmltag.cpp b/src/html/htmltag.cpp index d063137043..4cd0412e95 100644 --- a/src/html/htmltag.cpp +++ b/src/html/htmltag.cpp @@ -63,14 +63,14 @@ class wxHtmlTagsCacheData : public wxVector bool wxIsCDATAElement(const wxChar *tag) { - return (wxStrcmp(tag, _T("SCRIPT")) == 0) || - (wxStrcmp(tag, _T("STYLE")) == 0); + return (wxStrcmp(tag, wxT("SCRIPT")) == 0) || + (wxStrcmp(tag, wxT("STYLE")) == 0); } bool wxIsCDATAElement(const wxString& tag) { - return (wxStrcmp(tag.wx_str(), wxSTRING_TEXT("SCRIPT")) == 0) || - (wxStrcmp(tag.wx_str(), wxSTRING_TEXT("STYLE")) == 0); + return (wxStrcmp(tag.wx_str(), wxS("SCRIPT")) == 0) || + (wxStrcmp(tag.wx_str(), wxS("STYLE")) == 0); } wxHtmlTagsCache::wxHtmlTagsCache(const wxString& source) @@ -103,7 +103,7 @@ wxHtmlTagsCache::wxHtmlTagsCache(const wxString& source) { tagBuffer[i] = (wxChar)wxToupper(*pos); } - tagBuffer[i] = _T('\0'); + tagBuffer[i] = wxT('\0'); Cache()[tg].Name = new wxChar[i+1]; memcpy(Cache()[tg].Name, tagBuffer, (i+1)*sizeof(wxChar)); @@ -246,9 +246,27 @@ void wxHtmlTagsCache::QueryTag(const wxString::const_iterator& at, } while (Cache()[m_CachePos].Key != at); } - *end1 = Cache()[m_CachePos].End1; - *end2 = Cache()[m_CachePos].End2; - *hasEnding = (Cache()[m_CachePos].type == wxHtmlCacheItem::Type_Normal); + + switch ( Cache()[m_CachePos].type ) + { + case wxHtmlCacheItem::Type_Normal: + *end1 = Cache()[m_CachePos].End1; + *end2 = Cache()[m_CachePos].End2; + *hasEnding = true; + break; + + case wxHtmlCacheItem::Type_EndingTag: + wxFAIL_MSG("QueryTag called for ending tag - can't be"); + // but if it does happen, fall through, better than crashing + + case wxHtmlCacheItem::Type_NoMatchingEndingTag: + // If input HTML is invalid and there's no closing tag for this + // one, pretend that it runs all the way to the end of input + *end1 = inputEnd; + *end2 = inputEnd; + *hasEnding = false; + break; + } } @@ -284,7 +302,7 @@ wxHtmlTag::wxHtmlTag(wxHtmlTag *parent, /* Find parameters and their values: */ - wxChar c; + wxChar c wxDUMMY_INITIALIZE(0); // fill-in name, params and begin pos: wxString::const_iterator i(pos+1); @@ -293,7 +311,7 @@ wxHtmlTag::wxHtmlTag(wxHtmlTag *parent, while ((i < end_pos) && ((c = *(i++)) != wxT(' ') && c != wxT('\r') && c != wxT('\n') && c != wxT('\t') && - c != wxT('>'))) + c != wxT('>') && c != wxT('/'))) { if ((c >= wxT('a')) && (c <= wxT('z'))) c -= (wxT('a') - wxT('A')); @@ -465,15 +483,15 @@ int wxHtmlTag::ScanParam(const wxString& par, bool wxHtmlTag::GetParamAsColour(const wxString& par, wxColour *clr) const { - wxCHECK_MSG( clr, false, _T("invalid colour argument") ); + wxCHECK_MSG( clr, false, wxT("invalid colour argument") ); wxString str = GetParam(par); // handle colours defined in HTML 4.0 first: - if (str.length() > 1 && str[0] != _T('#')) + if (str.length() > 1 && str[0] != wxT('#')) { - #define HTML_COLOUR(name, r, g, b) \ - if (str.IsSameAs(wxSTRING_TEXT(name), false)) \ + #define HTML_COLOUR(name, r, g, b) \ + if (str.IsSameAs(wxS(name), false)) \ { clr->Set(r, g, b); return true; } HTML_COLOUR("black", 0x00,0x00,0x00) HTML_COLOUR("silver", 0xC0,0xC0,0xC0) @@ -506,11 +524,15 @@ bool wxHtmlTag::GetParamAsColour(const wxString& par, wxColour *clr) const bool wxHtmlTag::GetParamAsInt(const wxString& par, int *clr) const { - if (!HasParam(par)) return false; + if ( !HasParam(par) ) + return false; + long i; - bool succ = GetParam(par).ToLong(&i); + if ( !GetParam(par).ToLong(&i) ) + return false; + *clr = (int)i; - return succ; + return true; } wxString wxHtmlTag::GetAllParams() const