#if wxUSE_HTML
+#include "wx/html/htmltag.h"
+
#ifndef WXPRECOMP
+ #include "wx/colour.h"
#endif
-#include "wx/html/htmltag.h"
#include "wx/html/htmlpars.h"
-#include "wx/colour.h"
#include <stdio.h> // for vsscanf
#include <stdarg.h>
bool wxHtmlTag::GetParamAsColour(const wxString& par, wxColour *clr) const
{
+ wxCHECK_MSG( clr, false, _T("invalid colour argument") );
+
wxString str = GetParam(par);
- if (str.empty()) return false;
- if (str.GetChar(0) == wxT('#'))
- {
- unsigned long tmp;
- if (ScanParam(par, wxT("#%lX"), &tmp) != 1)
- return false;
- *clr = wxColour((unsigned char)((tmp & 0xFF0000) >> 16),
- (unsigned char)((tmp & 0x00FF00) >> 8),
- (unsigned char)(tmp & 0x0000FF));
- return true;
- }
- else
+ // handle colours defined in HTML 4.0 first:
+ if (str.length() > 1 && str[0] != _T('#'))
{
- // Handle colours defined in HTML 4.0:
- #define HTML_COLOUR(name,r,g,b) \
+ #define HTML_COLOUR(name, r, g, b) \
if (str.IsSameAs(wxT(name), false)) \
- { *clr = wxColour(r,g,b); return true; }
+ { clr->Set(r, g, b); return true; }
HTML_COLOUR("black", 0x00,0x00,0x00)
HTML_COLOUR("silver", 0xC0,0xC0,0xC0)
HTML_COLOUR("gray", 0x80,0x80,0x80)
#undef HTML_COLOUR
}
+ // then try to parse #rrggbb representations or set from other well
+ // known names (note that this doesn't strictly conform to HTML spec,
+ // but it doesn't do real harm -- but it *must* be done after the standard
+ // colors are handled above):
+ if (clr->Set(str))
+ return true;
+
return false;
}