diff options
author | Thomas E. Dickey <dickey@invisible-island.net> | 1996-09-02 19:39:24 -0400 |
---|---|---|
committer | Thomas E. Dickey <dickey@invisible-island.net> | 1996-09-02 19:39:24 -0400 |
commit | e087f6d44e87f489fcb3056e86319ebba4218156 (patch) | |
tree | d045b58011bfbbf5186d34c4fed9e0dedb363275 /WWW/Library/Implementation/HTMLDTD.c | |
download | lynx-snapshots-e087f6d44e87f489fcb3056e86319ebba4218156.tar.gz |
snapshot of project "lynx", label v2_6
Diffstat (limited to 'WWW/Library/Implementation/HTMLDTD.c')
-rw-r--r-- | WWW/Library/Implementation/HTMLDTD.c | 1122 |
1 files changed, 1122 insertions, 0 deletions
diff --git a/WWW/Library/Implementation/HTMLDTD.c b/WWW/Library/Implementation/HTMLDTD.c new file mode 100644 index 00000000..3a982b2f --- /dev/null +++ b/WWW/Library/Implementation/HTMLDTD.c @@ -0,0 +1,1122 @@ +/* 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; i<HTML_A_ATTRIBUTES; i++) + present[i] = NO; + } + if (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, 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; i<HTML_ISINDEX_ATTRIBUTES; i++) + present[i] = NO; + } + if (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, 0); + +} + |