diff -r 000000000000 -r 6474c204b198 layout/doc/obsolete/nav4-html.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/layout/doc/obsolete/nav4-html.html Wed Dec 31 06:09:35 2014 +0100
@@ -0,0 +1,902 @@
+
+
+
+
+
+
+
+ HTML
+
+
+
+
+
+HTML
+This documents describes the complete handling of HTML in magellan. The
+document covers the parsing process - how HTML is lexically analysized
+and then interprted. After the parsing process is discussed we give a detailed
+analysis of each HTML tag and the attributes that are supported, the values
+for the attributes and how the tag is treated by magellan.
+
+Parsing
+HTML is tokenized by an HTML scanner. The scanner is fed unicode data to
+parse. Stream converters are used to translate from various encodings to
+unicode. The scanner separates the input stream into tokens which consist
+of:
+
+-
+text
+
+-
+tags
+
+-
+entities
+
+-
+script-entities
+
+-
+comments
+
+-
+conditional comments
+
+The HTML parsing engine uses the HTML scanner for lexical anlaysis. The
+parsing engine operates by attacking the input stream in a set of well
+defined steps:
+
+-
+The parser processes the head portion of the document first, without emitting
+any output. This is done to discover a few special features of html:
+
+
+-
+The parser processes META tags looking for META TARGET
+
+-
+The parser processes META tags looking for META tags which affect the character
+set. Nav4 handles the very first character set defining meta tag (all others
+are ignored) by reloading the document with the proper character conversion
+module inserted into the stream pipeline.
+
+
+-
+After the head portion is processed the parser then proceeds to process
+the body of the document
+
+
+
+Tag Processing
+Tags are processed by the parser by locating a "tag handler" for
+the tag. The HTML parser serves as the tag handler for all of the builtin
+tags documented below. Tag attribute handling is done during translation
+of tags into content. This mapping translates the tag attributes into content
+data and into style data. The translation to style data is documented below
+by indicating the mapping from tag attributes to their CSS1 (plus extensions)
+equivalents.
+
+Special Hacks
+The following list describes hacks added to the magellan parsing engine
+to deal with navigator compatibility. These are just the parser hacks,
+not the layout or presentation hacks. Most hacks are intriduced for HTML
+syntax error recovering. HTML doesn't specify much how to handle those
+error conditions. Netscape has made big effort to render pages with non-prefect
+HTML. For many reasons, new browsers need to keep compatible in thsi area.
+
+-
+Entities can be used as escape in quoted string. For value string in name-value
+pair, see compatibility test
+quote001.html. Test line 70 shows that an entity quote at the begining
+means the value is NOT quoted. Test line 90 shows that if the value is
+started with a quote, then an entity quote does NOT terminate the value
+string.
+
+-
+Wrapping tags are special tags such as title, textarea, server, script,
+style, and etc.. The comment in ns\lib\libparse\pa_parse.c says:
+
+
/*
+
* These tags are special in that, after opening one of
+them, all other tags are ignored until the matching
+
* closing tag.
+
*/
+
During the searching of an end tag, comments and quoted strings are
+observed. see compatibility test title01.html.
+6.0 handles comments now, need to add quoted string.
+-
+If a <tr> or <td> tag is seen outside any <table> scope, it is
+ignored. see compatibility test table110.htm.
+
+-
+In case of table in table but not in cell, table
+tags before the last table tag are ignored. We found this problem in some
+Netscape public pages, see bug #85118. For example, <table> <table
+border> .....,or <table> <tr> <table border>..., the table
+will be displayed with border. compatibility
+test table201.html. There table and tr tags are buffered for this recovery.
+When a TD or CAPTION tag is open, the buffer is flushed out, because we
+cannot buffer contents of TD or CAPTION for performance and memory constrains.
+They are subdoc's and can be very big. If we see a <table> outside cell
+after previous table is flushed out, the new <table> tag is ignored.
+Nav4.0 can discard previous table in such case. tableall.html
+is the index for table test cases.
+
+-
+Caption is not a commonly used feature. In Nav4.0, captions can be anywhere.
+For Captions outside cells, the first one takes effect. For captions inside
+cells, the last one takes effect, and they also close TD and TR. In 6.0,
+caption is limited to the standard position: after <table>. Captions
+in other places are ignored, their contents are treated as text. See test
+case table05a.html to table05o.html.
+
+-
+For <table> <tr> <tr>, the first <tr>
+takes effect.
+
+-
+The nav4 parser notices when it hits EOF and it's in the middle of scanning
+in a comment. When this happens, the parser goes back and looks for an
+improperly closed comment (e.g. a simple > instead of a -->). If it finds
+one, it reparses the input after closing out the comment.
+
+-
+XXX Brendan also pointed out that there is something
+similar done for tags, but I don't recall what it is right now.
+
+-
+When Nav4.0 sees the '<' sign, it searchs for
+'>', observing quoted values. If it cannot find one till EOF, the '<'
+sign is treated as text. In Xena 6.0, a limit is set for how far the '>'
+is searched. the default limit is 4096 char, and there is a API HTMLScanner.setMaxTagLength()
+to changed it. setting -1 means no limit, which is same as Nav4.0.
+
+TODO:
+Document the mapping of tag attributes into CSS1
+style, including any new "css1" attributes
+
+List of 6.0 features incompatible with 4.0
+
+-
+Navigator 4.0 value string is truncated at 82 characters. XENA60 limit
+is MAX_STRING_LENGTH = 2000.
+
+
+
+
+
+Tags (Categorically sorted)
+All line breaks are conditional. If the x coordinate is at the current
+left margin then a soft line break does nothing. Hard line breaks are ignored
+if the last tag did a hard line break.
+
+divalign = left | right | center | justify
+
alignparam = abscenter | left | right | texttop | absbottom
+| baseline | center | bottom | top | middle | absmiddle
+
colorspec = named-color | #xyz | #xxyyzz | #xxxyyyzzz | #xxxxyyyyzzzz
+
clip = [auto | value-or-pct-xy](1..4) (pct of width for even
+coordinates; pct of height for odd coordinates)
+
value-or-pct = an integer with an optional %; ifthe percent
+is present any following characters are ignored!
+
coord-list = XXX
+
whitespace-strip = remove leading and
+trailing and any embedded whitespace that is not an actual space (e.g.
+newlines)
+
+Head objects:
+TITLE
+The TITLE tag is a container tag whose contents are not HTML. The contents
+are pure text and are processed by the parser until the closing tag is
+found. There are no attributes on the tag and any whitespace present in
+the tag is compressed down with leading and trailing whitespace eliminated.
+The first TITLE tag found by the parser is used as the document's title
+(subsequent tags are ignored).
+BASE
+Sets the base element in the head portion of the document. Defines
+the base URL for all? links in the document.
+
Attributes:
+HREF=url [This is an absolute URL]
+
TARGET=string [must start with XP_ALPHA|XP_DIGIT|underscore
+otherwise nav4 ignores it]
+
+META
+Can define several header fields (content-encoding, author, etc.)
+
Attributes:
+REL=SMALL_BOOKMARK_ICON|LARGE_BOOKMARK_ICON
+
+HTTP-EQUIV="header: value"
+
+
+HTTP-EQUIV values (from libnet/mkutils.c NET_ParseMimeHeader):
+ACCEPT-RANGES
+
CONTENT-DISPOSITION
+
CONTENT-ENCODING
+
CONTENT-RANGE
+
CONTENT-TYPE [ defines character set only ]
+
CONNECTION
+
DATE
+
EXPIRES
+
EXT-CACHE
+
LOCATION
+
LAST-MODIFIED
+
LINK
+
PROXY-AUTHENTICATE
+
PROXY-CONNECTION
+
PRAGMA
+
RANGE
+
REFRESH
+
SET-COOKIE
+
SERVER
+
WWW-AUTHENTICATE
+
WWW-PROTECTION-TEMPLATE
+
WINDOW-TARGET
+Style sheets and HTML w3c spec adds this:
+CONTENT-STYLE-TYPE [ last one wins; overrides header from server if
+any ]
+
+LINK
+List related resources. Used by extensions mechanism to find tag handlers.
+/LINK == LINK!
+
Attributes:
+REL=FONTDEF
+
+REL=STYLESHEET [ If MEDIA param is defined it must ==nc screen ]
+LANGUAGE=LiveScript|Mocha|JavaScript1.1|JavaScript1.2
+
TYPE="text/javascript" | "text/css"
+
HREF=url
+
ARCHIVE=url
+
CODEBASE=url
+
ID=string
+
SRC=url
+
+Note: HREF takes precedence over SRC in nav4.
+HEAD
+/HEAD clears the "in_head" flag (but leaves the "in_body" flag alone.
+
Text in head clears in_head, and set in_body true, just as if the author
+forgot the /HEAD tag.
+
Attributes: none
+HTML
+Ignored.
+
Attributes: none
+STYLE
+Allowed anywhere in the document. Note that entities are not parsed
+in the style tag's content.
+
Attributes:
+LANGUAGE=LiveScript|Mocha|JavaScript1.1|JavaScript1.2
+
TYPE="text/javascript" | "text/css"
+
HREF=url
+
ARCHIVE=url
+
CODEBASE=url
+
ID=string
+
SRC=url
+
+FRAMESET
+Frameset with rows=1 and cols=1 is ignored.
+
Attributes:
+FRAMEBORDER= no | 0 (zero) [default is no_edges=false]
+
BORDER= int [clamped: >= 0 && <= 100]
+
BORDERCOLOR= color
+
ROWS= pct-list
+
COLS= pct-list
+
+FRAME
+Border width of zero disables edges.
+
Attributes:
+FRAMEBORDER= no | 0 (zero) [default is framesets value]
+
BORDER= int [clamped; >= 0 && <= 100]
+
BORDERCOLOR= color
+
NORESIZE= true [default is false]
+
SCROLLING= yes | scroll | on | no | noscroll | off
+
SRC= url [clamped: prevent recursion by eliminating any anscestor
+references]
+
NAME= string
+
MARGINWIDTH= int (clamped: >= 1)
+
MARGINHEIGHT= int (clamped: >= 1)
+
+NOFRAMES
+Used when frames are disabled or for backrev browsers. Has no stylistic
+consequences.
+
+
+
+
Body objects:
+ BODY
+The tag is only processed on open tags and it is always processed.
+See ns\lib\layout\laytags.c, searching for "case P_BODY". During tag processing
+the in_head flag is set to false and the in_body flag is set to true. An
+attribute is ignored if the document already has that attribute set. Attributes
+can be set by style sheets, or by previous BODY tags. see test
+head02.html.
+
Attributes:
+MARGINWIDTH=int [clamped: >= 0 && < (windowWidth/2
+- 1)]
+
MARGINHEIGHT=int [clamped: >= 0 && < (windowHeight/2
+- 1)]
+
BACKGROUND=url
+
BGCOLOR=colorspec
+
TEXT=colorspec
+
LINK=colorspec
+
VLINK=colorspec
+
ALINK=colorspec
+
ONLOAD, ONUNLOAD, UNFOCUS, ONBLUR, ONHELP=script
+
ID=string
+
+LAYER, ILAYER
+Open layer/ilayer tag automaticly close out an open form if one is
+open. It does something to the soft linebreak state too.
+
Attributes:
+LEFT=value-or-pct (pct of right-left margin)
+
PAGEX=x (if no LEFT)
+
TOP=value-or-pct
+
PAGEY=y (if no TOP)
+
CLIP=clip
+
WIDTH=value-or-pct (pct of right-left margin)
+
HEIGHT=value-or-pct
+
OVERFLOW=string
+
NAME=string
+
ID=string
+
ABOVE=string
+
BELOW=string
+
ZINDEX=int [any value]
+
VISIBILITY=string
+
BGCOLOR=colorspec
+
BACKGROUND=url
+
+NOLAYER
+Container for content which is used when layers are disabled or unsupported.
+The content has no style consequences (though it could if somebody stuck
+in some CSS1 style rules for it).
+P
+Closes the paragraph. If the attribute is present then an alignment
+gets pushed on the alignment stack. All values are supported by nav4.
+
Attributes:
+
+
+ADDRESS
+There are no attributes. ADDRESS closes out the open paragraph. The
+open tag does a conditional soft line break and then pushes a merge of
+the current style with italics enabled onto the style stack. The close
+always pop the style stack and also does a conditional soft line break.
+PLAINTEXT, XMP
+PLAINTEXT causes the remaining content to no longer be parsed. XMP
+causes the content to not parse entities or other tags. The XMP can be
+closed by it's own tag (on any boundary); PLAINTEXT is not closed (html3.2
+allows it to be closed). Both tags change the style to a fixed font of
+a
+LISTING
+Closes the paragraph. Does a hard line break on open and close. Open
+pushes a fixed width font style of a particular font size on the style
+stack. The close tag pops the top of the style stack.
+
Attributes: none
+PRE
+Closes the paragraph. The open tag does a hard line break. A fixed
+font style (unless VARIABLE is present) is pushed on the style stack. The
+close tag pops the top of the style stack. It also does a hard line break.
+
Attributes:
+WRAP
+
COLS=int [clamped: >= 0]
+
TABSTOP=int [clamped: >= 0; clamped value is replaced with default
+value]
+
VARIABLE
+
+NOBR
+This tag doesn't nest. Instead it just sets or clears a flag in the
+state machine. It has no effect on any other state.
+CENTER
+Closes the paragraph. Always does a conditional soft line break. The
+open tag pushes an alignment on the aligment stack. The close tag pops
+the top alignment off.
+
Attributes: none
+DIV
+Closes the paragraph. Always does a conditional soft line break. COLS
+defines the number of columns to layout in (like MULTICOL). The open tag
+pushes an alignment on the alignment stack (if COLS > 1 then it pretends
+to be a MULTICOL tag). The close tag pops an aligment from the alignment
+stack.
+
Attributes:
+ALIGN=divalign
+
COLS=int [if cols > 1 then DIV acts like a MULTICOL tag else
+DIV is just a container]
+GUTTER= int (clamped: >= 1)
+
WIDTH= value-or-pct [pct of right-left margin; clamped >= 1/0
+(strange code)]
+
+
+H1-H6
+Closes the paragraph. The open tag does a hard line break and pushes
+a style item which enables bold and disables fixed and italic. The close
+tag always pops the top item from the style stack. It also does a hard
+line break. If the ALIGN attribute is present then the open tag
+pushes an alignment on the alignment stack. The close tag will look at
+the top of the alignment stack and if its a header of any kind (H1 through
+H6) then the alignment is popped. In either case the close tag also does
+a conditional soft line break (this happens before the hard line break).
+
Attributes:
+
+
+A note regarding closing paragraphs: Any time a close paragraph is done
+(for any tag) if the top of the alignment stack has a tag named "P" then
+a conditional soft line break is done and the alignment is popped.
+
+
+
+TABLE
+Close the paragraph.
+
Attributes:
+ALIGN=left|right|center|abscenter
+
BORDER=int [clamped: if null then -1, if < 1 then 1 ]
+
BORDERCOLOR=string [if not supplied then set to the text color
+]
+
VSPACE=int [ clamped: >= 0 ]
+
HSPACE=int [ clamped: >= 0 ]
+
BGCOLOR=color
+
BACKGROUND=url
+
WIDTH=value-or-pct [ % of win.width minus margins; clamped:
+>= 0 ]
+
HEIGHT=value-or-pct [ % of win.height minus margins; clamped:
+>= 0 ]
+
CELLPADDING=int [clamped: >= 0; separate pads take precedence
+]
+
TOPPADDING= int [clamped: >= 0 ]
+
BOTTOMPADDING= int [clamped: >= 0 ]
+
LEFTPADDING= int [clamped: >= 0 ]
+
RIGHTPADDING= int [clamped: >= 0 ]
+
CELLSPACING= int [clamped: >= 0 ]
+
COLS=int [clamped: >= 0]
+The code supports more attributes in the Table attribute handler than it
+does in the code that gets the attributes from the tag! They are border_top,
+border_left, border_right, border_bottom, border_style (defaults to outset;
+allows for outset/dotted/none/dashed/solid/double/groove/ridge/inset).
+TR
+Open TR automatically closes an open table row (and an open table cell
+if one is open). It also automatically closes a CAPTION tag.
+
Attributes:
+BGCOLOR=color
+
BACKGROUND=url
+
VALIGN=top|bottom|middle|center(==middle)|baseline; default
+is top
+
ALIGN=left|right|middle|center(==middle); default is left
+
+TH, TD
+If no table then the tag is ignored (open or close). If no row is currently
+opened or the current row is current done (because of a </TR> tag) then
+a new row is begun. Oddly enough the tag parameters for the row come from
+the TH/TD tag in this case. An open of either of these tags will automatically
+close the previous cell.
+
Attributes:
+COLSPAN=int [clamped: >= 1 && <= 1000 ]
+
ROWSPAN=int [clamped: >= 1 && <= 10000 ]
+
NOWRAP [boolean: disables wrapping ]
+
BGCOLOR=color [default: inherit from the row; if not row then
+table; if not table then inherit from an outer table cell; this works because
+the style is flattened so the outer table cell will have a color]
+
BACKGROUND=url [same rules as bgcolor for inheritance; tile
+mode is inherited too and not settable by TH/TD attributes (have to use
+style sheets for that)]
+
VALIGN=top|bottom|middle|center(==middle)|baseline; default
+is top
+
ALIGN=left|right|middle|center(==middle); default is left
+
WIDTH=value-or-pct [ clamped: >= 0 ]
+
HEIGHT=value-or-pct [ clamped: >= 0 ]
+
+CAPTION
+An open caption tag will automatically close an open table row (and
+an open cell).
+
Attributes:
+
+The code sets the vertical alignment to top w/o providing a mechanism for
+the user to set it (there is no VALIGN attribute).
+MULTICOL
+The open tag does a hard line break. The close tag checks to see if
+the state machine has an open multicol and if it does then it does a conditional
+soft line break and then continues to break until both margins are cleared
+of floating elements. It recomputes the margins based on the list indenting
+level (?). After the synthetic table is output the close tag does a hard
+line break.
+
+This tag will treat the input as source for a table with one row and
+COLS columns. The data is laid out using the width divided by the number
+of columns. After the total height is known, the content is partitioned
+as evenly as possible between the columns in the table.
+
Attributes:
+
COLS=int [clamped: values less than 2 cause the tag to be ignored]
+
GUTTER=int [clamped: >= 1]
+
WIDTH=value-or-pct [pct of right-left margin; clamped: >= 1/0
+(strange code)]
+
+
+
+
+
+BLOCKQUOTE
+Closes the paragraph. The open tag does a hard line break. A list with
+the empty-bullet style is pushed on the list stack (unless TYPE=cite/jwz
+then a styled list is pushed). The close tag pops any list and does a hard
+line break.
+
Attributes:
+
+
+UL, OL, MENU, DIR
+For top-level lists (lists not in lists) a hard break is done on the
+open tag, otherwise a conditional-soft-break is done. Tag always does a
+close paragrah. The close tag does a conditional soft line break when nested;
+when not nested the close tag does a hard line break (even if no list is
+open). The open tag pushes the list on the list stack. The close tag pops
+any list off the list stack.
+
Attributes:
+TYPE= none | disc | circle | round | square | decimal | lower-roman
+| upper-roman | lower-alpha | upper-alpha | A | a | I | i [clamped: if
+none of the above is picked and OL then the bullet type is "number" otherwise
+the bullet type is "basic"]
+
START=int [clamped: >= 1]
+
COMPACT
+
+DL
+Closes the paragraph. For the open tag, if the list is nested then
+a conditional soft line break is done otherwise a hard line break is done.
+The open tag pushes a list on the list stack. The close tag pops any list
+from the list stack. Closing the list acts like other lists closes.
+
Attributes:
+
+
+LI
+Closes the paragraph. The open tag does a conditional soft line break.
+Close tags are ignored (except for closing the paragraph).
+
Attributes:
+TYPE= A | a | I | i (if the containing list is an OL)
+
TYPE= round | circle | square (if the containing list is not
+OL and not DL)
+
VALUE=int [clamped: >= 1]
+The magellan html parser allows the full set of list item styles from the
+OL/DL tag instead of just the limited set that nav4 allows.
+DD
+Closes the paragraph. Close tags are ignored (except for closing the
+paragraph). DD outside a DL just advances the X coordinate of layout by
+a small constant. DD inside a DL does a conditional soft line break and
+other margin crud.
+
Attributes: none.
+DT
+Closes the paragraph (open or close). Close tags are otherwise ignored.
+Does a conditional soft line break. Moves the X layout coordinate to the
+left margin.
+
Attributes: none
+
+
+
+
+A
+Open anchors push a style on the style stack if the anchor has an HREF.
+Close anchors pop as many styles off the top of the style stack that are
+anchor tags (anchor tags don't nest in other words). In addition, any styles
+on the stack that have the ANCHOR bit set have it cleared and fiddle with
+the foreground and background colors.
+
Attributes:
+NAME=string
+
HREF=url
+TARGET=target
+
SUPPRESS=true
+
+
+STRIKE, S, TT, CODE, SAMPLE, KBD, B, STRONG, I, EM, VAR, CITE, BLINK,
+BIG, SMALL, U, INLINEINPUT, SPELL
+The open tag pushes onto the style stack. The close tag always pops
+the top item from the style stack.
+
Attributes: none
+SUP, SUB
+The open tag pushes a font size descrease on the style stack. The close
+tag always pops the top of the style stack. The open and close tag impacts
+the baselineThe only difference between SUP and SUB is how they impact
+the baseline. Note that the baseline information is forgotten after a line
+break; therefore a close SUP/SUB on the next line will do strange things.
+
Attributes: none
+SPAN
+Ignored by the navigator.
+
Attributes: none
+FONT
+The open font tag with no attributes resets the font size to the base
+font size. The open tag always pushes a style stack entry. The close tag
+always pops the top item off the style stack.
+
Attributes:
+SIZE=[+ int | - int | int ] [clamped: >=1 && <=
+7]
+
POINT-SIZE=[+ int | - int | int ] [clamped: >= 1 &&
+<= 1600]
+
FONT-WEIGHT=[+ int | - int | int ] [clamped: >= 100 &&
+<= 900]
+
COLOR=colorspec
+
FACE=string
+
+A note regarding the style stack: The pop of the stack checks to see if
+the top of the stack is an ANCHOR tag. If it is not an anchor then the
+top item is unconditionally popped. If the top of the style stack is an
+anchor tag then the code searches for either the bottom of the stack or
+the first style stack entry not created by an anchor tag. If the entry
+is followed by another entry then the entry is removed from the stack (an
+out-of-order pop in other words). In this case the anchor style stack entry
+is left untouched.
+
+
+
+text, entities
+These are basic content objects that get fed directly to the output.
+In navigator the text is processed by doing line-breaking (entities have
+been converted to text already by the parser). The line-breaking is controlled
+by the margin settings and the list depth, the floating elements, the style
+attributes (font size, etc.), the preformatted flag, the no-break flag
+and so on.
+IMG, IMAGE
+Close tag is ignored.
+
Attributes:
+ISMAP
+
USEMAP=url
+
ALIGN=alignparam
+
SRC=url [ whitespace is stripped ]
+
LOWSRC=url
+
ALT=string
+
WIDTH=value-or-pct (pct of right-left width)
+
HEIGHT=value-or-pct (pct of window height)
+
BORDER=int [clamped: >= 0]
+
VSPACE=int [clamped: >= 0]
+
HSPACE=int [clamped: >= 0]
+
SUPPRESS=true | false (only in blocked image layout???)
+
+HR
+Closes the paragraph. If an open tag then does a conditional soft line
+break. The rule inherits alignment from the parent container unless there
+is no container (then it's centered) or if the tag defines it's own alignment.
+After the object is inserted into the layout stream a soft line break is
+inserted as well.
+
Attributes:
+ALIGN=divalign (sort of; in laytags.c it's divalign; in layhrule.c
+it's left or right only)
+
SIZE=int (1 to 100 inclusive)
+
WIDTH=val-or-pct (pct of right-left width)
+
NOSHADE
+
+BR
+Does an unconditional soft break. If clear is set then it will also
+soft break until either the left or right or both margins are clear of
+floating elements. Note that /BR == BR!
+
Attributes:
+CLEAR=left | right | all | both
+
+WBR
+Soft word break.
+
Attributes: none
+EMBED
+Close tag does nothing. Embed's operate inline just like images (they
+don't close the paragraph).
+
Attributes:
+HIDDEN=no | false | off
+
ALIGN=alignparam
+
SRC=url
+
WIDTH=val-or-pct (pct of right-left width)
+
HEIGHT=val-of-pct; if val is < 1 (sometimes) the element
+gets HIDDEN automatically
+
BORDER=int (unsupported by navigator)
+
VSPACE=int [clamped: >= 0]
+
HSPACE=int [clamped: >= 0]
+
+NOEBMED
+Used when EMBED's are disabled. It is a container for regular content
+that has no stylistic consequences (no line breaking, no style stack effect,
+etc.).
+APPLET
+Applet tags don't nest (there is a notion of current_applet). The open
+tag automatically closes an open applet tag.
+
Attributes:
+ALIGN=alignparam
+
CODE=string
+
CODEBASE=string
+
ARCHIVE=string
+
MAYSCRIPT
+
NAME=string [clamped: white space is stripped out]
+
WIDTH=value-or-pct [pct of right-left width; clamped: >= 1]
+
HEIGHT=value-or-pct [pct of window height; clamped >= 1]
+
BORDER=int [clamped: >= 0]
+
HSPACE=int [clamped: >= 0]
+
VSPACE=int [clamped: >= 0]
+If no width is provided:
+if a height was provided, use the height. Otherwise, use 90% of the
+window width if percentage widths are allowed, otherwise use a value of
+600.
+
+If no height is provided:
+if a width was provided, use the width. Otherwise, use 50% of the window
+height if percentage widths are allowed, otherwise use a value of 400.
+If the applet is hidden, then the widht/height get forced to zero.
+PARAM
+The param tag is supported when contained by the APPLET tag or the
+OBJECT tag. It has no stylistic consequences. The attribute values from
+the tag are passed to the containing APPLET or OBJECT. Note that /PARAM
+== PARAM.
+
Attributes:
+NAME=string [clamped: white space is stripped out]
+
VALUE=string [clamped: white space is stripped out]
+White space being stripped is done as follows: leading and trailing whitespace
+is removed. Any embedded whitespace is left alone except if it's a non-space
+whitespace in which case it is removed.
+OBJECT
+The open tag pushes an object onto the object stack. The close tag
+pops from the object stack. I don't understand how the data stuff works.
+
Attributes:
+CLASSID=string (clsid:, java:, javaprogram:, javabean: are the
+supported prefixes; maybe it's a url if no prefix shown?)
+
TYPE=string (a mime type)
+
DATA=string (data: prefix mentions a url)
+There are more attributes that depend on the type of object being embedded
+in the page. If the object is a java bean (?) then the applet parameters
+are supported:
+CLASSID
+
HIDDEN
+
ALIGN
+
CLASSID (instead of CODE)
+
CODEBASE
+
ARCHIVE
+
MAYSCRIPT
+
ID (applets use NAME)
+
WIDTH
+
HEIGHT
+
BORDER
+
HSPACE
+
VSPACE
+
+MAP
+The open tag automatically closes an open map (maps don't nest). There
+is no stylistic consequence of the map nor does it provide any visible
+presentation in the normal layout case (an editor would do something different).
+The map can be declared anywhere in the document.
+
Attributes:
+NAME=string [clamped: white space is stripped out]
+
+AREA
+Does nothing if there is no current map or the tag is a close tag.
+
Attributes:
+SHAPE=default | rect | circle | poly | polygon
+
ALT=string [clamped: newlines are stripped]
+
COORDS=coord-list
+
HREF=url
+TARGET=target (only if HREF is specified)
+SUPPRESS
+
+SERVER
+A container for server-side javascript. Not evaluated by the client
+(parsed and ignored). Note: The navigator parser doesn't expand entities
+in a SERVER tag.
+SPACER
+Close tag is ignored. Open tag provides whitespace during layout: TYPE=line/vert/vertical
+causes a conditional soft line break and then adds SIZE to the Y
+layout coordinate. TYPE=word causes a conditional soft word break
+and then adds SIZE to the X layout coordinate. TYPE=block
+causes blockish layout stuff to happen.
+
Attributes:
+TYPE=line | vert | vertical | block (default: word)
+ALIGN=alignparam (these 3 params are only for TYPE=block)
+
WIDTH=value-or-pct
+
HEIGHT=value-or-pct
+SIZE=int [clampled: >= 0]
+
+
+
+
+
+SCRIPT
+Note: The navigator parser doesn't expand entities in a SCRIPT tag.
+
Attributes:
+LANGUAGE=LiveScript | Mocha | JavaScript1.1 | JavaScript1.2
+
TYPE="text/javascript" | "text/css"
+
HREF=url
+
ARCHIVE=url
+
CODEBASE=url
+
ID=string
+
SRC=url
+
+NOSCRIPT
+Used when scripting is off or by backrev browsers. It is a container
+that has no stylistic consequences.
+
+
+
+
+FORM
+Attributes:
+ACTION=href
+
ENCODING=string
+
TARGET=string
+
METHOD=get | post
+
+ISINDEX
+This tag is a shortcut for creating a form element with a submit button
+and a single text field. If the PROMPT attribute is not present in the
+tag then the value used is "This is a searchable index. Enter search
+keywords:".
+
+Attributes:
+
PROMPT=string
+
ACTION=href
+
ENCODING=string
+
TARGET=string
+
METHOD=get | post
+
+INPUT
+Attributes vary according to type:
+TYPE= text | radio | checkbox | hidden | submit | reset | password
+| button | image | file | jot | readonly | object
+
NAME= string
+
+TYPE=image
+attributes are from the IMG tag (!)
+TYPE= text | password | file
+font style is forced to fixed
+
VALUE= string
+
SIZE= int (clamped; >= 1)
+
MAXLENGTH= int (not clamped!)
+TYPE= submit | reset | button | hidden | readonly
+VALUE=string; default if no value to the attribute varies according
+to the type:
+submit -> "Submit Query"
+
reset -> "Reset"
+
others -> " " (2 spaces)
+
Note also that the value has newlines stripped from it
+WIDTH=int (clamped >=0 && <= 1000) (only for submit,
+reset or button)
+
HEIGHT=int (clamped >=0 && <= 1000) (only for submit,
+reset or button)
+TYPE=radio | checkbox
+CHECKED (flag - if present then set to true)
+
VALUE= string (the default value is "on")
+
+SELECT
+Attributes:
+MULTIPLE (boolean)
+
SIZE= int (clamped >= 1)
+
NAME= string
+
WIDTH= int (clampled >= 0 && <= 1000)
+
HEIGHT= int (clamped >= 0 && <= 1000; only examined
+for single entry lists (!multiple || size==1))
+
+OPTION
+Lives inside the SELECT tag (ignored otherwise).
+
Attributes:
+VALUE=string
+
SELECTED boolean
+
+TEXTAREA
+Attributes:
+NAME=string
+
ROWS=int (clamped; >= 1)
+
COLS=int (clamped; >= 1)
+
WRAP= off | hard | soft (default is off; any value which is
+not known turns into soft)
+
+KEYGEN
+Attributes:
+NAME=string
+
CHALLENGE=string
+
PQG=string
+
KEYTYPE=string
+
+
+
+
+
+BASEFONT
+Sets the base font value which +/- size values in FONT tags are relative
+to.
+
Attributes:
+SIZE=+ int | - int | int (just like FONT)
+
+
+
+
+
Unsupported
+NSCP_CLOSE, NSCP_OPEN, NSCP_REBLOCK, MQUOTE, CELL, SUBDOC, CERTIFICATE,
+INLINEINPUTTHICK, INLINEINPUTDOTTED, COLORMAP, HYPE, SPELL, NSDT
+These tags are unsupported because they are used internally by netscape
+and are never seen in real content. If somebody does use them between 4.0
+and magellan, tough beans. We never documented them so they lose.
+
+
+