Introduction
Introduction Statistics Contact Development Disclaimer Help
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--) {
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.