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