diff --git a/src/document/html/parser.h b/src/document/html/parser.h index fa178aa4f..b73ac877f 100644 --- a/src/document/html/parser.h +++ b/src/document/html/parser.h @@ -27,11 +27,7 @@ enum format_attr { AT_UNDERLINE = 4, AT_FIXED = 8, AT_GRAPHICS = 16, - AT_SUBSCRIPT = 32, - AT_SUPERSCRIPT = 64, - AT_PREFORMATTED = 128, - AT_UPDATE_SUB = 256, - AT_UPDATE_SUP = 512, + AT_PREFORMATTED = 32, }; struct text_attrib_style { diff --git a/src/document/html/parser/general.c b/src/document/html/parser/general.c index 1d0849f24..53ac592ce 100644 --- a/src/document/html/parser/general.c +++ b/src/document/html/parser/general.c @@ -80,14 +80,21 @@ void html_subscript(struct html_context *html_context, unsigned char *a, unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5) { - format.style.attr |= AT_SUBSCRIPT | AT_UPDATE_SUB; + html_context->put_chars_f(html_context, "[", 1); +} + +void +html_subscript_close(struct html_context *html_context, unsigned char *a, + unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5) +{ + html_context->put_chars_f(html_context, "]", 1); } void html_superscript(struct html_context *html_context, unsigned char *a, unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5) { - format.style.attr |= AT_SUPERSCRIPT | AT_UPDATE_SUP; + html_context->put_chars_f(html_context, "^", 1); } void diff --git a/src/document/html/parser/general.h b/src/document/html/parser/general.h index ba2b0c409..0abc41843 100644 --- a/src/document/html/parser/general.h +++ b/src/document/html/parser/general.h @@ -42,7 +42,9 @@ element_handler_T html_span; element_handler_T html_style; element_handler_T html_style_close; element_handler_T html_subscript; +element_handler_T html_subscript_close; element_handler_T html_superscript; +element_handler_T html_superscript_close; element_handler_T html_table; element_handler_T html_td; element_handler_T html_th; diff --git a/src/document/html/parser/parse.c b/src/document/html/parser/parse.c index dac91abeb..238d3e3ed 100644 --- a/src/document/html/parser/parse.c +++ b/src/document/html/parser/parse.c @@ -480,7 +480,7 @@ static struct element_info elements[] = { {"STRIKE", html_underline, NULL, 0, ET_NESTABLE }, {"STRONG", html_bold, NULL, 0, ET_NESTABLE }, {"STYLE", html_style, html_style_close, 0, ET_NESTABLE }, - {"SUB", html_subscript, NULL, 0, ET_NESTABLE }, + {"SUB", html_subscript, html_subscript_close, 0, ET_NESTABLE }, {"SUP", html_superscript, NULL, 0, ET_NESTABLE }, {"TABLE", html_table, NULL, 2, ET_NESTABLE }, {"TD", html_td, NULL, 0, ET_NESTABLE }, diff --git a/src/document/html/renderer.c b/src/document/html/renderer.c index d1d27d76f..f21e3e697 100644 --- a/src/document/html/renderer.c +++ b/src/document/html/renderer.c @@ -338,7 +338,7 @@ get_format_screen_char(struct html_context *html_context, copy_struct(&ta_cache, &format.style); schar_cache.attr = 0; - if (format.style.attr & ~(AT_UPDATE_SUB|AT_UPDATE_SUP)) { + if (format.style.attr) { if (format.style.attr & AT_UNDERLINE) { schar_cache.attr |= SCREEN_ATTR_UNDERLINE; } @@ -364,34 +364,6 @@ get_format_screen_char(struct html_context *html_context, set_screen_char_color(&schar_cache, format.style.bg, format.style.fg, html_context->options->color_flags, html_context->options->color_mode); - - if (html_context->options->display_subs) { - if (format.style.attr & AT_SUBSCRIPT) { - if (format.style.attr & AT_UPDATE_SUB) { - renderer_context.subscript++; - format.style.attr &= ~AT_UPDATE_SUB; - put_chars(html_context, "[", 1); - } - } else { - while (renderer_context.subscript) { - renderer_context.subscript--; - put_chars(html_context, "]", 1); - } - } - } - - if (html_context->options->display_sups) { - if (format.style.attr & AT_SUPERSCRIPT) { - if (format.style.attr & AT_UPDATE_SUP) { - renderer_context.supscript++; - format.style.attr &= ~AT_UPDATE_SUP; - put_chars(html_context, "^", 1); - } - } else { - while (renderer_context.supscript) - renderer_context.supscript--; - } - } } if (!!(schar_cache.attr & SCREEN_ATTR_UNSEARCHABLE) @@ -1293,7 +1265,6 @@ void put_chars(struct html_context *html_context, unsigned char *chars, int charslen) { enum link_state link_state; - int update_after_subscript = renderer_context.subscript; struct part *part; assert(html_context); @@ -1357,25 +1328,6 @@ put_chars(struct html_context *html_context, unsigned char *chars, int charslen) set_hline(html_context, chars, charslen, link_state); if (link_state != LINK_STATE_NONE) { - -#define is_drawing_subs_or_sups() \ - ((format.style.attr & AT_SUBSCRIPT \ - && html_context->options->display_subs) \ - || (format.style.attr & AT_SUPERSCRIPT \ - && html_context->options->display_sups)) - - /* We need to update the current @link_state because and - * tags will output to the canvas using an inner - * put_chars() call which results in their process_link() call - * will ``update'' the @link_state. */ - if (link_state == LINK_STATE_NEW - && (is_drawing_subs_or_sups() - || update_after_subscript != renderer_context.subscript)) { - link_state = get_link_state(html_context); - } - -#undef is_drawing_subs_or_sups - process_link(html_context, link_state, chars, charslen); }