Akinori ItoInitial revision68a07bf25 years agoHistory
284 lines · 17.9 KB · C
RawDownload
#include "html.h" /* Define HTML Tag Infomation Table */ #define ATTR_CORE	ATTR_ID#define MAXA_CORE	1unsigned char ALST_A[] ={ATTR_NAME,ATTR_HREF,ATTR_TARGET,ATTR_HSEQ,ATTR_REFERER,ATTR_FRAMENAME,ATTR_CORE};#define MAXA_A		MAXA_CORE + 6unsigned char ALST_P[] = {ATTR_ALIGN,ATTR_CORE};#define MAXA_P		MAXA_CORE + 1unsigned char ALST_UL[] = {ATTR_START,ATTR_TYPE,ATTR_CORE};#define MAXA_UL		MAXA_CORE + 2unsigned char ALST_LI[] = {ATTR_TYPE,ATTR_VALUE,ATTR_CORE};#define MAXA_LI		MAXA_CORE + 2unsigned char ALST_HR[] = {ATTR_WIDTH,ATTR_ALIGN,ATTR_CORE};#define MAXA_HR		MAXA_CORE + 2unsigned char ALST_DL[] = {ATTR_COMPACT,ATTR_CORE};#define MAXA_DL		MAXA_CORE + 1unsigned char ALST_PRE[] = {ATTR_FOR_TABLE,ATTR_CORE};#define MAXA_PRE	MAXA_CORE + 1unsigned char ALST_IMG[] ={ATTR_SRC,ATTR_ALT,ATTR_WIDTH,ATTR_HEIGHT,ATTR_USEMAP,ATTR_CORE};#define MAXA_IMG	MAXA_CORE + 5unsigned char ALST_TABLE[] ={ATTR_BORDER,ATTR_WIDTH,ATTR_HBORDER,ATTR_CELLSPACING,ATTR_CELLPADDING,ATTR_VSPACE,ATTR_CORE};#define MAXA_TABLE	MAXA_CORE + 6unsigned char ALST_META[] = {ATTR_HTTP_EQUIV,ATTR_CONTENT,ATTR_CORE};#define MAXA_META	MAXA_CORE + 2unsigned char ALST_FRAME[] = {ATTR_SRC,ATTR_NAME,ATTR_CORE};#define MAXA_FRAME	MAXA_CORE + 2unsigned char ALST_FRAMESET[] = {ATTR_COLS,ATTR_ROWS,ATTR_CORE};#define MAXA_FRAMESET	MAXA_CORE + 2unsigned char ALST_FORM[] ={ATTR_METHOD,ATTR_ACTION,ATTR_CHARSET,ATTR_ACCEPT_CHARSET,ATTR_ENCTYPE,ATTR_TARGET,ATTR_CORE};#define MAXA_FORM	MAXA_CORE + 6unsigned char ALST_INPUT[] ={ATTR_TYPE,ATTR_VALUE,ATTR_NAME,ATTR_CHECKED,ATTR_ACCEPT,ATTR_SIZE,ATTR_MAXLENGTH,ATTR_ALT,ATTR_CORE};#define MAXA_INPUT	MAXA_CORE + 8unsigned char ALST_TEXTAREA[] = {ATTR_COLS,ATTR_ROWS,ATTR_NAME,ATTR_CORE};#define MAXA_TEXTAREA	MAXA_CORE + 3unsigned char ALST_SELECT[] = {ATTR_NAME,ATTR_MULTIPLE,ATTR_CORE};#define MAXA_SELECT	MAXA_CORE + 2unsigned char ALST_OPTION[] = {ATTR_VALUE,ATTR_LABEL,ATTR_SELECTED,ATTR_CORE};#define MAXA_OPTION	MAXA_CORE + 3unsigned char ALST_ISINDEX[] = {ATTR_ACTION,ATTR_PROMPT,ATTR_CORE};#define MAXA_ISINDEX	MAXA_CORE + 2unsigned char ALST_MAP[] = {ATTR_NAME,ATTR_CORE};#define MAXA_MAP	MAXA_CORE + 1unsigned char ALST_AREA[] = {ATTR_HREF,ATTR_ALT,ATTR_CORE};#define MAXA_AREA	MAXA_CORE + 2unsigned char ALST_BASE[] = {ATTR_HREF,ATTR_TARGET,ATTR_CORE};#define MAXA_BASE	MAXA_CORE + 2unsigned char ALST_BODY[] = {ATTR_BACKGROUND,ATTR_CORE};#define MAXA_BODY	MAXA_CORE + 1unsigned char ALST_TR[] = {ATTR_ALIGN,ATTR_VALIGN,ATTR_CORE};#define MAXA_TR		MAXA_CORE + 2unsigned char ALST_TD[] ={ATTR_COLSPAN,ATTR_ROWSPAN,ATTR_ALIGN,ATTR_VALIGN,ATTR_WIDTH,ATTR_NOWRAP,ATTR_CORE};#define MAXA_TD		MAXA_CORE + 6unsigned char ALST_BGSOUND[] = {ATTR_SRC,ATTR_CORE};#define MAX_BGSOUND	MAXA_CORE + 1unsigned char ALST_APPLET[] = {ATTR_ARCHIVE,ATTR_CORE};#define MAX_APPLET	MAXA_CORE + 1unsigned char ALST_EMBED[] = {ATTR_SRC,ATTR_CORE};#define MAX_EMBED	MAXA_CORE + 1 unsigned char ALST_TABLE_ALT[] = {ATTR_TID};#define MAXA_TABLE_ALT	1unsigned char ALST_TITLE_ALT[] = {ATTR_TITLE};#define MAXA_TITLE_ALT	1unsigned char ALST_INPUT_ALT[] ={ATTR_HSEQ,ATTR_FID,ATTR_NO_EFFECT,ATTR_TYPE,ATTR_NAME,ATTR_VALUE,ATTR_CHECKED,ATTR_ACCEPT,ATTR_SIZE,ATTR_MAXLENGTH,ATTR_TEXTAREANUMBER,ATTR_SELECTNUMBER,ATTR_ROWS};#define MAXA_INPUT_ALT	13unsigned char ALST_IMG_ALT[] = {ATTR_SRC};#define MAXA_IMG_ALT	1unsigned char ALST_NOP[] = {ATTR_CORE};#define MAXA_NOP	MAXA_CORE TagInfo TagMAP[MAX_HTMLTAG] ={    {NULL,          0,             0},           /*   0 HTML_UNKNOWN    */    {ALST_A,        MAXA_A,        0},           /*   1 HTML_A          */    {NULL,          0,             TFLG_END},    /*   2 HTML_N_A        */    {ALST_P,        MAXA_P,        0},           /*   3 HTML_H          */    {NULL,          0,             TFLG_END},    /*   4 HTML_N_H        */    {ALST_P,        MAXA_P,        0},           /*   5 HTML_P          */    {NULL,          0,             0},           /*   6 HTML_BR         */    {NULL,          0,             0},           /*   7 HTML_B          */    {NULL,          0,             TFLG_END},    /*   8 HTML_N_B        */    {ALST_UL,       MAXA_UL,       0},           /*   9 HTML_UL         */    {NULL,          0,             TFLG_END},    /*  10 HTML_N_UL       */    {ALST_LI,       MAXA_LI,       0},           /*  11 HTML_LI         */    {ALST_UL,       MAXA_UL,       0},           /*  12 HTML_OL         */    {NULL,          0,             TFLG_END},    /*  13 HTML_N_OL       */    {NULL,          0,             0},           /*  14 HTML_TITLE      */    {NULL,          0,             TFLG_END},    /*  15 HTML_N_TITLE    */    {ALST_HR,       MAXA_HR,       0},           /*  16 HTML_HR         */    {ALST_DL,       MAXA_DL,       0},           /*  17 HTML_DL         */    {NULL,          0,             TFLG_END},    /*  18 HTML_N_DL       */    {NULL,          0,             0},           /*  19 HTML_DT         */    {NULL,          0,             0},           /*  20 HTML_DD         */    {ALST_PRE,      MAXA_PRE,      0},           /*  21 HTML_PRE        */    {NULL,          0,             TFLG_END},    /*  22 HTML_N_PRE      */    {NULL,          0,             0},           /*  23 HTML_BLQ        */    {NULL,          0,             TFLG_END},    /*  24 HTML_N_BLQ      */    {ALST_IMG,      MAXA_IMG,      0},           /*  25 HTML_IMG        */    {NULL,          0,             0},           /*  26 HTML_LISTING    */    {NULL,          0,             TFLG_END},    /*  27 HTML_N_LISTING  */    {NULL,          0,             0},           /*  28 HTML_XMP        */    {NULL,          0,             TFLG_END},    /*  29 HTML_N_XMP      */    {NULL,          0,             0},           /*  30 HTML_PLAINTEXT  */    {ALST_TABLE,    MAXA_TABLE,    0},           /*  31 HTML_TABLE      */    {NULL,          0,             TFLG_END},    /*  32 HTML_N_TABLE    */    {ALST_META,     MAXA_META,     0},           /*  33 HTML_META       */    {NULL,          0,             TFLG_END},    /*  34 HTML_N_P        */    {ALST_FRAME,    MAXA_FRAME,    0},           /*  35 HTML_FRAME      */    {ALST_FRAMESET, MAXA_FRAMESET, 0},           /*  36 HTML_FRAMESET   */    {NULL,          0,             TFLG_END},    /*  37 HTML_N_FRAMESET */    {NULL,          0,             0},           /*  38 HTML_CENTER     */    {NULL,          0,             TFLG_END},    /*  39 HTML_N_CENTER   */    {NULL,          0,             0},           /*  40 HTML_FONT       */    {NULL,          0,             TFLG_END},    /*  41 HTML_N_FONT     */    {ALST_FORM,     MAXA_FORM,     0},           /*  42 HTML_FORM       */    {NULL,          0,             TFLG_END},    /*  43 HTML_N_FORM     */    {ALST_INPUT,    MAXA_INPUT,    0},           /*  44 HTML_INPUT      */    {ALST_TEXTAREA, MAXA_TEXTAREA, 0},           /*  45 HTML_TEXTAREA   */    {NULL,          0,             TFLG_END},    /*  46 HTML_N_TEXTAREA */    {ALST_SELECT,   MAXA_SELECT,   0},           /*  47 HTML_SELECT     */    {NULL,          0,             TFLG_END},    /*  48 HTML_N_SELECT   */    {ALST_OPTION,   MAXA_OPTION,   0},           /*  49 HTML_OPTION     */    {NULL,          0,             0},           /*  50 HTML_NOBR       */    {NULL,          0,             TFLG_END},    /*  51 HTML_N_NOBR     */    {ALST_P,        MAXA_P,        0},           /*  52 HTML_DIV        */    {NULL,          0,             TFLG_END},    /*  53 HTML_N_DIV      */    {ALST_ISINDEX,  MAXA_ISINDEX,  0},           /*  54 HTML_ISINDEX    */    {ALST_MAP,      MAXA_MAP,      0},           /*  55 HTML_MAP        */    {NULL,          0,             TFLG_END},    /*  56 HTML_N_MAP      */    {ALST_AREA,     MAXA_AREA,     0},           /*  57 HTML_AREA       */    {NULL,          0,             0},           /*  58 HTML_SCRIPT     */    {NULL,          0,             TFLG_END},    /*  59 HTML_N_SCRIPT   */    {ALST_BASE,     MAXA_BASE,     0},           /*  60 HTML_BASE       */    {NULL,          0,             0},           /*  61 HTML_DEL        */    {NULL,          0,             TFLG_END},    /*  62 HTML_N_DEL      */    {NULL,          0,             0},           /*  63 HTML_INS        */    {NULL,          0,             TFLG_END},    /*  64 HTML_N_INS      */    {NULL,          0,             0},           /*  65 HTML_U          */    {NULL,          0,             TFLG_END},    /*  66 HTML_N_U        */    {NULL,          0,             0},           /*  67 HTML_STYLE      */    {NULL,          0,             TFLG_END},    /*  68 HTML_N_STYLE    */    {NULL,          0,             0},           /*  69 HTML_WBR        */    {NULL,          0,             0},           /*  70 HTML_EM         */    {NULL,          0,             TFLG_END},    /*  71 HTML_N_EM       */    {ALST_BODY,     MAXA_BODY,     0},           /*  72 HTML_BODY       */    {NULL,          0,             TFLG_END},    /*  73 HTML_N_BODY     */    {ALST_TR,       MAXA_TR,       0},           /*  74 HTML_TR         */    {NULL,          0,             TFLG_END},    /*  75 HTML_N_TR       */    {ALST_TD,       MAXA_TD,       0},           /*  76 HTML_TD         */    {NULL,          0,             TFLG_END},    /*  77 HTML_N_TD       */    {NULL,          0,             0},           /*  78 HTML_CAPTION    */    {NULL,          0,             TFLG_END},    /*  79 HTML_N_CAPTION  */    {ALST_TD,       MAXA_TD,       0},           /*  80 HTML_TH         */    {NULL,          0,             TFLG_END},    /*  81 HTML_N_TH       */    {NULL,          0,             0},           /*  82 HTML_THEAD      */    {NULL,          0,             TFLG_END},    /*  83 HTML_N_THEAD    */    {NULL,          0,             0},           /*  84 HTML_TBODY      */    {NULL,          0,             TFLG_END},    /*  85 HTML_N_TBODY    */    {NULL,          0,             0},           /*  86 HTML_TFOOT      */    {NULL,          0,             TFLG_END},    /*  87 HTML_N_TFOOT    */    {NULL,          0,             0},           /*  88 HTML_COLGROUP   */    {NULL,          0,             TFLG_END},    /*  89 HTML_N_COLGROUP */    {NULL,          0,             0},           /*  90 HTML_COL        */    {ALST_BGSOUND,  MAX_BGSOUND,   0},           /*  91 HTML_BGSOUND    */    {ALST_APPLET,   MAX_APPLET,    0},           /*  92 HTML_APPLET     */    {ALST_EMBED,    MAX_EMBED,     0},           /*  93 HTML_EMBED      */    {NULL,          0,             TFLG_END},    /*  94 HTML_N_OPTION   */    {NULL,          0,             0},           /*  95 HTML_HEAD       */    {NULL,          0,             TFLG_END},    /*  96 HTML_N_HEAD     */    {NULL,          0,             0},           /*  97 HTML_DOCTYPE    */                    				       		        {NULL,          0,             0},           /*  98 Undefined       */    {NULL,          0,             0},           /*  99 Undefined       */    {NULL,          0,             0},           /* 100 Undefined       */    {NULL,          0,             0},           /* 101 Undefined       */    {NULL,          0,             0},           /* 102 Undefined       */    {NULL,          0,             0},           /* 103 Undefined       */    {NULL,          0,             0},           /* 104 Undefined       */    {NULL,          0,             0},           /* 105 Undefined       */    {NULL,          0,             0},           /* 106 Undefined       */    {NULL,          0,             0},           /* 107 Undefined       */    {NULL,          0,             0},           /* 108 Undefined       */    {NULL,          0,             0},           /* 109 Undefined       */    {NULL,          0,             0},           /* 110 Undefined       */    {NULL,          0,             0},           /* 111 Undefined       */    {NULL,          0,             0},           /* 112 Undefined       */     /* pseudo tag */    {ALST_TABLE_ALT,MAXA_TABLE_ALT,TFLG_INT},    /* 113 HTML_TABLE_ALT   */    {NULL,          0,             TFLG_INT},    /* 114 HTML_RULE        */    {NULL,          0,    TFLG_INT|TFLG_END},    /* 115 HTML_N_RULE      */    {NULL,          0,             TFLG_INT},    /* 116 HTML_PRE_INT     */    {NULL,          0,    TFLG_INT|TFLG_END},    /* 117 HTML_N_PRE_INT   */    {ALST_TITLE_ALT,MAXA_TITLE_ALT,TFLG_INT},    /* 118 HTML_TITLE_ALT   */    {ALST_FORM,     MAXA_FORM,     TFLG_INT},    /* 119 HTML_FORM_INT    */    {NULL,          0,    TFLG_INT|TFLG_END},    /* 120 HTML_N_FORM_INT  */    {NULL,          0,             TFLG_INT},    /* 121 HTML_DL_COMPACT  */    {ALST_INPUT_ALT,MAXA_INPUT_ALT,TFLG_INT},    /* 122 HTML_INPUT_ALT   */    {NULL,          0,    TFLG_INT|TFLG_END},    /* 123 HTML_N_INPUT_ALT */    {ALST_IMG_ALT,  MAXA_IMG_ALT,  TFLG_INT},    /* 124 HTML_IMG_ALT     */    {NULL,          0,    TFLG_INT|TFLG_END},    /* 125 HTML_N_IMG_ALT   */    {NULL,          0,             TFLG_INT},    /* 126 HTML_EOL         */    {ALST_NOP,      MAXA_NOP,      TFLG_INT},    /* 127 HTML_NOP         */};    TagAttrInfo AttrMAP[MAX_TAGATTR] ={    {NULL            ,	VTYPE_NONE,    0},        /*  0 ATTR_UNKNOWN        */    {"accept"        ,	VTYPE_NONE,    0},        /*  1 ATTR_ACCEPT         */    {"accept-charset",	VTYPE_STR,     0},        /*  2 ATTR_ACCEPT_CHARSET */    {"action"        ,	VTYPE_ACTION,  0},        /*  3 ATTR_ACTION         */    {"align"         ,	VTYPE_ALIGN,   0},        /*  4 ATTR_ALIGN          */    {"alt"           ,	VTYPE_STR,     0},        /*  5 ATTR_ALT            */    {"archive"       ,	VTYPE_STR,     0},        /*  6 ATTR_ARCHIVE        */    {"background"    ,	VTYPE_STR,     0},        /*  7 ATTR_BACKGROUND     */    {"border"        ,	VTYPE_NUMBER,  0},        /*  8 ATTR_BORDER         */    {"cellpadding"   ,	VTYPE_NUMBER,  0},        /*  9 ATTR_CELLPADDING    */    {"cellspacing"   ,	VTYPE_NUMBER,  0},        /* 10 ATTR_CELLSPACING    */    {"charset"       ,	VTYPE_STR,     0},        /* 11 ATTR_CHARSET        */    {"checked"       ,	VTYPE_NONE,    0},        /* 12 ATTR_CHECKED        */    {"cols"          ,	VTYPE_MLENGTH, 0},        /* 13 ATTR_COLS           */    {"colspan"       ,	VTYPE_NUMBER,  0},        /* 14 ATTR_COLSPAN        */    {"content"       ,	VTYPE_STR,     0},        /* 15 ATTR_CONTENT        */    {"enctype"       ,	VTYPE_ENCTYPE, 0},        /* 16 ATTR_ENCTYPE        */    {"height"        ,	VTYPE_LENGTH,  0},        /* 17 ATTR_HEIGHT         */    {"href"          ,	VTYPE_STR,     0},        /* 18 ATTR_HREF           */    {"http-equiv"    ,	VTYPE_STR,     0},        /* 19 ATTR_HTTP_EQUIV     */    {"id"            ,	VTYPE_STR,     0},        /* 20 ATTR_ID             */    {"link"          ,	VTYPE_STR,     0},        /* 21 ATTR_LINK           */    {"maxlength"     ,	VTYPE_NUMBER,  0},        /* 22 ATTR_MAXLENGTH      */    {"method"        ,	VTYPE_METHOD,  0},        /* 23 ATTR_METHOD         */    {"multiple"      ,	VTYPE_NONE,    0},        /* 24 ATTR_MULTIPLE       */    {"name"          ,	VTYPE_STR,     0},        /* 25 ATTR_NAME           */    {"nowrap"        ,	VTYPE_NONE,    0},        /* 26 ATTR_NOWRAP         */    {"prompt"        ,	VTYPE_STR,     0},        /* 27 ATTR_PROMPT         */    {"rows"          ,	VTYPE_MLENGTH, 0},        /* 28 ATTR_ROWS           */    {"rowspan"       ,	VTYPE_NUMBER,  0},        /* 29 ATTR_ROWSPAN        */    {"size"          ,	VTYPE_NUMBER,  0},        /* 30 ATTR_SIZE           */    {"src"           ,	VTYPE_STR,     0},        /* 31 ATTR_SRC            */    {"target"        ,	VTYPE_STR,     0},        /* 32 ATTR_TARGET         */    {"type"          ,	VTYPE_TYPE,    0},        /* 33 ATTR_TYPE           */    {"usemap"        ,	VTYPE_STR,     0},        /* 34 ATTR_USEMAP         */    {"valign"        ,	VTYPE_VALIGN,  0},        /* 35 ATTR_VALIGN         */    {"value"         ,	VTYPE_STR,     0},        /* 36 ATTR_VALUE          */    {"vspace"        ,	VTYPE_NUMBER,  0},        /* 37 ATTR_VSPACE         */    {"width"         ,	VTYPE_LENGTH,  0},        /* 38 ATTR_WIDTH          */    {"compact"       ,	VTYPE_NONE,    0},        /* 39 ATTR_COMPACT        */    {"start"         ,	VTYPE_NUMBER,  0},        /* 40 ATTR_START          */    {"selected"      ,	VTYPE_NONE,    0},        /* 41 ATTR_SELECTED       */    {"label"         ,	VTYPE_STR,     0},        /* 42 ATTR_LABEL          */                                       		       {NULL            ,	VTYPE_NONE,    0},        /* 43 Undefined           */    {NULL            ,	VTYPE_NONE,    0},        /* 44 Undefined           */    {NULL            ,	VTYPE_NONE,    0},        /* 45 Undefined           */    {NULL            ,	VTYPE_NONE,    0},        /* 46 Undefined           */    {NULL            ,	VTYPE_NONE,    0},        /* 47 Undefined           */    {NULL            ,	VTYPE_NONE,    0},        /* 48 Undefined           */    {NULL            ,	VTYPE_NONE,    0},        /* 49 Undefined           */    {NULL            ,	VTYPE_NONE,    0},        /* 50 Undefined           */    {NULL            ,	VTYPE_NONE,    0},        /* 51 Undefined           */    {NULL            ,	VTYPE_NONE,    0},        /* 52 Undefined           */                                                           		       /* Internal attribute */                               		       {"tid"           ,	VTYPE_NUMBER,  AFLG_INT}, /* 53 ATTR_TID            */    {"fid"           ,	VTYPE_NUMBER,  AFLG_INT}, /* 54 ATTR_FID            */    {"for_table"     ,	VTYPE_NONE,    AFLG_INT}, /* 55 ATTR_FOR_TABLE      */    {"framename"     ,	VTYPE_STR,     AFLG_INT}, /* 56 ATTR_FRAMENAME      */    {"hborder"       ,	VTYPE_NONE,    0},        /* 57 ATTR_HBORDER        */    {"hseq"          ,	VTYPE_NUMBER,  AFLG_INT}, /* 58 ATTR_HSEQ           */    {"no_effect"     ,	VTYPE_NONE,    AFLG_INT}, /* 59 ATTR_NO_EFFECT      */    {"referer"       ,	VTYPE_STR,     AFLG_INT}, /* 60 ATTR_REFERER        */    {"selectnumber"  ,	VTYPE_NUMBER,  AFLG_INT}, /* 61 ATTR_SELECTNUMBER   */    {"textareanumber",	VTYPE_NUMBER,  AFLG_INT}, /* 62 ATTR_TEXTAREANUMBER */    {"title"         ,	VTYPE_STR,     AFLG_INT}, /* 63 ATTR_TITLE          */};