tabsolute link references, add base href argument to program - 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 ce36531a689dad978e803008ff0600aa7984e380
 (DIR) parent b089e00f076e857bbd8f9f1c316ab55891916aad
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Sun, 22 Sep 2019 19:45:06 +0200
       
       absolute link references, add base href argument to program
       
       make link references an #ifdef LINKREFS for now
       
       Diffstat:
         M webdump.c                           |      53 +++++++++++++++----------------
       
       1 file changed, 26 insertions(+), 27 deletions(-)
       ---
 (DIR) diff --git a/webdump.c b/webdump.c
       t@@ -30,7 +30,7 @@ struct uri {
        
        static int termwidth = 72;
        
       -#if 0
       +#ifdef LINKREFS
        /* linked-list of link references */
        struct linkref {
                char *type;
       t@@ -75,7 +75,7 @@ typedef struct string {
        int absuri(char *, size_t, const char *, const char *);
        int parseuri(const char *, struct uri *, int);
        
       -static char *basehref = "https://codemadness.org";
       +static char *basehref = "";
        
        static char src[4096]; /* src or href attribute */
        
       t@@ -413,14 +413,6 @@ xmlcdata(XMLParser *p, const char *data, size_t datalen)
                printsafe(data);
        }
        
       -#if 0
       -static void
       -xmldatastart(XMLParser *p)
       -{
       -//        printf("DEBUG: %s\n", __func__);
       -}
       -#endif
       -
        static void
        xmldataend(XMLParser *p)
        {
       t@@ -589,21 +581,26 @@ xmltagstartparsed(XMLParser *p, const char *t, size_t tl, int isshort)
        
                cur = &nodes[curnode];
        
       -#ifdef maybe
       +#ifdef LINKREFS
                /* show links as reference at the bottom */
                if (src[0]) {
       -                printf(" [%d]", ++linkcount);
       -                if (!strcasecmp(t, "img") || !strcasecmp(t, "video") ||
       -                    !strcasecmp(t, "audio"))
       -                        printf("[%s]", t);
       -                /* TODO: check allocation */
       -                if (!links_head)
       -                        links_cur = links_head = ecalloc(1, sizeof(*links_head));
       -                else
       -                        links_cur = links_cur->next = ecalloc(1, sizeof(*links_head));
       -                links_cur->type = estrdup(t);
       -                /* TODO: absuri */
       -                links_cur->url = estrdup(src);
       +                char absurl[1024];
       +                if (absuri(absurl, sizeof(absurl), src, basehref) != -1) {
       +                        if (!links_head)
       +                                links_cur = links_head = ecalloc(1, sizeof(*links_head));
       +                        else
       +                                links_cur = links_cur->next = ecalloc(1, sizeof(*links_head));
       +                        links_cur->url = estrdup(absurl);
       +
       +                        printf(" [%d]", ++linkcount);
       +                        if (!strcasecmp(t, "img") || !strcasecmp(t, "video") ||
       +                            !strcasecmp(t, "audio")) {
       +                                links_cur->type = estrdup(t);
       +                        } else {
       +                                links_cur->type = estrdup("link");
       +                        }
       +
       +                }
                }
                src[0] = '\0';
        #endif
       t@@ -664,7 +661,7 @@ xmlattr(XMLParser *p, const char *tag, size_t taglen, const char *name,
                        strlcpy(src, value, sizeof(src));
        }
        
       -#ifdef maybe
       +#ifdef LINKREFS
        void
        printlinkrefs(void)
        {
       t@@ -679,15 +676,17 @@ printlinkrefs(void)
        #endif
        
        int
       -main(void)
       +main(int argc, char **argv)
        {
                if (pledge("stdio", NULL) < 0)
                        err(1, "pledge");
        
       +        if (argc > 1)
       +                basehref = argv[1];
       +
                parser.xmlattr = xmlattr;
                parser.xmlcdata = xmlcdata;
                parser.xmldata = xmldata;
       -//        parser.xmldatastart = xmldatastart;
                parser.xmldataend = xmldataend;
                parser.xmldataentity = xmldataentity;
                parser.xmltagstart = xmltagstart;
       t@@ -697,7 +696,7 @@ main(void)
                parser.getnext = getchar;
                xml_parse(&parser);
        
       -#ifdef maybe
       +#ifdef LINKREFS
                printlinkrefs();
        #endif
                putchar('\n');