duckduckgo cli: escape control-characters, white-space fixes - frontends - front-ends for some sites (experiment)
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit af4724f4ae716f2851678df268f6d00931af1b0e
 (DIR) parent dc3d8095cbd02e17ceeaab5590816bfa5f93e06c
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Fri,  3 Jan 2020 13:12:31 +0100
       
       duckduckgo cli: escape control-characters, white-space fixes
       
       Diffstat:
         M duckduckgo/cli.c                    |      19 ++++++++++++++++---
         M duckduckgo/duckduckgo.c             |       8 ++++----
         M reddit/gopher.c                     |       6 +++---
         M reddit/reddit.c                     |       2 +-
         M twitch/twitch.h                     |       2 +-
         M youtube/cli.c                       |       4 ++--
       
       6 files changed, 27 insertions(+), 14 deletions(-)
       ---
 (DIR) diff --git a/duckduckgo/cli.c b/duckduckgo/cli.c
       @@ -12,6 +12,18 @@
        #include "duckduckgo.h"
        #include "util.h"
        
       +#define OUT(s) fputs((s), stdout)
       +#define OUTESCAPE(s) printescape((s))
       +
       +/* print: ignore control-characters */
       +void
       +printescape(const char *s)
       +{
       +        for (; *s; ++s)
       +                if (!iscntrl((unsigned char)*s))
       +                        fputc(*s, stdout);
       +}
       +
        int
        main(int argc, char *argv[])
        {
       @@ -37,9 +49,10 @@ main(int argc, char *argv[])
                                result = &(results->items[i]);
        
                                if (utf8pad(buf, sizeof(buf), result->title, 70, ' ') != -1)
       -                                fputs(buf, stdout);
       -                        fputs("  ", stdout);
       -                        puts(result->urldecoded);
       +                                OUTESCAPE(buf);
       +                        OUT("  ");
       +                        OUTESCAPE(result->urldecoded);
       +                        OUT("\n");
                        }
                }
        
 (DIR) diff --git a/duckduckgo/duckduckgo.c b/duckduckgo/duckduckgo.c
       @@ -60,7 +60,7 @@ xmlattr(XMLParser *x, const char *t, size_t tl, const char *a, size_t al,
                /* clear fix is use in the end of a result */
                if (!strcmp(t, "div") && !strcmp(a, "style") && strstr(v, "clear: both")) {
                        isresult = 0;
       -                
       +
                        if (!result.title[0] || !result.url[0])
                                return;
        
       @@ -197,7 +197,7 @@ duckduckgo_search(const char *s)
                char *data;
        
                results = NULL; /* global */
       -        
       +
                if (!(r = calloc(1, sizeof(*r))))
                        return NULL;
        
       @@ -221,8 +221,8 @@ duckduckgo_search(const char *s)
                results = r; /* global: store */
                setxmldata(data, strlen(data));
                xml_parse(&x);
       -        
       +
                free(data);
       -                
       +
                return r;
        }
 (DIR) diff --git a/reddit/gopher.c b/reddit/gopher.c
       @@ -79,7 +79,7 @@ printitem(struct item *item)
                OUTLINK(item->url);
                printf("\t%s\t%s\r\n", host, port);
        
       -#if 0        
       +#if 0
                printf("1Posted in r/");
                OUTTEXT(item->subreddit);
                OUT("\t");
       @@ -99,7 +99,7 @@ printitem(struct item *item)
                        OUTTEXT(item->thumbnail);
                        OUT("\tURL:");
                        OUTTEXT(item->thumbnail);
       -                printf("\t%s\t%s\r\n", host, port);        
       +                printf("\t%s\t%s\r\n", host, port);
                }
        
                if (item->is_video) {
       @@ -109,7 +109,7 @@ printitem(struct item *item)
                        OUTTEXT(item->dash_url);
                        OUT("\tURL:");
                        OUTTEXT(item->dash_url);
       -                printf("\t%s\t%s\r\n", host, port);        
       +                printf("\t%s\t%s\r\n", host, port);
                }
        
                info("");
 (DIR) diff --git a/reddit/reddit.c b/reddit/reddit.c
       @@ -229,6 +229,6 @@ reddit_list(const char *subreddit, const char *page)
                        r = NULL;
                }
                free(data);
       -        
       +
                return r;
        }
 (DIR) diff --git a/twitch/twitch.h b/twitch/twitch.h
       @@ -64,7 +64,7 @@ struct users_response {
        
        struct videos_response {
                struct video data[MAX_ITEMS + 1];
       -        size_t nitems; 
       +        size_t nitems;
        //        char pagination[256];
        };
        
 (DIR) diff --git a/youtube/cli.c b/youtube/cli.c
       @@ -14,8 +14,8 @@
        #include "util.h"
        #include "youtube.h"
        
       -#define OUT(s) (fputs((s), stdout))
       -#define OUTESCAPE(s) (printescape(s))
       +#define OUT(s) fputs((s), stdout)
       +#define OUTESCAPE(s) printescape((s))
        
        /* print: ignore control-characters */
        void