You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
248 lines
9.5 KiB
248 lines
9.5 KiB
7 years ago
|
#ifndef __TAGS_H__
|
||
|
#define __TAGS_H__
|
||
|
|
||
|
/* tags.h -- recognize HTML tags
|
||
|
|
||
|
(c) 1998-2006 (W3C) MIT, ERCIM, Keio University
|
||
|
See tidy.h for the copyright notice.
|
||
|
|
||
|
The HTML tags are stored as 8 bit ASCII strings.
|
||
|
Use lookupw() to find a tag given a wide char string.
|
||
|
|
||
|
*/
|
||
|
|
||
|
#include "forward.h"
|
||
|
#include "attrdict.h"
|
||
|
|
||
|
typedef void (Parser)( TidyDocImpl* doc, Node *node, GetTokenMode mode );
|
||
|
typedef void (CheckAttribs)( TidyDocImpl* doc, Node *node );
|
||
|
|
||
|
/*
|
||
|
Tag dictionary node
|
||
|
*/
|
||
|
|
||
|
/* types of tags that the user can define */
|
||
|
typedef enum
|
||
|
{
|
||
|
tagtype_null = 0,
|
||
|
tagtype_empty = 1,
|
||
|
tagtype_inline = 2,
|
||
|
tagtype_block = 4,
|
||
|
tagtype_pre = 8
|
||
|
} UserTagType;
|
||
|
|
||
|
struct _Dict
|
||
|
{
|
||
|
TidyTagId id;
|
||
|
tmbstr name;
|
||
|
uint versions;
|
||
|
AttrVersion const * attrvers;
|
||
|
uint model;
|
||
|
Parser* parser;
|
||
|
CheckAttribs* chkattrs;
|
||
|
Dict* next;
|
||
|
};
|
||
|
|
||
|
#if !defined(ELEMENT_HASH_LOOKUP)
|
||
|
#define ELEMENT_HASH_LOOKUP 1
|
||
|
#endif
|
||
|
|
||
|
#if ELEMENT_HASH_LOOKUP
|
||
|
enum
|
||
|
{
|
||
|
ELEMENT_HASH_SIZE=178u
|
||
|
};
|
||
|
|
||
|
struct _DictHash
|
||
|
{
|
||
|
Dict const* tag;
|
||
|
struct _DictHash* next;
|
||
|
};
|
||
|
|
||
|
typedef struct _DictHash DictHash;
|
||
|
#endif
|
||
|
|
||
|
struct _TidyTagImpl
|
||
|
{
|
||
|
Dict* xml_tags; /* placeholder for all xml tags */
|
||
|
Dict* declared_tag_list; /* User declared tags */
|
||
|
#if ELEMENT_HASH_LOOKUP
|
||
|
DictHash* hashtab[ELEMENT_HASH_SIZE];
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
typedef struct _TidyTagImpl TidyTagImpl;
|
||
|
|
||
|
/* interface for finding tag by name */
|
||
|
const Dict* TY_(LookupTagDef)( TidyTagId tid );
|
||
|
Bool TY_(FindTag)( TidyDocImpl* doc, Node *node );
|
||
|
Parser* TY_(FindParser)( TidyDocImpl* doc, Node *node );
|
||
|
void TY_(DefineTag)( TidyDocImpl* doc, UserTagType tagType, ctmbstr name );
|
||
|
void TY_(FreeDeclaredTags)( TidyDocImpl* doc, UserTagType tagType ); /* tagtype_null to free all */
|
||
|
|
||
|
TidyIterator TY_(GetDeclaredTagList)( TidyDocImpl* doc );
|
||
|
ctmbstr TY_(GetNextDeclaredTag)( TidyDocImpl* doc, UserTagType tagType,
|
||
|
TidyIterator* iter );
|
||
|
|
||
|
void TY_(InitTags)( TidyDocImpl* doc );
|
||
|
void TY_(FreeTags)( TidyDocImpl* doc );
|
||
|
void TY_(AdjustTags)( TidyDocImpl *doc ); /* if NOT HTML5 DOCTYPE, fall back to HTML4 legacy mode */
|
||
|
void TY_(ResetTags)( TidyDocImpl *doc ); /* set table to HTML5 mode */
|
||
|
Bool TY_(IsHTML5Mode)( TidyDocImpl *doc );
|
||
|
|
||
|
/* Parser methods for tags */
|
||
|
|
||
|
Parser TY_(ParseHTML);
|
||
|
Parser TY_(ParseHead);
|
||
|
Parser TY_(ParseTitle);
|
||
|
Parser TY_(ParseScript);
|
||
|
Parser TY_(ParseFrameSet);
|
||
|
Parser TY_(ParseNoFrames);
|
||
|
Parser TY_(ParseBody);
|
||
|
Parser TY_(ParsePre);
|
||
|
Parser TY_(ParseList);
|
||
|
Parser TY_(ParseDefList);
|
||
|
Parser TY_(ParseBlock);
|
||
|
Parser TY_(ParseInline);
|
||
|
Parser TY_(ParseEmpty);
|
||
|
Parser TY_(ParseTableTag);
|
||
|
Parser TY_(ParseColGroup);
|
||
|
Parser TY_(ParseRowGroup);
|
||
|
Parser TY_(ParseRow);
|
||
|
Parser TY_(ParseSelect);
|
||
|
Parser TY_(ParseOptGroup);
|
||
|
Parser TY_(ParseText);
|
||
|
Parser TY_(ParseDatalist);
|
||
|
Parser TY_(ParseNamespace);
|
||
|
|
||
|
CheckAttribs TY_(CheckAttributes);
|
||
|
|
||
|
/* 0 == TidyTag_UNKNOWN */
|
||
|
#define TagId(node) ((node) && (node)->tag ? (node)->tag->id : TidyTag_UNKNOWN)
|
||
|
#define TagIsId(node, tid) ((node) && (node)->tag && (node)->tag->id == tid)
|
||
|
|
||
|
Bool TY_(nodeIsText)( Node* node );
|
||
|
Bool TY_(nodeIsElement)( Node* node );
|
||
|
|
||
|
Bool TY_(nodeHasText)( TidyDocImpl* doc, Node* node );
|
||
|
|
||
|
#if 0
|
||
|
/* Compare & result to operand. If equal, then all bits
|
||
|
** requested are set.
|
||
|
*/
|
||
|
Bool nodeMatchCM( Node* node, uint contentModel );
|
||
|
#endif
|
||
|
|
||
|
/* True if any of the bits requested are set.
|
||
|
*/
|
||
|
Bool TY_(nodeHasCM)( Node* node, uint contentModel );
|
||
|
|
||
|
Bool TY_(nodeCMIsBlock)( Node* node );
|
||
|
Bool TY_(nodeCMIsInline)( Node* node );
|
||
|
Bool TY_(nodeCMIsEmpty)( Node* node );
|
||
|
|
||
|
|
||
|
Bool TY_(nodeIsHeader)( Node* node ); /* H1, H2, ..., H6 */
|
||
|
uint TY_(nodeHeaderLevel)( Node* node ); /* 1, 2, ..., 6 */
|
||
|
|
||
|
#define nodeIsHTML( node ) TagIsId( node, TidyTag_HTML )
|
||
|
#define nodeIsHEAD( node ) TagIsId( node, TidyTag_HEAD )
|
||
|
#define nodeIsTITLE( node ) TagIsId( node, TidyTag_TITLE )
|
||
|
#define nodeIsBASE( node ) TagIsId( node, TidyTag_BASE )
|
||
|
#define nodeIsMETA( node ) TagIsId( node, TidyTag_META )
|
||
|
#define nodeIsBODY( node ) TagIsId( node, TidyTag_BODY )
|
||
|
#define nodeIsFRAMESET( node ) TagIsId( node, TidyTag_FRAMESET )
|
||
|
#define nodeIsFRAME( node ) TagIsId( node, TidyTag_FRAME )
|
||
|
#define nodeIsIFRAME( node ) TagIsId( node, TidyTag_IFRAME )
|
||
|
#define nodeIsNOFRAMES( node ) TagIsId( node, TidyTag_NOFRAMES )
|
||
|
#define nodeIsHR( node ) TagIsId( node, TidyTag_HR )
|
||
|
#define nodeIsH1( node ) TagIsId( node, TidyTag_H1 )
|
||
|
#define nodeIsH2( node ) TagIsId( node, TidyTag_H2 )
|
||
|
#define nodeIsPRE( node ) TagIsId( node, TidyTag_PRE )
|
||
|
#define nodeIsLISTING( node ) TagIsId( node, TidyTag_LISTING )
|
||
|
#define nodeIsP( node ) TagIsId( node, TidyTag_P )
|
||
|
#define nodeIsUL( node ) TagIsId( node, TidyTag_UL )
|
||
|
#define nodeIsOL( node ) TagIsId( node, TidyTag_OL )
|
||
|
#define nodeIsDL( node ) TagIsId( node, TidyTag_DL )
|
||
|
#define nodeIsDIR( node ) TagIsId( node, TidyTag_DIR )
|
||
|
#define nodeIsLI( node ) TagIsId( node, TidyTag_LI )
|
||
|
#define nodeIsDT( node ) TagIsId( node, TidyTag_DT )
|
||
|
#define nodeIsDD( node ) TagIsId( node, TidyTag_DD )
|
||
|
#define nodeIsTABLE( node ) TagIsId( node, TidyTag_TABLE )
|
||
|
#define nodeIsCAPTION( node ) TagIsId( node, TidyTag_CAPTION )
|
||
|
#define nodeIsTD( node ) TagIsId( node, TidyTag_TD )
|
||
|
#define nodeIsTH( node ) TagIsId( node, TidyTag_TH )
|
||
|
#define nodeIsTR( node ) TagIsId( node, TidyTag_TR )
|
||
|
#define nodeIsCOL( node ) TagIsId( node, TidyTag_COL )
|
||
|
#define nodeIsCOLGROUP( node ) TagIsId( node, TidyTag_COLGROUP )
|
||
|
#define nodeIsBR( node ) TagIsId( node, TidyTag_BR )
|
||
|
#define nodeIsA( node ) TagIsId( node, TidyTag_A )
|
||
|
#define nodeIsLINK( node ) TagIsId( node, TidyTag_LINK )
|
||
|
#define nodeIsB( node ) TagIsId( node, TidyTag_B )
|
||
|
#define nodeIsI( node ) TagIsId( node, TidyTag_I )
|
||
|
#define nodeIsSTRONG( node ) TagIsId( node, TidyTag_STRONG )
|
||
|
#define nodeIsEM( node ) TagIsId( node, TidyTag_EM )
|
||
|
#define nodeIsBIG( node ) TagIsId( node, TidyTag_BIG )
|
||
|
#define nodeIsSMALL( node ) TagIsId( node, TidyTag_SMALL )
|
||
|
#define nodeIsPARAM( node ) TagIsId( node, TidyTag_PARAM )
|
||
|
#define nodeIsOPTION( node ) TagIsId( node, TidyTag_OPTION )
|
||
|
#define nodeIsOPTGROUP( node ) TagIsId( node, TidyTag_OPTGROUP )
|
||
|
#define nodeIsIMG( node ) TagIsId( node, TidyTag_IMG )
|
||
|
#define nodeIsMAP( node ) TagIsId( node, TidyTag_MAP )
|
||
|
#define nodeIsAREA( node ) TagIsId( node, TidyTag_AREA )
|
||
|
#define nodeIsNOBR( node ) TagIsId( node, TidyTag_NOBR )
|
||
|
#define nodeIsWBR( node ) TagIsId( node, TidyTag_WBR )
|
||
|
#define nodeIsFONT( node ) TagIsId( node, TidyTag_FONT )
|
||
|
#define nodeIsLAYER( node ) TagIsId( node, TidyTag_LAYER )
|
||
|
#define nodeIsSPACER( node ) TagIsId( node, TidyTag_SPACER )
|
||
|
#define nodeIsCENTER( node ) TagIsId( node, TidyTag_CENTER )
|
||
|
#define nodeIsSTYLE( node ) TagIsId( node, TidyTag_STYLE )
|
||
|
#define nodeIsSCRIPT( node ) TagIsId( node, TidyTag_SCRIPT )
|
||
|
#define nodeIsNOSCRIPT( node ) TagIsId( node, TidyTag_NOSCRIPT )
|
||
|
#define nodeIsFORM( node ) TagIsId( node, TidyTag_FORM )
|
||
|
#define nodeIsTEXTAREA( node ) TagIsId( node, TidyTag_TEXTAREA )
|
||
|
#define nodeIsBLOCKQUOTE( node ) TagIsId( node, TidyTag_BLOCKQUOTE )
|
||
|
#define nodeIsAPPLET( node ) TagIsId( node, TidyTag_APPLET )
|
||
|
#define nodeIsOBJECT( node ) TagIsId( node, TidyTag_OBJECT )
|
||
|
#define nodeIsDIV( node ) TagIsId( node, TidyTag_DIV )
|
||
|
#define nodeIsSPAN( node ) TagIsId( node, TidyTag_SPAN )
|
||
|
#define nodeIsINPUT( node ) TagIsId( node, TidyTag_INPUT )
|
||
|
#define nodeIsQ( node ) TagIsId( node, TidyTag_Q )
|
||
|
#define nodeIsLABEL( node ) TagIsId( node, TidyTag_LABEL )
|
||
|
#define nodeIsH3( node ) TagIsId( node, TidyTag_H3 )
|
||
|
#define nodeIsH4( node ) TagIsId( node, TidyTag_H4 )
|
||
|
#define nodeIsH5( node ) TagIsId( node, TidyTag_H5 )
|
||
|
#define nodeIsH6( node ) TagIsId( node, TidyTag_H6 )
|
||
|
#define nodeIsADDRESS( node ) TagIsId( node, TidyTag_ADDRESS )
|
||
|
#define nodeIsXMP( node ) TagIsId( node, TidyTag_XMP )
|
||
|
#define nodeIsSELECT( node ) TagIsId( node, TidyTag_SELECT )
|
||
|
#define nodeIsBLINK( node ) TagIsId( node, TidyTag_BLINK )
|
||
|
#define nodeIsMARQUEE( node ) TagIsId( node, TidyTag_MARQUEE )
|
||
|
#define nodeIsEMBED( node ) TagIsId( node, TidyTag_EMBED )
|
||
|
#define nodeIsBASEFONT( node ) TagIsId( node, TidyTag_BASEFONT )
|
||
|
#define nodeIsISINDEX( node ) TagIsId( node, TidyTag_ISINDEX )
|
||
|
#define nodeIsS( node ) TagIsId( node, TidyTag_S )
|
||
|
#define nodeIsSTRIKE( node ) TagIsId( node, TidyTag_STRIKE )
|
||
|
#define nodeIsSUB( node ) TagIsId( node, TidyTag_SUB )
|
||
|
#define nodeIsSUP( node ) TagIsId( node, TidyTag_SUP )
|
||
|
#define nodeIsU( node ) TagIsId( node, TidyTag_U )
|
||
|
#define nodeIsMENU( node ) TagIsId( node, TidyTag_MENU )
|
||
|
#define nodeIsMAIN( node ) TagIsId( node, TidyTag_MAIN )
|
||
|
#define nodeIsBUTTON( node ) TagIsId( node, TidyTag_BUTTON )
|
||
|
#define nodeIsCANVAS( node ) TagIsId( node, TidyTag_CANVAS )
|
||
|
#define nodeIsPROGRESS( node ) TagIsId( node, TidyTag_PROGRESS )
|
||
|
|
||
|
#define nodeIsINS( node ) TagIsId( node, TidyTag_INS )
|
||
|
#define nodeIsDEL( node ) TagIsId( node, TidyTag_DEL )
|
||
|
|
||
|
/* HTML5 */
|
||
|
#define nodeIsDATALIST( node ) TagIsId( node, TidyTag_DATALIST )
|
||
|
#define nodeIsMATHML( node ) TagIsId( node, TidyTag_MATHML ) /* #130 MathML attr and entity fix! */
|
||
|
|
||
|
/* NOT in HTML 5 */
|
||
|
#define nodeIsACRONYM( node ) TagIsId( node, TidyTag_ACRONYM )
|
||
|
#define nodesIsFRAME( node ) TagIsId( node, TidyTag_FRAME )
|
||
|
#define nodeIsTT( node ) TagIsId( node, TidyTag_TT )
|
||
|
|
||
|
#endif /* __TAGS_H__ */
|