youtube/cli: use ctype macros, add shortdescription in TSV, fix comment - frontends - front-ends for some sites (experiment)
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 6242ec658d5610990c6b19944473fa7277493ac1
(DIR) parent 86b28b384e968fd3eecbe0c33924d2489a067421
(HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Tue, 15 Oct 2024 00:29:19 +0200
youtube/cli: use ctype macros, add shortdescription in TSV, fix comment
Diffstat:
M youtube/cli.c | 30 ++++++++++++++++++++++++------
1 file changed, 24 insertions(+), 6 deletions(-)
---
(DIR) diff --git a/youtube/cli.c b/youtube/cli.c
@@ -1,7 +1,6 @@
#include <sys/socket.h>
#include <sys/types.h>
-#include <ctype.h>
#include <errno.h>
#include <netdb.h>
#include <stdarg.h>
@@ -16,16 +15,35 @@
#define OUT(s) fputs((s), stdout)
#define OUTESCAPE(s) printescape((s))
+#define OUTENCODED(s) printencoded((s))
/* print: ignore control-characters */
void
printescape(const char *s)
{
for (; *s; ++s)
- if (!iscntrl((unsigned char)*s))
+ if (!ISCNTRL((unsigned char)*s))
fputc(*s, stdout);
}
+/* print: encode TAB, newline and '\', remove other whitespace. */
+void
+printencoded(const char *s)
+{
+ for (; *s; ++s) {
+ switch (*s) {
+ case '\n': putchar('\\'); putchar('n'); break;
+ case '\\': putchar('\\'); putchar('\\'); break;
+ case '\t': putchar('\\'); putchar('t'); break;
+ default:
+ /* ignore control chars */
+ if (!ISCNTRL((unsigned char)*s))
+ putchar(*s);
+ break;
+ }
+ }
+}
+
void
printescape_multiline(const char *s, const char *indent)
{
@@ -38,7 +56,7 @@ printescape_multiline(const char *s, const char *indent)
if (*s == '\n') {
i = 0;
fputc(*s, stdout);
- } else if (!iscntrl((unsigned char)*s)) {
+ } else if (!ISCNTRL((unsigned char)*s)) {
fputc(*s, stdout);
i = 1;
}
@@ -65,7 +83,7 @@ render_search_tsv(struct search_response *r)
OUT("\t");
OUTESCAPE(v->publishedat);
OUT("\t");
- OUTESCAPE(v->viewcount); /* from Youtube can be text: "No views" */
+ OUTESCAPE(v->viewcount); /* from Youtube, the text can be: "No views" */
OUT("\t");
OUTESCAPE(v->duration);
OUT("\t");
@@ -81,8 +99,8 @@ render_search_tsv(struct search_response *r)
OUTESCAPE(v->channeltitle);
OUT("\t");
OUTESCAPE(v->userid);
-/* OUT("\t");
- OUTESCAPE(v->shortdescription); */ /* TODO: escape newlines etc */
+ OUT("\t");
+ OUTENCODED(v->shortdescription);
OUT("\n");
}