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