/* Our Static DTD for HTML
* -----------------------
*/
/* Implements:
*/
#include
#include
#include
#include
/*
* Character entities like   now excluded from our DTD tables, they are
* mapped to Unicode and handled by chartrans code directly the similar way the
* numeric entities like { does. See src/chrtrans/entities.h for real
* mapping.
*/
/* Entity Names
* ------------
*
* This table must be matched exactly with ALL the translation tables
* (this is an obsolete translation mechanism, probably unused,
* currently replaced with Unicode chartrans in most cases...)
*/
static const char *entities[] =
{
"AElig", /* capital AE diphthong (ligature) */
"Aacute", /* capital A, acute accent */
"Acirc", /* capital A, circumflex accent */
"Agrave", /* capital A, grave accent */
"Aring", /* capital A, ring */
"Atilde", /* capital A, tilde */
"Auml", /* capital A, dieresis or umlaut mark */
"Ccedil", /* capital C, cedilla */
"Dstrok", /* capital Eth, Icelandic */
"ETH", /* capital Eth, Icelandic */
"Eacute", /* capital E, acute accent */
"Ecirc", /* capital E, circumflex accent */
"Egrave", /* capital E, grave accent */
"Euml", /* capital E, dieresis or umlaut mark */
"Iacute", /* capital I, acute accent */
"Icirc", /* capital I, circumflex accent */
"Igrave", /* capital I, grave accent */
"Iuml", /* capital I, dieresis or umlaut mark */
"Ntilde", /* capital N, tilde */
"Oacute", /* capital O, acute accent */
"Ocirc", /* capital O, circumflex accent */
"Ograve", /* capital O, grave accent */
"Oslash", /* capital O, slash */
"Otilde", /* capital O, tilde */
"Ouml", /* capital O, dieresis or umlaut mark */
"THORN", /* capital THORN, Icelandic */
"Uacute", /* capital U, acute accent */
"Ucirc", /* capital U, circumflex accent */
"Ugrave", /* capital U, grave accent */
"Uuml", /* capital U, dieresis or umlaut mark */
"Yacute", /* capital Y, acute accent */
"aacute", /* small a, acute accent */
"acirc", /* small a, circumflex accent */
"acute", /* spacing acute */
"aelig", /* small ae diphthong (ligature) */
"agrave", /* small a, grave accent */
"amp", /* ampersand */
"aring", /* small a, ring */
"atilde", /* small a, tilde */
"auml", /* small a, dieresis or umlaut mark */
"brkbar", /* broken vertical bar */
"brvbar", /* broken vertical bar */
"ccedil", /* small c, cedilla */
"cedil", /* spacing cedilla */
"cent", /* cent sign */
"copy", /* copyright sign */
"curren", /* currency sign */
"deg", /* degree sign */
"die", /* spacing dieresis */
"divide", /* division sign */
"eacute", /* small e, acute accent */
"ecirc", /* small e, circumflex accent */
"egrave", /* small e, grave accent */
"emdash", /* dash the width of emsp */
"emsp", /* em space - not collapsed */
"endash", /* dash the width of ensp */
"ensp", /* en space - not collapsed */
"eth", /* small eth, Icelandic */
"euml", /* small e, dieresis or umlaut mark */
"frac12", /* fraction 1/2 */
"frac14", /* fraction 1/4 */
"frac34", /* fraction 3/4 */
"gt", /* greater than */
"hibar", /* spacing macron */
"iacute", /* small i, acute accent */
"icirc", /* small i, circumflex accent */
"iexcl", /* inverted exclamation mark */
"igrave", /* small i, grave accent */
"iquest", /* inverted question mark */
"iuml", /* small i, dieresis or umlaut mark */
"laquo", /* angle quotation mark, left */
"lt", /* less than */
"macr", /* spacing macron */
"mdash", /* dash the width of emsp */
"micro", /* micro sign */
"middot", /* middle dot */
"nbsp", /* non breaking space */
"ndash", /* dash the width of ensp */
"not", /* negation sign */
"ntilde", /* small n, tilde */
"oacute", /* small o, acute accent */
"ocirc", /* small o, circumflex accent */
"ograve", /* small o, grave accent */
"ordf", /* feminine ordinal indicator */
"ordm", /* masculine ordinal indicator */
"oslash", /* small o, slash */
"otilde", /* small o, tilde */
"ouml", /* small o, dieresis or umlaut mark */
"para", /* paragraph sign */
"plusmn", /* plus-or-minus sign */
"pound", /* pound sign */
"quot", /* quote '"' */
"raquo", /* angle quotation mark, right */
"reg", /* circled R registered sign */
"sect", /* section sign */
"shy", /* soft hyphen */
"sup1", /* superscript 1 */
"sup2", /* superscript 2 */
"sup3", /* superscript 3 */
"szlig", /* small sharp s, German (sz ligature) */
"thinsp", /* thin space (not collapsed) */
"thorn", /* small thorn, Icelandic */
"times", /* multiplication sign */
"trade", /* trade mark sign (U+2122) */
"uacute", /* small u, acute accent */
"ucirc", /* small u, circumflex accent */
"ugrave", /* small u, grave accent */
"uml", /* spacing dieresis */
"uuml", /* small u, dieresis or umlaut mark */
"yacute", /* small y, acute accent */
"yen", /* yen sign */
"yuml", /* small y, dieresis or umlaut mark */
};
/* Attribute Lists
* ---------------
*
* Lists must be in alphabetical order by attribute name
* The tag elements contain the number of attributes
*/
#ifdef USE_PRETTYSRC
# define N HTMLA_NORMAL
# define i HTMLA_ANAME
# define h HTMLA_HREF
# define c HTMLA_CLASS
# define x HTMLA_AUXCLASS
# define T(t) , t
#else
# define T(t) /*nothing */
#endif
/* *INDENT-OFF* */
static attr a_attr[] = { /* Anchor attributes */
{ "ACCESSKEY" T(N) },
{ "CHARSET" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "COORDS" T(N) },
{ "DIR" T(N) },
{ "HREF" T(h) },
{ "ID" T(i) },
{ "ISMAP" T(N) },
{ "LANG" T(N) },
{ "MD" T(N) },
{ "NAME" T(i) },
{ "NOTAB" T(N) },
{ "ONCLICK" T(N) },
{ "ONMOUSEOUT" T(N) },
{ "ONMOUSEOVER" T(N) },
{ "REL" T(N) },
{ "REV" T(N) },
{ "SHAPE" T(N) },
{ "STYLE" T(N) },
{ "TABINDEX" T(N) },
{ "TARGET" T(N) },
{ "TITLE" T(N) },
{ "TYPE" T(N) },
{ "URN" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr address_attr[] = { /* ADDRESS attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "NOWRAP" T(N) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr applet_attr[] = { /* APPLET attributes */
{ "ALIGN" T(N) },
{ "ALT" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "CODE" T(N) },
{ "CODEBASE" T(h) },
{ "DIR" T(N) },
{ "DOWNLOAD" T(N) },
{ "HEIGHT" T(N) },
{ "HSPACE" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "NAME" T(i) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ "VSPACE" T(N) },
{ "WIDTH" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr area_attr[] = { /* AREA attributes */
{ "ALT" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "COORDS" T(N) },
{ "DIR" T(N) },
{ "HREF" T(h) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "NOHREF" T(N) },
{ "NOTAB" T(N) },
{ "ONCLICK" T(N) },
{ "ONMOUSEOUT" T(N) },
{ "ONMOUSEOVER" T(N) },
{ "SHAPE" T(N) },
{ "STYLE" T(N) },
{ "TABINDEX" T(N) },
{ "TARGET" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr base_attr[] = { /* BASE attributes */
{ "HREF" T(h) },
{ "TARGET" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr bgsound_attr[] = { /* BGSOUND attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "LOOP" T(N) },
{ "SRC" T(h) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr body_attr[] = { /* BODY attributes */
{ "ALINK" T(N) },
{ "BACKGROUND" T(h) },
{ "BGCOLOR" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "LINK" T(N) },
{ "ONLOAD" T(N) },
{ "ONUNLOAD" T(N) },
{ "STYLE" T(N) },
{ "TEXT" T(N) },
{ "TITLE" T(N) },
{ "VLINK" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr bodytext_attr[] = { /* BODYTEXT attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DATA" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "NAME" T(N) },
{ "OBJECT" T(N) },
{ "REF" T(N) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ "TYPE" T(N) },
{ "VALUE" T(N) },
{ "VALUETYPE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr bq_attr[] = { /* BQ (BLOCKQUOTE) attributes */
{ "CITE" T(h) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "NOWRAP" T(N) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr button_attr[] = { /* BUTTON attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "DISABLED" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "NAME" T(N) },
{ "ONBLUR" T(N) },
{ "ONFOCUS" T(N) },
{ "STYLE" T(N) },
{ "TABINDEX" T(N) },
{ "TITLE" T(N) },
{ "TYPE" T(N) },
{ "VALUE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr caption_attr[] = { /* CAPTION attributes */
{ "ACCESSKEY" T(N) },
{ "ALIGN" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr col_attr[] = { /* COL and COLGROUP attributes */
{ "ALIGN" T(N) },
{ "CHAR" T(N) },
{ "CHAROFF" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "SPAN" T(N) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ "VALIGN" T(N) },
{ "WIDTH" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr credit_attr[] = { /* CREDIT attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr div_attr[] = { /* DIV attributes */
{ "ALIGN" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr embed_attr[] = { /* EMBED attributes */
{ "ALIGN" T(N) }, /* (including, for now, those from FIG and IMG) */
{ "ALT" T(N) },
{ "BORDER" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "HEIGHT" T(N) },
{ "ID" T(i) },
{ "IMAGEMAP" T(N) },
{ "ISMAP" T(N) },
{ "LANG" T(N) },
{ "MD" T(N) },
{ "NAME" T(i) },
{ "NOFLOW" T(N) },
{ "PARAMS" T(N) },
{ "SRC" T(h) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ "UNITS" T(N) },
{ "USEMAP" T(N) },
{ "WIDTH" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr fig_attr[] = { /* FIG attributes */
{ "ALIGN" T(N) },
{ "BORDER" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "HEIGHT" T(N) },
{ "ID" T(i) },
{ "IMAGEMAP" T(N) },
{ "ISOBJECT" T(N) },
{ "LANG" T(N) },
{ "MD" T(N) },
{ "NOFLOW" T(N) },
{ "SRC" T(h) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ "UNITS" T(N) },
{ "WIDTH" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr fieldset_attr[] = { /* FIELDSET attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr fn_attr[] = { /* FN attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr font_attr[] = { /* FONT attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "COLOR" T(N) },
{ "DIR" T(N) },
{ "END" T(N) },
{ "FACE" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "SIZE" T(N) },
{ "STYLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr form_attr[] = { /* FORM attributes */
{ "ACCEPT-CHARSET" T(N) }, /* HTML 4.0 draft - kw */
{ "ACTION" T(h) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "ENCTYPE" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "METHOD" T(N) },
{ "ONSUBMIT" T(N) },
{ "SCRIPT" T(N) },
{ "STYLE" T(N) },
{ "SUBJECT" T(N) },
{ "TARGET" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr frame_attr[] = { /* FRAME attributes */
{ "ID" T(i) },
{ "LONGDESC" T(h) },
{ "MARGINHEIGHT" T(N) },
{ "MARGINWIDTH" T(N) },
{ "NAME" T(N) },
{ "NORESIZE" T(N) },
{ "SCROLLING" T(N) },
{ "SRC" T(h) },
{ 0 T(N) } /* Terminate list */
};
static attr frameset_attr[] = { /* FRAMESET attributes */
{ "COLS" T(N) },
{ "ROWS" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr gen_attr[] = { /* Minimum HTML 3.0 */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr glossary_attr[] = { /* DL (and DLC) attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "COMPACT" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr h_attr[] = { /* H1 - H6 attributes */
{ "ALIGN" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DINGBAT" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "MD" T(N) },
{ "NOWRAP" T(N) },
{ "SEQNUM" T(N) },
{ "SKIP" T(N) },
{ "SRC" T(h) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr hr_attr[] = { /* HR attributes */
{ "ALIGN" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "MD" T(N) },
{ "NOSHADE" T(N) },
{ "SIZE" T(N) },
{ "SRC" T(h) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ "WIDTH" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr iframe_attr[] = { /* IFRAME attributes */
{ "ALIGN" T(N) },
{ "FRAMEBORDER" T(N) },
{ "HEIGHT" T(N) },
{ "ID" T(i) },
{ "LONGDESC" T(h) },
{ "MARGINHEIGHT" T(N) },
{ "MARGINWIDTH" T(N) },
{ "NAME" T(N) },
{ "SCROLLING" T(N) },
{ "SRC" T(h) },
{ "STYLE" T(N) },
{ "WIDTH" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr img_attr[] = { /* IMG attributes */
{ "ALIGN" T(N) },
{ "ALT" T(N) },
{ "BORDER" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "HEIGHT" T(N) },
{ "ID" T(i) },
{ "ISMAP" T(N) },
{ "ISOBJECT" T(N) },
{ "LANG" T(N) },
{ "LONGDESC" T(h) },
{ "MD" T(N) },
{ "SRC" T(h) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ "UNITS" T(N) },
{ "USEMAP" T(h) },
{ "WIDTH" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr input_attr[] = { /* INPUT attributes */
{ "ACCEPT" T(N) },
{ "ACCEPT-CHARSET" T(N) }, /* RFC 2070 HTML i18n - kw */
{ "ALIGN" T(N) },
{ "ALT" T(N) },
{ "CHECKED" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "DISABLED" T(N) },
{ "ERROR" T(N) },
{ "HEIGHT" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "MAX" T(N) },
{ "MAXLENGTH" T(N) },
{ "MD" T(N) },
{ "MIN" T(N) },
{ "NAME" T(N) },
{ "NOTAB" T(N) },
{ "ONBLUR" T(N) },
{ "ONCHANGE" T(N) },
{ "ONCLICK" T(N) },
{ "ONFOCUS" T(N) },
{ "ONSELECT" T(N) },
{ "SIZE" T(N) },
{ "SRC" T(h) },
{ "STYLE" T(N) },
{ "TABINDEX" T(N) },
{ "TITLE" T(N) },
{ "TYPE" T(N) },
{ "VALUE" T(N) },
{ "WIDTH" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr isindex_attr[] = { /* ISINDEX attributes */
{ "ACTION" T(h) }, /* Not in spec. Lynx treats it as HREF. - FM */
{ "DIR" T(N) },
{ "HREF" T(h) }, /* HTML 3.0 attribute for search action. - FM */
{ "ID" T(i) },
{ "LANG" T(N) },
{ "PROMPT" T(N) }, /* HTML 3.0 attribute for prompt string. - FM */
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr keygen_attr[] = { /* KEYGEN attributes */
{ "CHALLENGE" T(N) },
{ "CLASS" T(c) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "NAME" T(N) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr label_attr[] = { /* LABEL attributes */
{ "ACCESSKEY" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "FOR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "ONCLICK" T(N) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr legend_attr[] = { /* LEGEND attributes */
{ "ACCESSKEY" T(N) },
{ "ALIGN" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr link_attr[] = { /* LINK attributes */
{ "CHARSET" T(N) }, /* RFC 2070 HTML i18n -- hint for UA -- - kw */
{ "CLASS" T(c) },
{ "HREF" T(h) },
{ "ID" T(i) },
{ "MEDIA" T(N) },
{ "REL" T(N) },
{ "REV" T(N) },
{ "STYLE" T(N) },
{ "TARGET" T(N) },
{ "TITLE" T(N) },
{ "TYPE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr list_attr[] = { /* LI attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DINGBAT" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "MD" T(N) },
{ "SKIP" T(N) },
{ "SRC" T(h) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ "TYPE" T(N) },
{ "VALUE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr map_attr[] = { /* MAP attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "NAME" T(i) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr math_attr[] = { /* MATH attributes */
{ "BOX" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr meta_attr[] = { /* META attributes */
{ "CONTENT" T(N) },
{ "HTTP-EQUIV" T(N) },
{ "NAME" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr nextid_attr[] = { /* NEXTID attributes */
{ "N" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr note_attr[] = { /* NOTE attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "MD" T(N) },
{ "ROLE" T(x) },
{ "SRC" T(h) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr object_attr[] = { /* OBJECT attributes */
{ "ALIGN" T(N) },
{ "BORDER" T(N) },
{ "CLASS" T(c) },
{ "CLASSID" T(h) },
{ "CODEBASE" T(h) },
{ "CODETYPE" T(N) },
{ "DATA" T(h) },
{ "DECLARE" T(N) },
{ "DIR" T(N) },
{ "HEIGHT" T(N) },
{ "HSPACE" T(N) },
{ "ID" T(i) },
{ "ISMAP" T(N) },
{ "LANG" T(N) },
{ "NAME" T(N) },
{ "NOTAB" T(N) },
{ "SHAPES" T(N) },
{ "STANDBY" T(N) },
{ "STYLE" T(N) },
{ "TABINDEX" T(N) },
{ "TITLE" T(N) },
{ "TYPE" T(N) },
{ "USEMAP" T(h) },
{ "VSPACE" T(N) },
{ "WIDTH" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr olist_attr[] = { /* OL attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "COMPACT" T(N) },
{ "CONTINUE" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "SEQNUM" T(N) },
{ "START" T(N) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ "TYPE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr option_attr[] = { /* OPTION attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "DISABLED" T(N) },
{ "ERROR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "SELECTED" T(N) },
{ "SHAPE" T(N) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ "VALUE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr overlay_attr[] = { /* OVERLAY attributes */
{ "CLASS" T(c) },
{ "HEIGHT" T(N) },
{ "ID" T(i) },
{ "IMAGEMAP" T(N) },
{ "MD" T(N) },
{ "SRC" T(h) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ "UNITS" T(N) },
{ "WIDTH" T(N) },
{ "X" T(N) },
{ "Y" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr p_attr[] = { /* P attributes */
{ "ALIGN" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "NOWRAP" T(N) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr param_attr[] = { /* PARAM attributes */
{ "ACCEPT" T(N) },
{ "ACCEPT-CHARSET" T(N) },
{ "ACCEPT-ENCODING" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DATA" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "NAME" T(N) },
{ "OBJECT" T(N) },
{ "REF" T(N) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ "TYPE" T(N) },
{ "VALUE" T(N) },
{ "VALUEREF" T(N) },
{ "VALUETYPE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr script_attr[] = { /* SCRIPT attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "EVENT" T(N) },
{ "FOR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "LANGUAGE" T(N) },
{ "NAME" T(N) },
{ "SCRIPTENGINE" T(N) },
{ "SRC" T(h) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ "TYPE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr select_attr[] = { /* SELECT attributes */
{ "ALIGN" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "DISABLED" T(N) },
{ "ERROR" T(N) },
{ "HEIGHT" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "MD" T(N) },
{ "MULTIPLE" T(N) },
{ "NAME" T(N) },
{ "NOTAB" T(N) },
{ "ONBLUR" T(N) },
{ "ONCHANGE" T(N) },
{ "ONFOCUS" T(N) },
{ "SIZE" T(N) },
{ "STYLE" T(N) },
{ "TABINDEX" T(N) },
{ "TITLE" T(N) },
{ "UNITS" T(N) },
{ "WIDTH" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr style_attr[] = { /* STYLE attributes */
{ "DIR" T(N) },
{ "LANG" T(N) },
{ "NOTATION" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr tab_attr[] = { /* TAB attributes */
{ "ALIGN" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "DP" T(N) },
{ "ID" T(i) },
{ "INDENT" T(N) },
{ "LANG" T(N) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ "TO" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr table_attr[] = { /* TABLE attributes */
{ "ALIGN" T(N) },
{ "BACKGROUND" T(h) },
{ "BORDER" T(N) },
{ "CELLPADDING" T(N) },
{ "CELLSPACING" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "COLS" T(N) },
{ "COLSPEC" T(N) },
{ "DIR" T(N) },
{ "DP" T(N) },
{ "FRAME" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "NOFLOW" T(N) },
{ "NOWRAP" T(N) },
{ "RULES" T(N) },
{ "STYLE" T(N) },
{ "SUMMARY" T(N) },
{ "TITLE" T(N) },
{ "UNITS" T(N) },
{ "WIDTH" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr td_attr[] = { /* TD and TH attributes */
{ "ALIGN" T(N) },
{ "AXES" T(N) },
{ "AXIS" T(N) },
{ "BACKGROUND" T(h) },
{ "CHAR" T(N) },
{ "CHAROFF" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "COLSPAN" T(N) },
{ "DIR" T(N) },
{ "DP" T(N) },
{ "HEIGHT" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "NOWRAP" T(N) },
{ "ROWSPAN" T(N) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ "VALIGN" T(N) },
{ "WIDTH" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr textarea_attr[] = { /* TEXTAREA attributes */
{ "ACCEPT-CHARSET" T(N) }, /* RFC 2070 HTML i18n - kw */
{ "ALIGN" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "COLS" T(N) },
{ "DIR" T(N) },
{ "DISABLED" T(N) },
{ "ERROR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "NAME" T(N) },
{ "NOTAB" T(N) },
{ "ONBLUR" T(N) },
{ "ONCHANGE" T(N) },
{ "ONFOCUS" T(N) },
{ "ONSELECT" T(N) },
{ "ROWS" T(N) },
{ "STYLE" T(N) },
{ "TABINDEX" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr tr_attr[] = { /* TR, THEAD, TFOOT, and TBODY attributes */
{ "ALIGN" T(N) },
{ "CHAR" T(N) },
{ "CHAROFF" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "DP" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "NOWRAP" T(N) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ "VALIGN" T(N) },
{ 0 T(N) } /* Terminate list */
};
static attr ulist_attr[] = { /* UL attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "COMPACT" T(N) },
{ "DINGBAT" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
{ "MD" T(N) },
{ "PLAIN" T(N) },
{ "SRC" T(h) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ "TYPE" T(N) },
{ "WRAP" T(N) },
{ 0 T(N) } /* Terminate list */
};
/* *INDENT-ON* */
#undef N
#undef i
#undef h
#undef c
#undef x
#undef T
/* From Peter Flynn's intro to the HTML Pro DTD:
%structure;
DIV, CENTER, H1 to H6, P, UL, OL, DL, DIR, MENU, PRE, XMP, LISTING, BLOCKQUOTE, BQ,
2 1 2 2 1 8 8 8 8 8 8 8 8 4 4
MULTICOL,?NOBR, FORM, TABLE, ADDRESS, FIG, BDO, NOTE, and FN; plus?WBR, LI, and LH
8 n ?1 n 8 8 2 2 2 2 2 ?1 nE 4 4
%insertions;
Elements which usually contain special-purpose material, or no text material at all.
BASEFONT, APPLET, OBJECT, EMBED, SCRIPT, MAP, MARQUEE, HR, ISINDEX, BGSOUND, TAB,?IMG,
1 e? 2 2 l 1 e 2 l 8 4 4 E 1? E 1 E ! E ?1 E
IMAGE, BR, plus NOEMBED, SERVER, SPACER, AUDIOSCOPE, and SIDEBAR; ?area
1 n 1 E n n n n n 8 E
%text;
Elements within the %structure; which directly contain running text.
Descriptive or analytic markup: EM, STRONG, DFN, CODE, SAMP, KBD, VAR, CITE, Q, LANG, AU,
2 2 2 2 2 2 2 2 2 2 n 2
AUTHOR, PERSON, ACRONYM, ABBREV, INS, DEL, and SPAN
2 2 n 2 2 2 2 2
Visual markup:S, STRIKE, I, B, TT, U,?NOBR,?WBR, BR, BIG, SMALL, FONT, STYLE, BLINK, TAB,
1 1 1 1 1 1 ?1 n ?1nE? 1 E 1 1 1 1 l 1 1 E?
BLACKFACE, LIMITTEXT, NOSMARTQUOTES, and SHADOW
1 n 1 n 1 n 1 n
Hypertext and graphics: A and?IMG
8 ?8 E
Mathematical: SUB, SUP, and MATH
4 4 4 l
Documentary: COMMENT, ENTITY, ELEMENT, and ATTRIB
4 4 n 4 n 4 n
%formula;
*/
/* Extra element info
* ------------------
*
* Order and number of tags should match the tags_* tables
* further below and definitions in HTMLDTD.html.
*
* The interspersed comments give the original Lynx tags[] entries
* for orientation, so they do not necessarily reflect what will
* be used with the T_* info (which is in tags_new[]).
*
* An important design goal was that info for each tag should fit on
* one 80 character screen line :). The price to pay is that it's
* a bit cryptic, to say the least... - kw
*/
/* 1 2 3 4 5 6 7 8 */
/*345678901234567890123456789012345678901234567890123456789012345678901234567890 */
/* *INDENT-OFF* */
/* self contain icont'n contn'd icont'd canclos flags*/
/* { "A" , a_attr, HTML_A_ATTRIBUTES, SGML_MIXED }, */
#define T_A 0x0008, 0x0B007,0x0FF17,0x37787,0x77BA7,0x8604F,0x00014
/* { "ABBREV" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_ABBREV 0x0002, 0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00003,0x00000
/* { "ACRONYM" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_ACRONYM 0x0002, 0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00003,0x00000
/* { "ADDRESS" , address_attr, HTML_ADDRESS_ATTRIBUTES, SGML_MIXED }, */
#define T_ADDRESS 0x0200, 0x0F14F,0x8FFFF,0x36680,0xB6FAF,0x80317,0x00000
/* { "APPLET" , applet_attr, HTML_APPLET_ATTRIBUTES, SGML_MIXED }, */
#define T_APPLET 0x2000, 0x0B0CF,0x8FFFF,0x37F9F,0xB7FBF,0x8300F,0x00000
/* { "AREA" , area_attr, HTML_AREA_ATTRIBUTES, SGML_EMPTY }, */
#define T_AREA 0x8000, 0x00000,0x00000,0x08000,0x3FFFF,0x00F1F,0x00001
/* { "AU" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_AU 0x0002, 0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00003,0x00000
/* { "AUTHOR" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_AUTHOR 0x0002, 0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00003,0x00000
/* { "B" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_B 0x0001, 0x8B04F,0xAFFFF,0xA778F,0xF7FBF,0x00001,0x00014
/* { "BANNER" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_BANNER 0x0200, 0x0FB8F,0x0FFFF,0x30000,0x30000,0x8031F,0x00000
/* { "BASE" , base_attr, HTML_BASE_ATTRIBUTES, SGML_EMPTY }, */
#define T_BASE 0x40000,0x00000,0x00000,0x50000,0x50000,0x8000F,0x00001
/* { "BASEFONT", font_attr, HTML_FONT_ATTRIBUTES, SGML_EMPTY }, */
#define T_BASEFONT 0x1000, 0x00000,0x00000,0x377AF,0x37FAF,0x8F000,0x00001
/* { "BDO" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_BDO 0x0100, 0x0B04F,0x8FFFF,0x36680,0xB6FAF,0x0033F,0x00000
/* { "BGSOUND" , bgsound_attr, HTML_BGSOUND_ATTRIBUTES, SGML_EMPTY }, */
#define T_BGSOUND 0x1000, 0x00000,0x00000,0x777AF,0x77FAF,0x8730F,0x00001
/* { "BIG" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_BIG 0x0001, 0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00001,0x00014
/* { "BLINK" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_BLINK 0x0001, 0x8B04F,0x8FFFF,0xA778F,0xF7FAF,0x00001,0x00014
/* { "BLOCKQUOTE", bq_attr, HTML_BQ_ATTRIBUTES, SGML_MIXED }, */
#define T_BLOCKQUOTE 0x0200, 0xAFBCF,0xAFFFF,0xB6680,0xB6FAF,0x8031F,0x00000
/* { "BODY" , body_attr, HTML_BODY_ATTRIBUTES, SGML_MIXED }, */
#define T_BODY 0x20000,0x2FB8F,0x2FFFF,0x30000,0x30000,0xDFF7F,0x00003
/* { "BODYTEXT", bodytext_attr,HTML_BODYTEXT_ATTRIBUTES, SGML_MIXED }, */
#define T_BODYTEXT 0x20000,0x0FB8F,0xAFFFF,0x30200,0xB7FAF,0x8F17F,0x00003
/* { "BQ" , bq_attr, HTML_BQ_ATTRIBUTES, SGML_MIXED }, */
#define T_BQ 0x0200, 0xAFBCF,0xAFFFF,0xB6680,0xB6FAF,0x8031F,0x00000
/* { "BR" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY }, */
#define T_BR 0x1000, 0x00000,0x00000,0x377BF,0x77FBF,0x8101F,0x00001
#define T_BUTTON 0x2000, 0x0BB07,0x0FF37,0x0378F,0x37FBF,0x8135F,0x00000
/* { "CAPTION" , caption_attr, HTML_CAPTION_ATTRIBUTES, SGML_MIXED }, */
#define T_CAPTION 0x0100, 0x0B04F,0x8FFFF,0x06A00,0xB6FA7,0x8035F,0x00000
/* { "CENTER" , div_attr, HTML_DIV_ATTRIBUTES, SGML_MIXED }, */
#define T_CENTER 0x0200, 0x8FBCF,0x8FFFF,0xB6680,0xB6FA7,0x8071F,0x00000
/* { "CITE" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_CITE 0x0002, 0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00002,0x00010
/* { "CODE" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_CODE 0x0002, 0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00002,0x00000
/* { "COL" , col_attr, HTML_COL_ATTRIBUTES, SGML_EMPTY }, */
#define T_COL 0x4000, 0x00000,0x00000,0x00820,0x36FA7,0x88F5F,0x00001
/* { "COLGROUP", col_attr, HTML_COL_ATTRIBUTES, SGML_EMPTY }, */
#define T_COLGROUP 0x0020, 0x04000,0x04000,0x00800,0x36FA7,0x8875F,0x00001
/* { "COMMENT" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_COMMENT 0x0004, 0x00000,0x00000,0xA77AF,0x7FFFF,0x00003,0x00000
/* { "CREDIT" , credit_attr, HTML_CREDIT_ATTRIBUTES, SGML_MIXED }, */
#define T_CREDIT 0x0100, 0x0B04F,0x8FFFF,0x06A00,0xB7FBF,0x8030F,0x00000
/* { "DD" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY }, */
#define T_DD 0x0400, 0x0FBCF,0x8FFFF,0x00800,0xB6FFF,0x8071F,0x00001
/* { "DEL" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_DEL 0x0002, 0x8BBCF,0x8FFFF,0xA7F8F,0xF7FBF,0x00003,0x00000
/* { "DFN" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_DFN 0x0002, 0x8B0CF,0x8FFFF,0x8778F,0xF7FBF,0x00003,0x00000
/* { "DIR" , ulist_attr, HTML_UL_ATTRIBUTES, SGML_MIXED }, */
#define T_DIR 0x0800, 0x0B400,0x0F75F,0x37680,0x36FB7,0x84F7F,0x00000
/* { "DIV" , div_attr, HTML_DIV_ATTRIBUTES, SGML_MIXED }, */
#define T_DIV 0x0200, 0x8FB8F,0x8FFFF,0xB66A0,0xB7FFF,0x8031F,0x00004
/* { "DL" , glossary_attr, HTML_DL_ATTRIBUTES, SGML_MIXED }, */
#define T_DL 0x0800, 0x0C480,0x8FFFF,0x36680,0xB7FB7,0x0075F,0x00000
/* { "DLC" , glossary_attr, HTML_DL_ATTRIBUTES, SGML_MIXED }, */
#define T_DLC 0x0800, 0x0C480,0x8FFFF,0x36680,0xB7FB7,0x0075F,0x00000
/* { "DT" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY }, */
#define T_DT 0x0400, 0x0B04F,0x0B1FF,0x00800,0x17FFF,0x8071F,0x00001
/* { "EM" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_EM 0x0002, 0x8B04F,0x8FFFF,0xA778F,0xF7FAF,0x00003,0x00010
/* { "EMBED" , embed_attr, HTML_EMBED_ATTRIBUTES, SGML_EMPTY }, */
#define T_EMBED 0x2000, 0x8F107,0x8FFF7,0xB6FBF,0xB7FBF,0x1FF7F,0x00001
/* { "FIELDSET", fieldset_attr,HTML_FIELDSET_ATTRIBUTES, SGML_MIXED }, */
#define T_FIELDSET 0x0200, 0x8FB4F,0x8FF7F,0x86787,0xB7FF7,0x8805F,0x00000
/* { "FIG" , fig_attr, HTML_FIG_ATTRIBUTES, SGML_MIXED }, */
#define T_FIG 0x0200, 0x0FB00,0x8FFFF,0x36680,0xB6FBF,0x8834F,0x00000
/* { "FN" , fn_attr, HTML_FN_ATTRIBUTES, SGML_MIXED }, */
#define T_FN 0x0200, 0x8FBCF,0x8FFFF,0xB6680,0xB7EBF,0x8114F,0x00000
/* { "FONT" , font_attr, HTML_FONT_ATTRIBUTES, SGML_EMPTY }, */
#define T_FONT 0x0001, 0x8B04F,0x8FFFF,0xB778F,0xF7FBF,0x00001,0x00014
/* { "FORM" , form_attr, HTML_FORM_ATTRIBUTES, SGML_EMPTY }, */
#define T_FORM 0x0080, 0x0FF6F,0x0FF7F,0x36E07,0x32F07,0x88DFF,0x00000
/* { "FRAME" , frame_attr, HTML_FRAME_ATTRIBUTES, SGML_EMPTY }, */
#define T_FRAME 0x10000,0x00000,0x00000,0x10000,0x10000,0x9FFFF,0x00001
/* { "FRAMESET", frameset_attr,HTML_FRAMESET_ATTRIBUTES, SGML_MIXED }, */
#define T_FRAMESET 0x10000,0x90000,0x90000,0x90000,0x93000,0x9FFFF,0x00000
/* { "H1" , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED }, */
#define T_H1 0x0100, 0x0B04F,0x0B05F,0x36680,0x37FAF,0x80117,0x00000
/* { "H2" , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED }, */
#define T_H2 0x0100, 0x0B04F,0x0B05F,0x36680,0x37FAF,0x80117,0x00000
/* { "H3" , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED }, */
#define T_H3 0x0100, 0x0B04F,0x0B05F,0x36680,0x37FAF,0x80117,0x00000
/* { "H4" , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED }, */
#define T_H4 0x0100, 0x0B04F,0x0B05F,0x36680,0x37FAF,0x80117,0x00000
/* { "H5" , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED }, */
#define T_H5 0x0100, 0x0B04F,0x0B05F,0x36680,0x37FAF,0x80117,0x00000
/* { "H6" , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED }, */
#define T_H6 0x0100, 0x0B04F,0x0B05F,0x36680,0x37FAF,0x80117,0x00000
/* { "HEAD" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_HEAD 0x40000,0x4F000,0x47000,0x10000,0x10000,0x9FF7F,0x00007
/* { "HR" , hr_attr, HTML_HR_ATTRIBUTES, SGML_EMPTY }, */
#define T_HR 0x4000, 0x00000,0x00000,0x3FE80,0x3FFBF,0x87F37,0x00001
/* { "HTML" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_HTML 0x10000,0x7FB8F,0x7FFFF,0x00000,0x00000,0x1FFFF,0x00003
#define T_HY 0x1000, 0x00000,0x00000,0x3779F,0x77FBF,0x8101F,0x00001
/* { "I" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_I 0x0001, 0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00001,0x00014
#define T_IFRAME 0x2000, 0x8FBCF,0x8FFFF,0xB679F,0xB6FBF,0xD335F,0x00000
/* { "IMG" , img_attr, HTML_IMG_ATTRIBUTES, SGML_EMPTY }, */
#define T_IMG 0x1000, 0x00000,0x00000,0x3779F,0x37FBF,0x80000,0x00001
/* { "INPUT" , input_attr, HTML_INPUT_ATTRIBUTES, SGML_EMPTY }, */
#define T_INPUT 0x0040, 0x00000,0x00000,0x03F87,0x37F87,0x8904F,0x00001
/* { "INS" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_INS 0x0002, 0x8BBCF,0x8FFFF,0xA7F8F,0xF7FBF,0x00003,0x00000
/* { "ISINDEX" , isindex_attr, HTML_ISINDEX_ATTRIBUTES,SGML_EMPTY }, */
#define T_ISINDEX 0x8000, 0x00000,0x00000,0x7778F,0x7FFAF,0x80007,0x00001
/* { "KBD" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_KBD 0x0002, 0x00000,0x00000,0x2778F,0x77FBF,0x00003,0x00000
/* { "KEYGEN" , keygen_attr, HTML_KEYGEN_ATTRIBUTES, SGML_EMPTY }, */
#define T_KEYGEN 0x0040, 0x00000,0x00000,0x07FB7,0x37FB7,0x80070,0x00001
/* { "LABEL" , label_attr, HTML_LABEL_ATTRIBUTES, SGML_MIXED }, */
#define T_LABEL 0x0002, 0x0304F,0x0FFFF,0x0679F,0x36FBF,0x00007,0x00000
#define T_LEGEND 0x0002, 0x0B04F,0x8FF7F,0x00200,0xB7FA7,0x00003,0x00000
/* { "LH" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY }, */
#define T_LH 0x0400, 0x0BB7F,0x8FFFF,0x00800,0x97FFF,0x8071F,0x00001
/* { "LI" , list_attr, HTML_LI_ATTRIBUTES, SGML_EMPTY }, */
#define T_LI 0x0400, 0x0BBFF,0x8FFFF,0x00800,0x97FFF,0x8071F,0x00001
/* { "LINK" , link_attr, HTML_LINK_ATTRIBUTES, SGML_EMPTY }, */
#define T_LINK 0x8000, 0x00000,0x00000,0x50000,0x50000,0x0FF7F,0x00001
/* { "LISTING" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_LITTERAL }, */
#define T_LISTING 0x0800, 0x00000,0x00000,0x36600,0x36F00,0x80F1F,0x00000
/* { "MAP" , map_attr, HTML_MAP_ATTRIBUTES, SGML_MIXED }, */
#define T_MAP 0x8000, 0x08000,0x08000,0x37FCF,0x37FBF,0x0071F,0x00000
/* { "MARQUEE" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_MARQUEE 0x4000, 0x0000F,0x8F01F,0x37787,0xB7FA7,0x8301C,0x00000
/* { "MATH" , math_attr, HTML_MATH_ATTRIBUTES, SGML_LITTERAL }, */
#define T_MATH 0x0004, 0x0B05F,0x8FFFF,0x2778F,0xF7FBF,0x0001F,0x00000
/* { "MENU" , ulist_attr, HTML_UL_ATTRIBUTES, SGML_MIXED }, */
#define T_MENU 0x0800, 0x0B400,0x0F75F,0x17680,0x36FB7,0x88F7F,0x00000
/* { "META" , meta_attr, HTML_META_ATTRIBUTES, SGML_EMPTY }, */
#define T_META 0x8000, 0x00000,0x00000,0x50000,0x50000,0x0FF7F,0x00001
/* { "NEXTID" , nextid_attr, 1, SGML_EMPTY }, */
#define T_NEXTID 0x1000, 0x00000,0x00000,0x50000,0x1FFF7,0x00001,0x00001
/* { "NOFRAMES", gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_NOFRAMES 0x20000,0x2FB8F,0x0FFFF,0x17000,0x17000,0x0CF5F,0x00000
/* { "NOTE" , note_attr, HTML_NOTE_ATTRIBUTES, SGML_MIXED }, */
#define T_NOTE 0x0200, 0x0BBAF,0x8FFFF,0x376B0,0xB7FFF,0x8031F,0x00000
/* { "OBJECT" , object_attr, HTML_OBJECT_ATTRIBUTES, SGML_LITTERAL }, */
#define T_OBJECT 0x2000, 0x8FBCF,0x8FFFF,0xB679F,0xB6FBF,0x83F5F,0x00020
#define T_OBJECT_PCDATA 0x2000, 0x8FBCF,0x8FFFF,0xB679F,0xB6FBF,0x83F5F,0x00008
/* { "OL" , olist_attr, HTML_OL_ATTRIBUTES, SGML_MIXED }, */
#define T_OL 0x0800, 0x0C400,0x8FFFF,0x37680,0xB7FB7,0x88F7F,0x00000
/* { "OPTION" , option_attr, HTML_OPTION_ATTRIBUTES, SGML_EMPTY }, */
#define T_OPTION 0x8000, 0x00000,0x00000,0x00040,0x37FFF,0x8031F,0x00001
/* { "OVERLAY" , overlay_attr, HTML_OVERLAY_ATTRIBUTES, SGML_EMPTY }, */
#define T_OVERLAY 0x4000, 0x00000,0x00000,0x00200,0x37FBF,0x83F7F,0x00001
/* { "P" , p_attr, HTML_P_ATTRIBUTES, SGML_EMPTY }, */
#define T_P 0x0100, 0x0B04F,0x8FFFF,0x36680,0xB6FA7,0x80117,0x00001
/* { "PARAM" , param_attr, HTML_PARAM_ATTRIBUTES, SGML_EMPTY }, */
#define T_PARAM 0x1000, 0x00000,0x00000,0x33500,0x37FFF,0x81560,0x00001
/* { "PLAINTEXT", gen_attr, HTML_GEN_ATTRIBUTES, SGML_LITTERAL }, */
#define T_PLAINTEXT 0x10000,0xFFFFF,0xFFFFF,0x90000,0x90000,0x3FFFF,0x00001
/* { "PRE" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_PRE 0x0200, 0x0F04F,0x0F05E,0x36680,0x36FF0,0x8071E,0x00000
/* { "Q" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_Q 0x0002, 0x8B04F,0x8FFFF,0xA778F,0xF7FAF,0x00003,0x00000
/* { "S" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_S 0x0001, 0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00001,0x00000
/* { "SAMP" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_SAMP 0x0002, 0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00002,0x00010
/* { "SCRIPT" , script_attr, HTML_SCRIPT_ATTRIBUTES, SGML_LITTERAL }, */
#define T_SCRIPT 0x2000, 0x00000,0x00000,0x77F9F,0x77FFF,0x87F5F,0x00000
/* { "SELECT" , select_attr, HTML_SELECT_ATTRIBUTES, SGML_MIXED }, */
#define T_SELECT 0x0040, 0x08000,0x08000,0x03FAF,0x33FBF,0x80F5F,0x00008
#define T_SHY 0x1000, 0x00000,0x00000,0x3779F,0x77FBF,0x8101F,0x00001
/* { "SMALL" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_SMALL 0x0001, 0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00001,0x00014
/* { "SPAN" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_SPAN 0x0002, 0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x80003,0x00000
/* { "SPOT" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY }, */
#define T_SPOT 0x0008, 0x00000,0x00000,0x3FFF7,0x3FFF7,0x00008,0x00001
/* { "STRIKE" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_STRIKE 0x0001, 0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00001,0x00000
/* { "STRONG" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_STRONG 0x0002, 0x8B04F,0x8FFFF,0xA778F,0xF7FAF,0x00003,0x00010
/* { "STYLE" , style_attr, HTML_STYLE_ATTRIBUTES, SGML_LITTERAL }, */
#define T_STYLE 0x40000,0x00000,0x00000,0x7638F,0x76FAF,0x8001F,0x00000
/* { "SUB" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_SUB 0x0004, 0x8B05F,0x8FFFF,0x8779F,0xF7FBF,0x00007,0x00000
/* { "SUP" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_SUP 0x0004, 0x8B05F,0x8FFFF,0x8779F,0xF7FBF,0x00007,0x00000
/* { "TAB" , tab_attr, HTML_TAB_ATTRIBUTES, SGML_EMPTY }, */
#define T_TAB 0x1000, 0x00000,0x00000,0x3778F,0x57FAF,0x00001,0x00001
/* { "TABLE" , table_attr, HTML_TABLE_ATTRIBUTES, SGML_MIXED }, */
#define T_TABLE 0x0800, 0x0F1E0,0x8FFFF,0x36680,0xB6FA7,0x8C57F,0x00000
/* { "TBODY" , tr_attr, HTML_TR_ATTRIBUTES, SGML_EMPTY }, */
#define T_TBODY 0x0020, 0x00020,0x8FFFF,0x00880,0xB7FB7,0x8C75F,0x00003
/* { "TD" , td_attr, HTML_TD_ATTRIBUTES, SGML_EMPTY }, */
#define T_TD 0x0400, 0x0FBCF,0x8FFFF,0x00020,0xB7FB7,0x8C75F,0x00001
/* { "TEXTAREA", textarea_attr,HTML_TEXTAREA_ATTRIBUTES, SGML_LITTERAL }, */
#define T_TEXTAREA 0x0040, 0x00000,0x00000,0x07F8F,0x33FBF,0x80F5F,0x00040
/* { "TEXTFLOW", bodytext_attr,HTML_BODYTEXT_ATTRIBUTES, SGML_MIXED }, */
#define T_TEXTFLOW 0x20000,0x8FBFF,0x9FFFF,0x977B0,0xB7FB7,0x9B00F,0x00003
/* { "TFOOT" , tr_attr, HTML_TR_ATTRIBUTES, SGML_EMPTY }, */
#define T_TFOOT 0x0020, 0x00020,0x8FFFF,0x00800,0xB7FB7,0x8CF5F,0x00001
/* { "TH" , td_attr, HTML_TD_ATTRIBUTES, SGML_EMPTY }, */
#define T_TH 0x0400, 0x0FBCF,0x0FFFF,0x00020,0xB7FB7,0x8CF5F,0x00001
/* { "THEAD" , tr_attr, HTML_TR_ATTRIBUTES, SGML_EMPTY }, */
#define T_THEAD 0x0020, 0x00020,0x8FFFF,0x00800,0xB7FB7,0x8CF5F,0x00001
/* { "TITLE", gen_attr, HTML_GEN_ATTRIBUTES, SGML_RCDATA }, */
#define T_TITLE 0x40000,0x00000,0x00000,0x50000,0x50000,0x0031F,0x0000C
/* { "TR" , tr_attr, HTML_TR_ATTRIBUTES, SGML_EMPTY }, */
#define T_TR 0x0020, 0x00400,0x8FFFF,0x00820,0xB7FB7,0x8C75F,0x00001
/* { "TT" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_TT 0x0001, 0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00001,0x00010
/* { "U" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_U 0x0001, 0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00001,0x00014
/* { "UL" , ulist_attr, HTML_UL_ATTRIBUTES, SGML_MIXED }, */
#define T_UL 0x0800, 0x0C480,0x8FFFF,0x36680,0xB7FFF,0x8075F,0x00000
/* { "VAR" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_VAR 0x0002, 0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00001,0x00000
#define T_WBR 0x0001, 0x00000,0x00000,0x3778F,0x77FBF,0x8101F,0x00001
/* { "XMP" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_LITTERAL }, */
#define T_XMP 0x0800, 0x00000,0x00000,0x367E0,0x36FFF,0x0875F,0x00001
#define T__UNREC_ 0x0000, 0x00000,0x00000,0x00000,0x00000,0x00000,0x00000
/* *INDENT-ON* */
/* Elements
* --------
*
* Must match definitions in HTMLDTD.html!
* Must be in alphabetical order.
*
* The T_* extra info is listed here, even though most fields are not used
* in SGML.c if Old_DTD is set (with the exception of some Tgf_* flags).
* This simplifies comparison of the tags_old[] table (otherwise unchanged
* from original Lynx treatment) with the tags_new[] table below. - kw
*
* Name*, Attributes, No. of attributes, content, extra info...
*/
#undef P
#undef P
#undef P_
#ifdef USE_COLOR_STYLE
#define P_(x) x , (sizeof x) -1
#define NULL_HTTag_ NULL, 0
#else
#define P_(x) x
#define NULL_HTTag_ NULL
#endif
#ifdef EXP_JUSTIFY_ELTS
#define P(x) P_(x), 1
#define P0(x) P_(x), 0
#define NULL_HTTag NULL_HTTag_,0
#else
#define P(x) P_(x)
#define P0(x) P_(x)
#define NULL_HTTag NULL_HTTag_
#endif
/* *INDENT-OFF* */
static const HTTag tags_old[HTML_ALL_ELEMENTS] = {
{ P("A") , a_attr, HTML_A_ATTRIBUTES, SGML_EMPTY,T_A},
{ P("ABBREV") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_ABBREV},
{ P("ACRONYM") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_ACRONYM},
{ P("ADDRESS") , address_attr, HTML_ADDRESS_ATTRIBUTES, SGML_MIXED,T_ADDRESS},
{ P("APPLET") , applet_attr, HTML_APPLET_ATTRIBUTES, SGML_MIXED,T_APPLET},
{ P("AREA") , area_attr, HTML_AREA_ATTRIBUTES, SGML_EMPTY,T_AREA},
{ P("AU") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_AU},
{ P("AUTHOR") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_AUTHOR},
{ P("B") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_B},
{ P0("BANNER") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_BANNER},
{ P("BASE") , base_attr, HTML_BASE_ATTRIBUTES, SGML_EMPTY,T_BASE},
{ P("BASEFONT"), font_attr, HTML_FONT_ATTRIBUTES, SGML_EMPTY,T_BASEFONT},
{ P("BDO") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_BDO},
{ P("BGSOUND") , bgsound_attr, HTML_BGSOUND_ATTRIBUTES, SGML_EMPTY,T_BGSOUND},
{ P("BIG") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_BIG},
{ P("BLINK") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_BLINK},
{ P("BLOCKQUOTE"), bq_attr, HTML_BQ_ATTRIBUTES, SGML_MIXED,T_BLOCKQUOTE},
{ P("BODY") , body_attr, HTML_BODY_ATTRIBUTES, SGML_MIXED,T_BODY},
{ P("BODYTEXT"), bodytext_attr,HTML_BODYTEXT_ATTRIBUTES, SGML_MIXED,T_BODYTEXT},
{ P("BQ") , bq_attr, HTML_BQ_ATTRIBUTES, SGML_MIXED,T_BQ},
{ P("BR") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_BR},
{ P("BUTTON") , button_attr, HTML_BUTTON_ATTRIBUTES, SGML_MIXED,T_BUTTON},
{ P("CAPTION") , caption_attr, HTML_CAPTION_ATTRIBUTES, SGML_MIXED,T_CAPTION},
{ P("CENTER") , div_attr, HTML_DIV_ATTRIBUTES, SGML_MIXED,T_CENTER},
{ P("CITE") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_CITE},
{ P("CODE") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_CODE},
{ P("COL") , col_attr, HTML_COL_ATTRIBUTES, SGML_EMPTY,T_COL},
{ P("COLGROUP"), col_attr, HTML_COL_ATTRIBUTES, SGML_EMPTY,T_COLGROUP},
{ P("COMMENT") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_COMMENT},
{ P("CREDIT") , credit_attr, HTML_CREDIT_ATTRIBUTES, SGML_MIXED,T_CREDIT},
{ P("DD") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_DD},
{ P("DEL") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_DEL},
{ P("DFN") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_DFN},
{ P("DIR") , ulist_attr, HTML_UL_ATTRIBUTES, SGML_MIXED,T_DIR},
{ P("DIV") , div_attr, HTML_DIV_ATTRIBUTES, SGML_MIXED,T_DIV},
{ P("DL") , glossary_attr, HTML_DL_ATTRIBUTES, SGML_MIXED,T_DL},
{ P("DLC") , glossary_attr, HTML_DL_ATTRIBUTES, SGML_MIXED,T_DLC},
{ P("DT") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_DT},
{ P("EM") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_EM},
{ P("EMBED") , embed_attr, HTML_EMBED_ATTRIBUTES, SGML_EMPTY,T_EMBED},
{ P("FIELDSET"), fieldset_attr,HTML_FIELDSET_ATTRIBUTES, SGML_MIXED,T_FIELDSET},
{ P("FIG") , fig_attr, HTML_FIG_ATTRIBUTES, SGML_MIXED,T_FIG},
{ P("FN") , fn_attr, HTML_FN_ATTRIBUTES, SGML_MIXED,T_FN},
{ P("FONT") , font_attr, HTML_FONT_ATTRIBUTES, SGML_EMPTY,T_FONT},
{ P("FORM") , form_attr, HTML_FORM_ATTRIBUTES, SGML_EMPTY,T_FORM},
{ P("FRAME") , frame_attr, HTML_FRAME_ATTRIBUTES, SGML_EMPTY,T_FRAME},
{ P("FRAMESET"), frameset_attr,HTML_FRAMESET_ATTRIBUTES, SGML_MIXED,T_FRAMESET},
{ P0("H1") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H1},
{ P0("H2") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H2},
{ P0("H3") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H3},
{ P0("H4") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H4},
{ P0("H5") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H5},
{ P0("H6") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H6},
{ P("HEAD") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_HEAD},
{ P("HR") , hr_attr, HTML_HR_ATTRIBUTES, SGML_EMPTY,T_HR},
{ P("HTML") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_HTML},
{ P("HY") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_HY},
{ P("I") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_I},
{ P("IFRAME") , iframe_attr, HTML_IFRAME_ATTRIBUTES, SGML_MIXED,T_IFRAME},
{ P("IMG") , img_attr, HTML_IMG_ATTRIBUTES, SGML_EMPTY,T_IMG},
{ P("INPUT") , input_attr, HTML_INPUT_ATTRIBUTES, SGML_EMPTY,T_INPUT},
{ P("INS") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_INS},
{ P("ISINDEX") , isindex_attr, HTML_ISINDEX_ATTRIBUTES,SGML_EMPTY,T_ISINDEX},
{ P("KBD") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_KBD},
{ P("KEYGEN") , keygen_attr, HTML_KEYGEN_ATTRIBUTES, SGML_EMPTY,T_KEYGEN},
{ P("LABEL") , label_attr, HTML_LABEL_ATTRIBUTES, SGML_MIXED,T_LABEL},
{ P("LEGEND") , legend_attr, HTML_LEGEND_ATTRIBUTES, SGML_MIXED,T_LEGEND},
{ P("LH") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_LH},
{ P("LI") , list_attr, HTML_LI_ATTRIBUTES, SGML_EMPTY,T_LI},
{ P("LINK") , link_attr, HTML_LINK_ATTRIBUTES, SGML_EMPTY,T_LINK},
{ P("LISTING") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_LITTERAL,T_LISTING},
{ P("MAP") , map_attr, HTML_MAP_ATTRIBUTES, SGML_MIXED,T_MAP},
{ P("MARQUEE") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_MARQUEE},
{ P("MATH") , math_attr, HTML_MATH_ATTRIBUTES, SGML_LITTERAL,T_MATH},
{ P("MENU") , ulist_attr, HTML_UL_ATTRIBUTES, SGML_MIXED,T_MENU},
{ P("META") , meta_attr, HTML_META_ATTRIBUTES, SGML_EMPTY,T_META},
{ P("NEXTID") , nextid_attr, 1, SGML_EMPTY,T_NEXTID},
{ P("NOFRAMES"), gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_NOFRAMES},
{ P("NOTE") , note_attr, HTML_NOTE_ATTRIBUTES, SGML_MIXED,T_NOTE},
{ P("OBJECT") , object_attr, HTML_OBJECT_ATTRIBUTES, SGML_LITTERAL,T_OBJECT},
{ P("OL") , olist_attr, HTML_OL_ATTRIBUTES, SGML_MIXED,T_OL},
{ P("OPTION") , option_attr, HTML_OPTION_ATTRIBUTES, SGML_EMPTY,T_OPTION},
{ P("OVERLAY") , overlay_attr, HTML_OVERLAY_ATTRIBUTES, SGML_EMPTY,T_OVERLAY},
{ P("P") , p_attr, HTML_P_ATTRIBUTES, SGML_EMPTY,T_P},
{ P("PARAM") , param_attr, HTML_PARAM_ATTRIBUTES, SGML_EMPTY,T_PARAM},
{ P("PLAINTEXT"), gen_attr, HTML_GEN_ATTRIBUTES, SGML_LITTERAL,T_PLAINTEXT},
{ P0("PRE") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_PRE},
{ P("Q") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_Q},
{ P("S") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_S},
{ P("SAMP") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_SAMP},
{ P("SCRIPT") , script_attr, HTML_SCRIPT_ATTRIBUTES, SGML_LITTERAL,T_SCRIPT},
{ P("SELECT") , select_attr, HTML_SELECT_ATTRIBUTES, SGML_MIXED,T_SELECT},
{ P("SHY") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_SHY},
{ P("SMALL") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_SMALL},
{ P("SPAN") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_SPAN},
{ P("SPOT") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_SPOT},
{ P("STRIKE") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_STRIKE},
{ P("STRONG") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_STRONG},
{ P("STYLE") , style_attr, HTML_STYLE_ATTRIBUTES, SGML_LITTERAL,T_STYLE},
{ P("SUB") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_SUB},
{ P("SUP") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_SUP},
{ P("TAB") , tab_attr, HTML_TAB_ATTRIBUTES, SGML_EMPTY,T_TAB},
{ P("TABLE") , table_attr, HTML_TABLE_ATTRIBUTES, SGML_MIXED,T_TABLE},
{ P("TBODY") , tr_attr, HTML_TR_ATTRIBUTES, SGML_EMPTY,T_TBODY},
{ P("TD") , td_attr, HTML_TD_ATTRIBUTES, SGML_EMPTY,T_TD},
{ P("TEXTAREA"), textarea_attr,HTML_TEXTAREA_ATTRIBUTES, SGML_LITTERAL,T_TEXTAREA},
{ P("TEXTFLOW"), bodytext_attr,HTML_BODYTEXT_ATTRIBUTES, SGML_MIXED,T_TEXTFLOW},
{ P("TFOOT") , tr_attr, HTML_TR_ATTRIBUTES, SGML_EMPTY,T_TFOOT},
{ P("TH") , td_attr, HTML_TD_ATTRIBUTES, SGML_EMPTY,T_TH},
{ P("THEAD") , tr_attr, HTML_TR_ATTRIBUTES, SGML_EMPTY,T_THEAD},
{ P("TITLE") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_RCDATA,T_TITLE},
{ P("TR") , tr_attr, HTML_TR_ATTRIBUTES, SGML_EMPTY,T_TR},
{ P("TT") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_TT},
{ P("U") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_U},
{ P("UL") , ulist_attr, HTML_UL_ATTRIBUTES, SGML_MIXED,T_UL},
{ P("VAR") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_VAR},
{ P("WBR") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_WBR},
{ P0("XMP") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_LITTERAL,T_XMP},
/* additional (alternative variants), not counted in HTML_ELEMENTS: */
/* This one will be used as a temporary substitute within the parser when
it has been signalled to parse OBJECT content as MIXED. - kw */
{ P("OBJECT") , object_attr, HTML_OBJECT_ATTRIBUTES, SGML_MIXED,T_OBJECT_PCDATA},
};
static const HTTag tags_new[HTML_ALL_ELEMENTS] = {
{ P("A") , a_attr, HTML_A_ATTRIBUTES, SGML_MIXED,T_A},
{ P("ABBREV") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_ABBREV},
{ P("ACRONYM") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_ACRONYM},
{ P("ADDRESS") , address_attr, HTML_ADDRESS_ATTRIBUTES, SGML_MIXED,T_ADDRESS},
{ P("APPLET") , applet_attr, HTML_APPLET_ATTRIBUTES, SGML_MIXED,T_APPLET},
{ P("AREA") , area_attr, HTML_AREA_ATTRIBUTES, SGML_EMPTY,T_AREA},
{ P("AU") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_AU},
{ P("AUTHOR") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_AUTHOR},
{ P("B") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_B},
{ P0("BANNER") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_BANNER},
{ P("BASE") , base_attr, HTML_BASE_ATTRIBUTES, SGML_EMPTY,T_BASE},
{ P("BASEFONT"), font_attr, HTML_FONT_ATTRIBUTES, SGML_EMPTY,T_BASEFONT},
{ P("BDO") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_BDO},
{ P("BGSOUND") , bgsound_attr, HTML_BGSOUND_ATTRIBUTES, SGML_EMPTY,T_BGSOUND},
{ P("BIG") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_BIG},
{ P("BLINK") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_BLINK},
{ P("BLOCKQUOTE"), bq_attr, HTML_BQ_ATTRIBUTES, SGML_MIXED,T_BLOCKQUOTE},
{ P("BODY") , body_attr, HTML_BODY_ATTRIBUTES, SGML_MIXED,T_BODY},
{ P("BODYTEXT"), bodytext_attr,HTML_BODYTEXT_ATTRIBUTES, SGML_MIXED,T_BODYTEXT},
{ P("BQ") , bq_attr, HTML_BQ_ATTRIBUTES, SGML_MIXED,T_BQ},
{ P("BR") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_BR},
{ P("BUTTON") , button_attr, HTML_BUTTON_ATTRIBUTES, SGML_MIXED,T_BUTTON},
{ P("CAPTION") , caption_attr, HTML_CAPTION_ATTRIBUTES, SGML_MIXED,T_CAPTION},
{ P("CENTER") , div_attr, HTML_DIV_ATTRIBUTES, SGML_MIXED,T_CENTER},
{ P("CITE") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_CITE},
{ P("CODE") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_CODE},
{ P("COL") , col_attr, HTML_COL_ATTRIBUTES, SGML_EMPTY,T_COL},
{ P("COLGROUP"), col_attr, HTML_COL_ATTRIBUTES, SGML_ELEMENT,T_COLGROUP},
{ P("COMMENT") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_PCDATA,T_COMMENT},
{ P("CREDIT") , credit_attr, HTML_CREDIT_ATTRIBUTES, SGML_MIXED,T_CREDIT},
{ P("DD") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_DD},
{ P("DEL") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_DEL},
{ P("DFN") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_DFN},
{ P("DIR") , ulist_attr, HTML_UL_ATTRIBUTES, SGML_MIXED,T_DIR},
{ P("DIV") , div_attr, HTML_DIV_ATTRIBUTES, SGML_MIXED,T_DIV},
{ P("DL") , glossary_attr, HTML_DL_ATTRIBUTES, SGML_MIXED,T_DL},
{ P("DLC") , glossary_attr, HTML_DL_ATTRIBUTES, SGML_MIXED,T_DLC},
{ P("DT") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_DT},
{ P("EM") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_EM},
{ P("EMBED") , embed_attr, HTML_EMBED_ATTRIBUTES, SGML_EMPTY,T_EMBED},
{ P("FIELDSET"), fieldset_attr,HTML_FIELDSET_ATTRIBUTES, SGML_MIXED,T_FIELDSET},
{ P("FIG") , fig_attr, HTML_FIG_ATTRIBUTES, SGML_MIXED,T_FIG},
{ P("FN") , fn_attr, HTML_FN_ATTRIBUTES, SGML_MIXED,T_FN},
{ P("FONT") , font_attr, HTML_FONT_ATTRIBUTES, SGML_MIXED,T_FONT},
{ P("FORM") , form_attr, HTML_FORM_ATTRIBUTES, SGML_MIXED,T_FORM},
{ P("FRAME") , frame_attr, HTML_FRAME_ATTRIBUTES, SGML_EMPTY,T_FRAME},
{ P("FRAMESET"), frameset_attr,HTML_FRAMESET_ATTRIBUTES, SGML_ELEMENT,T_FRAMESET},
{ P0("H1") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H1},
{ P0("H2") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H2},
{ P0("H3") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H3},
{ P0("H4") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H4},
{ P0("H5") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H5},
{ P0("H6") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H6},
{ P("HEAD") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_ELEMENT,T_HEAD},
{ P("HR") , hr_attr, HTML_HR_ATTRIBUTES, SGML_EMPTY,T_HR},
{ P("HTML") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_HTML},
{ P("HY") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_HY},
{ P("I") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_I},
{ P("IFRAME") , iframe_attr, HTML_IFRAME_ATTRIBUTES, SGML_MIXED,T_IFRAME},
{ P("IMG") , img_attr, HTML_IMG_ATTRIBUTES, SGML_EMPTY,T_IMG},
{ P("INPUT") , input_attr, HTML_INPUT_ATTRIBUTES, SGML_EMPTY,T_INPUT},
{ P("INS") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_INS},
{ P("ISINDEX") , isindex_attr, HTML_ISINDEX_ATTRIBUTES,SGML_EMPTY,T_ISINDEX},
{ P("KBD") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_KBD},
{ P("KEYGEN") , keygen_attr, HTML_KEYGEN_ATTRIBUTES, SGML_EMPTY,T_KEYGEN},
{ P("LABEL") , label_attr, HTML_LABEL_ATTRIBUTES, SGML_MIXED,T_LABEL},
{ P("LEGEND") , legend_attr, HTML_LEGEND_ATTRIBUTES, SGML_MIXED,T_LEGEND},
{ P("LH") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_LH},
{ P("LI") , list_attr, HTML_LI_ATTRIBUTES, SGML_MIXED,T_LI},
{ P("LINK") , link_attr, HTML_LINK_ATTRIBUTES, SGML_EMPTY,T_LINK},
{ P("LISTING") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_LITTERAL,T_LISTING},
{ P("MAP") , map_attr, HTML_MAP_ATTRIBUTES, SGML_ELEMENT,T_MAP},
{ P("MARQUEE") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_MARQUEE},
{ P("MATH") , math_attr, HTML_MATH_ATTRIBUTES, SGML_PCDATA,T_MATH},
{ P("MENU") , ulist_attr, HTML_UL_ATTRIBUTES, SGML_MIXED,T_MENU},
{ P("META") , meta_attr, HTML_META_ATTRIBUTES, SGML_EMPTY,T_META},
{ P("NEXTID") , nextid_attr, 1, SGML_EMPTY,T_NEXTID},
{ P("NOFRAMES"), gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_NOFRAMES},
{ P("NOTE") , note_attr, HTML_NOTE_ATTRIBUTES, SGML_MIXED,T_NOTE},
{ P("OBJECT") , object_attr, HTML_OBJECT_ATTRIBUTES, SGML_LITTERAL,T_OBJECT},
{ P("OL") , olist_attr, HTML_OL_ATTRIBUTES, SGML_MIXED,T_OL},
{ P("OPTION") , option_attr, HTML_OPTION_ATTRIBUTES, SGML_PCDATA,T_OPTION},
{ P("OVERLAY") , overlay_attr, HTML_OVERLAY_ATTRIBUTES, SGML_PCDATA,T_OVERLAY},
{ P("P") , p_attr, HTML_P_ATTRIBUTES, SGML_MIXED,T_P},
{ P("PARAM") , param_attr, HTML_PARAM_ATTRIBUTES, SGML_EMPTY,T_PARAM},
{ P("PLAINTEXT"), gen_attr, HTML_GEN_ATTRIBUTES, SGML_LITTERAL,T_PLAINTEXT},
{ P0("PRE") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_PRE},
{ P("Q") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_Q},
{ P("S") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_S},
{ P("SAMP") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_SAMP},
{ P("SCRIPT") , script_attr, HTML_SCRIPT_ATTRIBUTES, SGML_SCRIPT,T_SCRIPT},
{ P("SELECT") , select_attr, HTML_SELECT_ATTRIBUTES, SGML_ELEMENT,T_SELECT},
{ P("SHY") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_SHY},
{ P("SMALL") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_SMALL},
{ P("SPAN") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_SPAN},
{ P("SPOT") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_SPOT},
{ P("STRIKE") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_STRIKE},
{ P("STRONG") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_STRONG},
{ P("STYLE") , style_attr, HTML_STYLE_ATTRIBUTES, SGML_CDATA,T_STYLE},
{ P("SUB") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_SUB},
{ P("SUP") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_SUP},
{ P("TAB") , tab_attr, HTML_TAB_ATTRIBUTES, SGML_EMPTY,T_TAB},
{ P("TABLE") , table_attr, HTML_TABLE_ATTRIBUTES, SGML_ELEMENT,T_TABLE},
{ P("TBODY") , tr_attr, HTML_TR_ATTRIBUTES, SGML_ELEMENT,T_TBODY},
{ P("TD") , td_attr, HTML_TD_ATTRIBUTES, SGML_MIXED,T_TD},
{ P("TEXTAREA"), textarea_attr,HTML_TEXTAREA_ATTRIBUTES, SGML_PCDATA,T_TEXTAREA},
{ P("TEXTFLOW"), bodytext_attr,HTML_BODYTEXT_ATTRIBUTES, SGML_MIXED,T_TEXTFLOW},
{ P("TFOOT") , tr_attr, HTML_TR_ATTRIBUTES, SGML_ELEMENT,T_TFOOT},
{ P("TH") , td_attr, HTML_TD_ATTRIBUTES, SGML_MIXED,T_TH},
{ P("THEAD") , tr_attr, HTML_TR_ATTRIBUTES, SGML_ELEMENT,T_THEAD},
{ P("TITLE") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_PCDATA,T_TITLE},
{ P("TR") , tr_attr, HTML_TR_ATTRIBUTES, SGML_MIXED,T_TR},
{ P("TT") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_TT},
{ P("U") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_U},
{ P("UL") , ulist_attr, HTML_UL_ATTRIBUTES, SGML_MIXED,T_UL},
{ P("VAR") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_VAR},
{ P("WBR") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_WBR},
{ P0("XMP") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_LITTERAL,T_XMP},
/* additional (alternative variants), not counted in HTML_ELEMENTS: */
/* This one will be used as a temporary substitute within the parser when
it has been signalled to parse OBJECT content as MIXED. - kw */
{ P("OBJECT") , object_attr, HTML_OBJECT_ATTRIBUTES, SGML_MIXED,T_OBJECT_PCDATA},
};
/* *INDENT-ON* */
#undef P
#undef P0
#undef P_
/* Dummy space, will be filled with the contents of either tags_new
or tags_old on calling HTSwitchDTD - kw */
static HTTag tags[HTML_ALL_ELEMENTS];
const SGML_dtd HTML_dtd =
{
tags,
HTML_ELEMENTS,
entities, /* probably unused */
TABLESIZE(entities),
};
/* This function fills the "tags" part of the HTML_dtd structure with
what we want to use, either tags_old or tags_new. Note that it
has to be called at least once before HTML_dtd is used, otherwise
the HTML_dtd contents will be invalid! This could be coded in a way
that would make an initialisation call unnecessary, but my C knowledge
is limited and I didn't want to list the whole tags_new table
twice... - kw */
void HTSwitchDTD(int new_flag)
{
if (TRACE)
CTRACE((tfp,
"HTMLDTD: Copying %s DTD element info of size %d, %d * %d\n",
new_flag ? "strict" : "tagsoup",
(int) (new_flag ? sizeof(tags_new) : sizeof(tags_old)),
HTML_ALL_ELEMENTS,
(int) sizeof(HTTag)));
if (new_flag)
memcpy(tags, tags_new, HTML_ALL_ELEMENTS * sizeof(HTTag));
else
memcpy(tags, tags_old, HTML_ALL_ELEMENTS * sizeof(HTTag));
}
HTTag HTTag_unrecognized =
{NULL_HTTag, NULL, 0, SGML_EMPTY, T__UNREC_};
/*
* Utility Routine: Useful for people building HTML objects.
*/
/* Start anchor element
* --------------------
*
* It is kinda convenient to have a particulr routine for
* starting an anchor element, as everything else for HTML is
* simple anyway.
*/
struct _HTStructured {
HTStructuredClass *isa;
/* ... */
};
void HTStartAnchor(HTStructured * obj, const char *name,
const char *href)
{
BOOL present[HTML_A_ATTRIBUTES];
const char *value[HTML_A_ATTRIBUTES];
int i;
for (i = 0; i < HTML_A_ATTRIBUTES; i++)
present[i] = NO;
if (name && *name) {
present[HTML_A_NAME] = YES;
value[HTML_A_NAME] = (const char *) name;
}
if (href) {
present[HTML_A_HREF] = YES;
value[HTML_A_HREF] = (const char *) href;
}
(*obj->isa->start_element) (obj, HTML_A, present, value, -1, 0);
}
void HTStartAnchor5(HTStructured * obj, const char *name,
const char *href,
const char *linktype,
int tag_charset)
{
BOOL present[HTML_A_ATTRIBUTES];
const char *value[HTML_A_ATTRIBUTES];
int i;
for (i = 0; i < HTML_A_ATTRIBUTES; i++)
present[i] = NO;
if (name && *name) {
present[HTML_A_NAME] = YES;
value[HTML_A_NAME] = name;
}
if (href) {
present[HTML_A_HREF] = YES;
value[HTML_A_HREF] = href;
}
if (linktype) {
present[HTML_A_TYPE] = YES;
value[HTML_A_TYPE] = linktype;
}
(*obj->isa->start_element) (obj, HTML_A, present, value, tag_charset, 0);
}
void HTStartIsIndex(HTStructured * obj, const char *prompt,
const char *href)
{
BOOL present[HTML_ISINDEX_ATTRIBUTES];
const char *value[HTML_ISINDEX_ATTRIBUTES];
int i;
for (i = 0; i < HTML_ISINDEX_ATTRIBUTES; i++)
present[i] = NO;
if (prompt && *prompt) {
present[HTML_ISINDEX_PROMPT] = YES;
value[HTML_ISINDEX_PROMPT] = (const char *) prompt;
}
if (href) {
present[HTML_ISINDEX_HREF] = YES;
value[HTML_ISINDEX_HREF] = (const char *) href;
}
(*obj->isa->start_element) (obj, HTML_ISINDEX, present, value, -1, 0);
}