Blame


1 7f11104a 2003-12-11 devnull #ifndef _HTML_H_
2 7f11104a 2003-12-11 devnull #define _HTML_H_ 1
3 7f11104a 2003-12-11 devnull #ifdef __cplusplus
4 7f11104a 2003-12-11 devnull extern "C" {
5 7f11104a 2003-12-11 devnull #endif
6 7f11104a 2003-12-11 devnull
7 1a0954ab 2005-01-04 devnull AUTOLIB(html)
8 7f11104a 2003-12-11 devnull /*
9 7f11104a 2003-12-11 devnull #pragma lib "libhtml.a"
10 7f11104a 2003-12-11 devnull #pragma src "/sys/src/libhtml"
11 7f11104a 2003-12-11 devnull */
12 7f11104a 2003-12-11 devnull
13 7f11104a 2003-12-11 devnull // UTILS
14 7f11104a 2003-12-11 devnull extern uchar* fromStr(Rune* buf, int n, int chset);
15 7f11104a 2003-12-11 devnull extern Rune* toStr(uchar* buf, int n, int chset);
16 7f11104a 2003-12-11 devnull
17 7f11104a 2003-12-11 devnull // Common LEX and BUILD enums
18 7f11104a 2003-12-11 devnull
19 7f11104a 2003-12-11 devnull // Media types
20 7f11104a 2003-12-11 devnull enum
21 7f11104a 2003-12-11 devnull {
22 7f11104a 2003-12-11 devnull ApplMsword,
23 7f11104a 2003-12-11 devnull ApplOctets,
24 7f11104a 2003-12-11 devnull ApplPdf,
25 7f11104a 2003-12-11 devnull ApplPostscript,
26 7f11104a 2003-12-11 devnull ApplRtf,
27 7f11104a 2003-12-11 devnull ApplFramemaker,
28 7f11104a 2003-12-11 devnull ApplMsexcel,
29 7f11104a 2003-12-11 devnull ApplMspowerpoint,
30 7f11104a 2003-12-11 devnull UnknownType,
31 7f11104a 2003-12-11 devnull Audio32kadpcm,
32 7f11104a 2003-12-11 devnull AudioBasic,
33 7f11104a 2003-12-11 devnull ImageCgm,
34 7f11104a 2003-12-11 devnull ImageG3fax,
35 7f11104a 2003-12-11 devnull ImageGif,
36 7f11104a 2003-12-11 devnull ImageIef,
37 7f11104a 2003-12-11 devnull ImageJpeg,
38 7f11104a 2003-12-11 devnull ImagePng,
39 7f11104a 2003-12-11 devnull ImageTiff,
40 7f11104a 2003-12-11 devnull ImageXBit,
41 7f11104a 2003-12-11 devnull ImageXBit2,
42 7f11104a 2003-12-11 devnull ImageXBitmulti,
43 7f11104a 2003-12-11 devnull ImageXXBitmap,
44 7f11104a 2003-12-11 devnull ModelVrml,
45 7f11104a 2003-12-11 devnull MultiDigest,
46 7f11104a 2003-12-11 devnull MultiMixed,
47 7f11104a 2003-12-11 devnull TextCss,
48 7f11104a 2003-12-11 devnull TextEnriched,
49 7f11104a 2003-12-11 devnull TextHtml,
50 7f11104a 2003-12-11 devnull TextJavascript,
51 7f11104a 2003-12-11 devnull TextPlain,
52 7f11104a 2003-12-11 devnull TextRichtext,
53 7f11104a 2003-12-11 devnull TextSgml,
54 7f11104a 2003-12-11 devnull TextTabSeparatedValues,
55 7f11104a 2003-12-11 devnull TextXml,
56 7f11104a 2003-12-11 devnull VideoMpeg,
57 7f11104a 2003-12-11 devnull VideoQuicktime,
58 7f11104a 2003-12-11 devnull NMEDIATYPES
59 7f11104a 2003-12-11 devnull };
60 7f11104a 2003-12-11 devnull
61 7f11104a 2003-12-11 devnull // HTTP methods
62 7f11104a 2003-12-11 devnull enum
63 7f11104a 2003-12-11 devnull {
64 7f11104a 2003-12-11 devnull HGet,
65 7f11104a 2003-12-11 devnull HPost
66 7f11104a 2003-12-11 devnull };
67 7f11104a 2003-12-11 devnull
68 7f11104a 2003-12-11 devnull // Charsets
69 7f11104a 2003-12-11 devnull enum
70 7f11104a 2003-12-11 devnull {
71 7f11104a 2003-12-11 devnull UnknownCharset,
72 7f11104a 2003-12-11 devnull US_Ascii,
73 7f11104a 2003-12-11 devnull ISO_8859_1,
74 7f11104a 2003-12-11 devnull UTF_8,
75 7f11104a 2003-12-11 devnull Unicode,
76 7f11104a 2003-12-11 devnull NCHARSETS
77 7f11104a 2003-12-11 devnull };
78 7f11104a 2003-12-11 devnull
79 7f11104a 2003-12-11 devnull // Frame Target IDs
80 7f11104a 2003-12-11 devnull enum {
81 7f11104a 2003-12-11 devnull FTtop,
82 7f11104a 2003-12-11 devnull FTself,
83 7f11104a 2003-12-11 devnull FTparent,
84 7f11104a 2003-12-11 devnull FTblank
85 7f11104a 2003-12-11 devnull };
86 7f11104a 2003-12-11 devnull
87 7f11104a 2003-12-11 devnull // LEX
88 7f11104a 2003-12-11 devnull typedef struct Token Token;
89 7f11104a 2003-12-11 devnull typedef struct Attr Attr;
90 7f11104a 2003-12-11 devnull
91 7f11104a 2003-12-11 devnull // BUILD
92 7f11104a 2003-12-11 devnull
93 7f11104a 2003-12-11 devnull typedef struct Item Item;
94 7f11104a 2003-12-11 devnull typedef struct Itext Itext;
95 7f11104a 2003-12-11 devnull typedef struct Irule Irule;
96 7f11104a 2003-12-11 devnull typedef struct Iimage Iimage;
97 7f11104a 2003-12-11 devnull typedef struct Iformfield Iformfield;
98 7f11104a 2003-12-11 devnull typedef struct Itable Itable;
99 7f11104a 2003-12-11 devnull typedef struct Ifloat Ifloat;
100 7f11104a 2003-12-11 devnull typedef struct Ispacer Ispacer;
101 7f11104a 2003-12-11 devnull typedef struct Genattr Genattr;
102 7f11104a 2003-12-11 devnull typedef struct SEvent SEvent;
103 7f11104a 2003-12-11 devnull typedef struct Formfield Formfield;
104 7f11104a 2003-12-11 devnull typedef struct Option Option;
105 7f11104a 2003-12-11 devnull typedef struct Form Form;
106 7f11104a 2003-12-11 devnull typedef struct Table Table;
107 7f11104a 2003-12-11 devnull typedef struct Tablecol Tablecol;
108 7f11104a 2003-12-11 devnull typedef struct Tablerow Tablerow;
109 7f11104a 2003-12-11 devnull typedef struct Tablecell Tablecell;
110 7f11104a 2003-12-11 devnull typedef struct Align Align;
111 7f11104a 2003-12-11 devnull typedef struct Dimen Dimen;
112 7f11104a 2003-12-11 devnull typedef struct Anchor Anchor;
113 7f11104a 2003-12-11 devnull typedef struct DestAnchor DestAnchor;
114 7f11104a 2003-12-11 devnull typedef struct Map Map;
115 7f11104a 2003-12-11 devnull typedef struct Area Area;
116 7f11104a 2003-12-11 devnull typedef struct Background Background;
117 7f11104a 2003-12-11 devnull typedef struct Kidinfo Kidinfo;
118 7f11104a 2003-12-11 devnull typedef struct Docinfo Docinfo;
119 7f11104a 2003-12-11 devnull typedef struct Stack Stack;
120 7f11104a 2003-12-11 devnull typedef struct Pstate Pstate;
121 7f11104a 2003-12-11 devnull typedef struct ItemSource ItemSource;
122 7f11104a 2003-12-11 devnull typedef struct Lay Lay; // defined in Layout module
123 7f11104a 2003-12-11 devnull
124 7f11104a 2003-12-11 devnull // Alignment types
125 7f11104a 2003-12-11 devnull enum {
126 7f11104a 2003-12-11 devnull ALnone = 0, ALleft, ALcenter, ALright, ALjustify,
127 7f11104a 2003-12-11 devnull ALchar, ALtop, ALmiddle, ALbottom, ALbaseline
128 7f11104a 2003-12-11 devnull };
129 7f11104a 2003-12-11 devnull
130 7f11104a 2003-12-11 devnull struct Align
131 7f11104a 2003-12-11 devnull {
132 7f11104a 2003-12-11 devnull uchar halign; // one of ALnone, ALleft, etc.
133 7f11104a 2003-12-11 devnull uchar valign; // one of ALnone, ALtop, etc.
134 7f11104a 2003-12-11 devnull };
135 7f11104a 2003-12-11 devnull
136 7f11104a 2003-12-11 devnull // A Dimen holds a dimension specification, especially for those
137 7f11104a 2003-12-11 devnull // cases when a number can be followed by a % or a * to indicate
138 7f11104a 2003-12-11 devnull // percentage of total or relative weight.
139 7f11104a 2003-12-11 devnull // Dnone means no dimension was specified
140 7f11104a 2003-12-11 devnull
141 7f11104a 2003-12-11 devnull // To fit in a word, use top bits to identify kind, rest for value
142 7f11104a 2003-12-11 devnull enum {
143 7f11104a 2003-12-11 devnull Dnone = 0,
144 7f11104a 2003-12-11 devnull Dpixels = (1<<29),
145 7f11104a 2003-12-11 devnull Dpercent = (2<<29),
146 7f11104a 2003-12-11 devnull Drelative = (3<<29),
147 7f11104a 2003-12-11 devnull Dkindmask = (3<<29),
148 7f11104a 2003-12-11 devnull Dspecmask = (~Dkindmask)
149 7f11104a 2003-12-11 devnull };
150 7f11104a 2003-12-11 devnull
151 7f11104a 2003-12-11 devnull struct Dimen
152 7f11104a 2003-12-11 devnull {
153 7f11104a 2003-12-11 devnull int kindspec; // kind | spec
154 7f11104a 2003-12-11 devnull };
155 7f11104a 2003-12-11 devnull
156 7f11104a 2003-12-11 devnull // Background is either an image or a color.
157 7f11104a 2003-12-11 devnull // If both are set, the image has precedence.
158 7f11104a 2003-12-11 devnull struct Background
159 7f11104a 2003-12-11 devnull {
160 7f11104a 2003-12-11 devnull Rune* image; // url
161 7f11104a 2003-12-11 devnull int color;
162 7f11104a 2003-12-11 devnull };
163 7f11104a 2003-12-11 devnull
164 7f11104a 2003-12-11 devnull
165 7f11104a 2003-12-11 devnull // There are about a half dozen Item variants.
166 7f11104a 2003-12-11 devnull // The all look like this at the start (using Plan 9 C's
167 7f11104a 2003-12-11 devnull // anonymous structure member mechanism),
168 7f11104a 2003-12-11 devnull // and then the tag field dictates what extra fields there are.
169 7f11104a 2003-12-11 devnull struct Item
170 7f11104a 2003-12-11 devnull {
171 7f11104a 2003-12-11 devnull Item* next; // successor in list of items
172 7f11104a 2003-12-11 devnull int width; // width in pixels (0 for floating items)
173 7f11104a 2003-12-11 devnull int height; // height in pixels
174 7f11104a 2003-12-11 devnull int ascent; // ascent (from top to baseline) in pixels
175 7f11104a 2003-12-11 devnull int anchorid; // if nonzero, which anchor we're in
176 7f11104a 2003-12-11 devnull int state; // flags and values (see below)
177 7f11104a 2003-12-11 devnull Genattr* genattr; // generic attributes and events
178 7f11104a 2003-12-11 devnull int tag; // variant discriminator: Itexttag, etc.
179 7f11104a 2003-12-11 devnull };
180 7f11104a 2003-12-11 devnull
181 7f11104a 2003-12-11 devnull // Item variant tags
182 7f11104a 2003-12-11 devnull enum {
183 7f11104a 2003-12-11 devnull Itexttag,
184 7f11104a 2003-12-11 devnull Iruletag,
185 7f11104a 2003-12-11 devnull Iimagetag,
186 7f11104a 2003-12-11 devnull Iformfieldtag,
187 7f11104a 2003-12-11 devnull Itabletag,
188 7f11104a 2003-12-11 devnull Ifloattag,
189 7f11104a 2003-12-11 devnull Ispacertag
190 7f11104a 2003-12-11 devnull };
191 7f11104a 2003-12-11 devnull
192 7f11104a 2003-12-11 devnull struct Itext
193 7f11104a 2003-12-11 devnull {
194 650deb79 2004-04-08 devnull Item item; // (with tag ==Itexttag)
195 7f11104a 2003-12-11 devnull Rune* s; // the characters
196 7f11104a 2003-12-11 devnull int fnt; // style*NumSize+size (see font stuff, below)
197 7f11104a 2003-12-11 devnull int fg; // Pixel (color) for text
198 7f11104a 2003-12-11 devnull uchar voff; // Voffbias+vertical offset from baseline, in pixels (+ve == down)
199 7f11104a 2003-12-11 devnull uchar ul; // ULnone, ULunder, or ULmid
200 7f11104a 2003-12-11 devnull };
201 7f11104a 2003-12-11 devnull
202 7f11104a 2003-12-11 devnull struct Irule
203 7f11104a 2003-12-11 devnull {
204 650deb79 2004-04-08 devnull Item item; // (with tag ==Iruletag)
205 7f11104a 2003-12-11 devnull uchar align; // alignment spec
206 7f11104a 2003-12-11 devnull uchar noshade; // if true, don't shade
207 7f11104a 2003-12-11 devnull int size; // size attr (rule height)
208 7f11104a 2003-12-11 devnull Dimen wspec; // width spec
209 7f11104a 2003-12-11 devnull };
210 7f11104a 2003-12-11 devnull
211 7f11104a 2003-12-11 devnull
212 7f11104a 2003-12-11 devnull struct Iimage
213 7f11104a 2003-12-11 devnull {
214 650deb79 2004-04-08 devnull Item item; // (with tag ==Iimagetag)
215 7f11104a 2003-12-11 devnull Rune* imsrc; // image src url
216 7f11104a 2003-12-11 devnull int imwidth; // spec width (actual, if no spec)
217 7f11104a 2003-12-11 devnull int imheight; // spec height (actual, if no spec)
218 7f11104a 2003-12-11 devnull Rune* altrep; // alternate representation, in absence of image
219 7f11104a 2003-12-11 devnull Map* map; // if non-nil, client side map
220 7f11104a 2003-12-11 devnull int ctlid; // if animated
221 7f11104a 2003-12-11 devnull uchar align; // vertical alignment
222 7f11104a 2003-12-11 devnull uchar hspace; // in pixels; buffer space on each side
223 7f11104a 2003-12-11 devnull uchar vspace; // in pixels; buffer space on top and bottom
224 7f11104a 2003-12-11 devnull uchar border; // in pixels: border width to draw around image
225 7f11104a 2003-12-11 devnull Iimage* nextimage; // next in list of document's images
226 7f11104a 2003-12-11 devnull };
227 7f11104a 2003-12-11 devnull
228 7f11104a 2003-12-11 devnull
229 7f11104a 2003-12-11 devnull struct Iformfield
230 7f11104a 2003-12-11 devnull {
231 650deb79 2004-04-08 devnull Item item; // (with tag ==Iformfieldtag)
232 7f11104a 2003-12-11 devnull Formfield* formfield;
233 7f11104a 2003-12-11 devnull };
234 7f11104a 2003-12-11 devnull
235 7f11104a 2003-12-11 devnull
236 7f11104a 2003-12-11 devnull struct Itable
237 7f11104a 2003-12-11 devnull {
238 650deb79 2004-04-08 devnull Item item; // (with tag ==Itabletag)
239 7f11104a 2003-12-11 devnull Table* table;
240 7f11104a 2003-12-11 devnull };
241 7f11104a 2003-12-11 devnull
242 7f11104a 2003-12-11 devnull
243 7f11104a 2003-12-11 devnull struct Ifloat
244 7f11104a 2003-12-11 devnull {
245 7f11104a 2003-12-11 devnull Item _item; // (with tag ==Ifloattag)
246 7f11104a 2003-12-11 devnull Item* item; // table or image item that floats
247 7f11104a 2003-12-11 devnull int x; // x coord of top (from right, if ALright)
248 7f11104a 2003-12-11 devnull int y; // y coord of top
249 7f11104a 2003-12-11 devnull uchar side; // margin it floats to: ALleft or ALright
250 7f11104a 2003-12-11 devnull uchar infloats; // true if this has been added to a lay.floats
251 7f11104a 2003-12-11 devnull Ifloat* nextfloat; // in list of floats
252 7f11104a 2003-12-11 devnull };
253 7f11104a 2003-12-11 devnull
254 7f11104a 2003-12-11 devnull
255 7f11104a 2003-12-11 devnull struct Ispacer
256 7f11104a 2003-12-11 devnull {
257 650deb79 2004-04-08 devnull Item item; // (with tag ==Ispacertag)
258 7f11104a 2003-12-11 devnull int spkind; // ISPnull, etc.
259 7f11104a 2003-12-11 devnull };
260 7f11104a 2003-12-11 devnull
261 7f11104a 2003-12-11 devnull // Item state flags and value fields
262 7f11104a 2003-12-11 devnull enum {
263 a0f1e21f 2004-04-20 devnull // IFbrk = 0x80000000, // forced break before this item
264 a0f1e21f 2004-04-20 devnull #define IFbrk 0x80000000 /* too big for sun */
265 7f11104a 2003-12-11 devnull IFbrksp = 0x40000000, // add 1 line space to break (IFbrk set too)
266 7f11104a 2003-12-11 devnull IFnobrk = 0x20000000, // break not allowed before this item
267 7f11104a 2003-12-11 devnull IFcleft = 0x10000000, // clear left floats (IFbrk set too)
268 7f11104a 2003-12-11 devnull IFcright = 0x08000000, // clear right floats (IFbrk set too)
269 7f11104a 2003-12-11 devnull IFwrap = 0x04000000, // in a wrapping (non-pre) line
270 7f11104a 2003-12-11 devnull IFhang = 0x02000000, // in a hanging (into left indent) item
271 7f11104a 2003-12-11 devnull IFrjust = 0x01000000, // right justify current line
272 7f11104a 2003-12-11 devnull IFcjust = 0x00800000, // center justify current line
273 7f11104a 2003-12-11 devnull IFsmap = 0x00400000, // image is server-side map
274 7f11104a 2003-12-11 devnull IFindentshift = 8,
275 7f11104a 2003-12-11 devnull IFindentmask = (255<<IFindentshift), // current indent, in tab stops
276 7f11104a 2003-12-11 devnull IFhangmask = 255 // current hang into left indent, in 1/10th tabstops
277 7f11104a 2003-12-11 devnull };
278 7f11104a 2003-12-11 devnull
279 7f11104a 2003-12-11 devnull // Bias added to Itext's voff field
280 7f11104a 2003-12-11 devnull enum { Voffbias = 128 };
281 7f11104a 2003-12-11 devnull
282 7f11104a 2003-12-11 devnull // Spacer kinds
283 7f11104a 2003-12-11 devnull enum {
284 7f11104a 2003-12-11 devnull ISPnull, // 0 height and width
285 7f11104a 2003-12-11 devnull ISPvline, // height and ascent of current font
286 7f11104a 2003-12-11 devnull ISPhspace, // width of space in current font
287 7f11104a 2003-12-11 devnull ISPgeneral // other purposes (e.g., between markers and list)
288 7f11104a 2003-12-11 devnull };
289 7f11104a 2003-12-11 devnull
290 7f11104a 2003-12-11 devnull // Generic attributes and events (not many elements will have any of these set)
291 7f11104a 2003-12-11 devnull struct Genattr
292 7f11104a 2003-12-11 devnull {
293 7f11104a 2003-12-11 devnull Rune* id;
294 7f11104a 2003-12-11 devnull Rune* class;
295 7f11104a 2003-12-11 devnull Rune* style;
296 7f11104a 2003-12-11 devnull Rune* title;
297 7f11104a 2003-12-11 devnull SEvent* events;
298 7f11104a 2003-12-11 devnull };
299 7f11104a 2003-12-11 devnull
300 7f11104a 2003-12-11 devnull struct SEvent
301 7f11104a 2003-12-11 devnull {
302 7f11104a 2003-12-11 devnull SEvent* next; // in list of events
303 7f11104a 2003-12-11 devnull int type; // SEonblur, etc.
304 7f11104a 2003-12-11 devnull Rune* script;
305 7f11104a 2003-12-11 devnull };
306 7f11104a 2003-12-11 devnull
307 7f11104a 2003-12-11 devnull enum {
308 7f11104a 2003-12-11 devnull SEonblur, SEonchange, SEonclick, SEondblclick,
309 7f11104a 2003-12-11 devnull SEonfocus, SEonkeypress, SEonkeyup, SEonload,
310 7f11104a 2003-12-11 devnull SEonmousedown, SEonmousemove, SEonmouseout,
311 7f11104a 2003-12-11 devnull SEonmouseover, SEonmouseup, SEonreset, SEonselect,
312 7f11104a 2003-12-11 devnull SEonsubmit, SEonunload,
313 7f11104a 2003-12-11 devnull Numscriptev
314 7f11104a 2003-12-11 devnull };
315 7f11104a 2003-12-11 devnull
316 7f11104a 2003-12-11 devnull // Form field types
317 7f11104a 2003-12-11 devnull enum {
318 7f11104a 2003-12-11 devnull Ftext,
319 7f11104a 2003-12-11 devnull Fpassword,
320 7f11104a 2003-12-11 devnull Fcheckbox,
321 7f11104a 2003-12-11 devnull Fradio,
322 7f11104a 2003-12-11 devnull Fsubmit,
323 7f11104a 2003-12-11 devnull Fhidden,
324 7f11104a 2003-12-11 devnull Fimage,
325 7f11104a 2003-12-11 devnull Freset,
326 7f11104a 2003-12-11 devnull Ffile,
327 7f11104a 2003-12-11 devnull Fbutton,
328 7f11104a 2003-12-11 devnull Fselect,
329 7f11104a 2003-12-11 devnull Ftextarea
330 7f11104a 2003-12-11 devnull };
331 7f11104a 2003-12-11 devnull
332 7f11104a 2003-12-11 devnull // Information about a field in a form
333 7f11104a 2003-12-11 devnull struct Formfield
334 7f11104a 2003-12-11 devnull {
335 7f11104a 2003-12-11 devnull Formfield* next; // in list of fields for a form
336 7f11104a 2003-12-11 devnull int ftype; // Ftext, Fpassword, etc.
337 7f11104a 2003-12-11 devnull int fieldid; // serial no. of field within its form
338 7f11104a 2003-12-11 devnull Form* form; // containing form
339 7f11104a 2003-12-11 devnull Rune* name; // name attr
340 7f11104a 2003-12-11 devnull Rune* value; // value attr
341 7f11104a 2003-12-11 devnull int size; // size attr
342 7f11104a 2003-12-11 devnull int maxlength; // maxlength attr
343 7f11104a 2003-12-11 devnull int rows; // rows attr
344 7f11104a 2003-12-11 devnull int cols; // cols attr
345 7f11104a 2003-12-11 devnull uchar flags; // FFchecked, etc.
346 7f11104a 2003-12-11 devnull Option* options; // for Fselect fields
347 7f11104a 2003-12-11 devnull Item* image; // image item, for Fimage fields
348 7f11104a 2003-12-11 devnull int ctlid; // identifies control for this field in layout
349 7f11104a 2003-12-11 devnull SEvent* events; // same as genattr->events of containing item
350 7f11104a 2003-12-11 devnull };
351 7f11104a 2003-12-11 devnull
352 7f11104a 2003-12-11 devnull enum {
353 7f11104a 2003-12-11 devnull FFchecked = (1<<7),
354 7f11104a 2003-12-11 devnull FFmultiple = (1<<6)
355 7f11104a 2003-12-11 devnull };
356 7f11104a 2003-12-11 devnull
357 7f11104a 2003-12-11 devnull // Option holds info about an option in a "select" form field
358 7f11104a 2003-12-11 devnull struct Option
359 7f11104a 2003-12-11 devnull {
360 7f11104a 2003-12-11 devnull Option* next; // next in list of options for a field
361 7f11104a 2003-12-11 devnull int selected; // true if selected initially
362 7f11104a 2003-12-11 devnull Rune* value; // value attr
363 7f11104a 2003-12-11 devnull Rune* display; // display string
364 7f11104a 2003-12-11 devnull };
365 7f11104a 2003-12-11 devnull
366 7f11104a 2003-12-11 devnull // Form holds info about a form
367 7f11104a 2003-12-11 devnull struct Form
368 7f11104a 2003-12-11 devnull {
369 7f11104a 2003-12-11 devnull Form* next; // in list of forms for document
370 7f11104a 2003-12-11 devnull int formid; // serial no. of form within its doc
371 7f11104a 2003-12-11 devnull Rune* name; // name or id attr (netscape uses name, HTML 4.0 uses id)
372 7f11104a 2003-12-11 devnull Rune* action; // action attr
373 7f11104a 2003-12-11 devnull int target; // target attr as targetid
374 7f11104a 2003-12-11 devnull int method; // HGet or HPost
375 7f11104a 2003-12-11 devnull int nfields; // number of fields
376 7f11104a 2003-12-11 devnull Formfield* fields; // field's forms, in input order
377 7f11104a 2003-12-11 devnull };
378 7f11104a 2003-12-11 devnull
379 7f11104a 2003-12-11 devnull // Flags used in various table structures
380 7f11104a 2003-12-11 devnull enum {
381 7f11104a 2003-12-11 devnull TFparsing = (1<<7),
382 7f11104a 2003-12-11 devnull TFnowrap = (1<<6),
383 7f11104a 2003-12-11 devnull TFisth = (1<<5)
384 7f11104a 2003-12-11 devnull };
385 7f11104a 2003-12-11 devnull
386 7f11104a 2003-12-11 devnull
387 7f11104a 2003-12-11 devnull // Information about a table
388 7f11104a 2003-12-11 devnull struct Table
389 7f11104a 2003-12-11 devnull {
390 7f11104a 2003-12-11 devnull Table* next; // next in list of document's tables
391 7f11104a 2003-12-11 devnull int tableid; // serial no. of table within its doc
392 7f11104a 2003-12-11 devnull Tablerow* rows; // array of row specs (list during parsing)
393 7f11104a 2003-12-11 devnull int nrow; // total number of rows
394 7f11104a 2003-12-11 devnull Tablecol* cols; // array of column specs
395 7f11104a 2003-12-11 devnull int ncol; // total number of columns
396 7f11104a 2003-12-11 devnull Tablecell* cells; // list of unique cells
397 7f11104a 2003-12-11 devnull int ncell; // total number of cells
398 7f11104a 2003-12-11 devnull Tablecell*** grid; // 2-D array of cells
399 7f11104a 2003-12-11 devnull Align align; // alignment spec for whole table
400 7f11104a 2003-12-11 devnull Dimen width; // width spec for whole table
401 7f11104a 2003-12-11 devnull int border; // border attr
402 7f11104a 2003-12-11 devnull int cellspacing; // cellspacing attr
403 7f11104a 2003-12-11 devnull int cellpadding; // cellpadding attr
404 7f11104a 2003-12-11 devnull Background background; // table background
405 7f11104a 2003-12-11 devnull Item* caption; // linked list of Items, giving caption
406 7f11104a 2003-12-11 devnull uchar caption_place; // ALtop or ALbottom
407 7f11104a 2003-12-11 devnull Lay* caption_lay; // layout of caption
408 7f11104a 2003-12-11 devnull int totw; // total width
409 7f11104a 2003-12-11 devnull int toth; // total height
410 7f11104a 2003-12-11 devnull int caph; // caption height
411 7f11104a 2003-12-11 devnull int availw; // used for previous 3 sizes
412 7f11104a 2003-12-11 devnull Token* tabletok; // token that started the table
413 7f11104a 2003-12-11 devnull uchar flags; // Lchanged, perhaps
414 7f11104a 2003-12-11 devnull };
415 7f11104a 2003-12-11 devnull
416 7f11104a 2003-12-11 devnull
417 7f11104a 2003-12-11 devnull struct Tablecol
418 7f11104a 2003-12-11 devnull {
419 7f11104a 2003-12-11 devnull int width;
420 7f11104a 2003-12-11 devnull Align align;
421 7f11104a 2003-12-11 devnull Point pos;
422 7f11104a 2003-12-11 devnull };
423 7f11104a 2003-12-11 devnull
424 7f11104a 2003-12-11 devnull
425 7f11104a 2003-12-11 devnull struct Tablerow
426 7f11104a 2003-12-11 devnull {
427 7f11104a 2003-12-11 devnull Tablerow* next; // Next in list of rows, during parsing
428 7f11104a 2003-12-11 devnull Tablecell* cells; // Cells in row, linked through nextinrow
429 7f11104a 2003-12-11 devnull int height;
430 7f11104a 2003-12-11 devnull int ascent;
431 7f11104a 2003-12-11 devnull Align align;
432 7f11104a 2003-12-11 devnull Background background;
433 7f11104a 2003-12-11 devnull Point pos;
434 7f11104a 2003-12-11 devnull uchar flags; // 0 or TFparsing
435 7f11104a 2003-12-11 devnull };
436 7f11104a 2003-12-11 devnull
437 7f11104a 2003-12-11 devnull
438 7f11104a 2003-12-11 devnull // A Tablecell is one cell of a table.
439 7f11104a 2003-12-11 devnull // It may span multiple rows and multiple columns.
440 7f11104a 2003-12-11 devnull // Cells are linked on two lists: the list for all the cells of
441 7f11104a 2003-12-11 devnull // a document (the next pointers), and the list of all the
442 7f11104a 2003-12-11 devnull // cells that start in a given row (the nextinrow pointers)
443 7f11104a 2003-12-11 devnull struct Tablecell
444 7f11104a 2003-12-11 devnull {
445 7f11104a 2003-12-11 devnull Tablecell* next; // next in list of table's cells
446 7f11104a 2003-12-11 devnull Tablecell* nextinrow; // next in list of row's cells
447 7f11104a 2003-12-11 devnull int cellid; // serial no. of cell within table
448 7f11104a 2003-12-11 devnull Item* content; // contents before layout
449 7f11104a 2003-12-11 devnull Lay* lay; // layout of cell
450 7f11104a 2003-12-11 devnull int rowspan; // number of rows spanned by this cell
451 7f11104a 2003-12-11 devnull int colspan; // number of cols spanned by this cell
452 7f11104a 2003-12-11 devnull Align align; // alignment spec
453 7f11104a 2003-12-11 devnull uchar flags; // TFparsing, TFnowrap, TFisth
454 7f11104a 2003-12-11 devnull Dimen wspec; // suggested width
455 7f11104a 2003-12-11 devnull int hspec; // suggested height
456 7f11104a 2003-12-11 devnull Background background; // cell background
457 7f11104a 2003-12-11 devnull int minw; // minimum possible width
458 7f11104a 2003-12-11 devnull int maxw; // maximum width
459 7f11104a 2003-12-11 devnull int ascent; // cell's ascent
460 7f11104a 2003-12-11 devnull int row; // row of upper left corner
461 7f11104a 2003-12-11 devnull int col; // col of upper left corner
462 7f11104a 2003-12-11 devnull Point pos; // nw corner of cell contents, in cell
463 7f11104a 2003-12-11 devnull };
464 7f11104a 2003-12-11 devnull
465 7f11104a 2003-12-11 devnull // Anchor is for info about hyperlinks that go somewhere
466 7f11104a 2003-12-11 devnull struct Anchor
467 7f11104a 2003-12-11 devnull {
468 7f11104a 2003-12-11 devnull Anchor* next; // next in list of document's anchors
469 7f11104a 2003-12-11 devnull int index; // serial no. of anchor within its doc
470 7f11104a 2003-12-11 devnull Rune* name; // name attr
471 7f11104a 2003-12-11 devnull Rune* href; // href attr
472 7f11104a 2003-12-11 devnull int target; // target attr as targetid
473 7f11104a 2003-12-11 devnull };
474 7f11104a 2003-12-11 devnull
475 7f11104a 2003-12-11 devnull
476 7f11104a 2003-12-11 devnull // DestAnchor is for info about hyperlinks that are destinations
477 7f11104a 2003-12-11 devnull struct DestAnchor
478 7f11104a 2003-12-11 devnull {
479 7f11104a 2003-12-11 devnull DestAnchor* next; // next in list of document's destanchors
480 7f11104a 2003-12-11 devnull int index; // serial no. of anchor within its doc
481 7f11104a 2003-12-11 devnull Rune* name; // name attr
482 7f11104a 2003-12-11 devnull Item* item; // the destination
483 7f11104a 2003-12-11 devnull };
484 7f11104a 2003-12-11 devnull
485 7f11104a 2003-12-11 devnull
486 7f11104a 2003-12-11 devnull // Maps (client side)
487 7f11104a 2003-12-11 devnull struct Map
488 7f11104a 2003-12-11 devnull {
489 7f11104a 2003-12-11 devnull Map* next; // next in list of document's maps
490 7f11104a 2003-12-11 devnull Rune* name; // map name
491 7f11104a 2003-12-11 devnull Area* areas; // list of map areas
492 7f11104a 2003-12-11 devnull };
493 7f11104a 2003-12-11 devnull
494 7f11104a 2003-12-11 devnull
495 7f11104a 2003-12-11 devnull struct Area
496 7f11104a 2003-12-11 devnull {
497 7f11104a 2003-12-11 devnull Area* next; // next in list of a map's areas
498 7f11104a 2003-12-11 devnull int shape; // SHrect, etc.
499 7f11104a 2003-12-11 devnull Rune* href; // associated hypertext link
500 7f11104a 2003-12-11 devnull int target; // associated target frame
501 7f11104a 2003-12-11 devnull Dimen* coords; // array of coords for shape
502 7f11104a 2003-12-11 devnull int ncoords; // size of coords array
503 7f11104a 2003-12-11 devnull };
504 7f11104a 2003-12-11 devnull
505 7f11104a 2003-12-11 devnull // Area shapes
506 7f11104a 2003-12-11 devnull enum {
507 7f11104a 2003-12-11 devnull SHrect, SHcircle, SHpoly
508 7f11104a 2003-12-11 devnull };
509 7f11104a 2003-12-11 devnull
510 7f11104a 2003-12-11 devnull // Fonts are represented by integers: style*NumSize + size
511 7f11104a 2003-12-11 devnull
512 7f11104a 2003-12-11 devnull // Font styles
513 7f11104a 2003-12-11 devnull enum {
514 7f11104a 2003-12-11 devnull FntR, // roman
515 7f11104a 2003-12-11 devnull FntI, // italic
516 7f11104a 2003-12-11 devnull FntB, // bold
517 7f11104a 2003-12-11 devnull FntT, // typewriter
518 7f11104a 2003-12-11 devnull NumStyle
519 7f11104a 2003-12-11 devnull };
520 7f11104a 2003-12-11 devnull
521 7f11104a 2003-12-11 devnull // Font sizes
522 7f11104a 2003-12-11 devnull enum {
523 7f11104a 2003-12-11 devnull Tiny,
524 7f11104a 2003-12-11 devnull Small,
525 7f11104a 2003-12-11 devnull Normal,
526 7f11104a 2003-12-11 devnull Large,
527 7f11104a 2003-12-11 devnull Verylarge,
528 7f11104a 2003-12-11 devnull NumSize
529 7f11104a 2003-12-11 devnull };
530 7f11104a 2003-12-11 devnull
531 7f11104a 2003-12-11 devnull enum {
532 7f11104a 2003-12-11 devnull NumFnt = (NumStyle*NumSize),
533 7f11104a 2003-12-11 devnull DefFnt = (FntR*NumSize+Normal)
534 7f11104a 2003-12-11 devnull };
535 7f11104a 2003-12-11 devnull
536 7f11104a 2003-12-11 devnull // Lines are needed through some text items, for underlining or strikethrough
537 7f11104a 2003-12-11 devnull enum {
538 7f11104a 2003-12-11 devnull ULnone, ULunder, ULmid
539 7f11104a 2003-12-11 devnull };
540 7f11104a 2003-12-11 devnull
541 7f11104a 2003-12-11 devnull // Kidinfo flags
542 7f11104a 2003-12-11 devnull enum {
543 7f11104a 2003-12-11 devnull FRnoresize = (1<<0),
544 7f11104a 2003-12-11 devnull FRnoscroll = (1<<1),
545 7f11104a 2003-12-11 devnull FRhscroll = (1<<2),
546 7f11104a 2003-12-11 devnull FRvscroll = (1<<3),
547 7f11104a 2003-12-11 devnull FRhscrollauto = (1<<4),
548 7f11104a 2003-12-11 devnull FRvscrollauto = (1<<5)
549 7f11104a 2003-12-11 devnull };
550 7f11104a 2003-12-11 devnull
551 7f11104a 2003-12-11 devnull // Information about child frame or frameset
552 7f11104a 2003-12-11 devnull struct Kidinfo
553 7f11104a 2003-12-11 devnull {
554 7f11104a 2003-12-11 devnull Kidinfo* next; // in list of kidinfos for a frameset
555 7f11104a 2003-12-11 devnull int isframeset;
556 7f11104a 2003-12-11 devnull
557 7f11104a 2003-12-11 devnull // fields for "frame"
558 7f11104a 2003-12-11 devnull Rune* src; // only nil if a "dummy" frame or this is frameset
559 7f11104a 2003-12-11 devnull Rune* name; // always non-empty if this isn't frameset
560 7f11104a 2003-12-11 devnull int marginw;
561 7f11104a 2003-12-11 devnull int marginh;
562 7f11104a 2003-12-11 devnull int framebd;
563 7f11104a 2003-12-11 devnull int flags;
564 7f11104a 2003-12-11 devnull
565 7f11104a 2003-12-11 devnull // fields for "frameset"
566 7f11104a 2003-12-11 devnull Dimen* rows; // array of row dimensions
567 7f11104a 2003-12-11 devnull int nrows; // length of rows
568 7f11104a 2003-12-11 devnull Dimen* cols; // array of col dimensions
569 7f11104a 2003-12-11 devnull int ncols; // length of cols
570 7f11104a 2003-12-11 devnull Kidinfo* kidinfos;
571 7f11104a 2003-12-11 devnull Kidinfo* nextframeset; // parsing stack
572 7f11104a 2003-12-11 devnull };
573 7f11104a 2003-12-11 devnull
574 7f11104a 2003-12-11 devnull
575 7f11104a 2003-12-11 devnull // Document info (global information about HTML page)
576 7f11104a 2003-12-11 devnull struct Docinfo
577 7f11104a 2003-12-11 devnull {
578 7f11104a 2003-12-11 devnull // stuff from HTTP headers, doc head, and body tag
579 7f11104a 2003-12-11 devnull Rune* src; // original source of doc
580 7f11104a 2003-12-11 devnull Rune* base; // base URL of doc
581 7f11104a 2003-12-11 devnull Rune* doctitle; // from <title> element
582 7f11104a 2003-12-11 devnull Background background; // background specification
583 7f11104a 2003-12-11 devnull Iimage* backgrounditem; // Image Item for doc background image, or nil
584 7f11104a 2003-12-11 devnull int text; // doc foreground (text) color
585 7f11104a 2003-12-11 devnull int link; // unvisited hyperlink color
586 7f11104a 2003-12-11 devnull int vlink; // visited hyperlink color
587 7f11104a 2003-12-11 devnull int alink; // highlighting hyperlink color
588 7f11104a 2003-12-11 devnull int target; // target frame default
589 7f11104a 2003-12-11 devnull int chset; // ISO_8859, etc.
590 7f11104a 2003-12-11 devnull int mediatype; // TextHtml, etc.
591 7f11104a 2003-12-11 devnull int scripttype; // TextJavascript, etc.
592 7f11104a 2003-12-11 devnull int hasscripts; // true if scripts used
593 7f11104a 2003-12-11 devnull Rune* refresh; // content of <http-equiv=Refresh ...>
594 7f11104a 2003-12-11 devnull Kidinfo* kidinfo; // if a frameset
595 7f11104a 2003-12-11 devnull int frameid; // id of document frame
596 7f11104a 2003-12-11 devnull
597 7f11104a 2003-12-11 devnull // info needed to respond to user actions
598 7f11104a 2003-12-11 devnull Anchor* anchors; // list of href anchors
599 7f11104a 2003-12-11 devnull DestAnchor* dests; // list of destination anchors
600 7f11104a 2003-12-11 devnull Form* forms; // list of forms
601 7f11104a 2003-12-11 devnull Table* tables; // list of tables
602 7f11104a 2003-12-11 devnull Map* maps; // list of maps
603 7f11104a 2003-12-11 devnull Iimage* images; // list of image items (through nextimage links)
604 7f11104a 2003-12-11 devnull };
605 7f11104a 2003-12-11 devnull
606 7f11104a 2003-12-11 devnull extern int dimenkind(Dimen d);
607 7f11104a 2003-12-11 devnull extern int dimenspec(Dimen d);
608 7f11104a 2003-12-11 devnull extern void freedocinfo(Docinfo* d);
609 7f11104a 2003-12-11 devnull extern void freeitems(Item* ithead);
610 7f11104a 2003-12-11 devnull extern Item* parsehtml(uchar* data, int datalen, Rune* src, int mtype, int chset, Docinfo** pdi);
611 7f11104a 2003-12-11 devnull extern void printitems(Item* items, char* msg);
612 7f11104a 2003-12-11 devnull extern int targetid(Rune* s);
613 7f11104a 2003-12-11 devnull extern Rune* targetname(int targid);
614 7f11104a 2003-12-11 devnull extern int validitems(Item* i);
615 7f11104a 2003-12-11 devnull
616 650deb79 2004-04-08 devnull /* #pragma varargck type "I" Item* */
617 7f11104a 2003-12-11 devnull
618 7f11104a 2003-12-11 devnull // Control print output
619 7f11104a 2003-12-11 devnull extern int warn;
620 7f11104a 2003-12-11 devnull extern int dbglex;
621 7f11104a 2003-12-11 devnull extern int dbgbuild;
622 7f11104a 2003-12-11 devnull
623 7f11104a 2003-12-11 devnull // To be provided by caller
624 7f11104a 2003-12-11 devnull // emalloc and erealloc should not return if can't get memory.
625 7f11104a 2003-12-11 devnull // emalloc should zero its memory.
626 7f11104a 2003-12-11 devnull extern void* emalloc(ulong);
627 7f11104a 2003-12-11 devnull extern void* erealloc(void* p, ulong size);
628 7f11104a 2003-12-11 devnull #ifdef __cpluspplus
629 7f11104a 2003-12-11 devnull }
630 7f11104a 2003-12-11 devnull #endif
631 7f11104a 2003-12-11 devnull #endif