[BACK] Return to HTMLPDTD.c CVS log [TXT] [DIR] Up to [Public] / libwww / Library / src

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

AltStyle によって変換されたページ (->オリジナル) /