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

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

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

Webmaster

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