// Name: htmltag.cpp
// Purpose: wxHtmlTag class (represents single tag)
// Author: Vaclav Slavik
+// RCS-ID: $Id$
// Copyright: (c) 1999 Vaclav Slavik
// Licence: wxWindows Licence
/////////////////////////////////////////////////////////////////////////////
#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>
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;
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;
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;
}
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;
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;
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;
-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