Annotation of libwww/Library/src/HTMLPDTD.c, revision 2.32
2.12 frystyk 1: /* HTMLPDTD.c
2.26 frystyk 2: ** STATIC DTD FOR HTML (with frame support)
2.12 frystyk 3: **
2.16 frystyk 4: ** (c) COPYRIGHT MIT 1995.
2.12 frystyk 5: ** Please first read the full copyright statement in the file COPYRIGH.
2.32 ! raff 6: ** @(#) $Id: HTMLPDTD.c,v 2.31 1999/06/25 19:09:20 raff Exp $
2.1 timbl 7: **
8: ** 6 Nov 93 MD Increased size of img_attr array to make space
9: ** for terminator.
10: */
11:
2.14 frystyk 12: /* Library include files */
2.25 frystyk 13: #include "wwwsys.h"
2.14 frystyk 14: #include "HTUtils.h"
2.29 frystyk 15:
2.1 timbl 16: #include "HTMLPDTD.h"
17:
2.27 frystyk 18: struct _HTStructured {
19: HTStructuredClass * isa;
20: /* ... */
21: };
22:
23: /*
24: ** ENTITY NAMES
2.1 timbl 25: ** This table must be matched exactly with ALL the translation tables
26: */
2.19 frystyk 27: PRIVATE const char* entities[HTML_ENTITIES] = {
2.31 raff 28: /* 00 */
2.1 timbl 29: "AElig", /* capital AE diphthong (ligature) */
30: "Aacute", /* capital A, acute accent */
31: "Acirc", /* capital A, circumflex accent */
32: "Agrave", /* capital A, grave accent */
33: "Aring", /* capital A, ring */
34: "Atilde", /* capital A, tilde */
35: "Auml", /* capital A, dieresis or umlaut mark */
36: "Ccedil", /* capital C, cedilla */
37: "ETH", /* capital Eth, Icelandic */
38: "Eacute", /* capital E, acute accent */
2.31 raff 39: /* 10 */
2.1 timbl 40: "Ecirc", /* capital E, circumflex accent */
41: "Egrave", /* capital E, grave accent */
42: "Euml", /* capital E, dieresis or umlaut mark */
43: "Iacute", /* capital I, acute accent */
44: "Icirc", /* capital I, circumflex accent */
45: "Igrave", /* capital I, grave accent */
46: "Iuml", /* capital I, dieresis or umlaut mark */
47: "Ntilde", /* capital N, tilde */
48: "Oacute", /* capital O, acute accent */
49: "Ocirc", /* capital O, circumflex accent */
2.31 raff 50: /* 20 */
2.1 timbl 51: "Ograve", /* capital O, grave accent */
52: "Oslash", /* capital O, slash */
53: "Otilde", /* capital O, tilde */
54: "Ouml", /* capital O, dieresis or umlaut mark */
55: "THORN", /* capital THORN, Icelandic */
56: "Uacute", /* capital U, acute accent */
57: "Ucirc", /* capital U, circumflex accent */
58: "Ugrave", /* capital U, grave accent */
59: "Uuml", /* capital U, dieresis or umlaut mark */
60: "Yacute", /* capital Y, acute accent */
2.31 raff 61: /* 30 */
2.1 timbl 62: "aacute", /* small a, acute accent */
63: "acirc", /* small a, circumflex accent */
2.31 raff 64: "acute", /* acute accent */
2.1 timbl 65: "aelig", /* small ae diphthong (ligature) */
66: "agrave", /* small a, grave accent */
67: "amp", /* ampersand */
68: "aring", /* small a, ring */
69: "atilde", /* small a, tilde */
70: "auml", /* small a, dieresis or umlaut mark */
2.31 raff 71: "brvbar", /* broken vertical bar */
72: /* 40 */
2.1 timbl 73: "ccedil", /* small c, cedilla */
2.31 raff 74: "cedil", /* cedilla */
75: "cent", /* cent sign */
76: "copy", /* copyright */
77: "curren", /* general currency sign */
78: "deg", /* degree sign */
79: "divide", /* division sign */
2.1 timbl 80: "eacute", /* small e, acute accent */
81: "ecirc", /* small e, circumflex accent */
82: "egrave", /* small e, grave accent */
2.31 raff 83: /* 50 */
2.1 timbl 84: "eth", /* small eth, Icelandic */
85: "euml", /* small e, dieresis or umlaut mark */
2.31 raff 86: "frac12", /* fraction one-half */
87: "frac14", /* fraction one-fourth */
88: "frac34", /* fraction three-fourth */
2.1 timbl 89: "gt", /* greater than */
90: "iacute", /* small i, acute accent */
91: "icirc", /* small i, circumflex accent */
2.31 raff 92: "iexcl", /* inverted exclamation */
2.1 timbl 93: "igrave", /* small i, grave accent */
2.31 raff 94: /* 60 */
95: "iquest", /* inverted question mark */
2.1 timbl 96: "iuml", /* small i, dieresis or umlaut mark */
2.31 raff 97: "laquo", /* left angle quote */
2.1 timbl 98: "lt", /* less than */
2.31 raff 99: "macr", /* macron accent */
100: "micro", /* micro sign (greek mu) */
101: "middot", /* middle dot */
2.21 frystyk 102: "nbsp", /* non breaking space */
2.31 raff 103: "not", /* not sign */
2.1 timbl 104: "ntilde", /* small n, tilde */
2.31 raff 105: /* 70 */
2.1 timbl 106: "oacute", /* small o, acute accent */
107: "ocirc", /* small o, circumflex accent */
108: "ograve", /* small o, grave accent */
2.31 raff 109: "ordf", /* feminine ordinal */
110: "ordm", /* masculine ordinal */
2.1 timbl 111: "oslash", /* small o, slash */
112: "otilde", /* small o, tilde */
2.10 timbl 113: "ouml", /* small o, dieresis or umlaut mark */
2.31 raff 114: "para", /* paragraph sign */
115: "plusmn", /* plus or minus */
116: /* 80 */
117: "pound", /* pound sign */
2.10 timbl 118: "quot", /* double quote sign - June 1994 */
2.31 raff 119: "raquo", /* right angle quote */
120: "reg", /* registered trademark */
121: "sect", /* section sign */
122: "shi", /* soft hyphen */
123: "sup1", /* superscript 1 */
124: "sup2", /* superscript 2 */
125: "sup3", /* superscript 3 */
2.1 timbl 126: "szlig", /* small sharp s, German (sz ligature) */
2.31 raff 127: /* 90 */
2.1 timbl 128: "thorn", /* small thorn, Icelandic */
2.31 raff 129: "times", /* multiply sign */
2.1 timbl 130: "uacute", /* small u, acute accent */
131: "ucirc", /* small u, circumflex accent */
132: "ugrave", /* small u, grave accent */
2.31 raff 133: "uml", /* dieresis or umlaut mark */
2.1 timbl 134: "uuml", /* small u, dieresis or umlaut mark */
135: "yacute", /* small y, acute accent */
2.31 raff 136: "yen", /* yen sign */
137: "yuml" /* small y, dieresis or umlaut mark */
138: /* 100 */
2.1 timbl 139: };
140:
2.27 frystyk 141: /*
2.29 frystyk 142: ** ATTRIBUTE DEFINITION MACROS (see HTMLPDTD.h)
143: */
144:
145: /*
146: * redefine the macros, so that the "stringized" attribute name
147: * is generated
148: */
149:
150: #undef HTML_ATTR
151: #define HTML_ATTR(t,a) { #a }
152: #undef HTML_ATTRIBUTES
153: #define HTML_ATTRIBUTES(t) { 0 }
154:
155: /*
2.27 frystyk 156: ** ATTRIBUTE LISTS
157: */
2.1 timbl 158:
2.27 frystyk 159: PRIVATE HTAttr no_attr[1] =
160: {{ 0 }};
161:
162: PRIVATE HTAttr body_attr[HTML_BODY_ATTRIBUTES+1] = { /* to catch images */
2.29 frystyk 163: HTML_ATTR(BODY,ALINK),
164: HTML_ATTR(BODY,BACKGROUND),
165: HTML_ATTR(BODY,BGCOLOR),
166: HTML_ATTR(BODY,CLASS),
167: HTML_ATTR(BODY,DIR),
168: HTML_ATTR(BODY,ID),
169: HTML_ATTR(BODY,LANG),
170: HTML_ATTR(BODY,LINK),
171: HTML_ATTR(BODY,STYLE),
172: HTML_ATTR(BODY,TEXT),
173: HTML_ATTR(BODY,TITLE),
174: HTML_ATTR(BODY,VLINK),
175: HTML_ATTRIBUTES(BODY)
2.26 frystyk 176: };
177:
2.27 frystyk 178: PRIVATE HTAttr frame_attr[HTML_FRAME_ATTRIBUTES+1] = { /* frame attributes */
2.29 frystyk 179: HTML_ATTR(FRAME,CLASS),
180: HTML_ATTR(FRAME,FRAMEBORDER),
181: HTML_ATTR(FRAME,ID),
182: HTML_ATTR(FRAME,NAME),
183: HTML_ATTR(FRAME,MARGINHEIGHT),
184: HTML_ATTR(FRAME,MARGINWIDTH),
185: HTML_ATTR(FRAME,NORESIZE),
186: HTML_ATTR(FRAME,LONGDESC),
187: HTML_ATTR(FRAME,SCROLLING),
188: HTML_ATTR(FRAME,SRC),
189: HTML_ATTR(FRAME,STYLE),
190: HTML_ATTR(FRAME,TARGET),
191: HTML_ATTR(FRAME,TITLE),
192: HTML_ATTRIBUTES(FRAME)
2.26 frystyk 193: };
194:
2.27 frystyk 195: PRIVATE HTAttr frameset_attr[HTML_FRAMESET_ATTRIBUTES+1] = { /* frameset attributes */
2.29 frystyk 196: HTML_ATTR(FRAMESET,CLASS),
197: HTML_ATTR(FRAMESET,COLS),
198: HTML_ATTR(FRAMESET,ID),
199: HTML_ATTR(FRAMESET,ROWS),
200: HTML_ATTR(FRAMESET,STYLE),
201: HTML_ATTR(FRAMESET,TITLE),
202: HTML_ATTRIBUTES(FRAMESET)
2.26 frystyk 203: };
204:
2.27 frystyk 205: PRIVATE HTAttr a_attr[HTML_A_ATTRIBUTES+1] = { /* Anchor attributes */
2.29 frystyk 206: HTML_ATTR(A,ACCESSKEY),
207: HTML_ATTR(A,CHARSET),
208: HTML_ATTR(A,CLASS),
209: HTML_ATTR(A,COORDS),
210: HTML_ATTR(A,DIR),
211: HTML_ATTR(A,HREF),
212: HTML_ATTR(A,HREFLANG),
213: HTML_ATTR(A,ID),
214: HTML_ATTR(A,NAME),
215: HTML_ATTR(A,REL),
216: HTML_ATTR(A,REV),
217: HTML_ATTR(A,SHAPE),
218: HTML_ATTR(A,STYLE),
219: HTML_ATTR(A,TABINDEX),
220: HTML_ATTR(A,TARGET),
221: HTML_ATTR(A,TYPE),
222: HTML_ATTR(A,TITLE),
223: HTML_ATTRIBUTES(A)
2.1 timbl 224: };
225:
2.29 frystyk 226: PRIVATE HTAttr applet_attr[HTML_APPLET_ATTRIBUTES+1] = {
227: HTML_ATTR(APPLET,ALIGN),
228: HTML_ATTR(APPLET,ALT),
229: HTML_ATTR(APPLET,ARCHIVE),
230: HTML_ATTR(APPLET,CLASS),
231: HTML_ATTR(APPLET,CODE),
232: HTML_ATTR(APPLET,CODEBASE),
233: HTML_ATTR(APPLET,HEIGHT),
234: HTML_ATTR(APPLET,HSPACE),
235: HTML_ATTR(APPLET,ID),
236: HTML_ATTR(APPLET,NAME),
237: HTML_ATTR(APPLET,OBJECT),
238: HTML_ATTR(APPLET,STYLE),
239: HTML_ATTR(APPLET,TITLE),
240: HTML_ATTR(APPLET,VSPACE),
241: HTML_ATTR(APPLET,WIDTH),
242: HTML_ATTRIBUTES(APPLET)
243: };
244:
2.27 frystyk 245: PRIVATE HTAttr area_attr[HTML_AREA_ATTRIBUTES+1] = { /* Area attributes */
2.29 frystyk 246: HTML_ATTR(AREA,ACCESSKEY),
247: HTML_ATTR(AREA,ALT),
248: HTML_ATTR(AREA,CLASS),
249: HTML_ATTR(AREA,COORDS),
250: HTML_ATTR(AREA,DIR),
251: HTML_ATTR(AREA,HREF),
252: HTML_ATTR(AREA,ID),
253: HTML_ATTR(AREA,NAME),
254: HTML_ATTR(AREA,NOHREF),
255: HTML_ATTR(AREA,LANG),
256: HTML_ATTR(AREA,SHAPE),
257: HTML_ATTR(AREA,STYLE),
258: HTML_ATTR(AREA,TABINDEX),
259: HTML_ATTR(AREA,TARGET),
260: HTML_ATTR(AREA,TITLE),
261: HTML_ATTRIBUTES(AREA)
2.27 frystyk 262: };
263:
264: PRIVATE HTAttr base_attr[HTML_BASE_ATTRIBUTES+1] = { /* BASE attributes */
2.29 frystyk 265: HTML_ATTR(BASE,HREF),
266: HTML_ATTR(BASE,TARGET),
267: HTML_ATTRIBUTES(BASE)
2.1 timbl 268: };
269:
2.29 frystyk 270: PRIVATE HTAttr bdo_attr[HTML_BDO_ATTRIBUTES+1] = {
271: HTML_ATTR(BDO,CLASS),
272: HTML_ATTR(BDO,DIR),
273: HTML_ATTR(BDO,ID),
274: HTML_ATTR(BDO,LANG),
275: HTML_ATTR(BDO,STYLE),
276: HTML_ATTR(BDO,TITLE),
277: HTML_ATTRIBUTES(BDO)
278: };
279:
280: PRIVATE HTAttr bq_attr[HTML_BQ_ATTRIBUTES+1] = {
281: HTML_ATTR(BQ,CITE),
282: HTML_ATTR(BQ,CLASS),
283: HTML_ATTR(BQ,DIR),
284: HTML_ATTR(BQ,ID),
285: HTML_ATTR(BQ,LANG),
286: HTML_ATTR(BQ,STYLE),
287: HTML_ATTR(BQ,TITLE),
288: HTML_ATTRIBUTES(BQ)
289: };
290:
291: PRIVATE HTAttr br_attr[HTML_BR_ATTRIBUTES+1] = {
292: HTML_ATTR(BR,CLASS),
293: HTML_ATTR(BR,CLEAR),
294: HTML_ATTR(BR,ID),
295: HTML_ATTR(BR,STYLE),
296: HTML_ATTR(BR,TITLE),
297: HTML_ATTRIBUTES(BR)
298: };
299:
300: PRIVATE HTAttr button_attr[HTML_BUTTON_ATTRIBUTES+1] = {
301: HTML_ATTR(BUTTON,ACCESSKEY),
302: HTML_ATTR(BUTTON,CLASS),
303: HTML_ATTR(BUTTON,DIR),
304: HTML_ATTR(BUTTON,DISABLED),
305: HTML_ATTR(BUTTON,ID),
306: HTML_ATTR(BUTTON,LANG),
307: HTML_ATTR(BUTTON,NAME),
308: HTML_ATTR(BUTTON,STYLE),
309: HTML_ATTR(BUTTON,TABINDEX),
310: HTML_ATTR(BUTTON,TITLE),
311: HTML_ATTR(BUTTON,TYPE),
312: HTML_ATTR(BUTTON,VALUE),
313: HTML_ATTRIBUTES(BUTTON),
314: };
315:
316: PRIVATE HTAttr col_attr[HTML_COL_ATTRIBUTES+1] = {
317: HTML_ATTR(COL,CLASS),
318: HTML_ATTR(COL,DIR),
319: HTML_ATTR(COL,ID),
320: HTML_ATTR(COL,LANG),
321: HTML_ATTR(COL,SPAN),
322: HTML_ATTR(COL,STYLE),
323: HTML_ATTR(COL,TITLE),
324: HTML_ATTR(COL,WIDTH),
325: HTML_ATTRIBUTES(COL)
326: };
327:
328: PRIVATE HTAttr changes_attr[HTML_CHANGES_ATTRIBUTES+1] = {
329: HTML_ATTR(CHANGES,CITE),
330: HTML_ATTR(CHANGES,CLASS),
331: HTML_ATTR(CHANGES,DATETIME),
332: HTML_ATTR(CHANGES,DIR),
333: HTML_ATTR(CHANGES,ID),
334: HTML_ATTR(CHANGES,LANG),
335: HTML_ATTR(CHANGES,STYLE),
336: HTML_ATTR(CHANGES,TITLE),
337: HTML_ATTRIBUTES(CHANGES)
338: };
339:
340: PRIVATE HTAttr font_attr[HTML_FONT_ATTRIBUTES+1] = {
341: HTML_ATTR(FONT,CLASS),
342: HTML_ATTR(FONT,COLOR),
343: HTML_ATTR(FONT,DIR),
344: HTML_ATTR(FONT,FACE),
345: HTML_ATTR(FONT,ID),
346: HTML_ATTR(FONT,LANG),
347: HTML_ATTR(FONT,SIZE),
348: HTML_ATTR(FONT,STYLE),
349: HTML_ATTR(FONT,TITLE),
350: HTML_ATTRIBUTES(FONT)
351: };
352:
353: PRIVATE HTAttr form_attr[HTML_FORM_ATTRIBUTES+1] = {
354: HTML_ATTR(FORM,ACCEPT),
355: { "ACCEPT-CHARSET" }, /* HTML_ATTR(FORM,ACCEPT_CHARSET) */
356: HTML_ATTR(FORM,ACTION),
357: HTML_ATTR(FORM,CLASS),
358: HTML_ATTR(FORM,DIR),
359: HTML_ATTR(FORM,ENCTYPE),
360: HTML_ATTR(FORM,ID),
361: HTML_ATTR(FORM,LANG),
362: HTML_ATTR(FORM,METHOD),
363: HTML_ATTR(FORM,STYLE),
364: HTML_ATTR(FORM,TARGET),
365: HTML_ATTR(FORM,TITLE),
366: HTML_ATTRIBUTES(FORM)
367: };
368:
369: PRIVATE HTAttr gen_attr[HTML_GEN_ATTRIBUTES+1] = { /* General, for many things */
370: HTML_ATTR(GEN,CLASS),
371: HTML_ATTR(GEN,DIR),
372: HTML_ATTR(GEN,ID),
373: HTML_ATTR(GEN,LANG),
374: HTML_ATTR(GEN,STYLE),
375: HTML_ATTR(GEN,TITLE),
376: HTML_ATTRIBUTES(GEN)
377: };
378:
379: PRIVATE HTAttr block_attr[HTML_BLOCK_ATTRIBUTES+1] = { /* DIV, SPAN, H1-H6 */
380: HTML_ATTR(BLOCK,ALIGN),
381: HTML_ATTR(BLOCK,CLASS),
382: HTML_ATTR(BLOCK,DIR),
383: HTML_ATTR(BLOCK,ID),
384: HTML_ATTR(BLOCK,LANG),
385: HTML_ATTR(BLOCK,STYLE),
386: HTML_ATTR(BLOCK,TITLE),
387: HTML_ATTRIBUTES(BLOCK)
388: };
389:
390: PRIVATE HTAttr head_attr[HTML_HEAD_ATTRIBUTES+1] = {
391: HTML_ATTR(HEAD,DIR),
392: HTML_ATTR(HEAD,LANG),
393: HTML_ATTR(HEAD,PROFILE),
394: HTML_ATTRIBUTES(HEAD)
395: };
396:
397: PRIVATE HTAttr hr_attr[HTML_HR_ATTRIBUTES+1] = {
398: HTML_ATTR(HR,ALIGN),
399: HTML_ATTR(HR,CLASS),
400: HTML_ATTR(HR,DIR),
401: HTML_ATTR(HR,ID),
402: HTML_ATTR(HR,LANG),
403: HTML_ATTR(HR,NOSHADE),
404: HTML_ATTR(HR,SIZE),
405: HTML_ATTR(HR,STYLE),
406: HTML_ATTR(HR,TITLE),
407: HTML_ATTR(HR,WIDTH),
408: HTML_ATTRIBUTES(HR)
409: };
410:
411: PRIVATE HTAttr html_attr[HTML_HTML_ATTRIBUTES+1] = {
412: HTML_ATTR(HTML,DIR),
413: HTML_ATTR(HTML,LANG),
414: HTML_ATTR(HTML,VERSION),
415: HTML_ATTRIBUTES(HTML)
416: };
417:
418: PRIVATE HTAttr iframe_attr[HTML_IFRAME_ATTRIBUTES+1] = {
419: HTML_ATTR(IFRAME,ALIGN),
420: HTML_ATTR(IFRAME,CLASS),
421: HTML_ATTR(IFRAME,FRAMEBORDER),
422: HTML_ATTR(IFRAME,HEIGHT),
423: HTML_ATTR(IFRAME,ID),
424: HTML_ATTR(IFRAME,LONGDESC),
425: HTML_ATTR(IFRAME,MARGINHEIGHT),
426: HTML_ATTR(IFRAME,MARGINWIDTH),
427: HTML_ATTR(IFRAME,NAME),
428: HTML_ATTR(IFRAME,SCROLLING),
429: HTML_ATTR(IFRAME,SRC),
430: HTML_ATTR(IFRAME,STYLE),
431: HTML_ATTR(IFRAME,TARGET),
432: HTML_ATTR(IFRAME,TITLE),
433: HTML_ATTR(IFRAME,WIDTH),
434: HTML_ATTRIBUTES(IFRAME)
435: };
2.1 timbl 436:
2.27 frystyk 437: PRIVATE HTAttr img_attr[HTML_IMG_ATTRIBUTES+1] = { /* IMG attributes */
2.29 frystyk 438: HTML_ATTR(IMG,ALIGN),
439: HTML_ATTR(IMG,ALT),
440: HTML_ATTR(IMG,BORDER),
441: HTML_ATTR(IMG,CLASS),
442: HTML_ATTR(IMG,DIR),
443: HTML_ATTR(IMG,HEIGHT),
444: HTML_ATTR(IMG,HSPACE),
445: HTML_ATTR(IMG,ID),
446: HTML_ATTR(IMG,ISMAP),
447: HTML_ATTR(IMG,LANG),
448: HTML_ATTR(IMG,LONGDESC),
449: HTML_ATTR(IMG,SRC),
450: HTML_ATTR(IMG,STYLE),
451: HTML_ATTR(IMG,TITLE),
452: HTML_ATTR(IMG,USEMAP),
453: HTML_ATTR(IMG,VSPACE),
454: HTML_ATTR(IMG,WIDTH),
455: HTML_ATTRIBUTES(IMG)
2.1 timbl 456: };
457:
2.27 frystyk 458: PRIVATE HTAttr input_attr[HTML_INPUT_ATTRIBUTES+1] = {
2.29 frystyk 459: HTML_ATTR(INPUT,ACCEPT),
460: HTML_ATTR(INPUT,ACCESSKEY),
461: HTML_ATTR(INPUT,ALIGN),
462: HTML_ATTR(INPUT,ALT),
463: HTML_ATTR(INPUT,CHECKED),
464: HTML_ATTR(INPUT,CLASS),
465: HTML_ATTR(INPUT,DIR),
466: HTML_ATTR(INPUT,DISABLED),
467: HTML_ATTR(INPUT,ID),
468: HTML_ATTR(INPUT,LANG),
469: HTML_ATTR(INPUT,MAXLENGTH),
470: HTML_ATTR(INPUT,NAME),
471: HTML_ATTR(INPUT,READONLY),
472: HTML_ATTR(INPUT,SIZE),
473: HTML_ATTR(INPUT,SRC),
474: HTML_ATTR(INPUT,STYLE),
475: HTML_ATTR(INPUT,TABINDEX),
476: HTML_ATTR(INPUT,TITLE),
477: HTML_ATTR(INPUT,TYPE),
478: HTML_ATTR(INPUT,USEMAP),
479: HTML_ATTR(INPUT,VALUE),
480: HTML_ATTRIBUTES(INPUT)
481: };
482:
483: PRIVATE HTAttr isindex_attr[HTML_ISINDEX_ATTRIBUTES+1] = {
484: HTML_ATTR(ISINDEX,CLASS),
485: HTML_ATTR(ISINDEX,DIR),
486: HTML_ATTR(ISINDEX,ID),
487: HTML_ATTR(ISINDEX,LANG),
488: HTML_ATTR(ISINDEX,PROMPT),
489: HTML_ATTR(ISINDEX,STYLE),
490: HTML_ATTR(ISINDEX,TITLE),
491: HTML_ATTRIBUTES(ISINDEX)
492: };
493:
494: PRIVATE HTAttr label_attr[HTML_LABEL_ATTRIBUTES+1] = {
495: HTML_ATTR(LABEL,ACCESSKEY),
496: HTML_ATTR(LABEL,CLASS),
497: HTML_ATTR(LABEL,DIR),
498: HTML_ATTR(LABEL,FOR),
499: HTML_ATTR(LABEL,ID),
500: HTML_ATTR(LABEL,LANG),
501: HTML_ATTR(LABEL,STYLE),
502: HTML_ATTR(LABEL,TITLE),
503: HTML_ATTRIBUTES(LABEL)
504: };
505:
506: PRIVATE HTAttr legend_attr[HTML_LEGEND_ATTRIBUTES+1] = {
507: HTML_ATTR(LEGEND,ACCESSKEY),
508: HTML_ATTR(LEGEND,ALIGN),
509: HTML_ATTR(LEGEND,CLASS),
510: HTML_ATTR(LEGEND,DIR),
511: HTML_ATTR(LEGEND,ID),
512: HTML_ATTR(LEGEND,LANG),
513: HTML_ATTR(LEGEND,STYLE),
514: HTML_ATTR(LEGEND,TITLE),
515: HTML_ATTRIBUTES(LEGEND)
516: };
517:
518: PRIVATE HTAttr li_attr[HTML_LI_ATTRIBUTES+1] = {
519: HTML_ATTR(LI,CLASS),
520: HTML_ATTR(LI,COMPACT),
521: HTML_ATTR(LI,DIR),
522: HTML_ATTR(LI,ID),
523: HTML_ATTR(LI,LANG),
524: HTML_ATTR(LI,STYLE),
525: HTML_ATTR(LI,TITLE),
526: HTML_ATTR(LI,TYPE),
527: HTML_ATTR(LI,VALUE),
528: HTML_ATTRIBUTES(LI)
2.1 timbl 529: };
530:
2.27 frystyk 531: PRIVATE HTAttr link_attr[HTML_LINK_ATTRIBUTES+1] = { /* link attributes */
2.29 frystyk 532: HTML_ATTR(LINK,CHARSET),
533: HTML_ATTR(LINK,CLASS),
534: HTML_ATTR(LINK,DIR),
535: HTML_ATTR(LINK,HREF),
536: HTML_ATTR(LINK,HREFLANG),
537: HTML_ATTR(LINK,ID),
538: HTML_ATTR(LINK,LANG),
539: HTML_ATTR(LINK,MEDIA),
540: HTML_ATTR(LINK,REL),
541: HTML_ATTR(LINK,REV),
542: HTML_ATTR(LINK,STYLE),
543: HTML_ATTR(LINK,TARGET),
544: HTML_ATTR(LINK,TITLE),
545: HTML_ATTR(LINK,TYPE),
546: HTML_ATTRIBUTES(LINK)
2.27 frystyk 547: };
548:
2.28 frystyk 549: PRIVATE HTAttr map_attr[HTML_MAP_ATTRIBUTES+1] = {
2.29 frystyk 550: HTML_ATTR(MAP,CLASS),
551: HTML_ATTR(MAP,DIR),
552: HTML_ATTR(MAP,ID),
553: HTML_ATTR(MAP,LANG),
554: HTML_ATTR(MAP,NAME),
555: HTML_ATTR(MAP,STYLE),
556: HTML_ATTR(MAP,TITLE),
557: HTML_ATTRIBUTES(MAP)
2.28 frystyk 558: };
559:
2.27 frystyk 560: PRIVATE HTAttr meta_attr[HTML_META_ATTRIBUTES+1] = {
2.29 frystyk 561: HTML_ATTR(META,CONTENT),
562: HTML_ATTR(META,DIR),
563: { "HTTP-EQUIV" }, /* HTML_ATTR(META,HTTP_EQUIV) */
564: HTML_ATTR(META,LANG),
565: HTML_ATTR(META,NAME),
566: HTML_ATTR(META,SCHEME),
567: HTML_ATTRIBUTES(META)
2.24 frystyk 568: };
569:
2.27 frystyk 570: PRIVATE HTAttr nextid_attr[HTML_NEXTID_ATTRIBUTES+1] = {
2.1 timbl 571: { "N" },
572: { 0 } /* Terminate list */
573: };
574:
2.29 frystyk 575: PRIVATE HTAttr object_attr[HTML_OBJECT_ATTRIBUTES+1] = { /* object attributes */
576: HTML_ATTR(OBJECT,ALIGN),
577: HTML_ATTR(OBJECT,ARCHIVE),
578: HTML_ATTR(OBJECT,BORDER),
579: HTML_ATTR(OBJECT,CLASS),
580: HTML_ATTR(OBJECT,CLASSID),
581: HTML_ATTR(OBJECT,CODEBASE),
582: HTML_ATTR(OBJECT,CODETYPE),
583: HTML_ATTR(OBJECT,DATA),
584: HTML_ATTR(OBJECT,DECLARE),
585: HTML_ATTR(OBJECT,DIR),
586: HTML_ATTR(OBJECT,HEIGHT),
587: HTML_ATTR(OBJECT,HSPACE),
588: HTML_ATTR(OBJECT,ID),
589: HTML_ATTR(OBJECT,LANG),
590: HTML_ATTR(OBJECT,NAME),
591: HTML_ATTR(OBJECT,STANDBY),
592: HTML_ATTR(OBJECT,STYLE),
593: HTML_ATTR(OBJECT,TABINDEX),
594: HTML_ATTR(OBJECT,TITLE),
595: HTML_ATTR(OBJECT,TYPE),
596: HTML_ATTR(OBJECT,USEMAP),
597: HTML_ATTR(OBJECT,VSPACE),
598: HTML_ATTR(OBJECT,WIDTH),
599: HTML_ATTRIBUTES(OBJECT)
600: };
601:
602: PRIVATE HTAttr ol_attr[HTML_OL_ATTRIBUTES+1] = {
603: HTML_ATTR(OL,CLASS),
604: HTML_ATTR(OL,COMPACT),
605: HTML_ATTR(OL,DIR),
606: HTML_ATTR(OL,ID),
607: HTML_ATTR(OL,LANG),
608: HTML_ATTR(OL,START),
609: HTML_ATTR(OL,STYLE),
610: HTML_ATTR(OL,TITLE),
611: HTML_ATTR(OL,TYPE),
612: HTML_ATTRIBUTES(OL)
613: };
614:
615: PRIVATE HTAttr optgroup_attr[HTML_OPTGROUP_ATTRIBUTES+1] = {
616: HTML_ATTR(OPTGROUP,CLASS),
617: HTML_ATTR(OPTGROUP,DISABLED),
618: HTML_ATTR(OPTGROUP,DIR),
619: HTML_ATTR(OPTGROUP,ID),
620: HTML_ATTR(OPTGROUP,LABEL),
621: HTML_ATTR(OPTGROUP,LANG),
622: HTML_ATTR(OPTGROUP,STYLE),
623: HTML_ATTR(OPTGROUP,TITLE),
624: HTML_ATTRIBUTES(OPTGROUP)
2.1 timbl 625: };
626:
2.27 frystyk 627: PRIVATE HTAttr option_attr[HTML_OPTION_ATTRIBUTES+1] = {
2.29 frystyk 628: HTML_ATTR(OPTION,CLASS),
629: HTML_ATTR(OPTION,DISABLED),
630: HTML_ATTR(OPTION,DIR),
631: HTML_ATTR(OPTION,ID),
632: HTML_ATTR(OPTION,LABEL),
633: HTML_ATTR(OPTION,LANG),
634: HTML_ATTR(OPTION,SELECTED),
635: HTML_ATTR(OPTION,STYLE),
636: HTML_ATTR(OPTION,TITLE),
637: HTML_ATTR(OPTION,VALUE),
638: HTML_ATTRIBUTES(OPTION)
639: };
640:
641: PRIVATE HTAttr param_attr[HTML_PARAM_ATTRIBUTES+1] = {
642: HTML_ATTR(PARAM,ID),
643: HTML_ATTR(PARAM,NAME),
644: HTML_ATTR(PARAM,TYPE),
645: HTML_ATTR(PARAM,VALUE),
646: HTML_ATTR(PARAM,VALUETYPE),
647: HTML_ATTRIBUTES(PARAM)
648: };
649:
650: PRIVATE HTAttr pre_attr[HTML_PRE_ATTRIBUTES+1] = {
651: HTML_ATTR(PRE,CLASS),
652: HTML_ATTR(PRE,DIR),
653: HTML_ATTR(PRE,ID),
654: HTML_ATTR(PRE,LANG),
655: HTML_ATTR(PRE,STYLE),
656: HTML_ATTR(PRE,TITLE),
657: HTML_ATTR(PRE,WIDTH),
658: HTML_ATTRIBUTES(PRE)
659: };
660:
661: PRIVATE HTAttr script_attr[HTML_SCRIPT_ATTRIBUTES+1] = {
662: HTML_ATTR(SCRIPT,CHARSET),
663: HTML_ATTR(SCRIPT,DEFER),
664: HTML_ATTR(SCRIPT,LANGUAGE),
665: HTML_ATTR(SCRIPT,SRC),
666: HTML_ATTR(SCRIPT,TYPE),
667: HTML_ATTRIBUTES(SCRIPT)
2.1 timbl 668: };
669:
2.27 frystyk 670: PRIVATE HTAttr select_attr[HTML_SELECT_ATTRIBUTES+1] = {
2.29 frystyk 671: HTML_ATTR(SELECT,CLASS),
672: HTML_ATTR(SELECT,DIR),
673: HTML_ATTR(SELECT,DISABLED),
674: HTML_ATTR(SELECT,ID),
675: HTML_ATTR(SELECT,LANG),
676: HTML_ATTR(SELECT,MULTIPLE),
677: HTML_ATTR(SELECT,NAME),
678: HTML_ATTR(SELECT,SIZE),
679: HTML_ATTR(SELECT,STYLE),
680: HTML_ATTR(SELECT,TABINDEX),
681: HTML_ATTR(SELECT,TITLE),
682: HTML_ATTRIBUTES(SELECT)
683: };
684:
685: PRIVATE HTAttr style_attr[HTML_STYLE_ATTRIBUTES+1] = {
686: HTML_ATTR(STYLE,DIR),
687: HTML_ATTR(STYLE,LANG),
688: HTML_ATTR(STYLE,MEDIA),
689: HTML_ATTR(STYLE,TITLE),
690: HTML_ATTR(STYLE,TYPE),
691: HTML_ATTRIBUTES(STYLE)
2.1 timbl 692: };
693:
2.27 frystyk 694: PRIVATE HTAttr table_attr[HTML_TABLE_ATTRIBUTES+1] = {
2.29 frystyk 695: HTML_ATTR(TABLE,ALIGN),
696: HTML_ATTR(TABLE,BGCOLOR),
697: HTML_ATTR(TABLE,BORDER),
698: HTML_ATTR(TABLE,CELLPADDING),
699: HTML_ATTR(TABLE,CELLSPACING),
700: HTML_ATTR(TABLE,CLASS),
701: HTML_ATTR(TABLE,DIR),
702: HTML_ATTR(TABLE,FRAME),
703: HTML_ATTR(TABLE,ID),
704: HTML_ATTR(TABLE,LANG),
705: HTML_ATTR(TABLE,RULES),
706: HTML_ATTR(TABLE,SUMMARY),
707: HTML_ATTR(TABLE,STYLE),
708: HTML_ATTR(TABLE,TITLE),
709: HTML_ATTR(TABLE,WIDTH),
710: HTML_ATTRIBUTES(TABLE)
711: };
712:
713: PRIVATE HTAttr tele_attr[HTML_TELE_ATTRIBUTES+1] = {
714: HTML_ATTR(TELE,ALIGN),
715: HTML_ATTR(TELE,CHAR),
716: HTML_ATTR(TELE,CHAROFF),
717: HTML_ATTR(TELE,CLASS),
718: HTML_ATTR(TELE,DIR),
719: HTML_ATTR(TELE,ID),
720: HTML_ATTR(TELE,LANG),
721: HTML_ATTR(TELE,STYLE),
722: HTML_ATTR(TELE,TITLE),
723: HTML_ATTR(TELE,VALIGN),
724: HTML_ATTRIBUTES(TELE)
2.1 timbl 725: };
726:
2.27 frystyk 727: PRIVATE HTAttr td_attr[HTML_TD_ATTRIBUTES+1] = {
2.29 frystyk 728: HTML_ATTR(TD,ABBR),
729: HTML_ATTR(TD,ALIGN),
730: HTML_ATTR(TD,AXIS),
731: HTML_ATTR(TD,BGCOLOR),
732: HTML_ATTR(TD,CHAR),
733: HTML_ATTR(TD,CHAROFF),
734: HTML_ATTR(TD,CLASS),
735: HTML_ATTR(TD,COLSPAN),
736: HTML_ATTR(TD,DIR),
737: HTML_ATTR(TD,ID),
738: HTML_ATTR(TD,HEADERS),
739: HTML_ATTR(TD,HEIGHT),
740: HTML_ATTR(TD,LANG),
741: HTML_ATTR(TD,NOWRAP),
742: HTML_ATTR(TD,ROWSPAN),
743: HTML_ATTR(TD,SCOPE),
744: HTML_ATTR(TD,STYLE),
745: HTML_ATTR(TD,TITLE),
746: HTML_ATTR(TD,VALIGN),
747: HTML_ATTR(TD,WIDTH),
748: HTML_ATTRIBUTES(TD)
2.1 timbl 749: };
750:
2.27 frystyk 751: PRIVATE HTAttr textarea_attr[HTML_TEXTAREA_ATTRIBUTES+1] = {
2.29 frystyk 752: HTML_ATTR(TEXTAREA,CLASS),
753: HTML_ATTR(TEXTAREA,COLS),
754: HTML_ATTR(TEXTAREA,DIR),
755: HTML_ATTR(TEXTAREA,DISABLED),
756: HTML_ATTR(TEXTAREA,ID),
757: HTML_ATTR(TEXTAREA,LANG),
758: HTML_ATTR(TEXTAREA,NAME),
759: HTML_ATTR(TEXTAREA,READONLY),
760: HTML_ATTR(TEXTAREA,ROWS),
761: HTML_ATTR(TEXTAREA,STYLE),
762: HTML_ATTR(TEXTAREA,TABINDEX),
763: HTML_ATTR(TEXTAREA,TITLE),
764: HTML_ATTRIBUTES(TEXTAREA)
765: };
766:
767: PRIVATE HTAttr title_attr[HTML_TITLE_ATTRIBUTES+1] = {
768: HTML_ATTR(TITLE,DIR),
769: HTML_ATTR(TITLE,LANG),
770: HTML_ATTRIBUTES(TITLE)
2.1 timbl 771: };
772:
2.27 frystyk 773: PRIVATE HTAttr ul_attr[HTML_UL_ATTRIBUTES+1] = {
2.29 frystyk 774: HTML_ATTR(UL,CLASS),
775: HTML_ATTR(UL,COMPACT),
776: HTML_ATTR(UL,DIR),
777: HTML_ATTR(UL,ID),
778: HTML_ATTR(UL,LANG),
779: HTML_ATTR(UL,STYLE),
780: HTML_ATTR(UL,TITLE),
781: HTML_ATTR(UL,TYPE),
782: HTML_ATTRIBUTES(UL)
2.1 timbl 783: };
784:
2.27 frystyk 785: /*
786: ** ELEMENTS
2.1 timbl 787: ** Must match definitions in HTMLPDTD.html!
788: ** Must be in alphabetical order.
789: **
790: ** Name, Attributes, content
791: */
2.27 frystyk 792: PRIVATE HTTag tags[HTML_ELEMENTS] = {
2.1 timbl 793: { "A" , a_attr, HTML_A_ATTRIBUTES, SGML_MIXED },
2.29 frystyk 794: { "ABBR" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
2.1 timbl 795: { "ACRONYM" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
2.29 frystyk 796: { "ADDRESS" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
797: { "APPLET" , applet_attr, HTML_APPLET_ATTRIBUTES, SGML_MIXED },
2.27 frystyk 798: { "AREA" , area_attr, HTML_AREA_ATTRIBUTES, SGML_EMPTY },
2.28 frystyk 799: { "B" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
2.22 frystyk 800: { "BASE" , base_attr, HTML_BASE_ATTRIBUTES, SGML_EMPTY },
2.29 frystyk 801: { "BASEFONT", font_attr, HTML_FONT_ATTRIBUTES, SGML_EMPTY },
802: { "BDO" , bdo_attr, HTML_BDO_ATTRIBUTES, SGML_EMPTY },
2.28 frystyk 803: { "BIG" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
2.29 frystyk 804: { "BLOCKQUOTE", bq_attr, HTML_BQ_ATTRIBUTES, SGML_MIXED },
2.26 frystyk 805: { "BODY" , body_attr, HTML_BODY_ATTRIBUTES, SGML_MIXED },
2.29 frystyk 806: { "BR" , br_attr, HTML_BR_ATTRIBUTES, SGML_EMPTY },
807: { "BUTTON" , button_attr, HTML_BUTTON_ATTRIBUTES, SGML_MIXED },
808: { "CAPTION" , block_attr, HTML_BLOCK_ATTRIBUTES, SGML_MIXED },
809: { "CENTER" , no_attr, 0, SGML_MIXED },
2.1 timbl 810: { "CITE" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
811: { "CODE" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
2.29 frystyk 812: { "COL" , col_attr, HTML_COL_ATTRIBUTES, SGML_MIXED },
813: { "COLGROUP", col_attr, HTML_COL_ATTRIBUTES, SGML_MIXED },
2.1 timbl 814: { "DD" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY },
2.29 frystyk 815: { "DEL" , changes_attr, HTML_CHANGES_ATTRIBUTES,SGML_EMPTY },
2.1 timbl 816: { "DFN" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
817: { "DIR" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
2.29 frystyk 818: { "DIV" , block_attr, HTML_BLOCK_ATTRIBUTES, SGML_MIXED },
819: { "DL" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
2.1 timbl 820: { "DT" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY },
821: { "EM" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
2.29 frystyk 822: { "FIELDSET", gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
823: { "FONT" , font_attr, HTML_FONT_ATTRIBUTES, SGML_MIXED },
2.1 timbl 824: { "FORM" , form_attr, HTML_FORM_ATTRIBUTES, SGML_MIXED },
2.26 frystyk 825: { "FRAME" , frame_attr, HTML_FRAME_ATTRIBUTES, SGML_EMPTY },
2.29 frystyk 826: { "FRAMESET", frameset_attr,HTML_FRAMESET_ATTRIBUTES,SGML_MIXED },
827: { "H1" , block_attr, HTML_BLOCK_ATTRIBUTES, SGML_MIXED },
828: { "H2" , block_attr, HTML_BLOCK_ATTRIBUTES, SGML_MIXED },
829: { "H3" , block_attr, HTML_BLOCK_ATTRIBUTES, SGML_MIXED },
830: { "H4" , block_attr, HTML_BLOCK_ATTRIBUTES, SGML_MIXED },
831: { "H5" , block_attr, HTML_BLOCK_ATTRIBUTES, SGML_MIXED },
832: { "H6" , block_attr, HTML_BLOCK_ATTRIBUTES, SGML_MIXED },
833: { "HEAD" , head_attr, HTML_HEAD_ATTRIBUTES, SGML_MIXED },
834: { "HR" , hr_attr, HTML_HR_ATTRIBUTES, SGML_EMPTY },
835: { "HTML" , html_attr, HTML_HTML_ATTRIBUTES, SGML_MIXED }, /* */
2.1 timbl 836: { "I" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
2.29 frystyk 837: { "IFRAME" , iframe_attr, HTML_IFRAME_ATTRIBUTES, SGML_MIXED },
2.7 frystyk 838: { "IMG" , img_attr, HTML_IMG_ATTRIBUTES, SGML_EMPTY },
2.1 timbl 839: { "INPUT" , input_attr, HTML_INPUT_ATTRIBUTES, SGML_EMPTY },
2.29 frystyk 840: { "INS" , changes_attr, HTML_CHANGES_ATTRIBUTES,SGML_MIXED },
841: { "ISINDEX" , isindex_attr, HTML_ISINDEX_ATTRIBUTES,SGML_EMPTY },
2.1 timbl 842: { "KBD" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
2.29 frystyk 843: { "LABEL" , label_attr, HTML_LABEL_ATTRIBUTES, SGML_MIXED },
844: { "LEGEND" , legend_attr, HTML_LEGEND_ATTRIBUTES, SGML_MIXED },
2.1 timbl 845: { "LI" , li_attr, HTML_LI_ATTRIBUTES, SGML_EMPTY },
846: { "LINK" , link_attr, HTML_LINK_ATTRIBUTES, SGML_EMPTY },
2.28 frystyk 847: { "MAP" , map_attr, HTML_MAP_ATTRIBUTES, SGML_MIXED },
2.30 raff 848: { "MENU" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
2.29 frystyk 849: { "META" , meta_attr, HTML_META_ATTRIBUTES, SGML_EMPTY },
2.1 timbl 850: { "NEXTID" , nextid_attr, 1, SGML_EMPTY },
2.29 frystyk 851: { "NOFRAMES", gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
852: { "NOSCRIPT", gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
2.27 frystyk 853: { "OBJECT" , object_attr, HTML_OBJECT_ATTRIBUTES, SGML_MIXED },
2.29 frystyk 854: { "OL" , ol_attr, HTML_OL_ATTRIBUTES, SGML_MIXED },
855: { "OPTGROUP", optgroup_attr,HTML_OPTGROUP_ATTRIBUTES,SGML_MIXED },
2.8 timbl 856: { "OPTION" , option_attr, HTML_OPTION_ATTRIBUTES, SGML_EMPTY },/*Mixed?*/
2.29 frystyk 857: { "P" , block_attr, HTML_BLOCK_ATTRIBUTES, SGML_EMPTY },
858: { "PARAM" , param_attr, HTML_PARAM_ATTRIBUTES, SGML_EMPTY },
859: { "PRE" , pre_attr, HTML_PRE_ATTRIBUTES, SGML_MIXED },
2.1 timbl 860: { "Q" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
861: { "S" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
862: { "SAMP" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
2.29 frystyk 863: { "SCRIPT" , script_attr, HTML_SCRIPT_ATTRIBUTES, SGML_MIXED },
2.1 timbl 864: { "SELECT" , select_attr, HTML_SELECT_ATTRIBUTES, SGML_MIXED },
2.28 frystyk 865: { "SMALL" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
2.29 frystyk 866: { "SPAN" , block_attr, HTML_BLOCK_ATTRIBUTES, SGML_MIXED },
867: { "STRIKE" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
2.1 timbl 868: { "STRONG" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
2.29 frystyk 869: { "STYLE" , style_attr, HTML_STYLE_ATTRIBUTES, SGML_MIXED },
2.1 timbl 870: { "SUB" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
871: { "SUP" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
872: { "TABLE" , table_attr, HTML_TABLE_ATTRIBUTES, SGML_MIXED },
2.29 frystyk 873: { "TBODY" , tele_attr, HTML_TELE_ATTRIBUTES, SGML_MIXED },
2.32 ! raff 874: { "TD" , td_attr, HTML_TD_ATTRIBUTES, SGML_EMPTY /*SGML_MIXED*/ },
2.1 timbl 875: { "TEXTAREA", textarea_attr,HTML_TEXTAREA_ATTRIBUTES,SGML_MIXED},
2.29 frystyk 876: { "TFOOT" , tele_attr, HTML_TELE_ATTRIBUTES, SGML_MIXED },
877: { "TH" , td_attr, HTML_TD_ATTRIBUTES, SGML_EMPTY /*SGML_MIXED*/},
878: { "THEAD" , tele_attr, HTML_TELE_ATTRIBUTES, SGML_MIXED },
879: { "TITLE" , title_attr, HTML_TITLE_ATTRIBUTES, SGML_MIXED },
880: { "TR" , tele_attr, HTML_TELE_ATTRIBUTES, SGML_EMPTY /*SGML_MIXED*/},
2.1 timbl 881: { "TT" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
882: { "U" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
883: { "UL" , ul_attr, HTML_UL_ATTRIBUTES, SGML_MIXED },
884: { "VAR" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED },
885: };
886:
2.27 frystyk 887: PRIVATE SGML_dtd HTMLP_dtd = {
2.18 frystyk 888: tags,
2.27 frystyk 889: HTML_ELEMENTS,
2.18 frystyk 890: entities,
891: sizeof(entities)/sizeof(char**)
2.1 timbl 892: };
893:
2.27 frystyk 894: PRIVATE SGML_dtd * DTD = &HTMLP_dtd;
895:
896: PUBLIC SGML_dtd * HTML_dtd (void)
897: {
898: return DTD;
899: }
900:
901: PUBLIC BOOL HTML_setDtd (const SGML_dtd * dtd)
902: {
903: if (dtd) {
904: DTD = (SGML_dtd *) dtd;
905: return YES;
906: }
907: return NO;
908: }
2.1 timbl 909:
910: /* Start anchor element
911: ** --------------------
912: **
913: ** It is kinda convenient to have a particulr routine for
914: ** starting an anchor element, as everything else for HTML is
915: ** simple anyway.
916: */
2.17 frystyk 917: PUBLIC void HTStartAnchor (HTStructured * obj,
2.19 frystyk 918: const char * name,
919: const char * href)
2.1 timbl 920: {
921: BOOL present[HTML_A_ATTRIBUTES];
2.19 frystyk 922: const char* value[HTML_A_ATTRIBUTES];
2.1 timbl 923:
924: {
925: int i;
926: for(i=0; i<HTML_A_ATTRIBUTES; i++)
927: present[i] = NO;
928: }
929: if (name) {
930: present[HTML_A_NAME] = YES;
931: value[HTML_A_NAME] = name;
932: }
933: if (href) {
934: present[HTML_A_HREF] = YES;
935: value[HTML_A_HREF] = href;
936: }
937:
938: (*obj->isa->start_element)(obj, HTML_A , present, value);
939:
940: }
941:
2.5 frystyk 942: /* Put image element
943: ** --------------------
944: **
945: ** Hopefully as usefull as HTStartAnchor. Henrik 23/03-94
946: */
2.17 frystyk 947: PUBLIC void HTMLPutImg (HTStructured * obj,
2.19 frystyk 948: const char * src,
949: const char * alt,
950: const char * align)
2.5 frystyk 951: {
952: BOOL present[HTML_IMG_ATTRIBUTES];
2.19 frystyk 953: const char* value[HTML_IMG_ATTRIBUTES];
2.5 frystyk 954:
955: {
956: int i;
957: for(i=0; i<HTML_IMG_ATTRIBUTES; i++)
958: present[i] = NO;
959: }
960: if (src) {
961: present[HTML_IMG_SRC] = YES;
962: value[HTML_IMG_SRC] = src;
963: }
964: if (alt) {
965: present[HTML_IMG_ALT] = YES;
966: value[HTML_IMG_ALT] = alt;
967: }
968: if (align) {
969: present[HTML_IMG_ALIGN] = YES;
970: value[HTML_IMG_ALIGN] = align;
971: }
972: (*obj->isa->start_element)(obj, HTML_IMG , present, value);
2.7 frystyk 973: /* (*obj->isa->end_element)(obj, HTML_IMG); */
2.5 frystyk 974: }
975:
2.17 frystyk 976: PUBLIC void HTNextID (HTStructured * obj,
2.19 frystyk 977: const char * next_one)
2.1 timbl 978: {
979: BOOL present[HTML_NEXTID_ATTRIBUTES];
2.19 frystyk 980: const char* value[HTML_NEXTID_ATTRIBUTES];
2.1 timbl 981: {
982: int i;
983: for(i=0; i<HTML_NEXTID_ATTRIBUTES; i++)
984: present[i] = NO;
985: }
986: present[HTML_NEXTID_N] = YES;
2.9 timbl 987: value[HTML_NEXTID_N] = next_one;
2.1 timbl 988:
989: (*obj->isa->start_element)(obj, HTML_NEXTID , present, value);
990:
991: }
Webmaster