-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 "";
-    for (st2 = st, p2 = p; ; st2++) {
-        if (*p2 == 0) { // found
-            wxString fnd = "";
-            st2++; // '=' character
-            comma = FALSE;
-           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 (comma && *st2 == comma_char) comma = FALSE;
-                else if ((*st2 == ' ') && (!comma)) break;
-                fnd += (*(st2++));
-            }
-            if (!with_commas && (*(st2-1) == comma_char)) fnd.RemoveLast();
-            return fnd;
-        }
-        if (*st2 == 0) return "";
-        if (*p2 != *st2) p2 = p;
-        if (*p2 == *st2) p2++;
-        if (*st2 == ' ') p2 = p;
-        else if (*st2 == '=') {
-            p2 = p;
-            while (*st2 != ' ') {
-                if (*st2 == '"') {
-                    st2++;
-                    while (*st2 != '"') st2++;
-                }
-                else if (*st2 == '\'') {
-                    st2++;
-                    while (*st2 != '\'') st2++;
-                }
-                st2++;
-            }
-        }
+bool wxHtmlTag::GetParamAsColour(const wxString& par, wxColour *clr) const
+{
+    wxCHECK_MSG( clr, false, _T("invalid colour argument") );
+
+    wxString str = GetParam(par);
+
+    // handle colours defined in HTML 4.0 first:
+    if (str.length() > 1 && str[0] != _T('#'))
+    {
+        #define HTML_COLOUR(name, r, g, b)              \
+            if (str.IsSameAs(wxS(name), false))         \
+                { 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)
+        HTML_COLOUR("white",   0xFF,0xFF,0xFF)
+        HTML_COLOUR("maroon",  0x80,0x00,0x00)
+        HTML_COLOUR("red",     0xFF,0x00,0x00)
+        HTML_COLOUR("purple",  0x80,0x00,0x80)
+        HTML_COLOUR("fuchsia", 0xFF,0x00,0xFF)
+        HTML_COLOUR("green",   0x00,0x80,0x00)
+        HTML_COLOUR("lime",    0x00,0xFF,0x00)
+        HTML_COLOUR("olive",   0x80,0x80,0x00)
+        HTML_COLOUR("yellow",  0xFF,0xFF,0x00)
+        HTML_COLOUR("navy",    0x00,0x00,0x80)
+        HTML_COLOUR("blue",    0x00,0x00,0xFF)
+        HTML_COLOUR("teal",    0x00,0x80,0x80)
+        HTML_COLOUR("aqua",    0x00,0xFF,0xFF)
+        #undef HTML_COLOUR