/* * htmltags.h * * libhtml - HTML->X renderer * Copyright (c) 1994-1997, John Kilburg * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ typedef enum { MARKUP_NONE = 0x00000000, MARKUP_EMPTY = 0x00000001, MARKUP_CLAMP = 0x00000002, MARKUP_FAKE = 0x00000004, MARKUP_SPACER = 0x00000008, MARKUP_TWOPASS = 0x00000010 } HTMLMarkupFlags; struct HTMLTagP { char *name; HTMLTagID id; /* rendering functions */ HTMLTagRenderProc b, e; HTMLTagDataProc d; HTMLTagAddBoxProc a; HTMLTagWidthProc w; /* flags for whatever seems convienent to make a flag */ HTMLMarkupFlags mflags; /* markup handling functions */ HTMLTagAcceptProc m; HTMLTagInsertProc p; HTMLTagClampProc c; }; #define HTMLTestM(a, b) (((a)->mflags & (b)) != 0) #define HTMLClearM(a, b) ((a)->mflags &= ~(b)) #define HTMLSetM(a, b) ((a)->mflags |= (b)) static struct HTMLTagP tlist[] = { /* misc.c */ { "h1", TAG_H1, HTMLHxBegin, HTMLHxEnd, HTMLFillData, NULL, NULL, MARKUP_CLAMP | MARKUP_SPACER, NULL, NULL, NULL }, { "h2", TAG_H2, HTMLHxBegin, HTMLHxEnd, HTMLFillData, NULL, NULL, MARKUP_CLAMP | MARKUP_SPACER, NULL, NULL, NULL }, { "h3", TAG_H3, HTMLHxBegin, HTMLHxEnd, HTMLFillData, NULL, NULL, MARKUP_CLAMP | MARKUP_SPACER, NULL, NULL, NULL }, { "h4", TAG_H4, HTMLHxBegin, HTMLHxEnd, HTMLFillData, NULL, NULL, MARKUP_CLAMP | MARKUP_SPACER, NULL, NULL, NULL }, { "h5", TAG_H5, HTMLHxBegin, HTMLHxEnd, HTMLFillData, NULL, NULL, MARKUP_CLAMP | MARKUP_SPACER, NULL, NULL, NULL }, { "h6", TAG_H6, HTMLHxBegin, HTMLHxEnd, HTMLFillData, NULL, NULL, MARKUP_CLAMP | MARKUP_SPACER, NULL, NULL, NULL }, { "plaintext", TAG_PLAINTEXT, HTMLPlainBegin, HTMLPlainEnd, HTMLPlainData, NULL, NULL, MARKUP_CLAMP | MARKUP_SPACER, NULL, NULL, NULL }, { "listing", TAG_LISTING, HTMLPlainBegin, HTMLPlainEnd, HTMLPlainData, NULL, NULL, MARKUP_CLAMP | MARKUP_SPACER, NULL, NULL, NULL }, { "pre", TAG_PRE, HTMLPreBegin, HTMLPreEnd, HTMLPreData, NULL, NULL, MARKUP_CLAMP | MARKUP_SPACER, NULL, NULL, NULL }, { "xmp", TAG_XMP, HTMLPlainBegin, HTMLPlainEnd, HTMLPlainData, NULL, NULL, MARKUP_CLAMP | MARKUP_SPACER, NULL, NULL, NULL }, { "center", TAG_CENTER, HTMLCenterBegin, HTMLCenterEnd, HTMLFillData, NULL, NULL, MARKUP_NONE, NULL, NULL, NULL }, { "div", TAG_DIV, HTMLDivBegin, HTMLDivEnd, HTMLFillData, NULL, NULL, MARKUP_NONE, NULL, NULL, NULL }, { "blockquote", TAG_BLOCKQUOTE, HTMLBQBegin, HTMLBQEnd, HTMLFillData, NULL, NULL, MARKUP_CLAMP, NULL, NULL, NULL }, { "p", TAG_P, HTMLParaBegin, HTMLParaEnd, HTMLFillData, NULL, NULL, MARKUP_CLAMP | MARKUP_SPACER, NULL, HTMLParaInsert, NULL }, { "address", TAG_ADDRESS, HTMLAddressBegin, HTMLAddressEnd, HTMLFillData, NULL, NULL, MARKUP_NONE, NULL, NULL, NULL }, { "hr", TAG_HR, HTMLHorizontalRule, NULL, NULL, NULL, NULL, MARKUP_EMPTY, NULL, NULL, NULL }, { "b", TAG_B, HTMLFontBegin, NULL, HTMLFillData, NULL, NULL, MARKUP_NONE, NULL, NULL, NULL }, { "em", TAG_EM, HTMLFontBegin, NULL, HTMLFillData, NULL, NULL, MARKUP_NONE, NULL, NULL, NULL }, { "strong", TAG_STRONG, HTMLFontBegin, NULL, HTMLFillData, NULL, NULL, MARKUP_NONE, NULL, NULL, NULL }, { "tt", TAG_TT, HTMLFontBegin, NULL, HTMLFillData, NULL, NULL, MARKUP_NONE, NULL, NULL, NULL }, { "cite", TAG_CITE, HTMLFontBegin, NULL, HTMLFillData, NULL, NULL, MARKUP_NONE, NULL, NULL, NULL }, { "i", TAG_I, HTMLFontBegin, NULL, HTMLFillData, NULL, NULL, MARKUP_NONE, NULL, NULL, NULL }, { "kbd", TAG_KBD, HTMLFontBegin, NULL, HTMLFillData, NULL, NULL, MARKUP_NONE, NULL, NULL, NULL }, { "a", TAG_A, HTMLAnchorBegin, NULL, HTMLFillData, NULL, NULL, MARKUP_NONE, NULL, HTMLAnchorInsert, NULL }, { "br", TAG_BR, HTMLBreak, NULL, NULL, NULL, NULL, MARKUP_EMPTY, NULL, NULL, NULL }, /* inline.c */ { "img", TAG_IMG, HTMLImg, NULL, NULL, NULL, NULL, MARKUP_EMPTY, NULL, HTMLImgInsert, NULL }, /* list.c */ { "ul", TAG_UL, HTMLULBegin, HTMLListEnd, NULL, HTMLListAddBox, NULL, MARKUP_CLAMP | MARKUP_SPACER, HTMLListAccept, NULL, NULL }, { "dir", TAG_UL, HTMLULBegin, HTMLListEnd, NULL, HTMLListAddBox, NULL, MARKUP_CLAMP | MARKUP_SPACER, HTMLListAccept, NULL, NULL }, { "menu", TAG_UL, HTMLULBegin, HTMLListEnd, NULL, HTMLListAddBox, NULL, MARKUP_CLAMP | MARKUP_SPACER, HTMLListAccept, NULL, NULL }, { "ol", TAG_OL, HTMLOLBegin, HTMLListEnd, NULL, HTMLListAddBox, NULL, MARKUP_CLAMP | MARKUP_SPACER, HTMLListAccept, NULL, NULL }, { "dl", TAG_DL, HTMLDLBegin, HTMLListEnd, NULL, HTMLListAddBox, NULL, MARKUP_CLAMP | MARKUP_SPACER, HTMLDLAccept, NULL, NULL }, { "li", TAG_LI, HTMLLIBegin, HTMLItemEnd, HTMLFillData, HTMLItemAddBox, HTMLItemWidth, MARKUP_CLAMP, NULL, HTMLLIInsert, NULL }, { "dt", TAG_DT, HTMLDTBegin, HTMLItemEnd, HTMLFillData, HTMLItemAddBox, HTMLItemWidth, MARKUP_CLAMP, NULL, HTMLDTInsert, NULL }, { "dd", TAG_DD, HTMLDDBegin, HTMLItemEnd, HTMLFillData, HTMLItemAddBox, HTMLItemWidth, MARKUP_CLAMP, NULL, HTMLDDInsert, NULL }, /* head.c */ { "title", TAG_TITLE, NULL, HTMLTitleEnd, NULL, NULL, NULL, MARKUP_CLAMP, NULL, NULL, NULL }, { "style", TAG_STYLE, NULL, NULL, NULL, NULL, NULL, MARKUP_CLAMP, NULL, NULL, NULL }, { "script", TAG_SCRIPT, NULL, NULL, NULL, NULL, NULL, MARKUP_CLAMP, NULL, NULL, NULL }, { "base", TAG_BASE, HTMLBase, NULL, NULL, NULL, NULL, MARKUP_EMPTY, NULL, NULL, NULL }, { "meta", TAG_META, HTMLMeta, NULL, NULL, NULL, NULL, MARKUP_EMPTY, NULL, NULL, NULL }, /* form.c */ { "input", TAG_INPUT, HTMLInput, NULL, NULL, NULL, NULL, MARKUP_EMPTY, NULL, NULL, NULL }, { "select", TAG_SELECT, HTMLSelectBegin, HTMLSelectEnd, NULL, NULL, NULL, MARKUP_CLAMP, NULL, NULL, NULL }, { "option", TAG_OPTION, NULL, HTMLOptionEnd, NULL, NULL, NULL, MARKUP_NONE, NULL, NULL, NULL }, { "textarea", TAG_TEXTAREA, NULL, HTMLTextareaEnd, NULL, NULL, NULL, MARKUP_CLAMP, NULL, NULL, NULL }, { "form", TAG_FORM, HTMLFormBegin, HTMLFormEnd, HTMLFillData, NULL, NULL, MARKUP_CLAMP, NULL, NULL, NULL }, /* table.c */ { "table", TAG_TABLE, HTMLTableBegin, HTMLTableEnd, NULL, HTMLTableAddBox, NULL, MARKUP_CLAMP | MARKUP_SPACER | MARKUP_TWOPASS, HTMLTableAccept, NULL, NULL }, { "tr", TAG_TR, HTMLTRBegin, HTMLTREnd, NULL, NULL, NULL, MARKUP_CLAMP, HTMLTRAccept, HTMLTRInsert, HTMLTRClamp }, { "th", TAG_TH, HTMLTDBegin, HTMLTDEnd, HTMLFillData, HTMLTDAddBox, HTMLTDWidth, MARKUP_CLAMP, NULL, HTMLTDInsert, HTMLTDClamp }, { "td", TAG_TD, HTMLTDBegin, HTMLTDEnd, HTMLFillData, HTMLTDAddBox, HTMLTDWidth, MARKUP_CLAMP, NULL, HTMLTDInsert, HTMLTDClamp }, /* map.c */ { "map", TAG_MAP, HTMLMapBegin, HTMLMapEnd, NULL, NULL, NULL, MARKUP_CLAMP, HTMLMapAccept, NULL, NULL }, { "area", TAG_AREA, HTMLAreaBegin, NULL, NULL, NULL, NULL, MARKUP_EMPTY, NULL, HTMLAreaInsert, NULL }, /* frame.c */ { "iframe", TAG_IFRAME, HTMLIFrame, NULL, NULL, NULL, NULL, MARKUP_CLAMP, NULL, NULL, NULL }, { "frame", TAG_FRAME, HTMLFrame, NULL, NULL, NULL, NULL, MARKUP_EMPTY, NULL, HTMLFrameInsert, NULL }, { "frameset", TAG_FRAMESET, HTMLFrameSetBegin, HTMLFrameSetEnd, NULL, NULL, NULL, MARKUP_CLAMP, HTMLFrameSetAccept, HTMLFrameSetInsert, NULL }, { "noframes", TAG_NOFRAMES, HTMLNoFramesBegin, HTMLNoFramesEnd, NULL, NULL, NULL, MARKUP_CLAMP, NULL, NULL, NULL }, /* Internal tags */ { "xxx-document", TAG_DOCUMENT, HTMLDocumentBegin, HTMLDocumentEnd, HTMLFillData, HTMLDocumentAddBox, HTMLDocumentWidth, MARKUP_FAKE, NULL, NULL, NULL } }; static int tlist_len = sizeof(tlist) / sizeof(tlist[0]);