tsimplify cdata handler, show src attribute (disabled for now) - 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 6dae546b7c15b859321849c8b7b7294e6d916adc
 (DIR) parent db8bb6f1a0e1ca29e8cdfd8a6c098fc1076fea80
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Sat, 22 Jul 2017 15:46:15 +0200
       
       simplify cdata handler, show src attribute (disabled for now)
       
       Diffstat:
         M main.c                              |      48 ++++++++++++-------------------
       
       1 file changed, 18 insertions(+), 30 deletions(-)
       ---
 (DIR) diff --git a/main.c b/main.c
       t@@ -14,7 +14,6 @@
        
        static XMLParser parser;
        static int isdatastart;
       -static int iscdatastart;
        
        struct node {
                char tag[256];
       t@@ -23,6 +22,8 @@ struct node {
                int isblock;
        };
        
       +static char src[4096]; /* src or href attribute */
       +
        #define MAX_DEPTH 256
        static struct node nodes[MAX_DEPTH];
        static int curnode;
       t@@ -63,23 +64,9 @@ static char *blocktags[] = {
        };
        
        static void
       -xmlcdatastart(XMLParser *p)
       -{
       -        iscdatastart = 1;
       -}
       -
       -static void
        xmlcdata(XMLParser *p, const char *data, size_t datalen)
        {
       -        /* TODO */
       -/*        printf("%s", data);*/
       -        iscdatastart = 0;
       -}
       -
       -static void
       -xmlcdataend(XMLParser *p)
       -{
       -        iscdatastart = 0;
       +        fputs(data, stdout);
        }
        
        static void
       t@@ -112,9 +99,8 @@ xmldata(XMLParser *p, const char *data, size_t datalen)
                }
        
                if (cur->ispre) {
       -                for (; *s; s++) {
       +                for (; *s; s++)
                                putchar(*s);
       -                }
                } else {
                        for (; *s; s++) {
                                if (isspace(*s))
       t@@ -150,6 +136,7 @@ xmltagstart(XMLParser *p, const char *tag, size_t taglen)
                int i;
        
                memset(cur, 0, sizeof(*cur));
       +        src[0] = '\0'; /* src, href */
                strlcpy(cur->tag, tag, sizeof(cur->tag));
        
                for (i = 0; i < sizeof(pretags) / sizeof(*pretags); i++) {
       t@@ -180,9 +167,14 @@ xmltagend(XMLParser *p, const char *tag, size_t taglen, int isshort)
        
                if (curnode)
                        curnode--;
       -
                cur = &nodes[curnode];
        
       +#if 0
       +        if (src[0])
       +                printf(" [%s]", src);
       +        src[0] = '\0';
       +#endif
       +
                if (cur->isblock)
                        fputs("\n", stdout);
        
       t@@ -205,7 +197,8 @@ xmltagstartparsed(XMLParser *p, const char *tag, size_t taglen, int isshort)
        
                cur = &nodes[curnode];
                if (cur->isblock)
       -                putchar('\n');
       +                fputs("\n", stdout);
       +
                if (!strcmp(cur->tag, "li")) {
                        /* indent nested list items */
                        for (i = curnode; i; i--) {
       t@@ -224,7 +217,7 @@ xmltagstartparsed(XMLParser *p, const char *tag, size_t taglen, int isshort)
                }
        
                if (curnode >= MAX_DEPTH - 2)
       -                errx(1, "max depth reached: %d\n", curnode);
       +                errx(1, "max tag depth reached: %d\n", curnode);
                curnode++;
        }
        
       t@@ -232,15 +225,12 @@ static void
        xmlattr(XMLParser *p, const char *tag, size_t taglen, const char *name,
                size_t namelen, const char *value, size_t valuelen)
        {
       -/*        if (!strcmp(tag, "a") && !strcmp(name, "href") && valuelen)
       -                printf(" [%s]", value);*/
       +        if (!strcmp(tag, "a") && !strcmp(name, "href") && valuelen)
       +                strlcpy(src, value, sizeof(src));
        
                /* TODO: check alt and title attr also? */
       -/*        if (!strcmp(tag, "img") && !strcmp(name, "src") && valuelen) {
       -                printf(" [%s]", value);
       -        }*/
       -
       -/*        printf(" %s=\"%s\"", name, value);*/
       +        if (!strcmp(tag, "img") && !strcmp(name, "src") && valuelen)
       +                strlcpy(src, value, sizeof(src));
        }
        
        int
       t@@ -250,9 +240,7 @@ main(void)
                        err(1, "pledge");
        
                parser.xmlattr = xmlattr;
       -        parser.xmlcdatastart = xmlcdatastart;
                parser.xmlcdata = xmlcdata;
       -        parser.xmlcdataend = xmlcdataend;
                parser.xmldatastart = xmldatastart;
                parser.xmldata = xmldata;
                parser.xmldataend = xmldataend;