⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tags.c

📁 我搜集到的一个java常用类库的源代码
💻 C
字号:
/* tags.c -- recognize HTML tags  (c) 1998-2000 (W3C) MIT, INRIA, Keio University  See tidy.c 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 "platform.h"   /* platform independent stuff */#include "html.h"       /* to pull in definition of nodes */#define HASHSIZE 357extern Bool XmlTags;Dict *tag_html;Dict *tag_head;Dict *tag_title;Dict *tag_meta;Dict *tag_body;Dict *tag_frameset;Dict *tag_frame;Dict *tag_noframes;Dict *tag_hr;Dict *tag_h1;Dict *tag_h2;Dict *tag_pre;Dict *tag_listing;Dict *tag_p;Dict *tag_ul;Dict *tag_ol;Dict *tag_dl;Dict *tag_dir;Dict *tag_li;Dict *tag_dt;Dict *tag_dd;Dict *tag_td;Dict *tag_th;Dict *tag_tr;Dict *tag_col;Dict *tag_br;Dict *tag_a;Dict *tag_link;Dict *tag_b;Dict *tag_i;Dict *tag_strong;Dict *tag_em;Dict *tag_param;Dict *tag_option;Dict *tag_optgroup;Dict *tag_map;Dict *tag_area;Dict *tag_nobr;Dict *tag_wbr;Dict *tag_font;Dict *tag_layer;Dict *tag_spacer;Dict *tag_center;Dict *tag_style;Dict *tag_script;Dict *tag_noscript;Dict *tag_table;Dict *tag_caption;Dict *tag_form;Dict *tag_textarea;Dict *tag_blockquote;Dict *tag_applet;Dict *tag_object;Dict *tag_div;Dict *tag_span;Dict *xml_tags;  /* dummy for xml tags */static Dict *hashtab[HASHSIZE];static struct tag{    char *name;    unsigned versions;    unsigned model;    Parser *parser;    CheckAttribs *chkattrs;} tags[] ={    {"html",       (VERS_ALL|VERS_FRAMES),     (CM_HTML|CM_OPT|CM_OMITST),  ParseHTML, CheckHTML},    {"head",       (VERS_ALL|VERS_FRAMES),     (CM_HTML|CM_OPT|CM_OMITST), ParseHead, null},    {"title",      (VERS_ALL|VERS_FRAMES),     CM_HEAD, ParseTitle, null},    {"base",       (VERS_ALL|VERS_FRAMES),     (CM_HEAD|CM_EMPTY), null, null},    {"link",       (VERS_ALL|VERS_FRAMES),     (CM_HEAD|CM_EMPTY), null, null},    {"meta",       (VERS_ALL|VERS_FRAMES),     (CM_HEAD|CM_EMPTY), null, null},    {"style",      (VERS_FROM32|VERS_FRAMES),  CM_HEAD, ParseScript, CheckSTYLE},    {"script",     (VERS_FROM32|VERS_FRAMES),  (CM_HEAD|CM_MIXED|CM_BLOCK|CM_INLINE), ParseScript, CheckSCRIPT},    {"server",     VERS_NETSCAPE,  (CM_HEAD|CM_MIXED|CM_BLOCK|CM_INLINE), ParseScript, null},    {"body",       VERS_ALL,     (CM_HTML|CM_OPT|CM_OMITST), ParseBody, null},    {"frameset",   VERS_FRAMES,  (CM_HTML|CM_FRAMES), ParseFrameSet, null},    {"p",          VERS_ALL,     (CM_BLOCK|CM_OPT), ParseInline, null},    {"h1",         VERS_ALL,     (CM_BLOCK|CM_HEADING), ParseInline, null},    {"h2",         VERS_ALL,     (CM_BLOCK|CM_HEADING), ParseInline, null},    {"h3",         VERS_ALL,     (CM_BLOCK|CM_HEADING), ParseInline, null},    {"h4",         VERS_ALL,     (CM_BLOCK|CM_HEADING), ParseInline, null},    {"h5",         VERS_ALL,     (CM_BLOCK|CM_HEADING), ParseInline, null},    {"h6",         VERS_ALL,     (CM_BLOCK|CM_HEADING), ParseInline, null},    {"ul",         VERS_ALL,     CM_BLOCK, ParseList, null},    {"ol",         VERS_ALL,     CM_BLOCK, ParseList, null},    {"dl",         VERS_ALL,     CM_BLOCK, ParseDefList, null},    {"dir",        VERS_LOOSE,   (CM_BLOCK|CM_OBSOLETE), ParseList, null},    {"menu",       VERS_LOOSE,   (CM_BLOCK|CM_OBSOLETE), ParseList, null},    {"pre",        VERS_ALL,     CM_BLOCK, ParsePre, null},    {"listing",    VERS_ALL,     (CM_BLOCK|CM_OBSOLETE), ParsePre, null},    {"xmp",        VERS_ALL,     (CM_BLOCK|CM_OBSOLETE), ParsePre, null},    {"plaintext",  VERS_ALL,     (CM_BLOCK|CM_OBSOLETE), ParsePre, null},    {"address",    VERS_ALL,     CM_BLOCK, ParseBlock, null},    {"blockquote", VERS_ALL,     CM_BLOCK, ParseBlock, null},    {"form",       VERS_ALL,     CM_BLOCK, ParseBlock, null},    {"isindex",    VERS_LOOSE,   (CM_BLOCK|CM_EMPTY), null, null},    {"fieldset",   VERS_HTML40,  CM_BLOCK, ParseBlock, null},    {"table",      VERS_FROM32,  CM_BLOCK, ParseTableTag, CheckTABLE},    {"hr",         VERS_ALL,     (CM_BLOCK|CM_EMPTY),  null, null},    {"div",        VERS_FROM32,  CM_BLOCK, ParseBlock, null},    {"multicol",   VERS_NETSCAPE,  CM_BLOCK, ParseBlock, null},    {"nosave",     VERS_NETSCAPE, CM_BLOCK, ParseBlock, null},    {"layer",      VERS_NETSCAPE, CM_BLOCK, ParseBlock, null},    {"ilayer",     VERS_NETSCAPE, CM_INLINE, ParseInline, null},    {"nolayer",    VERS_NETSCAPE, (CM_BLOCK|CM_INLINE|CM_MIXED), ParseBlock, null},    {"align",      VERS_NETSCAPE, CM_BLOCK, ParseBlock, null},    {"center",     VERS_LOOSE,   CM_BLOCK, ParseBlock, null},    {"ins",        VERS_HTML40,  (CM_INLINE|CM_BLOCK|CM_MIXED), ParseInline, null},    {"del",        VERS_HTML40,  (CM_INLINE|CM_BLOCK|CM_MIXED), ParseInline, null},    {"li",         VERS_ALL,     (CM_LIST|CM_OPT|CM_NO_INDENT), ParseBlock, null},    {"dt",         VERS_ALL,     (CM_DEFLIST|CM_OPT|CM_NO_INDENT), ParseInline, null},    {"dd",         VERS_ALL,     (CM_DEFLIST|CM_OPT|CM_NO_INDENT), ParseBlock, null},    {"caption",    VERS_FROM32,  CM_TABLE, ParseInline, CheckCaption},    {"colgroup",   VERS_HTML40,  (CM_TABLE|CM_OPT), ParseColGroup, null},    {"col",        VERS_HTML40,  (CM_TABLE|CM_EMPTY),  null, null},    {"thead",      VERS_HTML40,  (CM_TABLE|CM_ROWGRP|CM_OPT), ParseRowGroup, null},    {"tfoot",      VERS_HTML40,  (CM_TABLE|CM_ROWGRP|CM_OPT), ParseRowGroup, null},    {"tbody",      VERS_HTML40,  (CM_TABLE|CM_ROWGRP|CM_OPT), ParseRowGroup, null},    {"tr",         VERS_FROM32,  (CM_TABLE|CM_OPT), ParseRow, null},    {"td",         VERS_FROM32,  (CM_ROW|CM_OPT|CM_NO_INDENT), ParseBlock, null},    {"th",         VERS_FROM32,  (CM_ROW|CM_OPT|CM_NO_INDENT), ParseBlock, null},    {"q",          VERS_HTML40,  CM_INLINE, ParseInline, null},    {"a",          VERS_ALL,     CM_INLINE, ParseInline, CheckAnchor},    {"br",         VERS_ALL,     (CM_INLINE|CM_EMPTY), null, null},    {"img",        VERS_ALL,     (CM_INLINE|CM_IMG|CM_EMPTY), null, CheckIMG},    {"object",     VERS_HTML40,  (CM_OBJECT|CM_IMG|CM_INLINE|CM_PARAM), ParseBlock, null},    {"applet",     VERS_LOOSE,   (CM_OBJECT|CM_IMG|CM_INLINE|CM_PARAM), ParseBlock, null},    {"servlet",    VERS_SUN,     (CM_OBJECT|CM_IMG|CM_INLINE|CM_PARAM), ParseBlock, null},    {"param",      VERS_FROM32,  (CM_INLINE|CM_EMPTY), null, null},    {"embed",      VERS_NETSCAPE, (CM_INLINE|CM_IMG|CM_EMPTY), null, null},    {"noembed",    VERS_NETSCAPE, CM_INLINE, ParseInline, null},    {"iframe",     VERS_HTML40_LOOSE, CM_INLINE, ParseBlock, null},    {"frame",      VERS_FRAMES,  (CM_FRAMES|CM_EMPTY), null, null},    {"noframes",   VERS_IFRAMES, (CM_BLOCK|CM_FRAMES), ParseNoFrames,  null},    {"noscript",   (VERS_FRAMES|VERS_HTML40),  (CM_BLOCK|CM_INLINE|CM_MIXED), ParseBlock, null},    {"b",          VERS_ALL,     CM_INLINE, ParseInline, null},    {"i",          VERS_ALL,     CM_INLINE, ParseInline, null},    {"u",          VERS_LOOSE,   CM_INLINE, ParseInline, null},    {"tt",         VERS_ALL,     CM_INLINE, ParseInline, null},    {"s",          VERS_LOOSE,   CM_INLINE, ParseInline, null},    {"strike",     VERS_LOOSE,   CM_INLINE, ParseInline, null},    {"big",        VERS_FROM32,  CM_INLINE, ParseInline, null},    {"small",      VERS_FROM32,  CM_INLINE, ParseInline, null},    {"sub",        VERS_FROM32,  CM_INLINE, ParseInline, null},    {"sup",        VERS_FROM32,  CM_INLINE, ParseInline, null},    {"em",         VERS_ALL,     CM_INLINE, ParseInline, null},    {"strong",     VERS_ALL,     CM_INLINE, ParseInline, null},    {"dfn",        VERS_ALL,     CM_INLINE, ParseInline, null},    {"code",       VERS_ALL,     CM_INLINE, ParseInline, null},    {"samp",       VERS_ALL,     CM_INLINE, ParseInline, null},    {"kbd",        VERS_ALL,     CM_INLINE, ParseInline, null},    {"var",        VERS_ALL,     CM_INLINE, ParseInline, null},    {"cite",       VERS_ALL,     CM_INLINE, ParseInline, null},    {"abbr",       VERS_HTML40,  CM_INLINE, ParseInline, null},    {"acronym",    VERS_HTML40,  CM_INLINE, ParseInline, null},    {"span",       VERS_FROM32,  CM_INLINE, ParseInline, null},    {"blink",      VERS_PROPRIETARY, CM_INLINE, ParseInline, null},    {"nobr",       VERS_PROPRIETARY, CM_INLINE, ParseInline, null},    {"wbr",        VERS_PROPRIETARY, (CM_INLINE|CM_EMPTY), null, null},    {"marquee",    VERS_MICROSOFT, (CM_INLINE|CM_OPT), ParseInline, null},    {"bgsound",    VERS_MICROSOFT, (CM_HEAD|CM_EMPTY), null, null},    {"comment",    VERS_MICROSOFT, CM_INLINE, ParseInline, null},    {"spacer",     VERS_NETSCAPE, (CM_INLINE|CM_EMPTY), null, null},    {"keygen",     VERS_NETSCAPE, (CM_INLINE|CM_EMPTY), null, null},    {"nolayer",    VERS_NETSCAPE, (CM_BLOCK|CM_INLINE|CM_MIXED), ParseBlock, null},    {"ilayer",     VERS_NETSCAPE, CM_INLINE, ParseInline, null},    {"map",        VERS_FROM32,  CM_INLINE, ParseBlock, CheckMap},    {"area",       VERS_ALL,     (CM_BLOCK|CM_EMPTY), null, CheckAREA},    {"input",      VERS_ALL,     (CM_INLINE|CM_IMG|CM_EMPTY), null, null},    {"select",     VERS_ALL,     (CM_INLINE|CM_FIELD), ParseSelect, null},    {"option",     VERS_ALL,     (CM_FIELD|CM_OPT), ParseText, null},    {"optgroup",   VERS_HTML40,  (CM_FIELD|CM_OPT), ParseOptGroup, null},    {"textarea",   VERS_ALL,     (CM_INLINE|CM_FIELD), ParseText, null},    {"label",      VERS_HTML40,  CM_INLINE, ParseInline, null},    {"legend",     VERS_HTML40,  CM_INLINE, ParseInline, null},    {"button",     VERS_HTML40,  CM_INLINE, ParseInline, null},    {"basefont",   VERS_LOOSE,   (CM_INLINE|CM_EMPTY), null, null},    {"font",       VERS_LOOSE,   CM_INLINE, ParseInline, null},    {"bdo",        VERS_HTML40,  CM_INLINE, ParseInline, null},  /* this must be the final entry */    {null,         0,            0,          0,       0}};/* choose what version to use for new doctype */int HTMLVersion(Lexer *lexer){    uint versions;    versions = lexer->versions;    if (versions & VERS_HTML20)        return VERS_HTML20;    if (versions & VERS_HTML32)        return VERS_HTML32;    if (versions & VERS_HTML40_STRICT)        return VERS_HTML40_STRICT;    if (versions & VERS_HTML40_LOOSE)        return VERS_HTML40_LOOSE;    if (versions & VERS_FRAMES)        return VERS_FRAMES;    return VERS_UNKNOWN;}static unsigned hash(char *s){    unsigned hashval;    for (hashval = 0; *s != '\0'; s++)        hashval = *s + 31*hashval;    return hashval % HASHSIZE;}static Dict *lookup(char *s){    Dict *np;    for (np = hashtab[hash(s)]; np != null; np = np->next)        if (wstrcmp(s, np->name) == 0)            return np;    return null;}static Dict *install(char *name, uint versions, uint model,                      Parser *parser, CheckAttribs *chkattrs){    Dict *np;    unsigned hashval;    if ((np = lookup(name)) == null)    {        np = (Dict *)MemAlloc(sizeof(*np));        if (np == null || (np->name = wstrdup(name)) == null)            return null;        hashval = hash(name);        np->next = hashtab[hashval];        np->model = 0;        hashtab[hashval] = np;    }    np->versions = versions;    np->model |= model;    np->parser = parser;    np->chkattrs = chkattrs;    return np;}/* public interface for finding tag by name */Bool FindTag(Node *node){    Dict *np;    if (XmlTags)    {        node->tag = xml_tags;        return yes;    }    if (node->element && (np = lookup(node->element)))    {        node->tag = np;        return yes;    }    return no;}void DefineEmptyTag(char *name){    install(name, VERS_PROPRIETARY, (CM_EMPTY|CM_NO_INDENT|CM_NEW), ParseBlock, null);}void DefineInlineTag(char *name){    install(name, VERS_PROPRIETARY, (CM_INLINE|CM_NO_INDENT|CM_NEW), ParseBlock, null);}void DefineBlockTag(char *name){    install(name, VERS_PROPRIETARY, (CM_BLOCK|CM_NO_INDENT|CM_NEW), ParseBlock, null);}void DefinePreTag(char *name){    install(name, VERS_PROPRIETARY, (CM_BLOCK|CM_NO_INDENT|CM_NEW), ParsePre, null);}void InitTags(void){    struct tag *tp;        for(tp = tags; tp->name != null; ++tp)        install(tp->name, tp->versions, tp->model, tp->parser, tp->chkattrs);    tag_html = lookup("html");    tag_head = lookup("head");    tag_body = lookup("body");    tag_frameset = lookup("frameset");    tag_frame = lookup("frame");    tag_noframes = lookup("noframes");    tag_meta = lookup("meta");    tag_title = lookup("title");    tag_hr = lookup("hr");    tag_pre = lookup("pre");    tag_listing = lookup("listing");    tag_h1 = lookup("h1");    tag_h2 = lookup("h2");    tag_p  = lookup("p");    tag_ul = lookup("ul");    tag_ol = lookup("ol");    tag_dir = lookup("dir");    tag_li = lookup("li");    tag_dl = lookup("dl");    tag_dt = lookup("dt");    tag_dd = lookup("dd");    tag_td = lookup("td");    tag_th = lookup("th");    tag_tr = lookup("tr");    tag_col = lookup("col");    tag_br = lookup("br");    tag_a = lookup("a");    tag_link = lookup("link");    tag_b = lookup("b");    tag_i = lookup("i");    tag_strong = lookup("strong");    tag_em = lookup("em");    tag_param = lookup("param");    tag_option = lookup("option");    tag_optgroup = lookup("optgroup");    tag_map = lookup("map");    tag_area = lookup("area");    tag_nobr = lookup("nobr");    tag_wbr = lookup("wbr");    tag_font = lookup("font");    tag_spacer = lookup("spacer");    tag_layer = lookup("layer");    tag_center = lookup("center");    tag_style = lookup("style");    tag_script = lookup("script");    tag_noscript = lookup("noscript");    tag_table = lookup("table");    tag_caption = lookup("caption");    tag_form = lookup("form");    tag_textarea = lookup("textarea");    tag_blockquote = lookup("blockquote");    tag_applet = lookup("applet");    tag_object = lookup("object");    tag_div = lookup("div");    tag_span = lookup("span");    /* create dummy entry for all xml tags */    xml_tags = (Dict *)MemAlloc(sizeof(*xml_tags));    xml_tags->name = null;    xml_tags->versions = VERS_ALL;    xml_tags->model = CM_BLOCK;    xml_tags->parser = null;    xml_tags->chkattrs = null;}void FreeTags(void){    Dict *prev, *next;    int i;    MemFree(xml_tags);    for (i = 0; i < HASHSIZE; ++i)    {        prev = null;        next = hashtab[i];        while(next)        {            prev = next->next;            MemFree(next->name);            MemFree(next);            next = prev;        }        hashtab[i] = null;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -