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