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

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.30    ! raff        6: **     @(#) $Id: HTMLPDTD.c,v 2.29 1999/04/02 16:10:36 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.30    ! raff      804:     { "MENU"   , gen_attr,     HTML_GEN_ATTRIBUTES,    SGML_MIXED },
2.29      frystyk   805:     { "META"   , meta_attr,    HTML_META_ATTRIBUTES,   SGML_EMPTY },
2.1       timbl     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