initial support for <select> <option> - webdump - HTML to plain-text converter … | |
git clone git://git.codemadness.org/webdump | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit f4f2dc53e082fcbf627d567810c399c306009ea0 | |
parent 20841145c9fd597e82c3da9dfa7c9d9caf606567 | |
Author: Hiltjo Posthuma <[email protected]> | |
Date: Wed, 13 Sep 2023 20:37:28 +0200 | |
initial support for <select> <option> | |
Show the first item, or all of the attribute is multiple. | |
This ignores the actual selected item if <select><option selected>. This would | |
require a state of all the option nodes which it doesn't do. | |
Diffstat: | |
M webdump.c | 27 +++++++++++++++++++++++++++ | |
1 file changed, 27 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/webdump.c b/webdump.c | |
@@ -1598,6 +1598,11 @@ handleendtag(struct tag *tag) | |
if (reader_ignore) | |
return; | |
+ if (tag->displaytype & (DisplayButton | DisplayOption)) { | |
+ hputchar(']'); | |
+ hflush(); | |
+ } | |
+ | |
if (tag->displaytype & (DisplayBlock | DisplayHeader | DisplayTable | … | |
DisplayList | DisplayListItem | DisplayPre)) { | |
endblock(); /* break line if needed */ | |
@@ -1704,6 +1709,10 @@ xmltagend(XMLParser *p, const char *t, size_t tl, int is… | |
childs[0] = "td"; | |
nchilds = 1; | |
parenttype = DisplayTable; | |
+ } else if (found && found->displaytype & DisplaySelect) { | |
+ childs[0] = "option"; | |
+ nchilds = 1; | |
+ parenttype = DisplaySelect; | |
} else if (found && found->displaytype & DisplayDl) { | |
childs[0] = "p"; | |
childs[1] = "dd"; | |
@@ -1829,6 +1838,10 @@ xmltagstart(XMLParser *p, const char *t, size_t tl) | |
childs[0] = "p"; | |
nchilds = 1; | |
parenttype = 0; /* seek until the root */ | |
+ } else if (!tagcmp(t, "option")) { | |
+ childs[0] = "option"; | |
+ nchilds = 1; | |
+ parenttype = DisplaySelect; | |
} else if (!tagcmp(t, "dt")) { | |
childs[0] = "dd"; | |
nchilds = 1; | |
@@ -1954,6 +1967,15 @@ xmltagstartparsed(XMLParser *p, const char *t, size_t tl… | |
handleinlinealt(); | |
} | |
+ /* <select><option> */ | |
+ if (cur->tag.displaytype & DisplayOption) { | |
+ /* <select multiple>: show all options */ | |
+ if (parent->tag.displaytype & DisplaySelectMulti) | |
+ cur->tag.displaytype |= DisplayBlock; | |
+ else if (parent->nchildren > 1) /* show the first item as sele… | |
+ cur->tag.displaytype |= DisplayNone; /* else hide */ | |
+ } | |
+ | |
if (cur->tag.displaytype & DisplayNone) | |
return; | |
@@ -1968,6 +1990,11 @@ xmltagstartparsed(XMLParser *p, const char *t, size_t tl… | |
startblock(); /* break line if needed */ | |
} | |
+ if (cur->tag.displaytype & (DisplayButton | DisplayOption)) { | |
+ hflush(); | |
+ hputchar('['); | |
+ } | |
+ | |
margintop = cur->tag.margintop; | |
if (cur->tag.displaytype & (DisplayList)) { | |
for (i = curnode - 1; i >= 0; i--) { |