contextual line-wrapping, disabled for now - webdump - HTML to plain-text converter for webpages (HTM) git clone git://git.codemadness.org/webdump (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit 030644d3ff71c0708d940f9895e76ab99593f61b (DIR) parent 30a42a2ff270ef5e7ff96d8b23ed5ffbd58c665b (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org> Date: Wed, 27 Sep 2023 18:53:56 +0200 contextual line-wrapping, disabled for now Diffstat: M webdump.c | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) --- (DIR) diff --git a/webdump.c b/webdump.c @@ -50,7 +50,7 @@ static int uniqrefs = 0; /* (-d) number unique references */ static int showrefinline = 0; /* (-i) show link reference number inline */ static int showurlinline = 0; /* (-I) show full link reference inline */ static int showrefbottom = 0; /* (-l) show link references at the bottom */ -static int linewrap = 0; /* (-r) line-wrapping */ +static int allowlinewrap = 0; /* (-r) line-wrapping */ static int termwidth = 77; /* (-w) terminal width */ static int resources = 0; /* (-x) write resources line-by-line to fd 3? */ @@ -240,6 +240,7 @@ static int reader_mode; static int reader_ignore; static enum MarkupType curmarkup; /* current markup state (bold, underline, etc) */ +static int linewrap; /* allow linewrap in this context */ /* selector to match (for -s and -u) */ static struct selectors *sel_hide, *sel_show; @@ -1848,6 +1849,22 @@ xmltagend(XMLParser *p, const char *t, size_t tl, int isshort) } indent = calcindent(); +#if 0 + /* check if linewrap is enabled, but currently is disabled and needs to + be restored */ + if (allowlinewrap && !linewrap) { + tag = NULL; + for (i = curnode; i >= 0; i--) { + if (nodes[i].tag.id == TagTable) { + tag = &nodes[i].tag; + break; + } + } + if (!tag) + linewrap = allowlinewrap; + } +#endif + /* restore markup of the tag we are in now */ startmarkup(nodes[curnode].tag.markuptype); @@ -2016,6 +2033,12 @@ xmltagstartparsed(XMLParser *p, const char *t, size_t tl, int isshort) return; } +#if 0 + /* disable line-wrapping inside tables */ + if (tagid == TagTable) + linewrap = 0; +#endif + cur = &nodes[curnode]; /* copy attributes if set */ @@ -2361,7 +2384,7 @@ main(int argc, char **argv) showrefbottom = !showrefbottom; break; case 'r': - linewrap = !linewrap; + allowlinewrap = !allowlinewrap; break; case 's': sel_show = compileselectors(EARGF(usage())); @@ -2385,6 +2408,8 @@ main(int argc, char **argv) usage(); } ARGEND + linewrap = allowlinewrap; + /* initial nodes */ ncapnodes = NODE_CAP_INC; nodes = ecalloc(ncapnodes, sizeof(*nodes));