fixed yet another bug in wxHtmlTag's parameters parser

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10618 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík 2001-06-20 13:16:15 +00:00
parent 2004cad1ed
commit a914db0fb3

View File

@ -71,7 +71,7 @@ wxHtmlTagsCache::wxHtmlTagsCache(const wxString& source)
while (pos < lng)
{
if (src[pos] == wxT('<')) // tag found:
{
{
if (m_CacheSize % CACHE_INCREMENT == 0)
m_Cache = (wxHtmlCacheItem*) realloc(m_Cache, (m_CacheSize + CACHE_INCREMENT) * sizeof(wxHtmlCacheItem));
tg = m_CacheSize++;
@ -81,7 +81,7 @@ wxHtmlTagsCache::wxHtmlTagsCache(const wxString& source)
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] >= wxT('a')) && (dummy[i] <= wxT('z'))) dummy[i] -= (wxT('a') - wxT('A'));
i++;
@ -93,19 +93,19 @@ wxHtmlTagsCache::wxHtmlTagsCache(const wxString& source)
while (pos < lng && src[pos] != wxT('>')) pos++;
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) && (wxStrcmp(m_Cache[i].Name, dummy+1) == 0))
{
{
m_Cache[i].End1 = stpos;
m_Cache[i].End2 = pos + 1;
break;
}
}
else
{
{
m_Cache[tg].End1 = m_Cache[tg].End2 = -1;
}
}
@ -160,7 +160,7 @@ wxHtmlTag::wxHtmlTag(const wxString& source, int pos, int end_pos, wxHtmlTagsCac
((c = source[i++]) != wxT(' ') && c != wxT('\r') &&
c != wxT('\n') && c != wxT('\t') &&
c != wxT('>')))
{
{
if ((c >= wxT('a')) && (c <= wxT('z'))) c -= (wxT('a') - wxT('A'));
m_Name += c;
}
@ -170,14 +170,14 @@ wxHtmlTag::wxHtmlTag(const wxString& source, int pos, int end_pos, wxHtmlTagsCac
// remove whitespaces around '=':
if (source[i-1] != wxT('>'))
while ((i < end_pos) && ((c = source[i++]) != wxT('>')))
{
{
if ((c >= wxT('a')) && (c <= wxT('z')))
c -= (wxT('a') - wxT('A'));
if (c == wxT('\r') || c == wxT('\n') || c == wxT('\t'))
c = wxT(' '); // make future parsing a bit simpler
m_Params += c;
if (c == wxT('"'))
{
{
// remove spaces around the '=' character:
if (m_Params.Length() > 1 &&
m_Params[m_Params.Length()-2] == wxT(' '))
@ -196,7 +196,7 @@ wxHtmlTag::wxHtmlTag(const wxString& source, int pos, int end_pos, wxHtmlTagsCac
m_Params += c;
}
else if (c == wxT('\''))
{
{
while ((i < end_pos) && ((c = source[i++]) != wxT('\'')))
m_Params += c;
m_Params += c;
@ -221,18 +221,18 @@ bool wxHtmlTag::HasParam(const wxString& par) const
if (*p == 0) return FALSE;
for (st2 = st, p2 = p; ; st2++)
{
if (*p2 == 0) return TRUE;
if (*p2 == 0 && *st2 == wxT('=')) return TRUE;
if (*st2 == 0) return FALSE;
if (*p2 != *st2) p2 = &invalid;
if (*p2 == *st2) p2++;
if (*st2 == wxT(' ')) p2 = p;
else if (*st2 == wxT('='))
{
{
p2 = p;
while (*st2 != wxT(' '))
{
{
if (*st2 == wxT('"'))
{
{
st2++;
while (*st2 != wxT('"')) st2++;
}
@ -257,27 +257,27 @@ wxString wxHtmlTag::GetParam(const wxString& par, bool with_commas) const
if (*p == 0) return wxEmptyString;
for (st2 = st, p2 = p; ; st2++)
{
if (*p2 == 0) // found
{
if (*p2 == 0 && *st2 == wxT('=')) // found
{
wxString fnd = wxEmptyString;
st2++; // '=' character
comma = FALSE;
comma_char = wxT('\0');
comma_char = wxT('\0');
if (!with_commas && (*(st2) == wxT('"')))
{
st2++;
comma = TRUE;
comma_char = wxT('"');
}
else if (!with_commas && (*(st2) == wxT('\'')))
{
st2++;
comma = TRUE;
comma_char = wxT('\'');
}
{
st2++;
comma = TRUE;
comma_char = wxT('"');
}
else if (!with_commas && (*(st2) == wxT('\'')))
{
st2++;
comma = TRUE;
comma_char = wxT('\'');
}
while (*st2 != 0)
{
{
if (comma && *st2 == comma_char) comma = FALSE;
else if ((*st2 == wxT(' ')) && (!comma)) break;
fnd += (*(st2++));
@ -290,17 +290,17 @@ wxString wxHtmlTag::GetParam(const wxString& par, bool with_commas) const
if (*p2 == *st2) p2++;
if (*st2 == wxT(' ')) p2 = p;
else if (*st2 == wxT('='))
{
{
p2 = p;
while (*st2 != wxT(' '))
{
{
if (*st2 == wxT('"'))
{
{
st2++;
while (*st2 != wxT('"')) st2++;
}
else if (*st2 == wxT('\''))
{
{
st2++;
while (*st2 != wxT('\'')) st2++;
}