t"autoclose" certain tags if they are not defined in the short form - webdump - [FORK] git://git.codemadness.org/webdump
(HTM) git clone git://git.z3bra.org/webdump.git
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 7615046ff3b05e22ffcf31fe73f384f6e094c3c6
(DIR) parent 27d6623ea727df2e7442c5f9035b5b7808518bbb
(HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Thu, 28 Nov 2019 22:22:58 +0100
"autoclose" certain tags if they are not defined in the short form
for example: <br> is equivalent to <br/>
note that </br> is not checked for being invalid (yet)
Diffstat:
M webdump.c | 24 +++++++++++++++++++++---
1 file changed, 21 insertions(+), 3 deletions(-)
---
(DIR) diff --git a/webdump.c b/webdump.c
t@@ -77,6 +77,7 @@ struct tag {
char *name;
enum DisplayType displaytype;
enum DisplayType parenttype; /* display type belonging to element */
+ int autoclose;
};
struct node {
t@@ -145,14 +146,14 @@ static struct tag tags[] = {
{ "h5", DisplayHeader | DisplayBold },
{ "h6", DisplayHeader | DisplayBold },
/* break */
- { "br", 0 },
+ { "br", 0, 0, 1 },
/* list */
{ "ul", DisplayList },
{ "ol", DisplayList | DisplayListOrdered },
/* block */
{ "p", DisplayBlock },
{ "blockquote", DisplayBlock },
- { "hr", DisplayBlock },
+ { "hr", DisplayBlock, 0, 1 },
{ "title", DisplayBlock },
{ "nav", DisplayBlock },
{ "main", DisplayBlock },
t@@ -160,6 +161,19 @@ static struct tag tags[] = {
{ "header", DisplayBlock },
{ "footer", DisplayBlock },
{ "div", DisplayBlock },
+ { "img", DisplayInline, 0, 1 },
+ /* self-closing tags */
+ { "area", DisplayInline, 0, 1 },
+ { "base", DisplayInline, 0, 1 },
+ { "col", DisplayInline, 0, 1 },
+ { "embed", DisplayInline, 0, 1 },
+ { "input", DisplayInline, 0, 1 },
+ { "link", DisplayInline, 0, 1 },
+ { "meta", DisplayInline, 0, 1 },
+ { "param", DisplayInline, 0, 1 },
+ { "source", DisplayInline, 0, 1 },
+ { "track", DisplayInline, 0, 1 },
+ { "wbr", DisplayInline, 0, 1 },
};
static const char *ignorestate, *endtag;
t@@ -585,7 +599,7 @@ xmltagstart(XMLParser *x, const char *t, size_t tl)
src[0] = '\0'; /* src, href */
- /* set display type */
+ /* match tag */
for (i = 0; i < sizeof(tags) / sizeof(*tags); i++) {
if (!strcasecmp(tags[i].name, t)) {
cur->nchildren = 0;
t@@ -761,6 +775,10 @@ xmltagstartparsed(XMLParser *p, const char *t, size_t tl, int isshort)
} else if (!strcasecmp(t, "br")) {
newline();
}
+
+ /* autoclose tags, such as <br> */
+ if (!isshort && cur->tag.autoclose)
+ xmltagend(p, t, tl, 0);
}
static void