X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4d223b670407f32abd3ca962ec08fdc0da2df3f8..275abf24e140159f2ac19b64b76737a6903b1319:/src/html/htmltag.cpp diff --git a/src/html/htmltag.cpp b/src/html/htmltag.cpp index 9f36d68957..24a45f4ca0 100644 --- a/src/html/htmltag.cpp +++ b/src/html/htmltag.cpp @@ -2,6 +2,7 @@ // Name: htmltag.cpp // Purpose: wxHtmlTag class (represents single tag) // Author: Vaclav Slavik +// RCS-ID: $Id$ // Copyright: (c) 1999 Vaclav Slavik // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// @@ -24,7 +25,8 @@ #include #endif -#include +#include "wx/html/htmltag.h" +#include // for vsscanf #include @@ -63,7 +65,7 @@ wxHtmlTagsCache::wxHtmlTagsCache(const wxString& source) i++; } dummy[i] = 0; - m_Cache[tg].Name = (char*) malloc(i+1); + m_Cache[tg].Name = new char[i+1]; memcpy(m_Cache[tg].Name, dummy, i+1); while (src[pos] != '>') pos++; @@ -88,7 +90,7 @@ wxHtmlTagsCache::wxHtmlTagsCache(const wxString& source) // ok, we're done, now we'll free .Name members of cache - we don't need it anymore: for (i = 0; i < m_CacheSize; i++) { - free(m_Cache[i].Name); + delete[] m_Cache[i].Name; m_Cache[i].Name = NULL; } } @@ -139,6 +141,10 @@ wxHtmlTag::wxHtmlTag(const wxString& source, int pos, int end_pos, wxHtmlTagsCac while ((i < end_pos) && ((c = source[i++]) != '"')) m_Params += c; m_Params += c; } + else if (c == '\'') { + while ((i < end_pos) && ((c = source[i++]) != '\'')) m_Params += c; + m_Params += c; + } } m_Begin = i; @@ -183,6 +189,7 @@ wxString wxHtmlTag::GetParam(const wxString& par, bool with_commas) const const char *st = m_Params, *p = par; const char *st2, *p2; bool comma; + char comma_char; if (*st == 0) return ""; if (*p == 0) return ""; @@ -191,13 +198,23 @@ wxString wxHtmlTag::GetParam(const wxString& par, bool with_commas) const wxString fnd = ""; st2++; // '=' character comma = FALSE; - if (!with_commas && (*(st2) == '"')) {st2++; comma = TRUE;} + comma_char = '\0'; + if (!with_commas && (*(st2) == '"')) { + st2++; + comma = TRUE; + comma_char = '"'; + } + else if (!with_commas && (*(st2) == '\'')) { + st2++; + comma = TRUE; + comma_char = '\''; + } while (*st2 != 0) { - if (*st2 == '"') comma = !comma; + if (comma && *st2 == comma_char) comma = FALSE; else if ((*st2 == ' ') && (!comma)) break; fnd += (*(st2++)); } - if (!with_commas && (*(st2-1) == '"')) fnd.RemoveLast(); + if (!with_commas && (*(st2-1) == comma_char)) fnd.RemoveLast(); return fnd; } if (*st2 == 0) return ""; @@ -211,6 +228,10 @@ wxString wxHtmlTag::GetParam(const wxString& par, bool with_commas) const st2++; while (*st2 != '"') st2++; } + else if (*st2 == '\'') { + st2++; + while (*st2 != '\'') st2++; + } st2++; } } @@ -219,31 +240,10 @@ wxString wxHtmlTag::GetParam(const wxString& par, bool with_commas) const -void wxHtmlTag::ScanParam(const wxString& par, char *format, ...) const +int wxHtmlTag::ScanParam(const wxString& par, char *format, void *param) const { - va_list argptr; wxString parval = GetParam(par); - - va_start(argptr, format); - -//#if defined(__MINGW32__) || defined(__CYGWIN__) || defined(__VISUALC__) -#ifndef HAVE_VSSCANF - sscanf((const char*)parval, format, va_arg(argptr, void *)); -#else - vsscanf((const char*)parval, format, argptr); -#endif - -/* - --- vsscanf is not defined under Cygwin or Mingw32 or M$ Visual C++ environment - if this module doesn't compile with your compiler, - modify the def statement and let me know. Thanks... - - So far wxHtml functions are scanning only _one_ value - so I workarounded this by supposing that there is only - one ...-parameter -*/ - - va_end(argptr); + return sscanf((const char*)parval, format, param); } #endif