/* Our Static DTD for HTML
** -----------------------
*/
/* Implements:
*/
#include "HTUtils.h"
#include "HTMLDTD.h"
#include "LYLeaks.h"
/* Entity Names
** ------------
**
** This table must be matched exactly with ALL the translation tables
*/
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 diaresis */
"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", /* quot '"' */
"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", /* registerd trademark */
"uacute", /* small u, acute accent */
"ucirc", /* small u, circumflex accent */
"ugrave", /* small u, grave accent */
"uml", /* spacing diaresis */
"uuml", /* small u, dieresis or umlaut mark */
"yacute", /* small y, acute accent */
"yen", /* yen sign */
"yuml", /* small y, dieresis or umlaut mark */
};
#define HTML_ENTITIES 112
/* Attribute Lists
** ---------------
**
** Lists must be in alphatbetical order by attribute name
** The tag elements contain the number of attributes
*/
static attr a_attr[] = { /* Anchor attributes */
{ "ACCESSKEY" },
{ "CLASS" },
{ "CLEAR" },
{ "COORDS" },
{ "DIR" },
{ "HREF" },
{ "ID" },
{ "ISMAP" },
{ "LANG" },
{ "MD" },
{ "NAME" },
{ "NOTAB" },
{ "ONCLICK" },
{ "ONMOUSEOUT" },
{ "ONMOUSEOVER" },
{ "REL" },
{ "REV" },
{ "SHAPE" },
{ "STYLE" },
{ "TABINDEX" },
{ "TARGET" },
{ "TITLE" },
{ "TYPE" },
{ "URN" },
{ 0 } /* Terminate list */
};
static attr address_attr[] = { /* ADDRESS attributes */
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "ID" },
{ "LANG" },
{ "NOWRAP" },
{ "STYLE" },
{ 0 } /* Terminate list */
};
static attr applet_attr[] = { /* APPLET attributes */
{ "ALIGN" },
{ "ALT" },
{ "CLASS" },
{ "CLEAR" },
{ "CODE" },
{ "CODEBASE" },
{ "DIR" },
{ "DOWNLOAD" },
{ "HEIGHT" },
{ "HSPACE" },
{ "ID" },
{ "LANG" },
{ "NAME" },
{ "STYLE" },
{ "TITLE" },
{ "VSPACE" },
{ "WIDTH" },
{ 0 } /* Terminate list */
};
static attr area_attr[] = { /* AREA attributes */
{ "ALT" },
{ "CLASS" },
{ "CLEAR" },
{ "COORDS" },
{ "DIR" },
{ "HREF" },
{ "ID" },
{ "LANG" },
{ "NOHREF" },
{ "NOTAB" },
{ "ONCLICK" },
{ "ONMOUSEOUT" },
{ "ONMOUSEOVER" },
{ "SHAPE" },
{ "STYLE" },
{ "TABINDEX" },
{ "TARGET" },
{ "TITLE" },
{ 0 } /* Terminate list */
};
static attr base_attr[] = { /* BASE attributes */
{ "HREF" },
{ "TARGET" },
{ 0 } /* Terminate list */
};
static attr bgsound_attr[] = { /* BGSOUND attributes */
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "ID" },
{ "LANG" },
{ "LOOP" },
{ "SRC" },
{ "STYLE" },
{ 0 } /* Terminate list */
};
static attr body_attr[] = { /* BODY attributes */
{ "ALINK" },
{ "BACKGROUND" },
{ "BGCOLOR" },
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "ID" },
{ "LANG" },
{ "LINK" },
{ "STYLE" },
{ "ONLOAD" },
{ "ONUNLOAD" },
{ "TEXT" },
{ "VLINK" },
{ 0 } /* Terminate list */
};
static attr bodytext_attr[] = { /* BODYTEXT attributes */
{ "CLASS" },
{ "CLEAR" },
{ "DATA" },
{ "DIR" },
{ "ID" },
{ "LANG" },
{ "NAME" },
{ "OBJECT" },
{ "REF" },
{ "STYLE" },
{ "TYPE" },
{ "VALUE" },
{ "VALUETYPE" },
{ 0 } /* Terminate list */
};
static attr bq_attr[] = { /* BQ (BLOCKQUOTE) attributes */
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "ID" },
{ "LANG" },
{ "NOWRAP" },
{ "STYLE" },
{ 0 } /* Terminate list */
};
static attr caption_attr[] = { /* CAPTION attributes */
{ "ACCESSKEY" },
{ "ALIGN" },
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "ID" },
{ "LANG" },
{ "STYLE" },
{ 0 } /* Terminate list */
};
static attr col_attr[] = { /* COL and COLGROUP attributes */
{ "ALIGN" },
{ "CHAR" },
{ "CHAROFF" },
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "ID" },
{ "LANG" },
{ "SPAN" },
{ "STYLE" },
{ "VALIGN" },
{ "WIDTH" },
{ 0 } /* Terminate list */
};
static attr credit_attr[] = { /* CREDIT attributes */
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "ID" },
{ "LANG" },
{ "STYLE" },
{ 0 } /* Terminate list */
};
static attr div_attr[] = { /* DIV attribures */
{ "ALIGN" },
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "ID" },
{ "LANG" },
{ "STYLE" },
{ 0 } /* Terminate list */
};
static attr embed_attr[] = { /* EMBED attributes */
{ "ALIGN" }, /* (including, for now, those from FIG and IMG) */
{ "ALT" },
{ "BORDER" },
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "HEIGHT" },
{ "ID" },
{ "IMAGEMAP" },
{ "ISMAP" },
{ "LANG" },
{ "MD" },
{ "NAME" },
{ "NOFLOW" },
{ "PARAMS" },
{ "SRC" },
{ "STYLE" },
{ "UNITS" },
{ "USEMAP" },
{ "WIDTH" },
{ 0 } /* Terminate list */
};
static attr fig_attr[] = { /* FIG attributes */
{ "ALIGN" },
{ "BORDER" },
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "HEIGHT" },
{ "ID" },
{ "IMAGEMAP" },
{ "ISOBJECT" },
{ "LANG" },
{ "MD" },
{ "NOFLOW" },
{ "SRC" },
{ "STYLE" },
{ "UNITS" },
{ "WIDTH" },
{ 0 } /* Terminate list */
};
static attr fieldset_attr[] = { /* FIELDSET attributes */
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "ID" },
{ "LANG" },
{ "STYLE" },
{ "TITLE" },
{ 0 } /* Terminate list */
};
static attr fn_attr[] = { /* FN attributes */
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "ID" },
{ "LANG" },
{ "STYLE" },
{ 0 } /* Terminate list */
};
static attr font_attr[] = { /* FONT attributes */
{ "CLASS" },
{ "CLEAR" },
{ "COLOR" },
{ "DIR" },
{ "END" },
{ "FACE" },
{ "ID" },
{ "LANG" },
{ "SIZE" },
{ "STYLE" },
{ 0 } /* Terminate list */
};
static attr form_attr[] = { /* FORM attributes */
{ "ACTION"},
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "ENCTYPE" },
{ "ID" },
{ "LANG" },
{ "METHOD" },
{ "ONSUBMIT" },
{ "SCRIPT" },
{ "STYLE" },
{ "SUBJECT" },
{ "TARGET" },
{ "TITLE" },
{ 0 } /* Terminate list */
};
static attr frame_attr[] = { /* FRAME attributes */
{ "MARGINHEIGHT"},
{ "MARGINWIDTH" },
{ "NAME" },
{ "NORESIZE" },
{ "SCROLLING" },
{ "SRC" },
{ 0 } /* Terminate list */
};
static attr frameset_attr[] = { /* FRAMESET attributes */
{ "COLS"},
{ "ROWS" },
{ 0 } /* Terminate list */
};
static attr gen_attr[] = { /* Minimum HTML 3.0 */
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "ID" },
{ "LANG" },
{ "STYLE" },
{ 0 } /* Terminate list */
};
static attr glossary_attr[] = { /* DL (and DLC) attributes */
{ "CLASS" },
{ "CLEAR" },
{ "COMPACT" },
{ "DIR" },
{ "ID" },
{ "LANG" },
{ "STYLE" },
{ 0 } /* Terminate list */
};
static attr h_attr[] = { /* H1 - H6 attributes */
{ "ALIGN" },
{ "CLASS" },
{ "CLEAR" },
{ "DINGBAT" },
{ "DIR" },
{ "ID" },
{ "LANG" },
{ "MD" },
{ "NOWRAP" },
{ "SEQNUM" },
{ "SKIP" },
{ "SRC" },
{ "STYLE" },
{ 0 } /* Terminate list */
};
static attr hr_attr[] = { /* HR attributes */
{ "ALIGN" },
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "ID" },
{ "MD" },
{ "NOSHADE" },
{ "SIZE" },
{ "SRC" },
{ "STYLE" },
{ "WIDTH" },
{ 0 } /* Terminate list */
};
static attr img_attr[] = { /* IMG attributes */
{ "ALIGN" },
{ "ALT" },
{ "BORDER" },
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "HEIGHT" },
{ "ID" },
{ "ISMAP" },
{ "ISOBJECT" },
{ "LANG" },
{ "MD" },
{ "SRC" },
{ "STYLE" },
{ "TITLE" },
{ "UNITS" },
{ "USEMAP" },
{ "WIDTH" },
{ 0 } /* Terminate list */
};
static attr input_attr[] = { /* INPUT attributes */
{ "ACCEPT" },
{ "ALIGN" },
{ "CHECKED" },
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "DISABLED" },
{ "ERROR" },
{ "HEIGHT" },
{ "ID" },
{ "LANG" },
{ "MAX" },
{ "MAXLENGTH" },
{ "MD" },
{ "MIN" },
{ "NAME" },
{ "NOTAB" },
{ "ONBLUR" },
{ "ONCHANGE" },
{ "ONCLICK" },
{ "ONFOCUS" },
{ "ONSELECT" },
{ "SIZE" },
{ "SRC" },
{ "STYLE" },
{ "TABINDEX" },
{ "TITLE" },
{ "TYPE" },
{ "VALUE" },
{ "WIDTH" },
{ 0 } /* Terminate list */
};
static attr isindex_attr[] = { /* ISINDEX attributes */
{ "ACTION" }, /* Not in spec. Lynx treats it as HREF. - FM */
{ "DIR" },
{ "HREF" }, /* HTML 3.0 attritute for search action. - FM */
{ "LANG" },
{ "PROMPT" }, /* HTML 3.0 attribute for prompt string. - FM */
{ 0 } /* Terminate list */
};
static attr label_attr[] = { /* LABEL attributes */
{ "ACCESSKEY" },
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "FOR" },
{ "ID" },
{ "LANG" },
{ "ONCLICK" },
{ "STYLE" },
{ "TITLE" },
{ 0 } /* Terminate list */
};
static attr link_attr[] = { /* LINK attributes */
{ "CLASS" },
{ "HREF" },
{ "ID" },
{ "REL" },
{ "REV" },
{ "STYLE" },
{ "TARGET" },
{ "TITLE" },
{ "TYPE" },
{ 0 } /* Terminate list */
};
static attr list_attr[] = { /* LI attributes */
{ "CLASS" },
{ "CLEAR" },
{ "DINGBAT" },
{ "DIR" },
{ "ID" },
{ "LANG" },
{ "MD" },
{ "SRC" },
{ "SKIP" },
{ "STYLE" },
{ "TYPE" },
{ "VALUE" },
{ 0 } /* Terminate list */
};
static attr map_attr[] = { /* MAP attributes */
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "ID" },
{ "LANG" },
{ "NAME" },
{ "STYLE" },
{ "TITLE" },
{ 0 } /* Terminate list */
};
static attr math_attr[] = { /* MATH attributes */
{ "BOX" },
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "ID" },
{ "LANG" },
{ "STYLE" },
{ 0 } /* Terminate list */
};
static attr meta_attr[] = { /* META attributes */
{ "CONTENT" },
{ "HTTP-EQUIV" },
{ "NAME" },
{ 0 } /* Terminate list */
};
static attr nextid_attr[] = { /* NEXTID attribures */
{ "N" }
};
static attr note_attr[] = { /* NOTE attributes */
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "ID" },
{ "LANG" },
{ "MD" },
{ "ROLE" },
{ "SRC" },
{ "STYLE" },
{ 0 } /* Terminate list */
};
static attr object_attr[] = { /* OBJECT attributes */
{ "ALIGN" },
{ "BORDER" },
{ "CLASS" },
{ "CLASSID" },
{ "CODEBASE" },
{ "CODETYPE" },
{ "DATA" },
{ "DECLARE" },
{ "DIR" },
{ "HEIGHT" },
{ "HSPACE" },
{ "ID" },
{ "ISMAP" },
{ "LANG" },
{ "NAME" },
{ "NOTAB" },
{ "SHAPES" },
{ "STANDBY" },
{ "STYLE" },
{ "TABINDEX" },
{ "TITLE" },
{ "TYPE" },
{ "USEMAP" },
{ "VSPACE" },
{ "WIDTH" },
{ 0 } /* Terminate list */
};
static attr olist_attr[] = { /* OL attributes */
{ "CLASS" },
{ "CLEAR" },
{ "COMPACT" },
{ "CONTINUE" },
{ "DIR" },
{ "ID" },
{ "LANG" },
{ "SEQNUM" },
{ "START" },
{ "STYLE" },
{ "TYPE" },
{ 0 } /* Terminate list */
};
static attr option_attr[] = { /* OPTION attributes */
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "DISABLED" },
{ "ERROR" },
{ "ID" },
{ "LANG" },
{ "SELECTED" },
{ "SHAPE" },
{ "STYLE" },
{ "VALUE" },
{ 0 } /* Terminate list */
};
static attr overlay_attr[] = { /* OVERLAY attributes */
{ "CLASS" },
{ "HEIGHT" },
{ "ID" },
{ "IMAGEMAP" },
{ "MD" },
{ "SRC" },
{ "STYLE" },
{ "UNITS" },
{ "WIDTH" },
{ "X" },
{ "Y" },
{ 0 } /* Terminate list */
};
static attr p_attr[] = { /* P attributes */
{ "ALIGN" },
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "ID" },
{ "LANG" },
{ "NOWRAP" },
{ "STYLE" },
{ 0 } /* Terminate list */
};
static attr param_attr[] = { /* PARAM attribures */
{ "ACCEPT" },
{ "ACCEPT-CHARSET" },
{ "ACCEPT-ENCODING" },
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "ID" },
{ "LANG" },
{ "DATA" },
{ "NAME" },
{ "OBJECT" },
{ "REF" },
{ "STYLE" },
{ "TYPE" },
{ "VALUE" },
{ "VALUEREF" },
{ "VALUETYPE" },
{ 0 } /* Terminate list */
};
static attr script_attr[] = { /* SCRIPT attribures */
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "EVENT" },
{ "FOR" },
{ "ID" },
{ "LANG" },
{ "LANGUAGE" },
{ "NAME" },
{ "SCRIPTENGINE" },
{ "SRC" },
{ "TYPE" },
{ "STYLE" },
{ 0 } /* Terminate list */
};
static attr select_attr[] = { /* SELECT attributes */
{ "ALIGN" },
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "DISABLED" },
{ "ERROR" },
{ "HEIGHT" },
{ "ID" },
{ "LANG" },
{ "MD" },
{ "MULTIPLE" },
{ "NAME" },
{ "NOTAB" },
{ "ONBLUR" },
{ "ONCHANGE" },
{ "ONFOCUS" },
{ "SIZE" },
{ "STYLE" },
{ "TABINDEX" },
{ "TITLE" },
{ "UNITS" },
{ "WIDTH" },
{ 0 } /* Terminate list */
};
static attr style_attr[] = { /* STYLE attributes */
{ "DIR" },
{ "LANG" },
{ "NOTATION" },
{ "TITLE" },
{ 0 } /* Terminate list */
};
static attr tab_attr[] = { /* TAB attributes */
{ "ALIGN" },
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "DP" },
{ "ID" },
{ "INDENT" },
{ "LANG" },
{ "STYLE" },
{ "TO" },
{ 0 } /* Terminate list */
};
static attr table_attr[] = { /* TABLE attributes */
{ "ALIGN" },
{ "BORDER" },
{ "CELLPADDING" },
{ "CELLSPACING" },
{ "CLASS" },
{ "CLEAR" },
{ "COLS" },
{ "COLSPEC" },
{ "DIR" },
{ "DP" },
{ "FRAME" },
{ "ID" },
{ "LANG" },
{ "NOFLOW" },
{ "NOWRAP" },
{ "RULES" },
{ "STYLE" },
{ "UNITS" },
{ "WIDTH" },
{ 0 } /* Terminate list */
};
static attr td_attr[] = { /* TD and TH attributes */
{ "ALIGN" },
{ "AXES" },
{ "AXIS" },
{ "CHAR" },
{ "CHAROFF" },
{ "CLASS" },
{ "CLEAR" },
{ "COLSPAN" },
{ "DIR" },
{ "DP" },
{ "ID" },
{ "LANG" },
{ "NOWRAP" },
{ "ROWSPAN" },
{ "STYLE" },
{ "VALIGN" },
{ 0 } /* Terminate list */
};
static attr textarea_attr[] = { /* TEXTAREA attributes */
{ "ALIGN" },
{ "CLASS" },
{ "CLEAR" },
{ "COLS" },
{ "DIR" },
{ "DISABLED" },
{ "ERROR" },
{ "ID" },
{ "LANG" },
{ "NAME" },
{ "NOTAB" },
{ "ONBLUR" },
{ "ONCHANGE" },
{ "ONFOCUS" },
{ "ONSELECT" },
{ "ROWS" },
{ "STYLE" },
{ "TABINDEX" },
{ "TITLE" },
{ 0 } /* Terminate list */
};
static attr tr_attr[] = { /* TR, THEAD, TFOOT, and TBODY attributes */
{ "ALIGN" },
{ "CHAR" },
{ "CHAROFF" },
{ "CLASS" },
{ "CLEAR" },
{ "DIR" },
{ "DP" },
{ "ID" },
{ "LANG" },
{ "NOWRAP" },
{ "STYLE" },
{ "VALIGN" },
{ 0 } /* Terminate list */
};
static attr ulist_attr[] = { /* UL attributes */
{ "CLASS" },
{ "CLEAR" },
{ "COMPACT" },
{ "DINGBAT" },
{ "DIR" },
{ "ID" },
{ "LANG" },
{ "MD" },
{ "PLAIN" },
{ "SRC" },
{ "STYLE" },
{ "TYPE" },
{ "WRAP" },
{ 0 } /* Terminate list */
};
/* Elements
** --------
**
** Must match definitions in HTMLDTD.html!
** Must be in alphabetical order.
**
** Name, Attributes, content
*/
static HTTag tags[HTML_ELEMENTS] = {
{ "A" , a_attr, HTML_A_ATTRIBUTES, SGML_MIXED },
{ "ABBREV" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "ACRONYM" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "ADDRESS" , address_attr, HTML_ADDRESS_ATTRIBUTES, SGML_MIXED },
{ "APPLET" , applet_attr, HTML_APPLET_ATTRIBUTES, SGML_MIXED },
{ "AREA" , area_attr, HTML_AREA_ATTRIBUTES, SGML_EMPTY },
{ "AU" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "AUTHOR" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "B" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "BANNER" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "BASE" , base_attr, HTML_BASE_ATTRIBUTES, SGML_EMPTY },
{ "BASEFONT", font_attr, HTML_FONT_ATTRIBUTES, SGML_EMPTY },
{ "BDO" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "BGSOUND" , bgsound_attr, HTML_BGSOUND_ATTRIBUTES, SGML_EMPTY },
{ "BIG" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "BLINK" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "BLOCKQUOTE", bq_attr, HTML_BQ_ATTRIBUTES, SGML_MIXED },
{ "BODY" , body_attr, HTML_BODY_ATTRIBUTES, SGML_MIXED },
{ "BODYTEXT", bodytext_attr,HTML_BODYTEXT_ATTRIBUTES, SGML_MIXED },
{ "BQ" , bq_attr, HTML_BQ_ATTRIBUTES, SGML_MIXED },
{ "BR" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY },
{ "CAPTION" , caption_attr, HTML_CAPTION_ATTRIBUTES, SGML_MIXED },
{ "CENTER" , div_attr, HTML_DIV_ATTRIBUTES, SGML_MIXED },
{ "CITE" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "CODE" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "COL" , col_attr, HTML_COL_ATTRIBUTES, SGML_EMPTY },
{ "COLGROUP", col_attr, HTML_COL_ATTRIBUTES, SGML_EMPTY },
{ "COMMENT" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "CREDIT" , credit_attr, HTML_CREDIT_ATTRIBUTES, SGML_MIXED },
{ "DD" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY },
{ "DEL" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "DFN" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "DIR" , ulist_attr, HTML_UL_ATTRIBUTES, SGML_MIXED },
{ "DIV" , div_attr, HTML_DIV_ATTRIBUTES, SGML_MIXED },
{ "DL" , glossary_attr, HTML_DL_ATTRIBUTES, SGML_MIXED },
{ "DLC" , glossary_attr, HTML_DL_ATTRIBUTES, SGML_MIXED },
{ "DT" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY },
{ "EM" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "EMBED" , embed_attr, HTML_EMBED_ATTRIBUTES, SGML_EMPTY },
{ "FIELDSET", fieldset_attr,HTML_FIELDSET_ATTRIBUTES, SGML_MIXED },
{ "FIG" , fig_attr, HTML_FIG_ATTRIBUTES, SGML_MIXED },
{ "FN" , fn_attr, HTML_FN_ATTRIBUTES, SGML_MIXED },
{ "FONT" , font_attr, HTML_FONT_ATTRIBUTES, SGML_EMPTY },
{ "FORM" , form_attr, HTML_FORM_ATTRIBUTES, SGML_MIXED },
{ "FRAME" , frame_attr, HTML_FRAME_ATTRIBUTES, SGML_EMPTY },
{ "FRAMESET", frameset_attr,HTML_FRAMESET_ATTRIBUTES, SGML_MIXED },
{ "H1" , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED },
{ "H2" , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED },
{ "H3" , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED },
{ "H4" , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED },
{ "H5" , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED },
{ "H6" , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED },
{ "HEAD" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "HR" , hr_attr, HTML_HR_ATTRIBUTES, SGML_EMPTY },
{ "HTML" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "I" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "IMG" , img_attr, HTML_IMG_ATTRIBUTES, SGML_EMPTY },
{ "INPUT" , input_attr, HTML_INPUT_ATTRIBUTES, SGML_EMPTY },
{ "INS" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "ISINDEX" , isindex_attr, HTML_ISINDEX_ATTRIBUTES,SGML_EMPTY },
{ "KBD" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "LABEL" , label_attr, HTML_LABEL_ATTRIBUTES, SGML_MIXED },
{ "LH" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY },
{ "LI" , list_attr, HTML_LI_ATTRIBUTES, SGML_EMPTY },
{ "LINK" , link_attr, HTML_LINK_ATTRIBUTES, SGML_EMPTY },
{ "LISTING" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_LITTERAL },
{ "MAP" , map_attr, HTML_MAP_ATTRIBUTES, SGML_MIXED },
{ "MARQUEE" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "MATH" , math_attr, HTML_MATH_ATTRIBUTES, SGML_LITTERAL },
{ "MENU" , ulist_attr, HTML_UL_ATTRIBUTES, SGML_MIXED },
{ "META" , meta_attr, HTML_META_ATTRIBUTES, SGML_EMPTY },
{ "NEXTID" , nextid_attr, 1, SGML_EMPTY },
{ "NOFRAMES", gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "NOTE" , note_attr, HTML_NOTE_ATTRIBUTES, SGML_MIXED },
{ "OBJECT" , object_attr, HTML_OBJECT_ATTRIBUTES, SGML_LITTERAL },
{ "OL" , olist_attr, HTML_OL_ATTRIBUTES, SGML_MIXED },
{ "OPTION" , option_attr, HTML_OPTION_ATTRIBUTES, SGML_EMPTY },
{ "OVERLAY" , overlay_attr, HTML_OVERLAY_ATTRIBUTES, SGML_EMPTY },
{ "P" , p_attr, HTML_P_ATTRIBUTES, SGML_EMPTY },
{ "PARAM" , param_attr, HTML_PARAM_ATTRIBUTES, SGML_EMPTY },
{ "PLAINTEXT", gen_attr, HTML_GEN_ATTRIBUTES, SGML_LITTERAL },
{ "PRE" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "Q" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "S" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "SAMP" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "SCRIPT" , script_attr, HTML_SCRIPT_ATTRIBUTES, SGML_LITTERAL },
{ "SELECT" , select_attr, HTML_SELECT_ATTRIBUTES, SGML_MIXED },
{ "SMALL" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "SPAN" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "SPOT" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY },
{ "STRIKE" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "STRONG" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "STYLE" , style_attr, HTML_STYLE_ATTRIBUTES, SGML_LITTERAL },
{ "SUB" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "SUP" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "TAB" , tab_attr, HTML_TAB_ATTRIBUTES, SGML_EMPTY },
{ "TABLE" , table_attr, HTML_TABLE_ATTRIBUTES, SGML_MIXED },
{ "TBODY" , tr_attr, HTML_TR_ATTRIBUTES, SGML_EMPTY },
{ "TD" , td_attr, HTML_TD_ATTRIBUTES, SGML_EMPTY },
{ "TEXTAREA", textarea_attr,HTML_TEXTAREA_ATTRIBUTES, SGML_LITTERAL },
{ "TEXTFLOW", bodytext_attr,HTML_BODYTEXT_ATTRIBUTES, SGML_MIXED },
{ "TFOOT" , tr_attr, HTML_TR_ATTRIBUTES, SGML_EMPTY },
{ "TH" , td_attr, HTML_TD_ATTRIBUTES, SGML_EMPTY },
{ "THEAD" , tr_attr, HTML_TR_ATTRIBUTES, SGML_EMPTY },
{ "TITLE", gen_attr, HTML_GEN_ATTRIBUTES, SGML_RCDATA },
{ "TR" , tr_attr, HTML_TR_ATTRIBUTES, SGML_EMPTY },
{ "TT" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "U" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "UL" , ulist_attr, HTML_UL_ATTRIBUTES, SGML_MIXED },
{ "VAR" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "XMP" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_LITTERAL },
};
PUBLIC CONST SGML_dtd HTML_dtd = {
tags,
HTML_ELEMENTS,
entities,
sizeof(entities)/sizeof(char**)
};
/* 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;
/* ... */
};
PUBLIC void HTStartAnchor ARGS3(HTStructured *, obj,
CONST char *, name,
CONST char *, href)
{
BOOL present[HTML_A_ATTRIBUTES];
CONST char * value[HTML_A_ATTRIBUTES];
{
int i;
for(i=0; iisa->start_element)(obj, HTML_A , present, value, 0);
}
PUBLIC void HTStartIsIndex ARGS3(HTStructured *, obj,
CONST char *, prompt,
CONST char *, href)
{
BOOL present[HTML_ISINDEX_ATTRIBUTES];
CONST char * value[HTML_ISINDEX_ATTRIBUTES];
{
int i;
for(i=0; iisa->start_element)(obj, HTML_ISINDEX , present, value, 0);
}