diff options
author | bptato <nincsnevem662@gmail.com> | 2021-02-13 16:26:30 +0000 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2021-02-13 16:26:30 +0000 |
commit | 77ecf9b46b4b3ff7f1bafe3c0a914ba74527af47 (patch) | |
tree | cafb9dd5621eb34b4be674272710cef22a2827b8 | |
parent | <dl> test (diff) | |
download | w3m-77ecf9b46b4b3ff7f1bafe3c0a914ba74527af47.tar.gz w3m-77ecf9b46b4b3ff7f1bafe3c0a914ba74527af47.zip |
Fix <dl compact>
-rw-r--r-- | file.c | 46 | ||||
-rw-r--r-- | tests/dl.expected | 19 | ||||
-rw-r--r-- | tests/dl.html | 24 |
3 files changed, 72 insertions, 17 deletions
@@ -4399,6 +4399,13 @@ process_idattr(struct readbuffer *obuf, int cmd, struct parsed_tag *tag) envs[h_env->envc].indent = envs[h_env->envc - 1].indent; \ } +#define PUSH_ENV_NOINDENT(cmd) \ + if (++h_env->envc_real < h_env->nenv) { \ + ++h_env->envc; \ + envs[h_env->envc].env = cmd; \ + envs[h_env->envc].count = 0; \ + } + #define POP_ENV \ if (h_env->envc_real-- < h_env->nenv) \ h_env->envc--; @@ -4662,6 +4669,7 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) do_blankline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); } + PUSH_ENV_NOINDENT(cmd); if (parsedtag_exists(tag, ATTR_COMPACT)) envs[h_env->envc].env = HTML_DL_COMPACT; obuf->flag |= RB_IGNORE_P; @@ -4753,14 +4761,15 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) return 1; case HTML_DT: CLOSE_A; - if (h_env->envc > 0 && - (envs[h_env->envc].env == HTML_DL || - envs[h_env->envc].env == HTML_DL_COMPACT)) { - POP_ENV; + if (h_env->envc == 0 || + (h_env->envc_real < h_env->nenv && + envs[h_env->envc].env != HTML_DL && + envs[h_env->envc].env != HTML_DL_COMPACT)) { + PUSH_ENV_NOINDENT(HTML_DL); } - if (h_env->envc >= 0) { + if (h_env->envc > 0) { flushline(h_env, obuf, - envs[h_env->envc].indent, 0, h_env->limit); + envs[h_env->envc - 1].indent, 0, h_env->limit); } if (!(obuf->flag & RB_IN_DT)) { HTMLlineproc1("<b>", h_env); @@ -4769,12 +4778,14 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) obuf->flag |= RB_IGNORE_P; return 1; case HTML_N_DT: - if (!(obuf->flag & RB_IN_DT)) + if (!(obuf->flag & RB_IN_DT)) { return 1; + } obuf->flag &= ~RB_IN_DT; HTMLlineproc1("</b>", h_env); - flushline(h_env, obuf, envs[h_env->envc].indent, 0, - h_env->limit); + if (h_env->envc > 0 && envs[h_env->envc].env == HTML_DL) + flushline(h_env, obuf, + envs[h_env->envc - 1].indent, 0, h_env->limit); return 1; case HTML_DD: CLOSE_A; @@ -4785,6 +4796,11 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) envs[h_env->envc].env != HTML_DL_COMPACT)) { PUSH_ENV(HTML_DL); } + if (h_env->envc <= MAX_INDENT_LEVEL) + envs[h_env->envc].indent = envs[h_env->envc - 1].indent + INDENT_INCR; + else + envs[h_env->envc].indent = envs[h_env->envc - 1].indent; + if (envs[h_env->envc].env == HTML_DL_COMPACT) { if (obuf->pos > envs[h_env->envc].indent) flushline(h_env, obuf, envs[h_env->envc].indent, 0, @@ -4797,12 +4813,12 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env) /* obuf->flag |= RB_IGNORE_P; */ return 1; case HTML_N_DD: - if (h_env->envc > 0 && - (envs[h_env->envc].env == HTML_DL || - envs[h_env->envc].env == HTML_DL_COMPACT)) { - POP_ENV; - flushline(h_env, obuf, envs[h_env->envc].indent, 0, h_env->limit); - } + if (h_env->envc == 0 || + (h_env->envc_real < h_env->nenv && + envs[h_env->envc].env != HTML_DL && + envs[h_env->envc].env != HTML_DL_COMPACT)) + return 1; + envs[h_env->envc].indent = envs[h_env->envc - 1].indent - INDENT_INCR; return 1; case HTML_TITLE: close_anchor(h_env, obuf); diff --git a/tests/dl.expected b/tests/dl.expected index f411a5e..4e828ea 100644 --- a/tests/dl.expected +++ b/tests/dl.expected @@ -5,9 +5,25 @@ WWW wo miru Firefox (linebreak) +FF A free, open source, cross-platform, + graphical web browser developed by the + Mozilla Corporation and hundreds of + volunteers. + The Red Panda also known as the Lesser + Panda, Wah, Bear Cat or Firefox, is a + mostly herbivorous mammal, slightly larger + than a domestic cat (60 cm long). + +Non-compact dl +w3m +WWW wo miru + A pager with web browsing capabilities, + maintained for Debian. + +Firefox +(linebreak) FF -. A free, open source, cross-platform, graphical web browser developed by the Mozilla Corporation and hundreds of @@ -16,3 +32,4 @@ FF Panda, Wah, Bear Cat or Firefox, is a mostly herbivorous mammal, slightly larger than a domestic cat (60 cm long). + diff --git a/tests/dl.html b/tests/dl.html index c60e6e1..4824a8a 100644 --- a/tests/dl.html +++ b/tests/dl.html @@ -1,4 +1,27 @@ +<dl compact> + <dt>w3m</dt> + <dt>WWW wo miru</dt> + <dd> + A pager with web browsing capabilities,<br> + maintained for Debian. + </dd> + <dt><br>Firefox<br>(linebreak)</dt><br> + <dt>FF</dt> + <dd> + A free, open source, cross-platform,<br> + graphical web browser developed by the<br> + Mozilla Corporation and hundreds of<br> + volunteers. + </dd> + <dd> + The Red Panda also known as the Lesser<br> + Panda, Wah, Bear Cat or Firefox, is a<br> + mostly herbivorous mammal, slightly larger<br> + than a domestic cat (60 cm long). + </dd> +</dl> <dl> + Non-compact dl <dt>w3m</dt> <dt>WWW wo miru</dt> <dd> @@ -7,7 +30,6 @@ </dd> <dt><br>Firefox<br>(linebreak)</dt><br> <dt>FF</dt> - . <dd> A free, open source, cross-platform,<br> graphical web browser developed by the<br> |