diff options
Diffstat (limited to 'src/html.cc')
-rw-r--r-- | src/html.cc | 197 |
1 files changed, 92 insertions, 105 deletions
diff --git a/src/html.cc b/src/html.cc index 3f7861d7..7cf89758 100644 --- a/src/html.cc +++ b/src/html.cc @@ -114,7 +114,6 @@ typedef struct { const char *name; /* element name */ unsigned char Flags; /* flags (explained near the table data) */ char EndTag; /* Is it Required, Optional or Forbidden */ - uchar_t TagLevel; /* Used to heuristically parse bad HTML */ TagOpenFunct open; /* Open function */ TagOpenFunct content; /* Content function */ TagCloseFunct close; /* Close function */ @@ -3439,128 +3438,116 @@ static void Html_tag_content_wbr(DilloHtml *html, const char *tag, int tagsize) */ static const TagInfo Tags[] = { - {"a", B8(01011),'R',2, Html_tag_open_a, NULL, Html_tag_close_a}, - {"abbr", B8(01011),'R',2, Html_tag_open_abbr, NULL, NULL}, + {"a", B8(01011),'R', Html_tag_open_a, NULL, Html_tag_close_a}, + {"abbr", B8(01011),'R', Html_tag_open_abbr, NULL, NULL}, /* acronym 010101 -- obsolete in HTML5 */ - {"address", B8(01110),'R',2,Html_tag_open_default, NULL, Html_tag_close_par}, - {"area", B8(01001),'F',0, Html_tag_open_default, Html_tag_content_area, - NULL}, - {"article", B8(01110),'R',2, Html_tag_open_sectioning, NULL, NULL}, - {"aside", B8(01110),'R',2, Html_tag_open_sectioning, NULL, NULL}, - {"audio", B8(01111),'R',2, Html_tag_open_audio, NULL, Html_tag_close_media}, - {"b", B8(01011),'R',2, Html_tag_open_default, NULL, NULL}, - {"base", B8(10001),'F',0, Html_tag_open_base, NULL, NULL}, + {"address", B8(01110),'R', Html_tag_open_default, NULL, Html_tag_close_par}, + {"area", B8(01001),'F', Html_tag_open_default, Html_tag_content_area, NULL}, + {"article", B8(01110),'R', Html_tag_open_sectioning, NULL, NULL}, + {"aside", B8(01110),'R', Html_tag_open_sectioning, NULL, NULL}, + {"audio", B8(01111),'R', Html_tag_open_audio, NULL, Html_tag_close_media}, + {"b", B8(01011),'R', Html_tag_open_default, NULL, NULL}, + {"base", B8(10001),'F', Html_tag_open_base, NULL, NULL}, /* basefont 010001 -- obsolete in HTML5 */ /* bdo 010101 */ - {"big", B8(01011),'R',2, Html_tag_open_default, NULL, NULL}, - {"blockquote", B8(01110),'R',2, Html_tag_open_blockquote, NULL, - NULL}, - {"body", B8(01110),'O',1, Html_tag_open_body, NULL, Html_tag_close_body}, - {"br", B8(01001),'F',0, Html_tag_open_default, Html_tag_content_br, - NULL}, - {"button", B8(01111),'R',2, Html_tag_open_button,NULL,Html_tag_close_button}, + {"big", B8(01011),'R', Html_tag_open_default, NULL, NULL}, + {"blockquote", B8(01110),'R', Html_tag_open_blockquote, NULL, NULL}, + {"body", B8(01110),'O', Html_tag_open_body, NULL, Html_tag_close_body}, + {"br", B8(01001),'F', Html_tag_open_default, Html_tag_content_br, NULL}, + {"button", B8(01111),'R', Html_tag_open_button,NULL,Html_tag_close_button}, /* caption */ - {"center", B8(01110),'R',2, Html_tag_open_default, NULL, NULL}, - {"cite", B8(01011),'R',2, Html_tag_open_default, NULL, NULL}, - {"code", B8(01011),'R',2, Html_tag_open_default, NULL, NULL}, + {"center", B8(01110),'R', Html_tag_open_default, NULL, NULL}, + {"cite", B8(01011),'R', Html_tag_open_default, NULL, NULL}, + {"code", B8(01011),'R', Html_tag_open_default, NULL, NULL}, /* col 010010 'F' */ /* colgroup */ - {"dd", B8(01110),'O',1, Html_tag_open_dd, NULL, NULL}, - {"del", B8(01111),'R',2, Html_tag_open_default, NULL, NULL}, - {"dfn", B8(01011),'R',2, Html_tag_open_default, NULL, NULL}, - {"dir", B8(01100),'R',2, Html_tag_open_dir, NULL, Html_tag_close_par}, + {"dd", B8(01110),'O', Html_tag_open_dd, NULL, NULL}, + {"del", B8(01111),'R', Html_tag_open_default, NULL, NULL}, + {"dfn", B8(01011),'R', Html_tag_open_default, NULL, NULL}, + {"dir", B8(01100),'R', Html_tag_open_dir, NULL, Html_tag_close_par}, /* TODO: complete <div> support! */ - {"div", B8(01110),'R',2, Html_tag_open_div, NULL, NULL}, - {"dl", B8(01100),'R',2, Html_tag_open_dl, NULL, Html_tag_close_par}, - {"dt", B8(01010),'O',1, Html_tag_open_dt, NULL, Html_tag_close_par}, - {"em", B8(01011),'R',2, Html_tag_open_default, NULL, NULL}, - {"embed", B8(01001),'F',0, Html_tag_open_embed, Html_tag_content_embed,NULL}, + {"div", B8(01110),'R', Html_tag_open_div, NULL, NULL}, + {"dl", B8(01100),'R', Html_tag_open_dl, NULL, Html_tag_close_par}, + {"dt", B8(01010),'O', Html_tag_open_dt, NULL, Html_tag_close_par}, + {"em", B8(01011),'R', Html_tag_open_default, NULL, NULL}, + {"embed", B8(01001),'F', Html_tag_open_embed, Html_tag_content_embed, NULL}, /* fieldset */ - {"figcaption", B8(01110),'R',2, Html_tag_open_default, NULL, NULL}, - {"figure", B8(01110),'R',2, Html_tag_open_default, NULL, NULL}, - {"font", B8(01011),'R',2, Html_tag_open_font, NULL, NULL}, - {"footer", B8(01110),'R',2, Html_tag_open_sectioning, NULL, NULL}, - {"form", B8(01110),'R',2, Html_tag_open_form, NULL, Html_tag_close_form}, - {"frame", B8(01000),'F',0, Html_tag_open_frame, Html_tag_content_frame, + {"figcaption", B8(01110),'R', Html_tag_open_default, NULL, NULL}, + {"figure", B8(01110),'R', Html_tag_open_default, NULL, NULL}, + {"font", B8(01011),'R', Html_tag_open_font, NULL, NULL}, + {"footer", B8(01110),'R', Html_tag_open_sectioning, NULL, NULL}, + {"form", B8(01110),'R', Html_tag_open_form, NULL, Html_tag_close_form}, + {"frame", B8(01000),'F', Html_tag_open_frame, Html_tag_content_frame, NULL}, + {"frameset", B8(01110),'R', Html_tag_open_default, Html_tag_content_frameset, NULL}, - {"frameset", B8(01110),'R',2, Html_tag_open_default, - Html_tag_content_frameset, NULL}, - {"h1", B8(01010),'R',2, Html_tag_open_h, NULL, NULL}, - {"h2", B8(01010),'R',2, Html_tag_open_h, NULL, NULL}, - {"h3", B8(01010),'R',2, Html_tag_open_h, NULL, NULL}, - {"h4", B8(01010),'R',2, Html_tag_open_h, NULL, NULL}, - {"h5", B8(01010),'R',2, Html_tag_open_h, NULL, NULL}, - {"h6", B8(01010),'R',2, Html_tag_open_h, NULL, NULL}, - {"head", B8(10111),'O',1, Html_tag_open_head, NULL, Html_tag_close_head}, - {"header", B8(01110),'R',2, Html_tag_open_sectioning, NULL, NULL}, - {"hr", B8(01000),'F',0, Html_tag_open_hr, Html_tag_content_hr, - NULL}, - {"html", B8(00110),'O',1, Html_tag_open_html, NULL, Html_tag_close_html}, - {"i", B8(01011),'R',2, Html_tag_open_default, NULL, NULL}, - {"iframe", B8(01111),'R',2, Html_tag_open_frame, Html_tag_content_frame, - NULL}, - {"img", B8(01001),'F',0, Html_tag_open_img, Html_tag_content_img, - NULL}, - {"input", B8(01001),'F',0, Html_tag_open_input, NULL, NULL}, - {"ins", B8(01111),'R',2, Html_tag_open_default, NULL, NULL}, - {"isindex", B8(11001),'F',0, Html_tag_open_isindex, NULL, NULL}, - {"kbd", B8(01011),'R',2, Html_tag_open_default, NULL, NULL}, + {"h1", B8(01010),'R', Html_tag_open_h, NULL, NULL}, + {"h2", B8(01010),'R', Html_tag_open_h, NULL, NULL}, + {"h3", B8(01010),'R', Html_tag_open_h, NULL, NULL}, + {"h4", B8(01010),'R', Html_tag_open_h, NULL, NULL}, + {"h5", B8(01010),'R', Html_tag_open_h, NULL, NULL}, + {"h6", B8(01010),'R', Html_tag_open_h, NULL, NULL}, + {"head", B8(10111),'O', Html_tag_open_head, NULL, Html_tag_close_head}, + {"header", B8(01110),'R', Html_tag_open_sectioning, NULL, NULL}, + {"hr", B8(01000),'F', Html_tag_open_hr, Html_tag_content_hr, NULL}, + {"html", B8(00110),'O', Html_tag_open_html, NULL, Html_tag_close_html}, + {"i", B8(01011),'R', Html_tag_open_default, NULL, NULL}, + {"iframe", B8(01111),'R', Html_tag_open_frame, Html_tag_content_frame, NULL}, + {"img", B8(01001),'F', Html_tag_open_img, Html_tag_content_img, NULL}, + {"input", B8(01001),'F', Html_tag_open_input, NULL, NULL}, + {"ins", B8(01111),'R', Html_tag_open_default, NULL, NULL}, + {"isindex", B8(11001),'F', Html_tag_open_isindex, NULL, NULL}, + {"kbd", B8(01011),'R', Html_tag_open_default, NULL, NULL}, /* label 010101 */ /* legend 01?? */ - {"li", B8(01110),'O',1, Html_tag_open_li, NULL, Html_tag_close_li}, - {"link", B8(10001),'F',0, Html_tag_open_link, NULL, NULL}, - {"map", B8(01101),'R',2, Html_tag_open_default, Html_tag_content_map, - Html_tag_close_map}, - {"mark", B8(01011),'R',2, Html_tag_open_default, NULL, NULL}, + {"li", B8(01110),'O', Html_tag_open_li, NULL, Html_tag_close_li}, + {"link", B8(10001),'F', Html_tag_open_link, NULL, NULL}, + {"map", B8(01101),'R', Html_tag_open_default, Html_tag_content_map, + Html_tag_close_map}, + {"mark", B8(01011),'R', Html_tag_open_default, NULL, NULL}, /* menu 1010 -- TODO: not exactly 1010, it can contain LI and inline */ - {"menu", B8(01100),'R',2, Html_tag_open_menu, NULL, Html_tag_close_par}, - {"meta", B8(11001),'F',0, Html_tag_open_meta, NULL, NULL}, - {"nav", B8(01110),'R',2, Html_tag_open_sectioning, NULL, NULL}, + {"menu", B8(01100),'R', Html_tag_open_menu, NULL, Html_tag_close_par}, + {"meta", B8(11001),'F', Html_tag_open_meta, NULL, NULL}, + {"nav", B8(01110),'R', Html_tag_open_sectioning, NULL, NULL}, /* noframes 1011 -- obsolete in HTML5 */ /* noscript 1011 */ - {"object", B8(11111),'R',2, Html_tag_open_object, Html_tag_content_object, - NULL}, - {"ol", B8(01100),'R',2, Html_tag_open_ol, NULL, NULL}, - {"optgroup", B8(01011),'O',1, Html_tag_open_optgroup, NULL, - Html_tag_close_optgroup}, - {"option", B8(01001),'O',0, Html_tag_open_option,NULL,Html_tag_close_option}, - {"p", B8(01010),'O',1, Html_tag_open_p, NULL, NULL}, + {"object", B8(11111),'R', Html_tag_open_object, Html_tag_content_object,NULL}, + {"ol", B8(01100),'R', Html_tag_open_ol, NULL, NULL}, + {"optgroup", B8(01011),'O', Html_tag_open_optgroup, NULL, + Html_tag_close_optgroup}, + {"option", B8(01001),'O', Html_tag_open_option, NULL, Html_tag_close_option}, + {"p", B8(01010),'O', Html_tag_open_p, NULL, NULL}, /* param 010001 'F' */ - {"pre", B8(01010),'R',2, Html_tag_open_pre, NULL, Html_tag_close_pre}, - {"q", B8(01011),'R',2, Html_tag_open_q, NULL, Html_tag_close_q}, - {"s", B8(01011),'R',2, Html_tag_open_default, NULL, NULL}, - {"samp", B8(01011),'R',2, Html_tag_open_default, NULL, NULL}, - {"script", B8(11101),'R',2, Html_tag_open_script,NULL,Html_tag_close_script}, - {"section", B8(01110),'R',2, Html_tag_open_sectioning, NULL, NULL}, - {"select", B8(01011),'R',2, Html_tag_open_select,NULL,Html_tag_close_select}, - {"small", B8(01011),'R',2, Html_tag_open_default, NULL, NULL}, - {"source", B8(01001),'F',0, Html_tag_open_source, Html_tag_content_source, - NULL}, - {"span", B8(01011),'R',2, Html_tag_open_span, NULL, NULL}, - {"strike", B8(01011),'R',2, Html_tag_open_default, NULL, NULL}, - {"strong", B8(01011),'R',2, Html_tag_open_default, NULL, NULL}, - {"style", B8(10011),'R',2, Html_tag_open_style, NULL, Html_tag_close_style}, - {"sub", B8(01011),'R',2, Html_tag_open_default, NULL, NULL}, - {"sup", B8(01011),'R',2, Html_tag_open_default, NULL, NULL}, - {"table", B8(01100),'R',5, Html_tag_open_table, Html_tag_content_table, NULL}, + {"pre", B8(01010),'R', Html_tag_open_pre, NULL, Html_tag_close_pre}, + {"q", B8(01011),'R', Html_tag_open_q, NULL, Html_tag_close_q}, + {"s", B8(01011),'R', Html_tag_open_default, NULL, NULL}, + {"samp", B8(01011),'R', Html_tag_open_default, NULL, NULL}, + {"script", B8(11101),'R', Html_tag_open_script,NULL,Html_tag_close_script}, + {"section", B8(01110),'R', Html_tag_open_sectioning, NULL, NULL}, + {"select", B8(01011),'R', Html_tag_open_select,NULL,Html_tag_close_select}, + {"small", B8(01011),'R', Html_tag_open_default, NULL, NULL}, + {"source", B8(01001),'F', Html_tag_open_source, Html_tag_content_source,NULL}, + {"span", B8(01011),'R', Html_tag_open_span, NULL, NULL}, + {"strike", B8(01011),'R', Html_tag_open_default, NULL, NULL}, + {"strong", B8(01011),'R', Html_tag_open_default, NULL, NULL}, + {"style", B8(10011),'R', Html_tag_open_style, NULL, Html_tag_close_style}, + {"sub", B8(01011),'R', Html_tag_open_default, NULL, NULL}, + {"sup", B8(01011),'R', Html_tag_open_default, NULL, NULL}, + {"table", B8(01100),'R', Html_tag_open_table, Html_tag_content_table, NULL}, /* tbody */ - {"td", B8(01110),'O',3, Html_tag_open_td, Html_tag_content_td, - NULL}, - {"textarea", B8(01011),'R', 2, Html_tag_open_textarea, - Html_tag_content_textarea, Html_tag_close_textarea}, + {"td", B8(01110),'O', Html_tag_open_td, Html_tag_content_td, NULL}, + {"textarea", B8(01011),'R', Html_tag_open_textarea, Html_tag_content_textarea, + Html_tag_close_textarea}, /* tfoot */ - {"th", B8(01110),'O',1, Html_tag_open_th, Html_tag_content_th, - NULL}, + {"th", B8(01110),'O', Html_tag_open_th, Html_tag_content_th, NULL}, /* thead */ - {"title", B8(10011),'R',2, Html_tag_open_title, NULL, Html_tag_close_title}, - {"tr", B8(01100),'O',4, Html_tag_open_tr, Html_tag_content_tr, - NULL}, - {"tt", B8(01011),'R',2, Html_tag_open_default, NULL, NULL}, - {"u", B8(01011),'R',2, Html_tag_open_default, NULL, NULL}, - {"ul", B8(01100),'R',2, Html_tag_open_ul, NULL, NULL}, - {"var", B8(01011),'R',2, Html_tag_open_default, NULL, NULL}, - {"video", B8(01111),'R',2, Html_tag_open_video, NULL, Html_tag_close_media}, - {"wbr", B8(01011),'F',0, Html_tag_open_default, Html_tag_content_wbr, NULL} + {"title", B8(10011),'R', Html_tag_open_title, NULL, Html_tag_close_title}, + {"tr", B8(01100),'O', Html_tag_open_tr, Html_tag_content_tr, NULL}, + {"tt", B8(01011),'R', Html_tag_open_default, NULL, NULL}, + {"u", B8(01011),'R', Html_tag_open_default, NULL, NULL}, + {"ul", B8(01100),'R', Html_tag_open_ul, NULL, NULL}, + {"var", B8(01011),'R', Html_tag_open_default, NULL, NULL}, + {"video", B8(01111),'R', Html_tag_open_video, NULL, Html_tag_close_media}, + {"wbr", B8(01011),'F', Html_tag_open_default, Html_tag_content_wbr, NULL} }; #define NTAGS (sizeof(Tags)/sizeof(Tags[0])) |