1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-09-29 03:17:53 -04:00

[css] fixes

This commit is contained in:
Witold Filipczyk 2020-07-11 21:01:11 +02:00
parent 4f1d7de8fe
commit cf3324388d
4 changed files with 157 additions and 135 deletions

View File

@ -13,6 +13,8 @@
#include <stdlib.h>
#include <string.h>
#include <dom/dom.h>
#include "elinks.h"
#include "document/css/apply.h"
@ -221,7 +223,7 @@ examine_element(struct html_context *html_context, struct css_selector *base,
process_found_selector(selector, CST_ELEMENT, base);
}
if (!element->options)
if (!element->options && !element->node)
return;
/* TODO: More pseudo-classess. --pasky */
@ -266,10 +268,13 @@ get_css_selector_for_element(struct html_context *html_context,
struct css_stylesheet *css,
LIST_OF(struct html_element) *html_stack)
{
unsigned char *code;
unsigned char *code = NULL;
struct css_selector *selector;
dom_string *style = NULL;
dom_string *style_value = NULL;
dom_exception exc;
assert(element && element->options && css);
assert(element && (element->options || element->node) && css);
selector = init_css_selector(NULL, CST_ELEMENT, CSR_ROOT, NULL, 0);
if (!selector)
@ -286,8 +291,19 @@ get_css_selector_for_element(struct html_context *html_context,
DBG("Element %.*s applied.", element->namelen, element->name);
#endif
code = get_attr_val(element->options, "style", html_context->doc_cp);
exc = dom_string_create("style", sizeof("style")-1, &style);
if (DOM_NO_ERR != exc) {
return selector;
}
exc = dom_element_get_attribute(element->node, style, &style_value);
if (exc == DOM_NO_ERR && style_value) {
code = memacpy(dom_string_data(style_value), dom_string_byte_length(style_value));
dom_string_unref(style_value);
}
dom_string_unref(style);
// code = get_attr_val(element->options, "style", html_context->doc_cp);
if (code) {
// fprintf(stderr, "code=%s\n", code);
struct css_selector *stylesel;
struct scanner scanner;

View File

@ -692,6 +692,7 @@ dump_dom_element(struct source_renderer *renderer, dom_node *node, int depth)
if (html_context->was_style) {
css_parse_stylesheet(&html_context->css_styles, html_context->base_href, html, eof);
dom_string_unref(str);
return true;
}
#endif
@ -1017,8 +1018,8 @@ next_break:
html_stack_dup(html_context, ELEMENT_KILLABLE);
html_top->tag = html_type;
html_top->node = node;
// html_top->name = name;
// html_top->namelen = namelen;
html_top->name = tags_dom_html_array[html_type].name;
html_top->namelen = tags_dom_html_array[html_type].namelen;
// html_top->options = attr;
html_top->linebreak = tags_dom_html_array[html_type].linebreak;
@ -1050,7 +1051,7 @@ next_break:
/* Apply CSS styles. */
#ifdef CONFIG_CSS
if (html_top->options && html_context->options->css_enable) {
if ((html_top->options || html_top->node) && html_context->options->css_enable) {
dom_string *id_value = NULL;
dom_string *class_value = NULL;
unsigned char *id = NULL;
@ -1067,7 +1068,7 @@ next_break:
class_ = memacpy(dom_string_data(class_value), dom_string_byte_length(class_value));
dom_string_unref(class_value);
}
/* XXX: We should apply CSS otherwise as well, but that'll need
* some deeper changes in order to have options filled etc.
* Probably just applying CSS from more places, since we
@ -1107,7 +1108,7 @@ next_break:
/* Apply CSS styles again. */
#ifdef CONFIG_CSS
if (selector && html_top->options) {
if (selector && (html_top->options || html_top->node)) {
/* Call it now to override default colors of the elements. */
selector = get_css_selector_for_element(html_context, html_top,
&html_context->css_styles,
@ -1178,7 +1179,6 @@ dump_dom_element_closing(struct source_renderer *renderer, dom_node *node)
if (html_type) {
//fprintf(stderr, "closing: %d\n", html_type);
struct html_element *e, *elt;
int lnb = 0;
int kill = 0;

View File

@ -222,10 +222,12 @@ tags_init_form_control(enum form_type type, unsigned char *attr,
return fc;
}
#if 0
static void
html_apply_canvas_bgcolor(struct source_renderer *rendererer)
{
struct html_context *html_context = rendererer->html_context;
#ifdef CONFIG_CSS
/* If there are any CSS twaks regarding bgcolor, make sure we will get
* it _and_ prefer it over bgcolor attribute. */
@ -249,6 +251,7 @@ html_apply_canvas_bgcolor(struct source_renderer *rendererer)
html_context->special_f(html_context, SP_COLOR_LINK_LINES);
}
}
#endif
static void tags_html_linebrk(struct source_renderer *renderer, unsigned char *al);
static void tags_html_h(int h, dom_node *node, unsigned char *a,
@ -1726,9 +1729,11 @@ tags_html_html_close(struct source_renderer *renderer, dom_node *node, unsigned
unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5)
{
struct html_context *html_context = renderer->html_context;
if (html_top->type >= ELEMENT_KILLABLE
&& !html_context->was_body_background)
html_apply_canvas_bgcolor(renderer);
&& !html_context->was_body_background) {
tags_html_apply_canvas_bgcolor(renderer);
}
}
void
@ -4499,126 +4504,126 @@ tags_html_nop(struct source_renderer *renderer, dom_node *node, unsigned char *a
}
struct element_info2 tags_dom_html_array[] = {
{NULL, NULL, 0, ET_NON_NESTABLE}, /* _UNKNOWN */
{tags_html_a, NULL, 0, ET_NON_NESTABLE}, /* A */
{tags_html_abbr, NULL, 0, ET_NESTABLE}, /* ABBR */
{tags_html_address, NULL, 2, ET_NESTABLE}, /* ADDRESS */
{tags_html_applet, NULL, 1, ET_NON_PAIRABLE }, /* APPLET */
{tags_html_area, tags_html_area_close, 0x0, 0x0}, /* AREA */
{tags_html_article, tags_html_article_close, 0x0, 0x0}, /* ARTICLE */
{tags_html_aside, tags_html_aside_close, 0x0, 0x0}, /* ASIDE */
{tags_html_audio, NULL, 1, ET_NON_PAIRABLE}, /* AUDIO */
{tags_html_b, NULL, 0, ET_NESTABLE}, /* B */
{tags_html_base, NULL, 0, ET_NON_PAIRABLE}, /* BASE */
{tags_html_basefont, NULL, 0, ET_NON_PAIRABLE}, /* BASEFONT */
{tags_html_bdi, tags_html_bdi_close, 0x0, 0x0}, /* BDI */
{tags_html_bdo, tags_html_bdo_close, 0x0, 0x0}, /* BDO */
{tags_html_blockquote, NULL, 2, ET_NESTABLE}, /* BLOCKQUOTE */
{tags_html_body, NULL, 0, ET_NESTABLE}, /* BODY */
{tags_html_br, NULL, 1, ET_NON_PAIRABLE}, /* BR */
{tags_html_button, NULL, 0, ET_NESTABLE}, /* BUTTON */
{tags_html_canvas, tags_html_canvas_close, 0x0, 0x0}, /* CANVAS */
{tags_html_caption, NULL, 1, ET_NESTABLE}, /* CAPTION */
{tags_html_center, NULL, 1, ET_NESTABLE}, /* CENTER */
{tags_html_cite, tags_html_cite_close, 0x0, 0x0}, /* CITE */
{tags_html_code, NULL, 0, ET_NESTABLE}, /* CODE */
{tags_html_col, tags_html_col_close, 0x0, 0x0}, /* COL */
{tags_html_colgroup, tags_html_colgroup_close, 0x0, 0x0}, /* COLGROUP */
{tags_html_data, tags_html_data_close, 0x0, 0x0}, /* DATA */
{tags_html_datalist, tags_html_datalist_close, 0x0, 0x0}, /* DATALIST */
{tags_html_dd, NULL, 1, ET_NON_PAIRABLE}, /* DD */
{tags_html_del, tags_html_del_close, 0x0, 0x0}, /* DEL */
{tags_html_details, tags_html_details_close, 0x0, 0x0}, /* DETAILS */
{tags_html_dfn, NULL, 0, ET_NESTABLE}, /* DFN */
{tags_html_dialog, tags_html_dialog_close, 0x0, 0x0}, /* DIALOG */
{tags_html_dir, NULL, 2, ET_NESTABLE}, /* DIR */
{tags_html_div, NULL, 1, ET_NESTABLE}, /* DIV */
{tags_html_dl, NULL, 2, ET_NESTABLE}, /* DL */
{tags_html_dt, NULL, 1, ET_NON_PAIRABLE}, /* DT */
{tags_html_em, NULL, 0, ET_NESTABLE}, /* EM */
{tags_html_embed, NULL, 0, ET_NON_PAIRABLE}, /* EMBED */
{tags_html_fieldset, tags_html_fieldset_close, 0x0, 0x0}, /* FIELDSET */
{tags_html_figcaption, tags_html_figcaption_close, 0x0, 0x0}, /* FIGCAPTION */
{tags_html_figure, tags_html_figure_close, 0x0, 0x0}, /* FIGURE */
{tags_html_font, NULL, 0, ET_NESTABLE}, /* FONT */
{tags_html_footer, tags_html_footer_close, 0x0, 0x0}, /* FOOTER */
{tags_html_form, NULL, 1, ET_NESTABLE}, /* FORM */
{tags_html_frame, NULL, 1, ET_NON_PAIRABLE}, /* FRAME */
{tags_html_frameset, NULL, 1, ET_NESTABLE}, /* FRAMESET */
{tags_html_h1, NULL, 2, ET_NON_NESTABLE}, /* H1 */
{tags_html_h2, NULL, 2, ET_NON_NESTABLE}, /* H2 */
{tags_html_h3, NULL, 2, ET_NON_NESTABLE}, /* H3 */
{tags_html_h4, NULL, 2, ET_NON_NESTABLE}, /* H4 */
{tags_html_h5, NULL, 2, ET_NON_NESTABLE}, /* H5 */
{tags_html_h6, NULL, 2, ET_NON_NESTABLE}, /* H6 */
{tags_html_head, NULL, 0, ET_NESTABLE}, /* HEAD */
{tags_html_header, tags_html_header_close, 0x0, 0x0}, /* HEADER */
{tags_html_hgroup, tags_html_hgroup_close, 0x0, 0x0}, /* HGROUP */
{tags_html_hr, NULL, 2, ET_NON_PAIRABLE}, /* HR */
{tags_html_html, tags_html_html_close, 0, ET_NESTABLE}, /* HTML */
{tags_html_i, NULL, 0, ET_NESTABLE}, /* I */
{tags_html_iframe, NULL, 1, ET_NON_PAIRABLE}, /* IFRAME */
{tags_html_img, NULL, 0, ET_NON_PAIRABLE}, /* IMG */
{tags_html_input, NULL, 0, ET_NON_PAIRABLE}, /* INPUT */
{tags_html_ins, tags_html_ins_close, 0x0, 0x0}, /* INS */
{tags_html_isindex, tags_html_isindex_close, 0x0, 0x0}, /* ISINDEX */
{tags_html_kbd, tags_html_kbd_close, 0x0, 0x0}, /* KBD */
{tags_html_keygen, tags_html_keygen_close, 0x0, 0x0}, /* KEYGEN */
{tags_html_label, tags_html_label_close, 0x0, 0x0}, /* LABEL */
{tags_html_legend, tags_html_legend_close, 0x0, 0x0}, /* LEGEND */
{tags_html_li, NULL, 1, ET_LI}, /* LI */
{tags_html_link, NULL, 1, ET_NON_PAIRABLE}, /* LINK */
{tags_html_main, tags_html_main_close, 0x0, 0x0}, /* MAIN */
{tags_html_map, tags_html_map_close, 0x0, 0x0}, /* MAP */
{tags_html_mark, tags_html_mark_close, 0x0, 0x0}, /* MARK */
{tags_html_menu, NULL, 2, ET_NESTABLE}, /* MENU */
{tags_html_menuitem, tags_html_menuitem_close, 0x0, 0x0}, /* MENUITEM */
{tags_html_meta, NULL, 0, ET_NON_PAIRABLE}, /* META */
{tags_html_meter, tags_html_meter_close, 0x0, 0x0}, /* METER */
{tags_html_nav, tags_html_nav_close, 0x0, 0x0}, /* NAV */
{tags_html_noscript, NULL, 0, ET_NESTABLE}, /* NOSCRIPT */
{tags_html_object, NULL, 1, ET_NON_PAIRABLE}, /* OBJECT */
{tags_html_ol, NULL, 2, ET_NESTABLE}, /* OL */
{tags_html_optgroup, tags_html_optgroup_close, 0x0, 0x0}, /* OPTGROUP */
{tags_html_option, NULL, 1, ET_NON_PAIRABLE}, /* OPTION */
{tags_html_output, tags_html_output_close, 0x0, 0x0}, /* OUTPUT */
{tags_html_p, NULL, 2, ET_NON_NESTABLE}, /* P */
{tags_html_param, tags_html_param_close, 0x0, 0x0}, /* PARAM */
{tags_html_picture, tags_html_picture_close, 0x0, 0x0}, /* PICTURE */
{tags_html_pre, NULL, 2, ET_NESTABLE}, /* PRE */
{tags_html_progress, tags_html_progress_close, 0x0, 0x0}, /* PROGRESS */
{tags_html_q, tags_html_q_close, 0, ET_NESTABLE}, /* Q */
{tags_html_rp, tags_html_rp_close, 0x0, 0x0}, /* RP */
{tags_html_rt, tags_html_rt_close, 0x0, 0x0}, /* RT */
{tags_html_ruby, tags_html_ruby_close, 0x0, 0x0}, /* RUBY */
{tags_html_s, NULL, 0, ET_NESTABLE}, /* S */
{tags_html_samp, tags_html_samp_close, 0x0, 0x0}, /* SAMP */
{tags_html_script, NULL, 0, ET_NESTABLE}, /* SCRIPT */
{tags_html_section, tags_html_section_close, 0x0, 0x0}, /* SECTION */
{tags_html_select, tags_html_select_close, 0, ET_NESTABLE}, /* SELECT */
{tags_html_small, tags_html_small_close, 0x0, 0x0}, /* SMALL */
{tags_html_source, NULL, 1, ET_NON_PAIRABLE}, /* SOURCE */
{tags_html_span, NULL, 0, ET_NESTABLE}, /* SPAN */
{tags_html_strong, NULL, 0, ET_NESTABLE}, /* STRONG */
{tags_html_style, tags_html_style_close, 0, ET_NESTABLE}, /* STYLE */
{tags_html_sub, tags_html_sub_close, 0, ET_NESTABLE}, /* SUB */
{tags_html_summary, tags_html_summary_close, 0x0, 0x0}, /* SUMMARY */
{tags_html_sup, NULL, 0, ET_NESTABLE}, /* SUP */
{tags_html_table, NULL, 2, ET_NESTABLE}, /* TABLE */
{tags_html_tbody, tags_html_tbody_close, 0x0, 0x0}, /* TBODY */
{tags_html_td, NULL, 0, ET_NESTABLE}, /* TD */
{tags_html_template, tags_html_template_close, 0x0, 0x0}, /* TEMPLATE */
{tags_html_textarea, tags_html_textarea_close, 0, 0x0}, /* TEXTAREA */
{tags_html_tfoot, tags_html_tfoot_close, 0x0, 0x0}, /* TFOOT */
{tags_html_th, NULL, 0, ET_NESTABLE}, /* TH */
{tags_html_thead, tags_html_thead_close, 0x0, 0x0}, /* THEAD */
{tags_html_time, tags_html_time_close, 0x0, 0x0}, /* TIME */
{tags_html_title, NULL, 0, ET_NESTABLE}, /* TITLE */
{tags_html_tr, NULL, 1, ET_NESTABLE}, /* TR */
{tags_html_track, tags_html_track_close, 0x0, 0x0}, /* TRACK */
{tags_html_u, NULL, 0, ET_NESTABLE}, /* U */
{tags_html_ul, NULL, 2, ET_NESTABLE}, /* UL */
{tags_html_var, tags_html_var_close, 0x0, 0x0}, /* VAR */
{tags_html_video, NULL, 1, ET_NON_PAIRABLE}, /* VIDEO */
{tags_html_wbr, tags_html_wbr_close, 0x0, 0x0}, /* WBR */
{"", 0, NULL, NULL, 0, ET_NON_NESTABLE}, /* _UNKNOWN */
{"a", 1, tags_html_a, NULL, 0, ET_NON_NESTABLE}, /* A */
{"abbr", 4, tags_html_abbr, NULL, 0, ET_NESTABLE}, /* ABBR */
{"address",7, tags_html_address, NULL, 2, ET_NESTABLE}, /* ADDRESS */
{"applet", 6, tags_html_applet, NULL, 1, ET_NON_PAIRABLE }, /* APPLET */
{"area", 4, tags_html_area, tags_html_area_close, 0x0, 0x0}, /* AREA */
{"article", 7, tags_html_article, tags_html_article_close, 0x0, 0x0}, /* ARTICLE */
{"aside", 5, tags_html_aside, tags_html_aside_close, 0x0, 0x0}, /* ASIDE */
{"audio", 5, tags_html_audio, NULL, 1, ET_NON_PAIRABLE}, /* AUDIO */
{"b", 1, tags_html_b, NULL, 0, ET_NESTABLE}, /* B */
{"base", 4, tags_html_base, NULL, 0, ET_NON_PAIRABLE}, /* BASE */
{"basefont", 8, tags_html_basefont, NULL, 0, ET_NON_PAIRABLE}, /* BASEFONT */
{"bdi", 3, tags_html_bdi, tags_html_bdi_close, 0x0, 0x0}, /* BDI */
{"bdo", 3, tags_html_bdo, tags_html_bdo_close, 0x0, 0x0}, /* BDO */
{"blockquote", 10, tags_html_blockquote, NULL, 2, ET_NESTABLE}, /* BLOCKQUOTE */
{"body", 4, tags_html_body, NULL, 0, ET_NESTABLE}, /* BODY */
{"br", 2, tags_html_br, NULL, 1, ET_NON_PAIRABLE}, /* BR */
{"button", 6, tags_html_button, NULL, 0, ET_NESTABLE}, /* BUTTON */
{"canvas", 6, tags_html_canvas, tags_html_canvas_close, 0x0, 0x0}, /* CANVAS */
{"caption", 7, tags_html_caption, NULL, 1, ET_NESTABLE}, /* CAPTION */
{"center", 6, tags_html_center, NULL, 1, ET_NESTABLE}, /* CENTER */
{"cite", 4, tags_html_cite, tags_html_cite_close, 0x0, 0x0}, /* CITE */
{"code", 4, tags_html_code, NULL, 0, ET_NESTABLE}, /* CODE */
{"col", 3, tags_html_col, tags_html_col_close, 0x0, 0x0}, /* COL */
{"colgroup", 8, tags_html_colgroup, tags_html_colgroup_close, 0x0, 0x0}, /* COLGROUP */
{"data", 4, tags_html_data, tags_html_data_close, 0x0, 0x0}, /* DATA */
{"datalist", 8, tags_html_datalist, tags_html_datalist_close, 0x0, 0x0}, /* DATALIST */
{"dd", 2, tags_html_dd, NULL, 1, ET_NON_PAIRABLE}, /* DD */
{"del", 3, tags_html_del, tags_html_del_close, 0x0, 0x0}, /* DEL */
{"details", 7, tags_html_details, tags_html_details_close, 0x0, 0x0}, /* DETAILS */
{"dfn", 3, tags_html_dfn, NULL, 0, ET_NESTABLE}, /* DFN */
{"dialog", 6, tags_html_dialog, tags_html_dialog_close, 0x0, 0x0}, /* DIALOG */
{"dir", 3, tags_html_dir, NULL, 2, ET_NESTABLE}, /* DIR */
{"div", 3, tags_html_div, NULL, 1, ET_NESTABLE}, /* DIV */
{"dl", 2, tags_html_dl, NULL, 2, ET_NESTABLE}, /* DL */
{"dt", 2, tags_html_dt, NULL, 1, ET_NON_PAIRABLE}, /* DT */
{"em", 2, tags_html_em, NULL, 0, ET_NESTABLE}, /* EM */
{"embed", 5, tags_html_embed, NULL, 0, ET_NON_PAIRABLE}, /* EMBED */
{"fieldset", 8, tags_html_fieldset, tags_html_fieldset_close, 0x0, 0x0}, /* FIELDSET */
{"figcaption", 10, tags_html_figcaption, tags_html_figcaption_close, 0x0, 0x0}, /* FIGCAPTION */
{"figure", 6, tags_html_figure, tags_html_figure_close, 0x0, 0x0}, /* FIGURE */
{"font", 4, tags_html_font, NULL, 0, ET_NESTABLE}, /* FONT */
{"footer", 6, tags_html_footer, tags_html_footer_close, 0x0, 0x0}, /* FOOTER */
{"form", 4, tags_html_form, NULL, 1, ET_NESTABLE}, /* FORM */
{"frame", 5, tags_html_frame, NULL, 1, ET_NON_PAIRABLE}, /* FRAME */
{"frameset", 8, tags_html_frameset, NULL, 1, ET_NESTABLE}, /* FRAMESET */
{"h1", 2, tags_html_h1, NULL, 2, ET_NON_NESTABLE}, /* H1 */
{"h2", 2, tags_html_h2, NULL, 2, ET_NON_NESTABLE}, /* H2 */
{"h3", 2, tags_html_h3, NULL, 2, ET_NON_NESTABLE}, /* H3 */
{"h4", 2, tags_html_h4, NULL, 2, ET_NON_NESTABLE}, /* H4 */
{"h5", 2, tags_html_h5, NULL, 2, ET_NON_NESTABLE}, /* H5 */
{"h6", 2, tags_html_h6, NULL, 2, ET_NON_NESTABLE}, /* H6 */
{"head", 4, tags_html_head, NULL, 0, ET_NESTABLE}, /* HEAD */
{"header", 6, tags_html_header, tags_html_header_close, 0x0, 0x0}, /* HEADER */
{"hgroup", 6, tags_html_hgroup, tags_html_hgroup_close, 0x0, 0x0}, /* HGROUP */
{"hr", 2, tags_html_hr, NULL, 2, ET_NON_PAIRABLE}, /* HR */
{"html", 4, tags_html_html, tags_html_html_close, 0, ET_NESTABLE}, /* HTML */
{"i", 1, tags_html_i, NULL, 0, ET_NESTABLE}, /* I */
{"iframe", 6, tags_html_iframe, NULL, 1, ET_NON_PAIRABLE}, /* IFRAME */
{"img", 3, tags_html_img, NULL, 0, ET_NON_PAIRABLE}, /* IMG */
{"input", 5, tags_html_input, NULL, 0, ET_NON_PAIRABLE}, /* INPUT */
{"ins", 3, tags_html_ins, tags_html_ins_close, 0x0, 0x0}, /* INS */
{"isindex", 7, tags_html_isindex, tags_html_isindex_close, 0x0, 0x0}, /* ISINDEX */
{"kbd", 3, tags_html_kbd, tags_html_kbd_close, 0x0, 0x0}, /* KBD */
{"keygen", 6, tags_html_keygen, tags_html_keygen_close, 0x0, 0x0}, /* KEYGEN */
{"label", 5, tags_html_label, tags_html_label_close, 0x0, 0x0}, /* LABEL */
{"legend", 6, tags_html_legend, tags_html_legend_close, 0x0, 0x0}, /* LEGEND */
{"li", 2, tags_html_li, NULL, 1, ET_LI}, /* LI */
{"link", 4, tags_html_link, NULL, 1, ET_NON_PAIRABLE}, /* LINK */
{"main", 4, tags_html_main, tags_html_main_close, 0x0, 0x0}, /* MAIN */
{"map", 3, tags_html_map, tags_html_map_close, 0x0, 0x0}, /* MAP */
{"mark", 4, tags_html_mark, tags_html_mark_close, 0x0, 0x0}, /* MARK */
{"menu", 4, tags_html_menu, NULL, 2, ET_NESTABLE}, /* MENU */
{"menuitem", 8, tags_html_menuitem, tags_html_menuitem_close, 0x0, 0x0}, /* MENUITEM */
{"meta", 4, tags_html_meta, NULL, 0, ET_NON_PAIRABLE}, /* META */
{"meter", 5, tags_html_meter, tags_html_meter_close, 0x0, 0x0}, /* METER */
{"nav", 3, tags_html_nav, tags_html_nav_close, 0x0, 0x0}, /* NAV */
{"noscript", 8, tags_html_noscript, NULL, 0, ET_NESTABLE}, /* NOSCRIPT */
{"object", 6, tags_html_object, NULL, 1, ET_NON_PAIRABLE}, /* OBJECT */
{"ol", 2, tags_html_ol, NULL, 2, ET_NESTABLE}, /* OL */
{"optgroup", 8, tags_html_optgroup, tags_html_optgroup_close, 0x0, 0x0}, /* OPTGROUP */
{"option", 6, tags_html_option, NULL, 1, ET_NON_PAIRABLE}, /* OPTION */
{"output", 6, tags_html_output, tags_html_output_close, 0x0, 0x0}, /* OUTPUT */
{"p", 1, tags_html_p, NULL, 2, ET_NON_NESTABLE}, /* P */
{"param", 5, tags_html_param, tags_html_param_close, 0x0, 0x0}, /* PARAM */
{"picture", 7, tags_html_picture, tags_html_picture_close, 0x0, 0x0}, /* PICTURE */
{"pre", 3, tags_html_pre, NULL, 2, ET_NESTABLE}, /* PRE */
{"progress", 8, tags_html_progress, tags_html_progress_close, 0x0, 0x0}, /* PROGRESS */
{"q", 1, tags_html_q, tags_html_q_close, 0, ET_NESTABLE}, /* Q */
{"rp", 2, tags_html_rp, tags_html_rp_close, 0x0, 0x0}, /* RP */
{"rt", 2, tags_html_rt, tags_html_rt_close, 0x0, 0x0}, /* RT */
{"ruby", 4, tags_html_ruby, tags_html_ruby_close, 0x0, 0x0}, /* RUBY */
{"s", 1, tags_html_s, NULL, 0, ET_NESTABLE}, /* S */
{"samp", 4, tags_html_samp, tags_html_samp_close, 0x0, 0x0}, /* SAMP */
{"script", 6, tags_html_script, NULL, 0, ET_NESTABLE}, /* SCRIPT */
{"section", 7, tags_html_section, tags_html_section_close, 0x0, 0x0}, /* SECTION */
{"select", 6, tags_html_select, tags_html_select_close, 0, ET_NESTABLE}, /* SELECT */
{"small", 5, tags_html_small, tags_html_small_close, 0x0, 0x0}, /* SMALL */
{"source", 6, tags_html_source, NULL, 1, ET_NON_PAIRABLE}, /* SOURCE */
{"span", 4, tags_html_span, NULL, 0, ET_NESTABLE}, /* SPAN */
{"strong", 6, tags_html_strong, NULL, 0, ET_NESTABLE}, /* STRONG */
{"style", 5, tags_html_style, tags_html_style_close, 0, ET_NESTABLE}, /* STYLE */
{"sub", 3, tags_html_sub, tags_html_sub_close, 0, ET_NESTABLE}, /* SUB */
{"summary", 7, tags_html_summary, tags_html_summary_close, 0x0, 0x0}, /* SUMMARY */
{"sup", 3, tags_html_sup, NULL, 0, ET_NESTABLE}, /* SUP */
{"table", 5, tags_html_table, NULL, 2, ET_NESTABLE}, /* TABLE */
{"tbody", 5, tags_html_tbody, tags_html_tbody_close, 0x0, 0x0}, /* TBODY */
{"td", 2, tags_html_td, NULL, 0, ET_NESTABLE}, /* TD */
{"template", 8, tags_html_template, tags_html_template_close, 0x0, 0x0}, /* TEMPLATE */
{"textarea", 8, tags_html_textarea, tags_html_textarea_close, 0, 0x0}, /* TEXTAREA */
{"tfoot", 5, tags_html_tfoot, tags_html_tfoot_close, 0x0, 0x0}, /* TFOOT */
{"th", 2, tags_html_th, NULL, 0, ET_NESTABLE}, /* TH */
{"thead", 5, tags_html_thead, tags_html_thead_close, 0x0, 0x0}, /* THEAD */
{"time", 4, tags_html_time, tags_html_time_close, 0x0, 0x0}, /* TIME */
{"title", 5, tags_html_title, NULL, 0, ET_NESTABLE}, /* TITLE */
{"tr", 2, tags_html_tr, NULL, 1, ET_NESTABLE}, /* TR */
{"track", 5, tags_html_track, tags_html_track_close, 0x0, 0x0}, /* TRACK */
{"u", 1, tags_html_u, NULL, 0, ET_NESTABLE}, /* U */
{"ul", 2, tags_html_ul, NULL, 2, ET_NESTABLE}, /* UL */
{"var", 3, tags_html_var, tags_html_var_close, 0x0, 0x0}, /* VAR */
{"video", 5, tags_html_video, NULL, 1, ET_NON_PAIRABLE}, /* VIDEO */
{"wbr", 3, tags_html_wbr, tags_html_wbr_close, 0x0, 0x0}, /* WBR */
};

View File

@ -26,7 +26,8 @@ enum element_type {
struct element_info2 {
/* Element name, uppercase. */
// unsigned char *name;
unsigned char *name;
unsigned int namelen;
/* Element handler. This does the relevant arguments processing and
* formatting (by calling renderer hooks). Note that in a few cases,