--- libwww/Library/src/HTMLPDTD.c 1998/08/29 16:49:57 2.26
+++ libwww/Library/src/HTMLPDTD.c 1999/01/06 15:38:47 2.27
@@ -3,7 +3,7 @@
**
** (c) COPYRIGHT MIT 1995.
** Please first read the full copyright statement in the file COPYRIGH.
-** @(#) $Id: HTMLPDTD.c,v 2.26 1998/08/29 16:49:57 frystyk Exp $
+** @(#) $Id: HTMLPDTD.c,v 2.27 1999/01/06 15:38:47 frystyk Exp $
**
** 6 Nov 93 MD Increased size of img_attr array to make space
** for terminator.
@@ -14,12 +14,15 @@
#include "HTUtils.h"
#include "HTMLPDTD.h"
-/* Entity Names
-** ------------
-**
+struct _HTStructured {
+ HTStructuredClass * isa;
+ /* ... */
+};
+
+/*
+** ENTITY NAMES
** This table must be matched exactly with ALL the translation tables
*/
-
PRIVATE const char* entities[HTML_ENTITIES] = {
"AElig", /* capital AE diphthong (ligature) */
"Aacute", /* capital A, acute accent */
@@ -90,85 +93,24 @@ PRIVATE const char* entities[HTML_ENTITI
"yuml", /* small y, dieresis or umlaut mark */
};
-/*
-
-
-
-
-...
-
+/*
+** ATTRIBUTE LISTS
*/
-PRIVATE attr body_attr[HTML_BODY_ATTRIBUTES+1] = { /* to catch images */
+
+PRIVATE HTAttr no_attr[1] =
+ {{ 0 }};
+
+PRIVATE HTAttr body_attr[HTML_BODY_ATTRIBUTES+1] = { /* to catch images */
{ "BACKGROUND" },
{ 0 } /* Terminate list */
};
-/*
-*/
-PRIVATE attr frame_attr[HTML_FRAME_ATTRIBUTES+1] = { /* frame attributes */
+PRIVATE HTAttr frame_attr[HTML_FRAME_ATTRIBUTES+1] = { /* frame attributes */
{ "SRC" },
{ 0 } /* Terminate list */
};
-/*
-
-
-*/
-
-PRIVATE attr frameset_attr[HTML_FRAMESET_ATTRIBUTES+1] = { /* frameset attributes */
+PRIVATE HTAttr frameset_attr[HTML_FRAMESET_ATTRIBUTES+1] = { /* frameset attributes */
{ "BORDER" },
{ "BORDERCOLOR" },
@@ -182,31 +124,7 @@ PRIVATE attr frameset_attr[HTML_FRAMESET
{ 0 } /* Terminate list */
};
-/*
-Frame Set Example
-
-
-
-*/
-
-/* Attribute Lists
-** ---------------
-**
-** Lists must be in alphatbetical order by attribute name
-** The tag elements contain the number of attributes
-*/
-PRIVATE attr no_attr[1] =
- {{ 0 }};
-
-PRIVATE attr a_attr[HTML_A_ATTRIBUTES+1] = { /* Anchor attributes */
+PRIVATE HTAttr a_attr[HTML_A_ATTRIBUTES+1] = { /* Anchor attributes */
{ "EFFECT" },
{ "HREF"},
{ "ID" },
@@ -220,19 +138,32 @@ PRIVATE attr a_attr[HTML_A_ATTRIBUTES+1]
{ 0 } /* Terminate list */
};
-PRIVATE attr base_attr[HTML_BASE_ATTRIBUTES+1] = { /* BASE attributes */
+PRIVATE HTAttr area_attr[HTML_AREA_ATTRIBUTES+1] = { /* Area attributes */
+ { "ALT" },
+ { "ACCESSKEY"},
+ { "COORDS" },
+ { "HREF" },
+ { "NOHREF" },
+ { "ONBLUR" },
+ { "ONFOCUS" },
+ { "SHAPE" },
+ { "TABINDEX" },
+ { 0 } /* Terminate list */
+};
+
+PRIVATE HTAttr base_attr[HTML_BASE_ATTRIBUTES+1] = { /* BASE attributes */
{ "HREF"},
{ 0 } /* Terminate list */
};
-PRIVATE attr changed_attr[] = {
+PRIVATE HTAttr changed_attr[] = {
{ "ID" },
{ "IDREF" },
{ 0 } /* terminate list */
};
-PRIVATE attr fig_attr[] = { /* Figures */
+PRIVATE HTAttr fig_attr[] = { /* Figures */
{ "ALIGN" },
{ "ID" },
{ "INDEX" },
@@ -242,7 +173,7 @@ PRIVATE attr fig_attr[] = { /* Figures
{ 0 } /* terminate list */
};
-PRIVATE attr form_attr[] = { /* General, for many things */
+PRIVATE HTAttr form_attr[] = { /* General, for many things */
{ "ACTION" },
{ "ID" },
{ "INDEX" },
@@ -251,25 +182,25 @@ PRIVATE attr form_attr[] = { /* General
{ 0 } /* terminate list */
};
-PRIVATE attr gen_attr[] = { /* General, for many things */
+PRIVATE HTAttr gen_attr[] = { /* General, for many things */
{ "ID" },
{ "INDEX" },
{ "LANG" },
{ 0 } /* terminate list */
};
-PRIVATE attr htmlplus_attr[] = { /* wrapper HTMLPLUS */
+PRIVATE HTAttr htmlplus_attr[] = { /* wrapper HTMLPLUS */
{ "FORMS" },
{ "VERSION" },
{ 0 } /* terminate list */
};
-PRIVATE attr id_attr[2] = {
+PRIVATE HTAttr id_attr[2] = {
{ "ID" },
{ 0 } /* terminate list */
};
-PRIVATE attr image_attr[HTML_IMAGE_ATTRIBUTES+1] = { /* Image attributes */
+PRIVATE HTAttr image_attr[HTML_IMAGE_ATTRIBUTES+1] = { /* Image attributes */
{ "ALIGN" },
{ "ISMAP"}, /* Use HTTP SpaceJump instead */
{ "LANG" },
@@ -278,7 +209,7 @@ PRIVATE attr image_attr[HTML_IMAGE_ATTRI
{ 0 } /* Terminate list */
};
-PRIVATE attr img_attr[HTML_IMG_ATTRIBUTES+1] = { /* IMG attributes */
+PRIVATE HTAttr img_attr[HTML_IMG_ATTRIBUTES+1] = { /* IMG attributes */
{ "ALIGN" },
{ "ALT" },
{ "ISMAP"}, /* Use HTTP SpaceJump instead */
@@ -288,7 +219,7 @@ PRIVATE attr img_attr[HTML_IMG_ATTRIBUTE
{ 0 } /* Terminate list */
};
-PRIVATE attr input_attr[HTML_INPUT_ATTRIBUTES+1] = {
+PRIVATE HTAttr input_attr[HTML_INPUT_ATTRIBUTES+1] = {
{ "ALIGN" },
{ "CHECKED" },
{ "DISABLED" },
@@ -303,7 +234,7 @@ PRIVATE attr input_attr[HTML_INPUT_ATTRI
{ "0" }
};
-PRIVATE attr l_attr[] = {
+PRIVATE HTAttr l_attr[] = {
{ "ALIGN"},
{ "ID" },
{ "LANG" },
@@ -311,7 +242,7 @@ PRIVATE attr l_attr[] = {
{ 0 } /* Terminate list */
};
-PRIVATE attr li_attr[] = {
+PRIVATE HTAttr li_attr[] = {
{ "ID" },
{ "INDEX" },
{ "LANG" },
@@ -319,7 +250,7 @@ PRIVATE attr li_attr[] = {
{ 0 } /* Terminate list */
};
-PRIVATE attr link_attr[HTML_LINK_ATTRIBUTES+1] = { /* link attributes */
+PRIVATE HTAttr link_attr[HTML_LINK_ATTRIBUTES+1] = { /* link attributes */
{ "CHARSET"},
{ "HREF"},
{ "HREFLANG"},
@@ -330,7 +261,24 @@ PRIVATE attr link_attr[HTML_LINK_ATTRIBU
{ 0 } /* Terminate list */
};
-PRIVATE attr list_attr[] = {
+PRIVATE HTAttr object_attr[HTML_OBJECT_ATTRIBUTES+1] = { /* object attributes */
+ { "ARCHIVE" },
+ { "CLASSID" },
+ { "CODEBASE" },
+ { "CODETYPE" },
+ { "DATA" },
+ { "DECLARE" },
+ { "HIGHT" },
+ { "NAME" },
+ { "STANDBY" },
+ { "TABINDEX" },
+ { "TYPE" },
+ { "USEMAP" },
+ { "WIDTH" },
+ { 0 }
+};
+
+PRIVATE HTAttr list_attr[] = {
{ "COMPACT"},
{ "ID" },
{ "LANG" },
@@ -338,14 +286,14 @@ PRIVATE attr list_attr[] = {
{ 0 } /* Terminate list */
};
-PRIVATE attr glossary_attr[HTML_DL_ATTRIBUTES+1] = {
+PRIVATE HTAttr glossary_attr[HTML_DL_ATTRIBUTES+1] = {
{ "ID" },
{ "COMPACT " },
{ "INDEX" },
{ 0 } /* Terminate list */
};
-PRIVATE attr meta_attr[HTML_META_ATTRIBUTES+1] = {
+PRIVATE HTAttr meta_attr[HTML_META_ATTRIBUTES+1] = {
{ "CONTENT"},
{ "HTTP-EQUIV"},
{ "NAME"},
@@ -353,12 +301,12 @@ PRIVATE attr meta_attr[HTML_META_ATTRIBU
{ 0 } /* Terminate list */
};
-PRIVATE attr nextid_attr[HTML_NEXTID_ATTRIBUTES+1] = {
+PRIVATE HTAttr nextid_attr[HTML_NEXTID_ATTRIBUTES+1] = {
{ "N" },
{ 0 } /* Terminate list */
};
-PRIVATE attr note_attr[HTML_NOTE_ATTRIBUTES+1] = { /* Footnotes etc etc */
+PRIVATE HTAttr note_attr[HTML_NOTE_ATTRIBUTES+1] = { /* Footnotes etc etc */
{ "ID" },
{ "INDEX" },
{ "LANG" },
@@ -366,20 +314,20 @@ PRIVATE attr note_attr[HTML_NOTE_ATTRIBU
{ 0 } /* terminate list */
};
-PRIVATE attr option_attr[HTML_OPTION_ATTRIBUTES+1] = {
+PRIVATE HTAttr option_attr[HTML_OPTION_ATTRIBUTES+1] = {
{ "DISABLED" },
{ "LANG" },
{ "SELECTED" },
{ 0 }
};
-PRIVATE attr render_attr[HTML_RENDER_ATTRIBUTES+1] = {
+PRIVATE HTAttr render_attr[HTML_RENDER_ATTRIBUTES+1] = {
{ "STYLE" },
{ "TAG" },
{ 0 } /* Terminate list */
};
-PRIVATE attr select_attr[HTML_SELECT_ATTRIBUTES+1] = {
+PRIVATE HTAttr select_attr[HTML_SELECT_ATTRIBUTES+1] = {
{ "ERROR" },
{ "LANG" },
{ "MULTIPLE" }, /* WSM bug fix, was SEVERAL */
@@ -388,13 +336,13 @@ PRIVATE attr select_attr[HTML_SELECT_ATT
{ 0 },
};
-PRIVATE attr tab_attr[HTML_TAB_ATTRIBUTES+1] = {
+PRIVATE HTAttr tab_attr[HTML_TAB_ATTRIBUTES+1] = {
{ "ALIGN" },
{ "AT" },
{ 0 }
};
-PRIVATE attr table_attr[HTML_TABLE_ATTRIBUTES+1] = {
+PRIVATE HTAttr table_attr[HTML_TABLE_ATTRIBUTES+1] = {
{ "BORDER" },
{ "ID" },
{ "INDEX" },
@@ -402,7 +350,7 @@ PRIVATE attr table_attr[HTML_TABLE_ATTRI
{ 0 }
};
-PRIVATE attr td_attr[HTML_TD_ATTRIBUTES+1] = {
+PRIVATE HTAttr td_attr[HTML_TD_ATTRIBUTES+1] = {
{ "ALIGN" },
{ "COLSPAN" },
{ "ROWSPAN" },
@@ -410,7 +358,7 @@ PRIVATE attr td_attr[HTML_TD_ATTRIBUTES+
{ 0 }
};
-PRIVATE attr textarea_attr[HTML_TEXTAREA_ATTRIBUTES+1] = {
+PRIVATE HTAttr textarea_attr[HTML_TEXTAREA_ATTRIBUTES+1] = {
{ "COLS" },
{ "DISABLED" },
{ "ERROR" },
@@ -420,7 +368,7 @@ PRIVATE attr textarea_attr[HTML_TEXTAREA
{ 0 }
};
-PRIVATE attr ul_attr[HTML_UL_ATTRIBUTES+1] = {
+PRIVATE HTAttr ul_attr[HTML_UL_ATTRIBUTES+1] = {
{ "COMPACT" },
{ "ID" },
{ "INDEX" },
@@ -430,26 +378,21 @@ PRIVATE attr ul_attr[HTML_UL_ATTRIBUTES+
{ 0 }
};
-
-/* Elements
-** --------
-**
+/*
+** ELEMENTS
** Must match definitions in HTMLPDTD.html!
** Must be in alphabetical order.
**
-** HTML is included to allow HTML documents to be parsed as a subset.
-** TITLE is changed to type SGML_MIXED so it get parsed as well
-** Henrik 08/03-94
-**
** Name, Attributes, content
*/
-PRIVATE HTTag tags[HTMLP_ELEMENTS] = {
+PRIVATE HTTag tags[HTML_ELEMENTS] = {
{ "A" , a_attr, HTML_A_ATTRIBUTES, SGML_MIXED },
{ "ABBREV" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "ABSTRACT" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "ACRONYM" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "ADDED" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "ADDRESS" , no_attr, 0, SGML_MIXED },
+ { "AREA" , area_attr, HTML_AREA_ATTRIBUTES, SGML_EMPTY },
{ "ARG" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
{ "B" , no_attr, 0, SGML_MIXED },
{ "BASE" , base_attr, HTML_BASE_ATTRIBUTES, SGML_EMPTY },
@@ -504,6 +447,7 @@ PRIVATE HTTag tags[HTMLP_ELEMENTS] = {
{ "NEXTID" , nextid_attr, 1, SGML_EMPTY },
{ "NOTE" , note_attr, HTML_NOTE_ATTRIBUTES, SGML_EMPTY },
{ "NOFRAMES", no_attr, 0, SGML_MIXED },
+ { "OBJECT" , object_attr, HTML_OBJECT_ATTRIBUTES, SGML_MIXED },
{ "OL" , list_attr, HTML_LIST_ATTRIBUTES, SGML_MIXED },
{ "OPTION" , option_attr, HTML_OPTION_ATTRIBUTES, SGML_EMPTY },/*Mixed?*/
{ "OVER" , no_attr, 0, SGML_MIXED },
@@ -535,15 +479,28 @@ PRIVATE HTTag tags[HTMLP_ELEMENTS] = {
{ "XMP" , no_attr, 0, SGML_LITERAL }
};
-
-PUBLIC const SGML_dtd HTMLP_dtd = {
+PRIVATE SGML_dtd HTMLP_dtd = {
tags,
- HTMLP_ELEMENTS,
+ HTML_ELEMENTS,
entities,
sizeof(entities)/sizeof(char**)
};
-/* Utility Routine: useful for people building HTML objects */
+PRIVATE SGML_dtd * DTD = &HTMLP_dtd;
+
+PUBLIC SGML_dtd * HTML_dtd (void)
+{
+ return DTD;
+}
+
+PUBLIC BOOL HTML_setDtd (const SGML_dtd * dtd)
+{
+ if (dtd) {
+ DTD = (SGML_dtd *) dtd;
+ return YES;
+ }
+ return NO;
+}
/* Start anchor element
** --------------------
@@ -552,11 +509,6 @@ PUBLIC const SGML_dtd HTMLP_dtd = {
** starting an anchor element, as everything else for HTML is
** simple anyway.
*/
-struct _HTStructured {
- HTStructuredClass * isa;
- /* ... */
-};
-
PUBLIC void HTStartAnchor (HTStructured * obj,
const char * name,
const char * href)
@@ -582,8 +534,6 @@ PUBLIC void HTStartAnchor (HTStructured
}
-/* Utility Routine: useful for people building HTML objects */
-
/* Put image element
** --------------------
**
@@ -618,7 +568,6 @@ PUBLIC void HTMLPutImg (HTStructured * o
/* (*obj->isa->end_element)(obj, HTML_IMG); */
}
-
PUBLIC void HTNextID (HTStructured * obj,
const char * next_one)
{