plan9port/man/man3/html.html
2005-01-14 03:45:44 +00:00

1206 lines
63 KiB
HTML

<head>
<title>html(3) - Plan 9 from User Space</title>
<meta content="text/html; charset=utf-8" http-equiv=Content-Type>
</head>
<body bgcolor=#ffffff>
<table border=0 cellpadding=0 cellspacing=0 width=100%>
<tr height=10><td>
<tr><td width=20><td>
<tr><td width=20><td><b>HTML(3)</b><td align=right><b>HTML(3)</b>
<tr><td width=20><td colspan=2>
<br>
<p><font size=+1><b>NAME </b></font><br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
parsehtml, printitems, validitems, freeitems, freedocinfo, dimenkind,
dimenspec, targetid, targetname, fromStr, toStr &ndash; HTML parser<br>
</table>
<p><font size=+1><b>SYNOPSIS </b></font><br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
<tt><font size=+1>#include &lt;u.h&gt;<br>
#include &lt;libc.h&gt;<br>
#include &lt;html.h&gt;<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>Item* &nbsp;&nbsp;&nbsp;parsehtml(uchar* data, int datalen, Rune* src, int mtype,<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
int chset, Docinfo** pdi)<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</table>
</table>
</font></tt>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
</table>
</table>
<tt><font size=+1>void &nbsp;&nbsp;&nbsp;&nbsp;printitems(Item* items, char* msg)<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validitems(Item* items)<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>void &nbsp;&nbsp;&nbsp;&nbsp;freeitems(Item* items)<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>void &nbsp;&nbsp;&nbsp;&nbsp;freedocinfo(Docinfo* d)<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dimenkind(Dimen d)<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dimenspec(Dimen d)<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;targetid(Rune* s)<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>Rune* &nbsp;&nbsp;&nbsp;targetname(int targid)<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>uchar* fromStr(Rune* buf, int n, int chset)<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>Rune* &nbsp;&nbsp;&nbsp;toStr(uchar* buf, int n, int chset)<br>
</font></tt>
</table>
<p><font size=+1><b>DESCRIPTION </b></font><br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
This library implements a parser for HTML 4.0 documents. The parsed
HTML is converted into an intermediate representation that describes
how the formatted HTML should be laid out.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<i>Parsehtml</i> parses an entire HTML document contained in the buffer
<i>data</i> and having length <i>datalen</i>. The URL of the document should
be passed in as <i>src</i>. <i>Mtype</i> is the media type of the document,
which should be either <tt><font size=+1>TextHtml</font></tt> or <tt><font size=+1>TextPlain</font></tt>. The character set
of the document is described in <i>chset</i>, which can be
one of <tt><font size=+1>US_Ascii</font></tt>, <tt><font size=+1>ISO_8859_1</font></tt>, <tt><font size=+1>UTF_8</font></tt> or <tt><font size=+1>Unicode</font></tt>. The return value
is a linked list of <tt><font size=+1>Item</font></tt> structures, described in detail below.
As a side effect, <tt><font size=+1>*</font></tt><i>pdi</i> is set to point to a newly created <tt><font size=+1>Docinfo</font></tt>
structure, containing information pertaining to the entire document.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
The library expects two allocation routines to be provided by
the caller, <tt><font size=+1>emalloc</font></tt> and <tt><font size=+1>erealloc</font></tt>. These routines are analogous
to the standard malloc and realloc routines, except that they
should not return if the memory allocation fails. In addition,
<tt><font size=+1>emalloc</font></tt> is required to zero the memory.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
For debugging purposes, <i>printitems</i> may be called to display the
contents of an item list; individual items may be printed using
the <tt><font size=+1>%I</font></tt> print verb, installed on the first call to <i>parsehtml</i>. <i>validitems</i>
traverses the item list, checking that all of the pointers are
valid. It returns <tt><font size=+1>1</font></tt> is everything is ok, and <tt><font size=+1>0</font></tt> if an error was
found. Normally, one would not call these routines directly. Instead,
one sets the global variable <i>dbgbuild</i> and the library calls them
automatically. One can also set <i>warn</i>, to cause the library to
print a warning whenever it finds a problem with the input document,
and <i>dbglex</i>, to print debugging information in the
lexer.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
When an item list is finished with, it should be freed with <i>freeitems</i>.
Then, <i>freedocinfo</i> should be called on the pointer returned in
<tt><font size=+1>*</font></tt><i>pdi</i>.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<i>Dimenkind</i> and <i>dimenspec</i> are provided to interpret the <tt><font size=+1>Dimen</font></tt> type,
as described in the section <i>Dimension Specifications</i>.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
Frame target names are mapped to integer ids via a global, permanent
mapping. To find the value for a given name, call <i>targetid</i>, which
allocates a new id if the name hasn&#8217;t been seen before. The name
of a given, known id may be retrieved using <i>targetname</i>. The library
predefines <tt><font size=+1>FTtop</font></tt>, <tt><font size=+1>FTself</font></tt>, <tt><font size=+1>FTparent</font></tt> and
<tt><font size=+1>FTblank</font></tt>.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
The library handles all text as Unicode strings (type <tt><font size=+1>Rune*</font></tt>).
Character set conversion is provided by <i>fromStr</i> and <i>toStr</i>. <i>FromStr</i>
takes <i>n</i> Unicode characters from <i>buf</i> and converts them to the character
set described by <i>chset</i>. <i>ToStr</i> takes <i>n</i> bytes from <i>buf</i>, interpretted
as belonging to character set <i>chset</i>, and converts
them to a Unicode string. Both routines null-terminate the result,
and use <tt><font size=+1>emalloc</font></tt> to allocate space for it.<br>
<p><font size=+1><b>Items </b></font><br>
The return value of <i>parsehtml</i> is a linked list of variant structures,
with the generic portion described by the following definition:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>typedef struct Item Item;<br>
struct Item<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
Item* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ascent;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anchorid;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state;<br>
Genattr* genattr;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tag;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
The field <tt><font size=+1>next</font></tt> points to the successor in the linked list of items,
while <tt><font size=+1>width</font></tt>, <tt><font size=+1>height</font></tt>, and <tt><font size=+1>ascent</font></tt> are intended for use by the caller
as part of the layout process. <tt><font size=+1>Anchorid</font></tt>, if non-zero, gives the
integer id assigned by the parser to the anchor that this item
is in (see section <i>Anchors</i>). <tt><font size=+1>State</font></tt> is a collection of
flags and values described as follows:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>enum<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
IFbrk = &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x80000000,<br>
IFbrksp = &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x40000000,<br>
IFnobrk = &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x20000000,<br>
IFcleft = &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x10000000,<br>
IFcright = &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x08000000,<br>
IFwrap = &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x04000000,<br>
IFhang = &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x02000000,<br>
IFrjust = &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x01000000,<br>
IFcjust = &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00800000,<br>
IFsmap = &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00400000,<br>
IFindentshift = 8,<br>
IFindentmask = &nbsp;&nbsp;&nbsp;(255&lt;&lt;IFindentshift),<br>
IFhangmask = &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;255<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>IFbrk</font></tt> is set if a break is to be forced before placing this item.
<tt><font size=+1>IFbrksp</font></tt> is set if a 1 line space should be added to the break
(in which case <tt><font size=+1>IFbrk</font></tt> is also set). <tt><font size=+1>IFnobrk</font></tt> is set if a break is
not permitted before the item. <tt><font size=+1>IFcleft</font></tt> is set if left floats should
be cleared (that is, if the list of pending left floats should
be placed) before this item is placed, and <tt><font size=+1>IFcright</font></tt> is set for
right floats. In both cases, IFbrk is also set. <tt><font size=+1>IFwrap</font></tt> is set
if the line containing this item is allowed to wrap. <tt><font size=+1>IFhang</font></tt> is
set if this item hangs into the left indent. <tt><font size=+1>IFrjust</font></tt> is set if
the line containing this item should be right justified, and <tt><font size=+1>IFcjust</font></tt>
is
set for center justified lines. <tt><font size=+1>IFsmap</font></tt> is used to indicate that
an image is a server-side map. The low 8 bits, represented by
<tt><font size=+1>IFhangmask</font></tt>, indicate the current hang into left indent, in tenths
of a tabstop. The next 8 bits, represented by <tt><font size=+1>IFindentmask</font></tt> and
<tt><font size=+1>IFindentshift</font></tt>, indicate the current indent in tab
stops.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
The field <tt><font size=+1>genattr</font></tt> is an optional pointer to an auxiliary structure,
described in the section <i>Generic Attributes</i>.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
Finally, <tt><font size=+1>tag</font></tt> describes which variant type this item has. It can
have one of the values <tt><font size=+1>Itexttag</font></tt>, <tt><font size=+1>Iruletag</font></tt>, <tt><font size=+1>Iimagetag</font></tt>, <tt><font size=+1>Iformfieldtag</font></tt>,
<tt><font size=+1>Itabletag</font></tt>, <tt><font size=+1>Ifloattag</font></tt> or <tt><font size=+1>Ispacertag</font></tt>. For each of these values,
there is an additional structure defined, which includes Item
as an unnamed initial substructure,
and then defines additional fields.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
Items of type <tt><font size=+1>Itexttag</font></tt> represent a piece of text, using the following
structure:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>struct Itext<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
Item;<br>
Rune* s;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;fnt;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;fg;<br>
uchar voff;<br>
uchar ul;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
Here <tt><font size=+1>s</font></tt> is a null-terminated Unicode string of the actual characters
making up this text item, <tt><font size=+1>fnt</font></tt> is the font number (described in
the section <i>Font Numbers</i>), and <tt><font size=+1>fg</font></tt> is the RGB encoded color for
the text. <tt><font size=+1>Voff</font></tt> measures the vertical offset from the baseline;
subtract <tt><font size=+1>Voffbias</font></tt> to get the actual value (negative values
represent a displacement down the page). The field <tt><font size=+1>ul</font></tt> is the underline
style: <tt><font size=+1>ULnone</font></tt> if no underline, <tt><font size=+1>ULunder</font></tt> for conventional underline,
and <tt><font size=+1>ULmid</font></tt> for strike-through.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
Items of type <tt><font size=+1>Iruletag</font></tt> represent a horizontal rule, as follows:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>struct Irule<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
Item;<br>
uchar align;<br>
uchar noshade;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;size;<br>
Dimen wspec;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
Here <tt><font size=+1>align</font></tt> is the alignment specification (described in the corresponding
section), <tt><font size=+1>noshade</font></tt> is set if the rule should not be shaded, <tt><font size=+1>size</font></tt>
is the height of the rule (as set by the size attribute), and
<tt><font size=+1>wspec</font></tt> is the desired width (see section <i>Dimension Specifications</i>).
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
Items of type <tt><font size=+1>Iimagetag</font></tt> describe embedded images, for which the
following structure is defined:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>struct Iimage<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
Item;<br>
Rune* &nbsp;&nbsp;&nbsp;&nbsp;imsrc;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imwidth;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imheight;<br>
Rune* &nbsp;&nbsp;&nbsp;&nbsp;altrep;<br>
Map* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctlid;<br>
uchar &nbsp;&nbsp;&nbsp;&nbsp;align;<br>
uchar &nbsp;&nbsp;&nbsp;&nbsp;hspace;<br>
uchar &nbsp;&nbsp;&nbsp;&nbsp;vspace;<br>
uchar &nbsp;&nbsp;&nbsp;&nbsp;border;<br>
Iimage* nextimage;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
Here <tt><font size=+1>imsrc</font></tt> is the URL of the image source, <tt><font size=+1>imwidth</font></tt> and <tt><font size=+1>imheight</font></tt>,
if non-zero, contain the specified width and height for the image,
and <tt><font size=+1>altrep</font></tt> is the text to use as an alternative to the image,
if the image is not displayed. <tt><font size=+1>Map</font></tt>, if set, points to a structure
describing an associated client-side image map.
<tt><font size=+1>Ctlid</font></tt> is reserved for use by the application, for handling animated
images. <tt><font size=+1>Align</font></tt> encodes the alignment specification of the image.
<tt><font size=+1>Hspace</font></tt> contains the number of pixels to pad the image with on
either side, and <tt><font size=+1>Vspace</font></tt> the padding above and below. <tt><font size=+1>Border</font></tt> is
the width of the border to draw around the
image. <tt><font size=+1>Nextimage</font></tt> points to the next image in the document (the
head of this list is <tt><font size=+1>Docinfo.images</font></tt>).
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
For items of type <tt><font size=+1>Iformfieldtag</font></tt>, the following structure is defined:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>struct Iformfield<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
Item;<br>
Formfield* formfield;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
This adds a single field, <tt><font size=+1>formfield</font></tt>, which points to a structure
describing a field in a form, described in section <i>Forms</i>.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
For items of type <tt><font size=+1>Itabletag</font></tt>, the following structure is defined:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>struct Itable<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
Item;<br>
Table* table;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>Table</font></tt> points to a structure describing the table, described in
the section <i>Tables</i>.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
For items of type <tt><font size=+1>Ifloattag</font></tt>, the following structure is defined:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>struct Ifloat<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
Item;<br>
Item* &nbsp;&nbsp;&nbsp;&nbsp;item;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y;<br>
uchar &nbsp;&nbsp;&nbsp;&nbsp;side;<br>
uchar &nbsp;&nbsp;&nbsp;&nbsp;infloats;<br>
Ifloat* nextfloat;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
The <tt><font size=+1>item</font></tt> points to a single item (either a table or an image)
that floats (the text of the document flows around it), and <tt><font size=+1>side</font></tt>
indicates the margin that this float sticks to; it is either <tt><font size=+1>ALleft</font></tt>
or <tt><font size=+1>ALright</font></tt>. <tt><font size=+1>X</font></tt> and <tt><font size=+1>y</font></tt> are reserved for use by the caller; these
are typically used for the coordinates of the top of the float.
<tt><font size=+1>Infloats</font></tt> is used by the caller to keep track of whether it has
placed the float. <tt><font size=+1>Nextfloat</font></tt> is used by the caller to link together
all of the floats that it has placed.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
For items of type <tt><font size=+1>Ispacertag</font></tt>, the following structure is defined:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>struct Ispacer<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
Item;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;spkind;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>Spkind</font></tt> encodes the kind of spacer, and may be one of <tt><font size=+1>ISPnull</font></tt> (zero
height and width), <tt><font size=+1>ISPvline</font></tt> (takes on height and ascent of the
current font), <tt><font size=+1>ISPhspace</font></tt> (has the width of a space in the current
font) and <tt><font size=+1>ISPgeneral</font></tt> (for all other purposes, such as between
markers and lists).
<p><font size=+1><b>Generic Attributes </b></font><br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
The genattr field of an item, if non-nil, points to a structure
that holds the values of attributes not specific to any particular
item type, as they occur on a wide variety of underlying HTML
tags. The structure is as follows:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>typedef struct Genattr Genattr;<br>
struct Genattr<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
Rune* &nbsp;&nbsp;&nbsp;&nbsp;id;<br>
Rune* &nbsp;&nbsp;&nbsp;&nbsp;class;<br>
Rune* &nbsp;&nbsp;&nbsp;&nbsp;style;<br>
Rune* &nbsp;&nbsp;&nbsp;&nbsp;title;<br>
SEvent* events;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
Fields <tt><font size=+1>id</font></tt>, <tt><font size=+1>class</font></tt>, <tt><font size=+1>style</font></tt> and <tt><font size=+1>title</font></tt>, when non-nil, contain values
of correspondingly named attributes of the HTML tag associated
with this item. <tt><font size=+1>Events</font></tt> is a linked list of events (with corresponding
scripted actions) associated with the item:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>typedef struct SEvent SEvent;<br>
struct SEvent<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
SEvent* next;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type;<br>
Rune* &nbsp;&nbsp;&nbsp;&nbsp;script;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
Here, <tt><font size=+1>next</font></tt> points to the next event in the list, <tt><font size=+1>type</font></tt> is one of
<tt><font size=+1>SEonblur</font></tt>, <tt><font size=+1>SEonchange</font></tt>, <tt><font size=+1>SEonclick</font></tt>, <tt><font size=+1>SEondblclick</font></tt>, <tt><font size=+1>SEonfocus</font></tt>, <tt><font size=+1>SEonkeypress</font></tt>,
<tt><font size=+1>SEonkeyup</font></tt>, <tt><font size=+1>SEonload</font></tt>, <tt><font size=+1>SEonmousedown</font></tt>, <tt><font size=+1>SEonmousemove</font></tt>, <tt><font size=+1>SEonmouseout</font></tt>,
<tt><font size=+1>SEonmouseover</font></tt>, <tt><font size=+1>SEonmouseup</font></tt>, <tt><font size=+1>SEonreset</font></tt>, <tt><font size=+1>SEonselect</font></tt>,
<tt><font size=+1>SEonsubmit</font></tt> or <tt><font size=+1>SEonunload</font></tt>, and <tt><font size=+1>script</font></tt> is the text of the associated
script.<br>
<p><font size=+1><b>Dimension Specifications </b></font><br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
Some structures include a dimension specification, used where
a number can be followed by a <tt><font size=+1>%</font></tt> or a <tt><font size=+1>*</font></tt> to indicate percentage
of total or relative weight. This is encoded using the following
structure:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>typedef struct Dimen Dimen;<br>
struct Dimen<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
int kindspec;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
Separate kind and spec values are extracted using <i>dimenkind</i> and
<i>dimenspec</i>. <i>Dimenkind</i> returns one of <tt><font size=+1>Dnone</font></tt>, <tt><font size=+1>Dpixels</font></tt>, <tt><font size=+1>Dpercent</font></tt> or
<tt><font size=+1>Drelative</font></tt>. <tt><font size=+1>Dnone</font></tt> means that no dimension was specified. In all
other cases, <i>dimenspec</i> should be called to find the absolute number
of pixels, the percentage of total, or the
relative weight.<br>
<p><font size=+1><b>Background Specifications </b></font><br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
It is possible to set the background of the entire document, and
also for some parts of the document (such as tables). This is
encoded as follows:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>typedef struct Background Background;<br>
struct Background<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
Rune* image;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;color;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>Image</font></tt>, if non-nil, is the URL of an image to use as the background.
If this is nil, <tt><font size=+1>color</font></tt> is used instead, as the RGB value for a
solid fill color.<br>
<p><font size=+1><b>Alignment Specifications </b></font><br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
Certain items have alignment specifiers taken from the following
enumerated type:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>enum<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
ALnone = 0, ALleft, ALcenter, ALright, ALjustify,<br>
ALchar, ALtop, ALmiddle, ALbottom, ALbaseline<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
These values correspond to the various alignment types named in
the HTML 4.0 standard. If an item has an alignment of <tt><font size=+1>ALleft</font></tt> or
<tt><font size=+1>ALright</font></tt>, the library automatically encapsulates it inside a float
item.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
Tables, and the various rows, columns and cells within them, have
a more complex alignment specification, composed of separate vertical
and horizontal alignments:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>typedef struct Align Align;<br>
struct Align<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
uchar halign;<br>
uchar valign;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>Halign</font></tt> can be one of <tt><font size=+1>ALnone</font></tt>, <tt><font size=+1>ALleft</font></tt>, <tt><font size=+1>ALcenter</font></tt>, <tt><font size=+1>ALright</font></tt>, <tt><font size=+1>ALjustify</font></tt>
or <tt><font size=+1>ALchar</font></tt>. <tt><font size=+1>Valign</font></tt> can be one of <tt><font size=+1>ALnone</font></tt>, <tt><font size=+1>ALmiddle</font></tt>, <tt><font size=+1>ALbottom</font></tt>, <tt><font size=+1>ALtop</font></tt>
or <tt><font size=+1>ALbaseline</font></tt>.<br>
<p><font size=+1><b>Font Numbers </b></font><br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
Text items have an associated font number (the <tt><font size=+1>fnt</font></tt> field), which
is encoded as <tt><font size=+1>style*NumSize+size</font></tt>. Here, <tt><font size=+1>style</font></tt> is one of <tt><font size=+1>FntR</font></tt>,
<tt><font size=+1>FntI</font></tt>, <tt><font size=+1>FntB</font></tt> or <tt><font size=+1>FntT</font></tt>, for roman, italic, bold and typewriter font
styles, respectively, and size is <tt><font size=+1>Tiny</font></tt>, <tt><font size=+1>Small</font></tt>, <tt><font size=+1>Normal</font></tt>, <tt><font size=+1>Large</font></tt> or
<tt><font size=+1>Verylarge</font></tt>. The total number of possible
font numbers is <tt><font size=+1>NumFnt</font></tt>, and the default font number is <tt><font size=+1>DefFnt</font></tt>
(which is roman style, normal size).<br>
<p><font size=+1><b>Document Info </b></font><br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
Global information about an HTML page is stored in the following
structure:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>typedef struct Docinfo Docinfo;<br>
struct Docinfo<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
// stuff from HTTP headers, doc head, and body tag<br>
Rune* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;src;<br>
Rune* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base;<br>
Rune* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doctitle;<br>
Background &nbsp;&nbsp;&nbsp;background;<br>
Iimage* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;backgrounditem;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlink;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alink;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chset;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mediatype;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scripttype;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hasscripts;<br>
Rune* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refresh;<br>
Kidinfo* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kidinfo;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frameid;<br>
// info needed to respond to user actions<br>
Anchor* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anchors;<br>
DestAnchor* dests;<br>
Form* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;forms;<br>
Table* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tables;<br>
Map* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maps;<br>
Iimage* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;images;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>Src</font></tt> gives the URL of the original source of the document, and
<tt><font size=+1>base</font></tt> is the base URL. <tt><font size=+1>Doctitle</font></tt> is the document&#8217;s title, as set
by a <tt><font size=+1>&lt;title&gt;</font></tt> element. <tt><font size=+1>Background</font></tt> is as described in the section
<i>Background Specifications</i>, and <tt><font size=+1>backgrounditem</font></tt> is set to be an
image item for the document&#8217;s background image
(if given as a URL), or else nil. <tt><font size=+1>Text</font></tt> gives the default foregound
text color of the document, <tt><font size=+1>link</font></tt> the unvisited hyperlink color,
<tt><font size=+1>vlink</font></tt> the visited hyperlink color, and <tt><font size=+1>alink</font></tt> the color for highlighting
hyperlinks (all in 24-bit RGB format). <tt><font size=+1>Target</font></tt> is the default target
frame id. <tt><font size=+1>Chset</font></tt> and <tt><font size=+1>mediatype</font></tt> are as for
the <i>chset</i> and <i>mtype</i> parameters to <i>parsehtml</i>. <tt><font size=+1>Scripttype</font></tt> is the
type of any scripts contained in the document, and is always <tt><font size=+1>TextJavascript</font></tt>.
<tt><font size=+1>Hasscripts</font></tt> is set if the document contains any scripts. Scripting
is currently unsupported. <tt><font size=+1>Refresh</font></tt> is the contents of a <tt><font size=+1>&lt;meta http&#8722;equiv=Refresh
...&gt;</font></tt> tag, if any. <tt><font size=+1>Kidinfo</font></tt> is set if this document is a frameset
(see section <i>Frames</i>). <tt><font size=+1>Frameid</font></tt> is this document&#8217;s frame id.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>Anchors</font></tt> is a list of hyperlinks contained in the document, and
<tt><font size=+1>dests</font></tt> is a list of hyperlink destinations within the page (see
the following section for details). <tt><font size=+1>Forms</font></tt>, <tt><font size=+1>tables</font></tt> and <tt><font size=+1>maps</font></tt> are
lists of the various forms, tables and client-side maps contained
in the document, as described in subsequent sections.
<tt><font size=+1>Images</font></tt> is a list of all the image items in the document.<br>
<p><font size=+1><b>Anchors </b></font><br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
The library builds two lists for all of the <tt><font size=+1>&lt;a&gt;</font></tt> elements (anchors)
in a document. Each anchor is assigned a unique anchor id within
the document. For anchors which are hyperlinks (the <tt><font size=+1>href</font></tt> attribute
was supplied), the following structure is defined:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>typedef struct Anchor Anchor;<br>
struct Anchor<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
Anchor* next;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index;<br>
Rune* &nbsp;&nbsp;&nbsp;&nbsp;name;<br>
Rune* &nbsp;&nbsp;&nbsp;&nbsp;href;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>Next</font></tt> points to the next anchor in the list (the head of this list
is <tt><font size=+1>Docinfo.anchors</font></tt>). <tt><font size=+1>Index</font></tt> is the anchor id; each item within
this hyperlink is tagged with this value in its <tt><font size=+1>anchorid</font></tt> field.
<tt><font size=+1>Name</font></tt> and <tt><font size=+1>href</font></tt> are the values of the correspondingly named attributes
of the anchor (in particular, href is the URL to go
to). <tt><font size=+1>Target</font></tt> is the value of the target attribute (if provided)
converted to a frame id.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
Destinations within the document (anchors with the name attribute
set) are held in the <tt><font size=+1>Docinfo.dests</font></tt> list, using the following structure:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>typedef struct DestAnchor DestAnchor;<br>
struct DestAnchor<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
DestAnchor* next;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index;<br>
Rune* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name;<br>
Item* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;item;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>Next</font></tt> is the next element of the list, <tt><font size=+1>index</font></tt> is the anchor id,
<tt><font size=+1>name</font></tt> is the value of the name attribute, and <tt><font size=+1>item</font></tt> is points to
the item within the parsed document that should be considered
to be the destination.<br>
<p><font size=+1><b>Forms </b></font><br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
Any forms within a document are kept in a list, headed by <tt><font size=+1>Docinfo.forms</font></tt>.
The elements of this list are as follows:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>typedef struct Form Form;<br>
struct Form<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
Form* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formid;<br>
Rune* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name;<br>
Rune* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;action;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nfields;<br>
Formfield* fields;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>Next</font></tt> points to the next form in the list. <tt><font size=+1>Formid</font></tt> is a serial number
for the form within the document. <tt><font size=+1>Name</font></tt> is the value of the form&#8217;s
name or id attribute. <tt><font size=+1>Action</font></tt> is the value of any action attribute.
<tt><font size=+1>Target</font></tt> is the value of the target attribute (if any) converted
to a frame target id. <tt><font size=+1>Method</font></tt> is one of <tt><font size=+1>HGet</font></tt> or
<tt><font size=+1>HPost</font></tt>. <tt><font size=+1>Nfields</font></tt> is the number of fields in the form, and <tt><font size=+1>fields</font></tt>
is a linked list of the actual fields.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
The individual fields in a form are described by the following
structure:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>typedef struct Formfield Formfield;<br>
struct Formfield<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
Formfield* next;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ftype;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldid;<br>
Form* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;form;<br>
Rune* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name;<br>
Rune* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxlength;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rows;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cols;<br>
uchar &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flags;<br>
Option* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;options;<br>
Item* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctlid;<br>
SEvent* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;events;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
Here, <tt><font size=+1>next</font></tt> points to the next field in the list. <tt><font size=+1>Ftype</font></tt> is the
type of the field, which can be one of <tt><font size=+1>Ftext</font></tt>, <tt><font size=+1>Fpassword</font></tt>, <tt><font size=+1>Fcheckbox</font></tt>,
<tt><font size=+1>Fradio</font></tt>, <tt><font size=+1>Fsubmit</font></tt>, <tt><font size=+1>Fhidden</font></tt>, <tt><font size=+1>Fimage</font></tt>, <tt><font size=+1>Freset</font></tt>, <tt><font size=+1>Ffile</font></tt>, <tt><font size=+1>Fbutton</font></tt>, <tt><font size=+1>Fselect</font></tt>
or <tt><font size=+1>Ftextarea</font></tt>. <tt><font size=+1>Fieldid</font></tt> is a serial number for the field within
the form. <tt><font size=+1>Form</font></tt> points back
to the form containing this field. <tt><font size=+1>Name</font></tt>, <tt><font size=+1>value</font></tt>, <tt><font size=+1>size</font></tt>, <tt><font size=+1>maxlength</font></tt>,
<tt><font size=+1>rows</font></tt> and <tt><font size=+1>cols</font></tt> each contain the values of corresponding attributes
of the field, if present. <tt><font size=+1>Flags</font></tt> contains per-field flags, of which
<tt><font size=+1>FFchecked</font></tt> and <tt><font size=+1>FFmultiple</font></tt> are defined. <tt><font size=+1>Image</font></tt> is only used for fields
of type <tt><font size=+1>Fimage</font></tt>; it points to an
image item containing the image to be displayed. <tt><font size=+1>Ctlid</font></tt> is reserved
for use by the caller, typically to store a unique id of an associated
control used to implement the field. <tt><font size=+1>Events</font></tt> is the same as the
corresponding field of the generic attributes associated with
the item containing this field. <tt><font size=+1>Options</font></tt> is only used by
fields of type <tt><font size=+1>Fselect</font></tt>; it consists of a list of possible options
that may be selected for that field, using the following structure:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>typedef struct Option Option;<br>
struct Option<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
Option* next;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selected;<br>
Rune* &nbsp;&nbsp;&nbsp;&nbsp;value;<br>
Rune* &nbsp;&nbsp;&nbsp;&nbsp;display;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>Next</font></tt> points to the next element of the list. <tt><font size=+1>Selected</font></tt> is set if
this option is to be displayed initially. <tt><font size=+1>Value</font></tt> is the value to
send when the form is submitted if this option is selected. <tt><font size=+1>Display</font></tt>
is the string to display on the screen for this option.<br>
<p><font size=+1><b>Tables </b></font><br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
The library builds a list of all the tables in the document, headed
by <tt><font size=+1>Docinfo.tables</font></tt>. Each element of this list has the following
format:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>typedef struct Table Table;<br>
struct Table<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
Table* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tableid;<br>
Tablerow* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rows;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nrow;<br>
Tablecol* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cols;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ncol;<br>
Tablecell* &nbsp;&nbsp;&nbsp;&nbsp;cells;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ncell;<br>
Tablecell*** grid;<br>
Align &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;align;<br>
Dimen &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cellspacing;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cellpadding;<br>
Background &nbsp;&nbsp;&nbsp;&nbsp;background;<br>
Item* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;caption;<br>
uchar &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;caption_place;<br>
Lay* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;caption_lay;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;totw;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;toth;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;caph;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;availw;<br>
Token* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tabletok;<br>
uchar &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flags;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>Next</font></tt> points to the next element in the list of tables. <tt><font size=+1>Tableid</font></tt>
is a serial number for the table within the document. <tt><font size=+1>Rows</font></tt> is
an array of row specifications (described below) and <tt><font size=+1>nrow</font></tt> is the
number of elements in this array. Similarly, <tt><font size=+1>cols</font></tt> is an array
of column specifications, and <tt><font size=+1>ncol</font></tt> the size of this array.
<tt><font size=+1>Cells</font></tt> is a list of all cells within the table (structure described
below) and <tt><font size=+1>ncell</font></tt> is the number of elements in this list. Note
that a cell may span multiple rows and/or columns, thus <tt><font size=+1>ncell</font></tt>
may be smaller than <tt><font size=+1>nrow*ncol</font></tt>. <tt><font size=+1>Grid</font></tt> is a two-dimensional array
of cells within the table; the cell at row <tt><font size=+1>i</font></tt> and column <tt><font size=+1>j</font></tt> is
<tt><font size=+1>Table.grid[i][j]</font></tt>. A cell that spans multiple rows and/or columns
will be referenced by <tt><font size=+1>grid</font></tt> multiple times, however it will only
occur once in <tt><font size=+1>cells</font></tt>. <tt><font size=+1>Align</font></tt> gives the alignment specification for
the entire table, and <tt><font size=+1>width</font></tt> gives the requested width as a dimension
specification. <tt><font size=+1>Border</font></tt>, <tt><font size=+1>cellspacing
</font></tt>and <tt><font size=+1>cellpadding</font></tt> give the values of the corresponding attributes
for the table, and <tt><font size=+1>background</font></tt> gives the requested background for
the table. <tt><font size=+1>Caption</font></tt> is a linked list of items to be displayed as
the caption of the table, either above or below depending on whether
<tt><font size=+1>caption_place</font></tt> is <tt><font size=+1>ALtop</font></tt> or <tt><font size=+1>ALbottom</font></tt>.
Most of the remaining fields are reserved for use by the caller,
except <tt><font size=+1>tabletok</font></tt>, which is reserved for internal use. The type
<tt><font size=+1>Lay</font></tt> is not defined by the library; the caller can provide its
own definition.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
The <tt><font size=+1>Tablecol</font></tt> structure is defined for use by the caller. The library
ensures that the correct number of these is allocated, but leaves
them blank. The fields are as follows:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>typedef struct Tablecol Tablecol;<br>
struct Tablecol<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
int &nbsp;&nbsp;&nbsp;&nbsp;width;<br>
Align align;<br>
Point pos;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
The rows in the table are specified as follows:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>typedef struct Tablerow Tablerow;<br>
struct Tablerow<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
Tablerow* &nbsp;&nbsp;&nbsp;next;<br>
Tablecell* cells;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ascent;<br>
Align &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;align;<br>
Background background;<br>
Point &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos;<br>
uchar &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flags;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>Next</font></tt> is only used during parsing; it should be ignored by the
caller. <tt><font size=+1>Cells</font></tt> provides a list of all the cells in a row, linked
through their <tt><font size=+1>nextinrow</font></tt> fields (see below). <tt><font size=+1>Height</font></tt>, <tt><font size=+1>ascent</font></tt> and
<tt><font size=+1>pos</font></tt> are reserved for use by the caller. <tt><font size=+1>Align</font></tt> is the alignment
specification for the row, and <tt><font size=+1>background</font></tt> is the
background to use, if specified. <tt><font size=+1>Flags</font></tt> is used by the parser;
ignore this field.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
The individual cells of the table are described as follows:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>typedef struct Tablecell Tablecell;<br>
struct Tablecell<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
Tablecell* next;<br>
Tablecell* nextinrow;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cellid;<br>
Item* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content;<br>
Lay* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lay;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rowspan;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;colspan;<br>
Align &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;align;<br>
uchar &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flags;<br>
Dimen &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wspec;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hspec;<br>
Background background;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minw;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxw;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ascent;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;row;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;col;<br>
Point &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>Next</font></tt> is used to link together the list of all cells within a table
(<tt><font size=+1>Table.cells</font></tt>), whereas <tt><font size=+1>nextinrow</font></tt> is used to link together all
the cells within a single row (<tt><font size=+1>Tablerow.cells</font></tt>). <tt><font size=+1>Cellid</font></tt> provides
a serial number for the cell within the table. <tt><font size=+1>Content</font></tt> is a linked
list of the items to be laid out within the cell. <tt><font size=+1>Lay
</font></tt>is reserved for the user to describe how these items have been
laid out. <tt><font size=+1>Rowspan</font></tt> and <tt><font size=+1>colspan</font></tt> are the number of rows and columns
spanned by this cell, respectively. <tt><font size=+1>Align</font></tt> is the alignment specification
for the cell. <tt><font size=+1>Flags</font></tt> is some combination of <tt><font size=+1>TFparsing</font></tt>, <tt><font size=+1>TFnowrap</font></tt>
and <tt><font size=+1>TFisth</font></tt> or&#8217;d together. Here
<tt><font size=+1>TFparsing</font></tt> is used internally by the parser, and should be ignored.
<tt><font size=+1>TFnowrap</font></tt> means that the contents of the cell should not be wrapped
if they don&#8217;t fit the available width, rather, the table should
be expanded if need be (this is set when the nowrap attribute
is supplied). <tt><font size=+1>TFisth</font></tt> means that the cell was created
by the <tt><font size=+1>&lt;th&gt;</font></tt> element (rather than the <tt><font size=+1>&lt;td&gt;</font></tt> element), indicating that
it is a header cell rather than a data cell. <tt><font size=+1>Wspec</font></tt> provides a
suggested width as a dimension specification, and <tt><font size=+1>hspec</font></tt> provides
a suggested height in pixels. <tt><font size=+1>Background</font></tt> gives a background specification
for the individual cell. <tt><font size=+1>Minw</font></tt>, <tt><font size=+1>maxw</font></tt>,
<tt><font size=+1>ascent</font></tt> and <tt><font size=+1>pos</font></tt> are reserved for use by the caller during layout.
<tt><font size=+1>Row</font></tt> and <tt><font size=+1>col</font></tt> give the indices of the row and column of the top
left-hand corner of the cell within the table grid.<br>
<p><font size=+1><b>Client-side Maps </b></font><br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
The library builds a list of client-side maps, headed by <tt><font size=+1>Docinfo.maps</font></tt>,
and having the following structure:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>typedef struct Map Map;<br>
struct Map<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
Map* &nbsp;&nbsp;&nbsp;next;<br>
Rune* name;<br>
Area* areas;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>Next</font></tt> points to the next element in the list, <tt><font size=+1>name</font></tt> is the name
of the map (use to bind it to an image), and <tt><font size=+1>areas</font></tt> is a list of
the areas within the image that comprise the map, using the following
structure:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>typedef struct Area Area;<br>
struct Area<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
Area* &nbsp;&nbsp;&nbsp;next;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shape;<br>
Rune* &nbsp;&nbsp;&nbsp;href;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target;<br>
Dimen* coords;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ncoords;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>Next</font></tt> points to the next element in the map&#8217;s list of areas. <tt><font size=+1>Shape</font></tt>
describes the shape of the area, and is one of <tt><font size=+1>SHrect</font></tt>, <tt><font size=+1>SHcircle</font></tt>
or <tt><font size=+1>SHpoly</font></tt>. <tt><font size=+1>Href</font></tt> is the URL associated with this area in its role
as a hypertext link, and <tt><font size=+1>target</font></tt> is the target frame it should
be loaded in. <tt><font size=+1>Coords</font></tt> is an array of coordinates for
the shape, and <tt><font size=+1>ncoords</font></tt> is the size of this array (number of elements).<br>
<p><font size=+1><b>Frames </b></font><br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
If the <tt><font size=+1>Docinfo.kidinfo</font></tt> field is set, the document is a frameset.
In this case, it is typical for <i>parsehtml</i> to return nil, as a
document which is a frameset should have no actual items that
need to be laid out (such will appear only in subsidiary documents).
It is possible that items will be returned by a malformed
document; the caller should check for this and free any such items.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
The <tt><font size=+1>Kidinfo</font></tt> structure itself reflects the fact that framesets
can be nested within a document. If is defined as follows:
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
<tt><font size=+1>typedef struct Kidinfo Kidinfo;<br>
struct Kidinfo<br>
{<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
Kidinfo* next;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isframeset;<br>
// fields for &quot;frame&quot;<br>
Rune* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;src;<br>
Rune* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;marginw;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;marginh;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;framebd;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flags;<br>
// fields for &quot;frameset&quot;<br>
Dimen* &nbsp;&nbsp;&nbsp;&nbsp;rows;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nrows;<br>
Dimen* &nbsp;&nbsp;&nbsp;&nbsp;cols;<br>
int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ncols;<br>
Kidinfo* kidinfos;<br>
Kidinfo* nextframeset;<br>
</table>
};<br>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
</font></tt>
<tt><font size=+1>Next</font></tt> is only used if this structure is part of a containing frameset;
it points to the next element in the list of children of that
frameset. <tt><font size=+1>Isframeset</font></tt> is set when this structure represents a frameset;
if clear, it is an individual frame.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
Some fields are used only for framesets. <tt><font size=+1>Rows</font></tt> is an array of dimension
specifications for rows in the frameset, and <tt><font size=+1>nrows</font></tt> is the length
of this array. <tt><font size=+1>Cols</font></tt> is the corresponding array for columns, of
length <tt><font size=+1>ncols</font></tt>. <tt><font size=+1>Kidinfos</font></tt> points to a list of components contained
within this frameset, each of which may be a
frameset or a frame. <tt><font size=+1>Nextframeset</font></tt> is only used during parsing,
and should be ignored.
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
The remaining fields are used if the structure describes a frame,
not a frameset. <tt><font size=+1>Src</font></tt> provides the URL for the document that should
be initially loaded into this frame. Note that this may be a relative
URL, in which case it should be interpretted using the containing
document&#8217;s URL as the base. <tt><font size=+1>Name</font></tt> gives the name of
the frame, typically supplied via a name attribute in the HTML.
If no name was given, the library allocates one. <tt><font size=+1>Marginw</font></tt>, <tt><font size=+1>marginh</font></tt>
and <tt><font size=+1>framebd</font></tt> are the values of the marginwidth, marginheight and
frameborder attributes, respectively. <tt><font size=+1>Flags</font></tt> can contain some combination
of the following: <tt><font size=+1>FRnoresize</font></tt> (the
frame had the noresize attribute set, and the user should not
be allowed to resize it), <tt><font size=+1>FRnoscroll</font></tt> (the frame should not have
any scroll bars), <tt><font size=+1>FRhscroll</font></tt> (the frame should have a horizontal
scroll bar), <tt><font size=+1>FRvscroll</font></tt> (the frame should have a vertical scroll
bar), <tt><font size=+1>FRhscrollauto</font></tt> (the frame should be automatically
given a horizontal scroll bar if its contents would not otherwise
fit), and <tt><font size=+1>FRvscrollauto</font></tt> (the frame gets a vertical scrollbar only
if required).<br>
</table>
<p><font size=+1><b>SOURCE </b></font><br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
<tt><font size=+1>/usr/local/plan9/src/libhtml<br>
</font></tt>
</table>
<p><font size=+1><b>SEE ALSO </b></font><br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
<a href="../man1/fmt.html"><i>fmt</i>(1)</a>
<table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
W3C World Wide Web Consortium, &#8220;HTML 4.01 Specification&#8221;.<br>
</table>
<p><font size=+1><b>BUGS </b></font><br>
<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
The entire HTML document must be loaded into memory before any
of it can be parsed.<br>
</table>
<td width=20>
<tr height=20><td>
</table>
<!-- TRAILER -->
<table border=0 cellpadding=0 cellspacing=0 width=100%>
<tr height=15><td width=10><td><td width=10>
<tr><td><td>
<center>
<a href="../../"><img src="../../dist/spaceglenda100.png" alt="Space Glenda" border=1></a>
</center>
</table>
<!-- TRAILER -->
</body></html>