]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/htmltag.cpp
fix for assert when setting tooltip for a readonly combo
[wxWidgets.git] / src / html / htmltag.cpp
index e1732712355f7f0a40a8f523497cc792b192fc02..577728d50a366f97c71896d621c498eca63a8531 100644 (file)
@@ -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
 /////////////////////////////////////////////////////////////////////////////
@@ -11,7 +12,7 @@
 #pragma implementation
 #endif
 
-#include <wx/wxprec.h>
+#include "wx/wxprec.h"
 
 #include "wx/defs.h"
 #if wxUSE_HTML
 #endif
 
 #ifndef WXPRECOMP
-#include <wx/wx.h>
+#include "wx/wx.h"
 #endif
 
-#include <wx/html/htmltag.h>
+#include "wx/html/htmltag.h"
 #include <stdio.h> // for vsscanf
 #include <stdarg.h>
 
@@ -41,10 +42,10 @@ IMPLEMENT_CLASS(wxHtmlTagsCache,wxObject)
 
 wxHtmlTagsCache::wxHtmlTagsCache(const wxString& source)
 {
-    const char *src = source.c_str();
+    const wxChar *src = source.c_str();
     int i, tg, pos, stpos;
     int lng = source.Length();
-    char dummy[256];
+    wxChar dummy[256];
 
     m_Cache = NULL;
     m_CacheSize = 0;
@@ -52,28 +53,31 @@ wxHtmlTagsCache::wxHtmlTagsCache(const wxString& source)
 
     pos = 0;
     while (pos < lng) {
-        if (src[pos] == '<') {  // tag found:
+        if (src[pos] == wxT('<')) {  // tag found:
             if (m_CacheSize % CACHE_INCREMENT == 0)
                 m_Cache = (sCacheItem*) realloc(m_Cache, (m_CacheSize + CACHE_INCREMENT) * sizeof(sCacheItem));
             tg = m_CacheSize++;
             m_Cache[tg].Key = stpos = pos++;
             dummy[0] = 0; i = 0;
-            while ((src[pos] != '>') && (src[pos] != ' ')) {
+            while (pos < lng && 
+                   src[pos] != wxT('>') &&
+                   src[pos] != wxT(' ') && src[pos] != wxT('\r') && 
+                   src[pos] != wxT('\n') && src[pos] != wxT('\t')) {
                 dummy[i] = src[pos++];
-                if ((dummy[i] >= 'a') && (dummy[i] <= 'z')) dummy[i] -= ('a' - 'A');
+                if ((dummy[i] >= wxT('a')) && (dummy[i] <= wxT('z'))) dummy[i] -= (wxT('a') - wxT('A'));
                 i++;
             }
             dummy[i] = 0;
-            m_Cache[tg].Name = new char[i+1];
-            memcpy(m_Cache[tg].Name, dummy, i+1);
+            m_Cache[tg].Name = new wxChar[i+1];
+            memcpy(m_Cache[tg].Name, dummy, (i+1)*sizeof(wxChar));
 
-            while (src[pos] != '>') pos++;
+            while (pos < lng && src[pos] != wxT('>')) pos++;
 
-            if (src[stpos+1] == '/') { // ending tag:
+            if (src[stpos+1] == wxT('/')) { // ending tag:
                 m_Cache[tg].End1 = m_Cache[tg].End2 = -2;
                 // find matching begin tag:
                 for (i = tg; i >= 0; i--)
-                    if ((m_Cache[i].End1 == -1) && (strcmp(m_Cache[i].Name, dummy+1) == 0)) {
+                    if ((m_Cache[i].End1 == -1) && (wxStrcmp(m_Cache[i].Name, dummy+1) == 0)) {
                         m_Cache[i].End1 = stpos;
                         m_Cache[i].End2 = pos + 1;
                         break;
@@ -127,7 +131,9 @@ wxHtmlTag::wxHtmlTag(const wxString& source, int pos, int end_pos, wxHtmlTagsCac
     if (source[i] == '/') {m_Ending = TRUE; i++;}
     else m_Ending = FALSE;
 
-    while ((i < end_pos) && ((c = source[i++]) != ' ') && (c != '>')) {
+    while ((i < end_pos) && 
+               ((c = source[i++]) != ' ' && c != '\r' && c != '\n' && c != '\t' &&
+                c != '>')) {
         if ((c >= 'a') && (c <= 'z')) c -= ('a' - 'A');
         m_Name += c;
     }
@@ -135,6 +141,7 @@ wxHtmlTag::wxHtmlTag(const wxString& source, int pos, int end_pos, wxHtmlTagsCac
     if (source[i-1] != '>')
         while ((i < end_pos) && ((c = source[i++]) != '>')) {
             if ((c >= 'a') && (c <= 'z')) c -= ('a' - 'A');
+            if (c == '\r' || c == '\n' || c == '\t') c = ' '; // make future parsing a bit simpler
             m_Params += c;
             if (c == '"') {
                 while ((i < end_pos) && ((c = source[i++]) != '"')) m_Params += c;
@@ -156,8 +163,8 @@ wxHtmlTag::wxHtmlTag(const wxString& source, int pos, int end_pos, wxHtmlTagsCac
 
 bool wxHtmlTag::HasParam(const wxString& par) const
 {
-    const char *st = m_Params, *p = par;
-    const char *st2, *p2;
+    const wxChar *st = m_Params, *p = par;
+    const wxChar *st2, *p2;
 
     if (*st == 0) return FALSE;
     if (*p == 0) return FALSE;
@@ -185,8 +192,8 @@ bool wxHtmlTag::HasParam(const wxString& par) const
 
 wxString wxHtmlTag::GetParam(const wxString& par, bool with_commas) const
 {
-    const char *st = m_Params, *p = par;
-    const char *st2, *p2;
+    const wxChar *st = m_Params, *p = par;
+    const wxChar *st2, *p2;
     bool comma;
     char comma_char;
 
@@ -239,10 +246,10 @@ wxString wxHtmlTag::GetParam(const wxString& par, bool with_commas) const
 
 
 
-int wxHtmlTag::ScanParam(const wxString& par, char *format, void *param) const
+int wxHtmlTag::ScanParam(const wxString& par, wxChar *format, void *param) const
 {
     wxString parval = GetParam(par);
-    return sscanf((const char*)parval, format, param);
+    return wxSscanf((const wxChar*)parval, format, param);
 }
 
 #endif