#include "htmlattrs.h"
struct attrs {
const char *name;
int id;
};
#ifdef __GNUC__
__inline
#else
#ifdef __cplusplus
inline
#endif
#endif
static unsigned int
hash_attr (register const char *str, register unsigned int len)
{
static const unsigned short asso_values[] =
{
923, 923, 923, 923, 923, 923, 923, 923, 923, 923,
923, 923, 923, 923, 923, 923, 923, 923, 923, 923,
923, 923, 923, 923, 923, 923, 923, 923, 923, 923,
923, 923, 923, 923, 923, 923, 923, 923, 923, 923,
923, 923, 923, 923, 923, 0, 923, 923, 923, 923,
923, 923, 923, 923, 923, 923, 923, 923, 923, 923,
923, 923, 923, 923, 923, 923, 923, 923, 923, 923,
923, 923, 923, 923, 923, 923, 923, 923, 923, 923,
923, 923, 923, 923, 923, 923, 923, 923, 923, 923,
923, 923, 923, 923, 923, 923, 923, 35, 25, 0,
75, 0, 45, 90, 135, 55, 0, 305, 0, 185,
0, 0, 50, 5, 115, 5, 15, 15, 40, 35,
70, 55, 5, 923, 923, 923, 923, 923, 923, 923,
923, 923, 923, 923, 923, 923, 923, 923, 923, 923,
923, 923, 923, 923, 923, 923, 923, 923, 923, 923,
923, 923, 923, 923, 923, 923, 923, 923, 923, 923,
923, 923, 923, 923, 923, 923, 923, 923, 923, 923,
923, 923, 923, 923, 923, 923, 923, 923, 923, 923,
923, 923, 923, 923, 923, 923, 923, 923, 923, 923,
923, 923, 923, 923, 923, 923, 923, 923, 923, 923,
923, 923, 923, 923, 923, 923, 923, 923, 923, 923,
923, 923, 923, 923, 923, 923, 923, 923, 923, 923,
923, 923, 923, 923, 923, 923, 923, 923, 923, 923,
923, 923, 923, 923, 923, 923, 923, 923, 923, 923,
923, 923, 923, 923, 923, 923, 923, 923, 923, 923,
923, 923, 923, 923, 923, 923
};
register int hval = len;
switch (hval)
{
default:
case 14:
hval += asso_values[(unsigned char)str[13]];
case 13:
hval += asso_values[(unsigned char)str[12]];
case 12:
hval += asso_values[(unsigned char)str[11]];
case 11:
hval += asso_values[(unsigned char)str[10]];
case 10:
hval += asso_values[(unsigned char)str[9]];
case 9:
hval += asso_values[(unsigned char)str[8]];
case 8:
hval += asso_values[(unsigned char)str[7]];
case 7:
hval += asso_values[(unsigned char)str[6]];
case 6:
hval += asso_values[(unsigned char)str[5]];
case 5:
hval += asso_values[(unsigned char)str[4]];
case 4:
hval += asso_values[(unsigned char)str[3]];
case 3:
hval += asso_values[(unsigned char)str[2]];
case 2:
hval += asso_values[(unsigned char)str[1]];
case 1:
hval += asso_values[(unsigned char)str[0]];
break;
}
return hval;
}
#ifdef __GNUC__
__inline
#endif
const struct attrs *
findAttr (register const char *str, register unsigned int len)
{
enum
{
TOTAL_KEYWORDS = 145,
MIN_WORD_LENGTH = 2,
MAX_WORD_LENGTH = 14,
MIN_HASH_VALUE = 9,
MAX_HASH_VALUE = 922
};
static const struct attrs wordlist_attr[] =
{
{"cols", ATTR_COLS},
{"onselect", ATTR_ONSELECT},
{"content", ATTR_CONTENT},
{"object", ATTR_OBJECT},
{"class", ATTR_CLASS},
{"alt", ATTR_ALT},
{"scope", ATTR_SCOPE},
{"left", ATTR_LEFT},
{"label", ATTR_LABEL},
{"top", ATTR_TOP},
{"size", ATTR_SIZE},
{"onfocus", ATTR_ONFOCUS},
{"cite", ATTR_CITE},
{"code", ATTR_CODE},
{"style", ATTR_STYLE},
{"face", ATTR_FACE},
{"nosave", ATTR_NOSAVE},
{"title", ATTR_TITLE},
{"span", ATTR_SPAN},
{"value", ATTR_VALUE},
{"colspan", ATTR_COLSPAN},
{"selected", ATTR_SELECTED},
{"text", ATTR_TEXT},
{"accept", ATTR_ACCEPT},
{"action", ATTR_ACTION},
{"onload", ATTR_ONLOAD},
{"rel", ATTR_REL},
{"color", ATTR_COLOR},
{"src", ATTR_SRC},
{"type", ATTR_TYPE},
{"enctype", ATTR_ENCTYPE},
{"lang", ATTR_LANG},
{"id", ATTR_ID},
{"onunload", ATTR_ONUNLOAD},
{"vspace", ATTR_VSPACE},
{"rules", ATTR_RULES},
{"onreset", ATTR_ONRESET},
{"plain", ATTR_PLAIN},
{"codebase", ATTR_CODEBASE},
{"clear", ATTR_CLEAR},
{"rev", ATTR_REV},
{"rows", ATTR_ROWS},
{"onblur", ATTR_ONBLUR},
{"for", ATTR_FOR},
{"data", ATTR_DATA},
{"axis", ATTR_AXIS},
{"longdesc", ATTR_LONGDESC},
{"classid", ATTR_CLASSID},
{"align", ATTR_ALIGN},
{"noresize", ATTR_NORESIZE},
{"onresize", ATTR_ONRESIZE},
{"start", ATTR_START},
{"onabort", ATTR_ONABORT},
{"coords", ATTR_COORDS},
{"codetype", ATTR_CODETYPE},
{"abbr", ATTR_ABBR},
{"z-index", ATTR_Z_INDEX},
{"standby", ATTR_STANDBY},
{"valuetype", ATTR_VALUETYPE},
{"version", ATTR_VERSION},
{"name", ATTR_NAME},
{"valign", ATTR_VALIGN},
{"shape", ATTR_SHAPE},
{"hspace", ATTR_HSPACE},
{"declare", ATTR_DECLARE},
{"pagey", ATTR_PAGEY},
{"bgcolor", ATTR_BGCOLOR},
{"wrap", ATTR_WRAP},
{"defer", ATTR_DEFER},
{"nowrap", ATTR_NOWRAP},
{"onmouseout", ATTR_ONMOUSEOUT},
{"cellspacing", ATTR_CELLSPACING},
{"rowspan", ATTR_ROWSPAN},
{"dir", ATTR_DIR},
{"pagex", ATTR_PAGEX},
{"noshade", ATTR_NOSHADE},
{"onchange", ATTR_ONCHANGE},
{"challenge", ATTR_CHALLENGE},
{"profile", ATTR_PROFILE},
{"language", ATTR_LANGUAGE},
{"scrolling", ATTR_SCROLLING},
{"target", ATTR_TARGET},
{"disabled", ATTR_DISABLED},
{"onmouseup", ATTR_ONMOUSEUP},
{"oversrc", ATTR_OVERSRC},
{"tabindex", ATTR_TABINDEX},
{"readonly", ATTR_READONLY},
{"char", ATTR_CHAR},
{"compact", ATTR_COMPACT},
{"usemap", ATTR_USEMAP},
{"href", ATTR_HREF},
{"nohref", ATTR_NOHREF},
{"onsubmit", ATTR_ONSUBMIT},
{"charset", ATTR_CHARSET},
{"oncontextmenu", ATTR_ONCONTEXTMENU},
{"width", ATTR_WIDTH},
{"onmousedown", ATTR_ONMOUSEDOWN},
{"autocomplete", ATTR_AUTOCOMPLETE},
{"multiple", ATTR_MULTIPLE},
{"scheme", ATTR_SCHEME},
{"ismap", ATTR_ISMAP},
{"border", ATTR_BORDER},
{"html", ATTR_HTML},
{"http-equiv", ATTR_HTTP_EQUIV},
{"hidden", ATTR_HIDDEN},
{"pluginurl", ATTR_PLUGINURL},
{"onerror", ATTR_ONERROR},
{"media", ATTR_MEDIA},
{"unknown", ATTR_UNKNOWN},
{"link", ATTR_LINK},
{"onclick", ATTR_ONCLICK},
{"visibility", ATTR_VISIBILITY},
{"onmouseover", ATTR_ONMOUSEOVER},
{"headers", ATTR_HEADERS},
{"charoff", ATTR_CHAROFF},
{"frame", ATTR_FRAME},
{"archive", ATTR_ARCHIVE},
{"datetime", ATTR_DATETIME},
{"cellpadding", ATTR_CELLPADDING},
{"pluginpage", ATTR_PLUGINPAGE},
{"alink", ATTR_ALINK},
{"pluginspage", ATTR_PLUGINSPAGE},
{"vlink", ATTR_VLINK},
{"accesskey", ATTR_ACCESSKEY},
{"method", ATTR_METHOD},
{"accept-charset", ATTR_ACCEPT_CHARSET},
{"prompt", ATTR_PROMPT},
{"hreflang", ATTR_HREFLANG},
{"onkeyup", ATTR_ONKEYUP},
{"height", ATTR_HEIGHT},
{"onmousemove", ATTR_ONMOUSEMOVE},
{"bordercolor", ATTR_BORDERCOLOR},
{"ondblclick", ATTR_ONDBLCLICK},
{"onkeydown", ATTR_ONKEYDOWN},
{"checked", ATTR_CHECKED},
{"bgproperties", ATTR_BGPROPERTIES},
{"maxlength", ATTR_MAXLENGTH},
{"onkeypress", ATTR_ONKEYPRESS},
{"leftmargin", ATTR_LEFTMARGIN},
{"topmargin", ATTR_TOPMARGIN},
{"summary", ATTR_SUMMARY},
{"background", ATTR_BACKGROUND},
{"frameborder", ATTR_FRAMEBORDER},
{"marginwidth", ATTR_MARGINWIDTH},
{"marginheight", ATTR_MARGINHEIGHT}
};
static const short lookup[] =
{
-1, -1, -1, -1, -1, -1, -1, -1,
-1, 0, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 1, -1, -1, -1,
-1, -1, -1, -1, -1, 2, -1, -1,
-1, -1, -1, -1, -1, -1, 3, -1,
-1, -1, 4, -1, -1, 5, -1, -1,
-1, -1, -1, -1, 6, -1, -1, -1,
7, 8, -1, -1, 9, 10, -1, -1,
11, -1, 12, -1, -1, -1, -1, 13,
14, -1, -1, -1, 15, -1, 16, -1,
-1, -1, 17, -1, -1, -1, 18, 19,
-1, 20, -1, -1, -1, -1, -1, 21,
22, -1, 23, -1, -1, -1, -1, 24,
-1, -1, -1, -1, 25, -1, 26, -1,
27, -1, -1, 28, 29, -1, -1, 30,
-1, 31, -1, -1, 32, 33, -1, -1,
34, -1, -1, -1, 35, -1, 36, -1,
-1, 37, -1, -1, 38, -1, -1, -1,
-1, -1, -1, 39, -1, -1, 40, 41,
-1, 42, -1, 43, 44, -1, -1, -1,
-1, 45, -1, -1, -1, -1, -1, -1,
-1, -1, 46, -1, -1, -1, 47, -1,
-1, 48, -1, -1, -337, -1, 51, -96,
-2, -1, -1, -1, -1, 52, -1, -1,
-1, 53, -1, 54, 55, -1, -1, -1,
-1, -1, -1, -1, 56, -1, -1, -1,
-1, 57, -1, 58, -1, -1, 59, -1,
60, -1, 61, -1, -1, -1, 62, 63,
64, -1, -1, 65, -1, 66, -1, 67,
68, 69, -1, -1, -1, 70, 71, 72,
73, -1, 74, -1, -1, -1, -1, -1,
-1, 75, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 76, 77, -1, -1,
78, 79, 80, -1, 81, -1, 82, 83,
-1, -1, 84, 85, -1, -1, -1, -1,
86, 87, -1, -1, 88, -1, -1, -1,
89, -1, -1, 90, -1, 91, -1, -1,
-1, -1, -1, -1, 92, -1, -1, -1,
93, 94, -1, -1, -1, -1, -1, -1,
95, -1, -1, -1, -1, -1, 96, 97,
98, -1, -1, 99, -1, -1, -1, 100,
101, -1, -1, 102, 103, -1, -1, -1,
-1, -1, 104, -1, -1, 105, -1, -1,
106, -1, -1, 107, -1, -1, -1, -1,
-1, -1, 108, -1, 109, -1, -1, 110,
-1, -1, 111, 112, 113, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 114, -1,
-1, 115, -1, 116, 117, -1, -1, 118,
-1, -1, -1, 119, -1, -1, -1, -1,
120, 121, -1, -1, -1, 122, -1, -1,
-1, -1, -1, -1, -1, -1, 123, -1,
124, -1, -1, 125, -1, 126, -1, -1,
-1, -1, -1, -1, 127, -1, -1, -1,
128, -1, -1, -1, 129, -1, -1, -1,
-1, 130, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
131, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 132, -1,
-1, -1, -1, -1, -1, -1, -1, 133,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 134, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 135, -1, -1, -1,
-1, -1, -1, 136, -1, -1, -1, -1,
-1, 137, -1, -1, -1, -1, 138, -1,
-1, -1, 139, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 140, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 141, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, 142, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 143, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 144
};
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
{
register int key = hash_attr (str, len);
if (key <= MAX_HASH_VALUE && key >= 0)
{
register int index = lookup[key];
if (index >= 0)
{
register const char *s = wordlist_attr[index].name;
if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0')
return &wordlist_attr[index];
}
else if (index < -TOTAL_KEYWORDS)
{
register int offset = - 1 - TOTAL_KEYWORDS - index;
register const struct attrs *wordptr = &wordlist_attr[TOTAL_KEYWORDS + lookup[offset]];
register const struct attrs *wordendptr = wordptr + -lookup[offset + 1];
while (wordptr < wordendptr)
{
register const char *s = wordptr->name;
if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0')
return wordptr;
wordptr++;
}
}
}
}
return 0;
}
static const char * const attrList[] = {
"ABBR",
"ACCEPT-CHARSET",
"ACCEPT",
"ACCESSKEY",
"ACTION",
"ALIGN",
"ALINK",
"ALT",
"ARCHIVE",
"AUTOCOMPLETE",
"AXIS",
"BACKGROUND",
"BGCOLOR",
"BGPROPERTIES",
"BORDER",
"BORDERCOLOR",
"CELLPADDING",
"CELLSPACING",
"CHAR",
"CHALLENGE",
"CHAROFF",
"CHARSET",
"CHECKED",
"CITE",
"CLASS",
"CLASSID",
"CLEAR",
"CODE",
"CODEBASE",
"CODETYPE",
"COLOR",
"COLS",
"COLSPAN",
"COMPACT",
"CONTENT",
"COORDS",
"DATA",
"DATETIME",
"DECLARE",
"DEFER",
"DIR",
"DISABLED",
"ENCTYPE",
"FACE",
"FOR",
"FRAME",
"FRAMEBORDER",
"HEADERS",
"HEIGHT",
"HIDDEN",
"HREF",
"HREFLANG",
"HSPACE",
"HTML",
"HTTP-EQUIV",
"ID",
"ISMAP",
"LABEL",
"LANG",
"LANGUAGE",
"LEFT",
"LEFTMARGIN",
"LINK",
"LONGDESC",
"MARGINHEIGHT",
"MARGINWIDTH",
"MAXLENGTH",
"MEDIA",
"METHOD",
"MULTIPLE",
"NAME",
"NOHREF",
"NORESIZE",
"NOSAVE",
"NOSHADE",
"NOWRAP",
"OBJECT",
"ONABORT",
"ONBLUR",
"ONCHANGE",
"ONCLICK",
"ONCONTEXTMENU",
"ONDBLCLICK",
"ONERROR",
"ONFOCUS",
"ONKEYDOWN",
"ONKEYPRESS",
"ONKEYUP",
"ONLOAD",
"ONMOUSEDOWN",
"ONMOUSEMOVE",
"ONMOUSEOUT",
"ONMOUSEOVER",
"ONMOUSEUP",
"ONRESET",
"ONRESIZE",
"ONSELECT",
"ONSUBMIT",
"ONUNLOAD",
"OVERSRC",
"PAGEX",
"PAGEY",
"PLAIN",
"PLUGINPAGE",
"PLUGINSPAGE",
"PLUGINURL",
"PROFILE",
"PROMPT",
"READONLY",
"REL",
"REV",
"ROWS",
"ROWSPAN",
"RULES",
"SCHEME",
"SCOPE",
"SCROLLING",
"SELECTED",
"SHAPE",
"SIZE",
"SPAN",
"SRC",
"STANDBY",
"START",
"STYLE",
"SUMMARY",
"TABINDEX",
"TARGET",
"TEXT",
"TITLE",
"TOP",
"TOPMARGIN",
"TYPE",
"UNKNOWN",
"USEMAP",
"VALIGN",
"VALUE",
"VALUETYPE",
"VERSION",
"VISIBILITY",
"VLINK",
"VSPACE",
"WIDTH",
"WRAP",
"Z-INDEX",
0
};
DOMString getAttrName(unsigned short id)
{
return attrList[id-1];
};