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

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

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.28 ! frystyk 6: **   @(#) $Id: HTMLPDTD.c,v 2.27 1999年01月06日 15:38:47 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.1 timbl 15: #include "HTMLPDTD.h"
 16: 
2.27 frystyk 17: struct _HTStructured {
 18:   HTStructuredClass * isa;
 19:    /* ... */
 20: };
 21: 
 22: /*
 23: **   ENTITY NAMES
2.1 timbl 24: **   This table must be matched exactly with ALL the translation tables
 25: */
2.19 frystyk 26: PRIVATE const char* entities[HTML_ENTITIES] = {
2.1 timbl 27:  "AElig",   /* capital AE diphthong (ligature) */ 
 28:  "Aacute",  /* capital A, acute accent */ 
 29:  "Acirc",   /* capital A, circumflex accent */ 
 30:  "Agrave",  /* capital A, grave accent */ 
 31:  "Aring",   /* capital A, ring */ 
 32:  "Atilde",  /* capital A, tilde */ 
 33:  "Auml",   /* capital A, dieresis or umlaut mark */ 
 34:  "Ccedil",  /* capital C, cedilla */ 
 35:  "ETH",    /* capital Eth, Icelandic */ 
 36:  "Eacute",  /* capital E, acute accent */ 
 37:  "Ecirc",   /* capital E, circumflex accent */ 
 38:  "Egrave",  /* capital E, grave accent */ 
 39:  "Euml",   /* capital E, dieresis or umlaut mark */ 
 40:  "Iacute",  /* capital I, acute accent */ 
 41:  "Icirc",   /* capital I, circumflex accent */ 
 42:  "Igrave",  /* capital I, grave accent */ 
 43:  "Iuml",   /* capital I, dieresis or umlaut mark */ 
 44:  "Ntilde",  /* capital N, tilde */ 
 45:  "Oacute",  /* capital O, acute accent */ 
 46:  "Ocirc",   /* capital O, circumflex accent */ 
 47:  "Ograve",  /* capital O, grave accent */ 
 48:  "Oslash",  /* capital O, slash */ 
 49:  "Otilde",  /* capital O, tilde */ 
 50:  "Ouml",   /* capital O, dieresis or umlaut mark */ 
 51:  "THORN",   /* capital THORN, Icelandic */ 
 52:  "Uacute",  /* capital U, acute accent */ 
 53:  "Ucirc",   /* capital U, circumflex accent */ 
 54:  "Ugrave",  /* capital U, grave accent */ 
 55:  "Uuml",   /* capital U, dieresis or umlaut mark */ 
 56:  "Yacute",  /* capital Y, acute accent */ 
 57:  "aacute",  /* small a, acute accent */ 
 58:  "acirc",   /* small a, circumflex accent */ 
 59:  "aelig",   /* small ae diphthong (ligature) */ 
 60:  "agrave",  /* small a, grave accent */ 
 61:  "amp",    /* ampersand */ 
 62:  "aring",   /* small a, ring */ 
 63:  "atilde",  /* small a, tilde */ 
 64:  "auml",   /* small a, dieresis or umlaut mark */ 
 65:  "ccedil",  /* small c, cedilla */ 
 66:  "eacute",  /* small e, acute accent */ 
 67:  "ecirc",   /* small e, circumflex accent */ 
 68:  "egrave",  /* small e, grave accent */ 
 69:  "eth",    /* small eth, Icelandic */ 
 70:  "euml",   /* small e, dieresis or umlaut mark */ 
 71:  "gt",        /* greater than */ 
 72:  "iacute",  /* small i, acute accent */ 
 73:  "icirc",   /* small i, circumflex accent */ 
 74:  "igrave",  /* small i, grave accent */ 
 75:  "iuml",   /* small i, dieresis or umlaut mark */ 
 76:  "lt",        /* less than */ 
2.21 frystyk 77:  "nbsp",   /* non breaking space */
2.1 timbl 78:  "ntilde",  /* small n, tilde */ 
 79:  "oacute",  /* small o, acute accent */ 
 80:  "ocirc",   /* small o, circumflex accent */ 
 81:  "ograve",  /* small o, grave accent */ 
 82:  "oslash",  /* small o, slash */ 
 83:  "otilde",  /* small o, tilde */ 
2.10 timbl 84:  "ouml",   /* small o, dieresis or umlaut mark */
 85:  "quot",   /* double quote sign - June 1994 */ 
2.1 timbl 86:  "szlig",   /* small sharp s, German (sz ligature) */ 
 87:  "thorn",   /* small thorn, Icelandic */ 
 88:  "uacute",  /* small u, acute accent */ 
 89:  "ucirc",   /* small u, circumflex accent */ 
 90:  "ugrave",  /* small u, grave accent */ 
 91:  "uuml",   /* small u, dieresis or umlaut mark */ 
 92:  "yacute",  /* small y, acute accent */ 
 93:  "yuml",   /* small y, dieresis or umlaut mark */ 
 94: };
 95: 
2.27 frystyk 96: /*
 97: **   ATTRIBUTE LISTS
 98: */
2.1 timbl 99: 
2.27 frystyk 100: PRIVATE HTAttr no_attr[1] = 
 101:    {{ 0 }};
 102: 
 103: PRIVATE HTAttr body_attr[HTML_BODY_ATTRIBUTES+1] = {  /* to catch images */
2.26 frystyk 104:    { "BACKGROUND" },
 105:    { 0 }  /* Terminate list */
 106: };   
 107: 
2.27 frystyk 108: PRIVATE HTAttr frame_attr[HTML_FRAME_ATTRIBUTES+1] = { /* frame attributes */
2.26 frystyk 109:    { "SRC" },
 110:    { 0 }  /* Terminate list */
 111: };
 112: 
2.27 frystyk 113: PRIVATE HTAttr frameset_attr[HTML_FRAMESET_ATTRIBUTES+1] = { /* frameset attributes */
2.26 frystyk 114: 
 115:    { "BORDER" },
 116:    { "BORDERCOLOR" },
 117:    { "COLS" },
 118:    { "FRAMEBORDER" },
 119:    { "ONBLUR" },
 120:    { "ONFOCUS" },
 121:    { "ONLOAD" },
 122:    { "ONUNLOAD" },
 123:    { "ROWS" },   
 124:    { 0 }  /* Terminate list */
 125: };
 126: 
2.27 frystyk 127: PRIVATE HTAttr a_attr[HTML_A_ATTRIBUTES+1] = {     /* Anchor attributes */
2.1 timbl 128:    { "EFFECT" },
 129:    { "HREF"},
 130:    { "ID" },
 131:    { "METHODS" },
 132:    { "NAME" },           /* Should be ID */
 133:    { "PRINT" },
 134:    { "REL" },           /* Relationship */
 135:    { "REV" },           /* Reverse relationship */
 136:    { "SHAPE" },
 137:    { "TITLE" },
 138:    { 0 }  /* Terminate list */
 139: };   
 140: 
2.27 frystyk 141: PRIVATE HTAttr area_attr[HTML_AREA_ATTRIBUTES+1] = {      /* Area attributes */
 142:    { "ALT" },
 143:    { "ACCESSKEY"},
 144:    { "COORDS" },
 145:    { "HREF" },
 146:    { "NOHREF" },
 147:    { "ONBLUR" },
 148:    { "ONFOCUS" },
 149:    { "SHAPE" },
 150:    { "TABINDEX" },
 151:    { 0 }  /* Terminate list */
 152: };   
 153: 
 154: PRIVATE HTAttr base_attr[HTML_BASE_ATTRIBUTES+1] = {  /* BASE attributes */
2.1 timbl 155:    { "HREF"},
 156:    { 0 }  /* Terminate list */
 157: };   
 158: 
 159: 
2.27 frystyk 160: PRIVATE HTAttr changed_attr[] = {
2.1 timbl 161:    { "ID" },
 162:    { "IDREF" },
 163:    { 0 }  /* terminate list */
 164: };
 165: 
2.27 frystyk 166: PRIVATE HTAttr fig_attr[] = {     /* Figures */
2.1 timbl 167:    { "ALIGN" },
 168:    { "ID" },
 169:    { "INDEX" },
 170:    { "ISMAP" },              /* @@@ NO! */
 171:    { "LANG" },
 172:    { "SRC" },
 173:    { 0 }  /* terminate list */
 174: };
 175: 
2.27 frystyk 176: PRIVATE HTAttr form_attr[] = {     /* General, for many things */
2.1 timbl 177:    { "ACTION" },
 178:    { "ID" },
 179:    { "INDEX" },
 180:    { "LANG" },
 181:    { "METHOD" },
 182:    { 0 }  /* terminate list */
 183: };
 184: 
2.27 frystyk 185: PRIVATE HTAttr gen_attr[] = {     /* General, for many things */
2.1 timbl 186:    { "ID" },
 187:    { "INDEX" },
 188:    { "LANG" },
 189:    { 0 }  /* terminate list */
 190: };
 191: 
2.27 frystyk 192: PRIVATE HTAttr htmlplus_attr[] = {       /* wrapper HTMLPLUS */
2.1 timbl 193:    { "FORMS" },
 194:    { "VERSION" },
 195:    { 0 }              /* terminate list */
 196: };
 197: 
2.27 frystyk 198: PRIVATE HTAttr id_attr[2] = {
2.1 timbl 199:    { "ID" },
 200:    { 0 }              /* terminate list */
 201: };
 202: 
2.27 frystyk 203: PRIVATE HTAttr image_attr[HTML_IMAGE_ATTRIBUTES+1] = { /* Image attributes */
2.1 timbl 204:    { "ALIGN" },
 205:    { "ISMAP"},           /* Use HTTP SpaceJump instead */
 206:    { "LANG" },
 207:    { "SEETHRU"},
 208:    { "SRC"},
 209:    { 0 }  /* Terminate list */
 210: };   
 211: 
2.27 frystyk 212: PRIVATE HTAttr img_attr[HTML_IMG_ATTRIBUTES+1] = {   /* IMG attributes */
2.1 timbl 213:    { "ALIGN" },
 214:    { "ALT" },
 215:    { "ISMAP"},           /* Use HTTP SpaceJump instead */
2.26 frystyk 216:    { "LOWSRC"},
2.1 timbl 217:    { "SEETHRU"},
 218:    { "SRC"},
 219:    { 0 }  /* Terminate list */
 220: };   
 221: 
2.27 frystyk 222: PRIVATE HTAttr input_attr[HTML_INPUT_ATTRIBUTES+1] = {
2.1 timbl 223:    { "ALIGN" },
 224:    { "CHECKED" },
 225:    { "DISABLED" },
 226:    { "ERROR" },
2.15 frystyk 227:    { "MAXLENGTH" },        /* WSM bug fix, was MAX */
2.1 timbl 228:    { "MIN" },
 229:    { "NAME" }, 
 230:    { "SIZE" },
 231:    { "SRC" },
 232:    { "TYPE" },
 233:    { "VALUE" },
2.2 timbl 234:    { "0" }
2.1 timbl 235: };
 236: 
2.27 frystyk 237: PRIVATE HTAttr l_attr[] = {
2.1 timbl 238:    { "ALIGN"},
 239:    { "ID" },
 240:    { "LANG" },
 241:    { "INDEX" },
 242:    { 0 }  /* Terminate list */
 243: };
 244: 
2.27 frystyk 245: PRIVATE HTAttr li_attr[] = {
2.1 timbl 246:    { "ID" },
2.23 frystyk 247:    { "INDEX" },
2.1 timbl 248:    { "LANG" },
 249:    { "SRC"},
 250:    { 0 }  /* Terminate list */
 251: };
 252: 
2.27 frystyk 253: PRIVATE HTAttr link_attr[HTML_LINK_ATTRIBUTES+1] = {  /* link attributes */
2.23 frystyk 254:   { "CHARSET"},
 255:   { "HREF"},
 256:   { "HREFLANG"},
 257:   { "MEDIA" },
 258:   { "REL" },     /* Relationship */
 259:   { "REV" },     /* Reverse relationship */
 260:   { "TYPE" },
 261:   { 0 }       /* Terminate list */
2.1 timbl 262: };   
 263: 
2.27 frystyk 264: PRIVATE HTAttr object_attr[HTML_OBJECT_ATTRIBUTES+1] = {    /* object attributes */
 265:   { "ARCHIVE" },
 266:   { "CLASSID" },
 267:   { "CODEBASE" },
 268:   { "CODETYPE" },
 269:   { "DATA" },
 270:   { "DECLARE" },
 271:   { "HIGHT" },
 272:   { "NAME" },
 273:   { "STANDBY" },
 274:   { "TABINDEX" },
 275:   { "TYPE" },
 276:   { "USEMAP" },
 277:   { "WIDTH" },
 278:   { 0 }
 279: };   
 280: 
 281: PRIVATE HTAttr list_attr[] = {
2.1 timbl 282:    { "COMPACT"},
 283:    { "ID" },
 284:    { "LANG" },
 285:    { "INDEX" },
 286:    { 0 }  /* Terminate list */
 287: };
 288: 
2.27 frystyk 289: PRIVATE HTAttr glossary_attr[HTML_DL_ATTRIBUTES+1] = {
2.3 frystyk 290:    { "ID" },
 291:    { "COMPACT " },
 292:    { "INDEX" },
2.1 timbl 293:    { 0 }  /* Terminate list */
 294: };
 295: 
2.28 ! frystyk 296: PRIVATE HTAttr map_attr[HTML_MAP_ATTRIBUTES+1] = {
 ! 297:    { "NAME"},
 ! 298:    { 0 }  /* Terminate list */
 ! 299: };
 ! 300: 
2.27 frystyk 301: PRIVATE HTAttr meta_attr[HTML_META_ATTRIBUTES+1] = {
2.24 frystyk 302:   { "CONTENT"},
 303:   { "HTTP-EQUIV"},
 304:   { "NAME"},
 305:   { "SCHEME" },
 306:   { 0 }       /* Terminate list */
 307: };   
 308: 
2.27 frystyk 309: PRIVATE HTAttr nextid_attr[HTML_NEXTID_ATTRIBUTES+1] = {
2.1 timbl 310:    { "N" },
 311:    { 0 }  /* Terminate list */
 312: };
 313: 
2.27 frystyk 314: PRIVATE HTAttr note_attr[HTML_NOTE_ATTRIBUTES+1] = {  /* Footnotes etc etc */
2.1 timbl 315:    { "ID" },
 316:    { "INDEX" },
 317:    { "LANG" },
 318:    { "ROLE" },
 319:    { 0 }  /* terminate list */
 320: };
 321: 
2.27 frystyk 322: PRIVATE HTAttr option_attr[HTML_OPTION_ATTRIBUTES+1] = {
2.1 timbl 323:    { "DISABLED" },
 324:    { "LANG" },
 325:    { "SELECTED" },
 326:    { 0 }
 327: };
 328: 
2.27 frystyk 329: PRIVATE HTAttr render_attr[HTML_RENDER_ATTRIBUTES+1] = {
2.1 timbl 330:    { "STYLE" },
 331:    { "TAG" },
 332:    { 0 }  /* Terminate list */
 333: };
 334: 
2.27 frystyk 335: PRIVATE HTAttr select_attr[HTML_SELECT_ATTRIBUTES+1] = {
2.1 timbl 336:    { "ERROR" },
 337:    { "LANG" },
2.15 frystyk 338:    { "MULTIPLE" },         /* WSM bug fix, was SEVERAL */
2.1 timbl 339:    { "NAME" },
2.15 frystyk 340:    { "SIZE" },           /* WSM bug fix, missing */
2.1 timbl 341:    { 0 },
 342: };
 343: 
2.27 frystyk 344: PRIVATE HTAttr tab_attr[HTML_TAB_ATTRIBUTES+1] = {
2.1 timbl 345:    { "ALIGN" },
 346:    { "AT" },
 347:    { 0 }
 348: };
 349: 
2.27 frystyk 350: PRIVATE HTAttr table_attr[HTML_TABLE_ATTRIBUTES+1] = {
2.1 timbl 351:    { "BORDER" },
 352:    { "ID" },
 353:    { "INDEX" },
 354:    { "LANG" },
 355:    { 0 }
 356: };
 357: 
2.27 frystyk 358: PRIVATE HTAttr td_attr[HTML_TD_ATTRIBUTES+1] = {
2.1 timbl 359:    { "ALIGN" },
 360:    { "COLSPAN" },
 361:    { "ROWSPAN" },
 362:    { "TAG" },
 363:    { 0 }
 364: };
 365: 
2.27 frystyk 366: PRIVATE HTAttr textarea_attr[HTML_TEXTAREA_ATTRIBUTES+1] = {
2.1 timbl 367:    { "COLS" },
 368:    { "DISABLED" },
 369:    { "ERROR" },
 370:    { "LANG" },
 371:    { "NAME" },
 372:    { "ROWS" },
 373:    { 0 }
 374: };
 375: 
2.27 frystyk 376: PRIVATE HTAttr ul_attr[HTML_UL_ATTRIBUTES+1] = {
2.1 timbl 377:    { "COMPACT" },
 378:    { "ID" },
 379:    { "INDEX" },
 380:    { "LANG" },
 381:    { "PLAIN" },
 382:    { "WRAP" },
 383:    { 0 }
 384: };
 385: 
2.27 frystyk 386: /*
 387: **   ELEMENTS
2.1 timbl 388: **   Must match definitions in HTMLPDTD.html!
 389: **   Must be in alphabetical order.
 390: **
 391: **  Name,  Attributes,       content
 392: */
2.27 frystyk 393: PRIVATE HTTag tags[HTML_ELEMENTS] = {
2.1 timbl 394:   { "A"   , a_attr,    HTML_A_ATTRIBUTES,   SGML_MIXED },
 395:   { "ABBREV" , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 396:   { "ABSTRACT" , gen_attr,  HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 397:   { "ACRONYM"    , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 398:   { "ADDED" , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 399:   { "ADDRESS"    , no_attr,   0,           SGML_MIXED },
2.27 frystyk 400:   { "AREA"  , area_attr,  HTML_AREA_ATTRIBUTES,  SGML_EMPTY },
2.1 timbl 401:   { "ARG"  , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
2.28 ! frystyk 402:   { "B"   , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
2.22 frystyk 403:   { "BASE"  , base_attr,  HTML_BASE_ATTRIBUTES,  SGML_EMPTY },
2.28 ! frystyk 404:   { "BIG"  , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
2.1 timbl 405:   { "BLOCKQUOTE", no_attr,  0,           SGML_MIXED },
2.26 frystyk 406:   { "BODY"  , body_attr,  HTML_BODY_ATTRIBUTES,  SGML_MIXED },
2.1 timbl 407:   { "BOX"  , no_attr,   0,           SGML_MIXED },
 408:   { "BR"   , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_EMPTY },
 409:   { "BYLINE" , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 410:   { "CAPTION"    , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 411:   { "CHANGED"    , changed_attr, HTML_CHANGED_ATTRIBUTES, SGML_MIXED },
 412:   { "CITE"  , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 413:   { "CMD"  , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 414:   { "CODE"  , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 415:   { "COMMENT"    , no_attr,   0,           SGML_MIXED },
 416:   { "DD"   , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_EMPTY },
 417:   { "DFN"  , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 418:   { "DIR"  , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
2.28 ! frystyk 419:   { "DIV"  , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
2.1 timbl 420:   { "DL"   , glossary_attr,HTML_DL_ATTRIBUTES,   SGML_MIXED },
 421:   { "DT"   , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_EMPTY },
 422:   { "EM"   , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 423:   { "FIG"  , fig_attr,   HTML_FIG_ATTRIBUTES,  SGML_MIXED },
 424:   { "FOOTNOTE" , gen_attr,  HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 425:   { "FORM"  , form_attr,  HTML_FORM_ATTRIBUTES,  SGML_MIXED },
2.26 frystyk 426:   { "FRAME" , frame_attr,  HTML_FRAME_ATTRIBUTES, SGML_EMPTY },
 427:   { "FRAMESET", frameset_attr,HTML_FRAMESET_ATTRIBUTES, SGML_EMPTY },
2.1 timbl 428:   { "H1"   , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 429:   { "H2"   , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 430:   { "H3"   , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 431:   { "H4"   , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 432:   { "H5"   , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 433:   { "H6"   , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 434:   { "H7"   , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 435:   { "HEAD"  , no_attr,   0,           SGML_MIXED },
 436:   { "HR"   , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_EMPTY },
 437:   { "HTML"  , no_attr,   0,           SGML_MIXED }, /* */
2.2 timbl 438:   { "HTMLPLUS", htmlplus_attr,HTML_HTMLPLUS_ATTRIBUTES, SGML_MIXED },
2.1 timbl 439:   { "I"   , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 440:   { "IMAGE" , image_attr,  HTML_IMAGE_ATTRIBUTES, SGML_EMPTY },
2.7 frystyk 441:   { "IMG"   , img_attr,  HTML_IMG_ATTRIBUTES,  SGML_EMPTY },
2.1 timbl 442:   { "INPUT" , input_attr,  HTML_INPUT_ATTRIBUTES, SGML_EMPTY },
 443:   { "ISINDEX" , no_attr,   0,           SGML_EMPTY },
 444:   { "KBD"  , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 445:   { "L"   , l_attr,    HTML_L_ATTRIBUTES,   SGML_MIXED },
 446:   { "LI"   , li_attr,   HTML_LI_ATTRIBUTES,   SGML_EMPTY },
 447:   { "LINK"  , link_attr,  HTML_LINK_ATTRIBUTES,  SGML_EMPTY },
 448:   { "LISTING"    , no_attr,   0,           SGML_LITERAL },
 449:   { "LIT"  , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
2.28 ! frystyk 450:   { "MAP"  , map_attr,   HTML_MAP_ATTRIBUTES,  SGML_MIXED },
2.1 timbl 451:   { "MARGIN" , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 452:   { "MATH"  , id_attr,   HTML_ID_ATTRIBUTE,   SGML_MIXED },
 453:   { "MENU"  , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
2.24 frystyk 454:   { "META"  , meta_attr,  HTML_META_ATTRIBUTES,  SGML_EMPTY },
2.1 timbl 455:   { "NEXTID" , nextid_attr, 1,           SGML_EMPTY },
 456:   { "NOTE"  , note_attr,  HTML_NOTE_ATTRIBUTES,  SGML_EMPTY },
2.26 frystyk 457:   { "NOFRAMES", no_attr,   0,           SGML_MIXED },
2.27 frystyk 458:   { "OBJECT" , object_attr, HTML_OBJECT_ATTRIBUTES, SGML_MIXED },
2.1 timbl 459:   { "OL"   , list_attr,  HTML_LIST_ATTRIBUTES,  SGML_MIXED },
2.8 timbl 460:   { "OPTION" , option_attr, HTML_OPTION_ATTRIBUTES, SGML_EMPTY },/*Mixed?*/
2.1 timbl 461:   { "OVER"  , no_attr,   0,           SGML_MIXED },
 462:   { "P"   , l_attr,    HTML_L_ATTRIBUTES,   SGML_EMPTY },
 463:   { "PERSON" , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 464:   { "PLAINTEXT", no_attr,  0,           SGML_LITERAL },
 465:   { "PRE"  , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 466:   { "Q"   , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 467:   { "QUOTE" , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 468:   { "RENDER" , render_attr, HTML_RENDER_ATTRIBUTES, SGML_MIXED },
 469:   { "REMOVED"    , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 470:   { "S"   , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 471:   { "SAMP"  , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 472:   { "SELECT" , select_attr, HTML_SELECT_ATTRIBUTES, SGML_MIXED },
2.28 ! frystyk 473:   { "SMALL" , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 ! 474:   { "SPAN"  , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
2.1 timbl 475:   { "STRONG" , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 476:   { "SUB"  , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 477:   { "SUP"  , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 478:   { "TAB"  , tab_attr,   HTML_TAB_ATTRIBUTES,  SGML_EMPTY },
 479:   { "TABLE" , table_attr,  HTML_TABLE_ATTRIBUTES, SGML_MIXED },
 480:   { "TD"   , td_attr,   HTML_TABLE_ATTRIBUTES, SGML_MIXED },
 481:   { "TEXTAREA", textarea_attr,HTML_TEXTAREA_ATTRIBUTES,SGML_MIXED},
 482:   { "TH"   , td_attr,   HTML_TD_ATTRIBUTES,   SGML_MIXED },
2.4 frystyk 483:   { "TITLE" , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
2.1 timbl 484:   { "TR"   , id_attr,   HTML_ID_ATTRIBUTE,   SGML_MIXED },
 485:   { "TT"   , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 486:   { "U"   , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 487:   { "UL"   , ul_attr,   HTML_UL_ATTRIBUTES,   SGML_MIXED },
 488:   { "VAR"  , gen_attr,   HTML_GEN_ATTRIBUTES,  SGML_MIXED },
 489:   { "XMP"  , no_attr,   0,           SGML_LITERAL }
 490: };
 491: 
2.27 frystyk 492: PRIVATE SGML_dtd HTMLP_dtd = {
2.18 frystyk 493:   tags,
2.27 frystyk 494:   HTML_ELEMENTS,
2.18 frystyk 495:   entities,
 496:   sizeof(entities)/sizeof(char**)
2.1 timbl 497: };
 498: 
2.27 frystyk 499: PRIVATE SGML_dtd * DTD = &HTMLP_dtd;
 500: 
 501: PUBLIC SGML_dtd * HTML_dtd (void)
 502: {
 503:   return DTD;
 504: }
 505: 
 506: PUBLIC BOOL HTML_setDtd (const SGML_dtd * dtd)
 507: {
 508:   if (dtd) {
 509:    DTD = (SGML_dtd *) dtd;
 510:    return YES;
 511:   }
 512:   return NO;
 513: }
2.1 timbl 514: 
 515: /*   Start anchor element
 516: **   --------------------
 517: **
 518: **   It is kinda convenient to have a particulr routine for
 519: **   starting an anchor element, as everything else for HTML is
 520: **   simple anyway.
 521: */
2.17 frystyk 522: PUBLIC void HTStartAnchor (HTStructured * obj,
2.19 frystyk 523:        const char * name,
 524:        const char * href)
2.1 timbl 525: {
 526:   BOOL        present[HTML_A_ATTRIBUTES];
2.19 frystyk 527:   const char*        value[HTML_A_ATTRIBUTES];
2.1 timbl 528:   
 529:   {
 530:    int i;
 531:    for(i=0; i<HTML_A_ATTRIBUTES; i++)
 532:      present[i] = NO;
 533:   }
 534:   if (name) {
 535:    present[HTML_A_NAME] = YES;
 536:    value[HTML_A_NAME] = name;
 537:   }
 538:   if (href) {
 539:     present[HTML_A_HREF] = YES;
 540:     value[HTML_A_HREF] = href;
 541:   }
 542:   
 543:   (*obj->isa->start_element)(obj, HTML_A , present, value);
 544: 
 545: }
 546: 
2.5 frystyk 547: /*   Put image element
 548: **   --------------------
 549: **
 550: **   Hopefully as usefull as HTStartAnchor. Henrik 23/03-94
 551: */
2.17 frystyk 552: PUBLIC void HTMLPutImg (HTStructured * obj,
2.19 frystyk 553:               const char * src,
 554:               const char * alt,
 555:               const char * align)
2.5 frystyk 556: {
 557:   BOOL        present[HTML_IMG_ATTRIBUTES];
2.19 frystyk 558:   const char*        value[HTML_IMG_ATTRIBUTES];
2.5 frystyk 559:   
 560:   {
 561:    int i;
 562:    for(i=0; i<HTML_IMG_ATTRIBUTES; i++)
 563:      present[i] = NO;
 564:   }
 565:   if (src) {
 566:    present[HTML_IMG_SRC] = YES;
 567:    value[HTML_IMG_SRC] = src;
 568:   }
 569:   if (alt) {
 570:     present[HTML_IMG_ALT] = YES;
 571:     value[HTML_IMG_ALT] = alt;
 572:   }
 573:   if (align) {
 574:     present[HTML_IMG_ALIGN] = YES;
 575:     value[HTML_IMG_ALIGN] = align;
 576:   }
 577:   (*obj->isa->start_element)(obj, HTML_IMG , present, value);
2.7 frystyk 578:   /* (*obj->isa->end_element)(obj, HTML_IMG); */
2.5 frystyk 579: }
 580: 
2.17 frystyk 581: PUBLIC void HTNextID (HTStructured * obj,
2.19 frystyk 582:        const char *  next_one)
2.1 timbl 583: {
 584:   BOOL        present[HTML_NEXTID_ATTRIBUTES];
2.19 frystyk 585:   const char*        value[HTML_NEXTID_ATTRIBUTES];
2.1 timbl 586:   {
 587:    int i;
 588:    for(i=0; i<HTML_NEXTID_ATTRIBUTES; i++)
 589:      present[i] = NO;
 590:   }
 591:   present[HTML_NEXTID_N] = YES;
2.9 timbl 592:   value[HTML_NEXTID_N] = next_one;
2.1 timbl 593:   
 594:   (*obj->isa->start_element)(obj, HTML_NEXTID , present, value);
 595: 
 596: }

Webmaster

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