X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0beefa20dc5a3b5dec000b386c22a4e192a70698..7152f0c68dfb73bad2a3dd0304f3723c18c9a668:/src/html/htmlpars.cpp diff --git a/src/html/htmlpars.cpp b/src/html/htmlpars.cpp index cf6897d335..69be9d281e 100644 --- a/src/html/htmlpars.cpp +++ b/src/html/htmlpars.cpp @@ -318,7 +318,7 @@ void wxHtmlParser::AddTagHandler(wxHtmlTagHandler *handler) wxStringTokenizer tokenizer(s, wxT(", ")); while (tokenizer.HasMoreTokens()) - m_HandlersHash.Put(tokenizer.NextToken(), handler); + m_HandlersHash.Put(tokenizer.GetNextToken(), handler); if (m_HandlersList.IndexOf(handler) == wxNOT_FOUND) m_HandlersList.Append(handler); @@ -341,7 +341,7 @@ void wxHtmlParser::PushTagHandler(wxHtmlTagHandler *handler, wxString tags) while (tokenizer.HasMoreTokens()) { - key = tokenizer.NextToken(); + key = tokenizer.GetNextToken(); m_HandlersHash.Delete(key); m_HandlersHash.Put(key, handler); } @@ -448,6 +448,8 @@ wxString wxHtmlEntitiesParser::Parse(const wxString& input) const wxChar *c, *last; const wxChar *in_str = input.c_str(); wxString output; + + output.reserve(input.length()); for (c = in_str, last = in_str; *c != wxT('\0'); c++) { @@ -456,8 +458,11 @@ wxString wxHtmlEntitiesParser::Parse(const wxString& input) if (c - last > 0) output.append(last, c - last); if (++c == wxT('\0')) break; + wxString entity; const wxChar *ent_s = c; + wxChar entity_char; + for (; (*c >= wxT('a') && *c <= wxT('z')) || (*c >= wxT('A') && *c <= wxT('Z')) || (*c >= wxT('0') && *c <= wxT('9')) || @@ -465,7 +470,14 @@ wxString wxHtmlEntitiesParser::Parse(const wxString& input) entity.append(ent_s, c - ent_s); if (*c != wxT(';')) c--; last = c+1; - output << GetEntityChar(entity); + entity_char = GetEntityChar(entity); + if (entity_char) + output << entity_char; + else + { + output.append(ent_s-1, c-ent_s+2); + wxLogDebug(wxT("Unrecognized HTML entity: '%s'"), entity.c_str()); + } } } if (*last != wxT('\0')) @@ -479,7 +491,7 @@ struct wxHtmlEntityInfo unsigned code; }; -static int LINKAGEMODE compar_entity(const void *key, const void *item) +extern "C" int LINKAGEMODE wxHtmlEntityCompare(const void *key, const void *item) { return wxStrcmp((wxChar*)key, ((wxHtmlEntityInfo*)item)->name); } @@ -789,15 +801,21 @@ wxChar wxHtmlEntitiesParser::GetEntityChar(const wxString& entity) info = (wxHtmlEntityInfo*) bsearch(entity.c_str(), substitutions, substitutions_cnt, sizeof(wxHtmlEntityInfo), - compar_entity); + wxHtmlEntityCompare); if (info) code = info->code; } if (code == 0) - return wxT('?'); + return 0; else return GetCharForCode(code); } +wxFSFile *wxHtmlParser::OpenURL(wxHtmlURLType WXUNUSED(type), + const wxString& url) const +{ + return GetFS()->OpenFile(url); +} + #endif