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

Annotation of libwww/Library/src/HTMLPDTD.c, revision 2.31

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.31 ! raff 6: **   @(#) $Id: HTMLPDTD.c,v 2.30 1999年06月22日 22:20:04 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 },
 874:   { "TD"   , td_attr,   HTML_TABLE_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

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