iimprove .gph text escaping - stagit-gopher - A git gopher frontend. (mirror) Err bitreich.org 70 hgit clone git://bitreich.org/stagit-gopher/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/stagit-gopher/ URL:git://bitreich.org/stagit-gopher/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/stagit-gopher/ bitreich.org 70 1Log /scm/stagit-gopher/log.gph bitreich.org 70 1Files /scm/stagit-gopher/files.gph bitreich.org 70 1Refs /scm/stagit-gopher/refs.gph bitreich.org 70 1Tags /scm/stagit-gopher/tag bitreich.org 70 1README /scm/stagit-gopher/file/README.gph bitreich.org 70 1LICENSE /scm/stagit-gopher/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 3ef0c66de5c3087af621b94db15d28c9054586e1 /scm/stagit-gopher/commit/3ef0c66de5c3087af621b94db15d28c9054586e1.gph bitreich.org 70 1parent 60eefdd22bc7d6b1a48b00906eb1d94e7322d9ea /scm/stagit-gopher/commit/60eefdd22bc7d6b1a48b00906eb1d94e7322d9ea.gph bitreich.org 70 hAuthor: Hiltjo Posthuma URL:mailto:hiltjo@codemadness.org bitreich.org 70 iDate: Sat, 1 Jul 2017 14:56:46 +0200 Err bitreich.org 70 i Err bitreich.org 70 iimprove .gph text escaping Err bitreich.org 70 i Err bitreich.org 70 i- also escape links [ in stagit-gopher-index. Err bitreich.org 70 i- always prefix dynamic text content with 't'. Err bitreich.org 70 i- don't escape patch lines starting with 't', it does not need to Err bitreich.org 70 i be escaped (it has a " ", "+" or "-" already). Err bitreich.org 70 i- don't allow newlines in certain fields (gphtext()), this would Err bitreich.org 70 i break escaping on lines. Err bitreich.org 70 i- add a separate gphtextnl() for a multi-line commit message. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M stagit-gopher-index.c | 2 +- Err bitreich.org 70 i M stagit-gopher.c | 33 ++++++++++++++++++++++++++----- Err bitreich.org 70 i Err bitreich.org 70 i2 files changed, 29 insertions(+), 6 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/stagit-gopher-index.c b/stagit-gopher-index.c /scm/stagit-gopher/file/stagit-gopher-index.c.gph bitreich.org 70 i@@ -114,7 +114,7 @@ writeheader(FILE *fp) Err bitreich.org 70 i char buf[256]; Err bitreich.org 70 i Err bitreich.org 70 i trim(buf, sizeof(buf), description); Err bitreich.org 70 i- if (buf[0] == 't') Err bitreich.org 70 i+ if (buf[0] == 't' || buf[0] == '[') Err bitreich.org 70 i fputc('t', fp); Err bitreich.org 70 i fprintf(fp, "%s\n\n", buf); Err bitreich.org 70 i Err bitreich.org 70 1diff --git a/stagit-gopher.c b/stagit-gopher.c /scm/stagit-gopher/file/stagit-gopher.c.gph bitreich.org 70 i@@ -291,9 +291,10 @@ trim(char *buf, size_t bufsiz, const char *src) Err bitreich.org 70 i for (i = 0; i < 8; i++) Err bitreich.org 70 i buf[d++] = ' '; Err bitreich.org 70 i break; Err bitreich.org 70 i- case '|': Err bitreich.org 70 i+ case '\r': /* ignore CR */ Err bitreich.org 70 i+ case '|': /* ignore separators here */ Err bitreich.org 70 i+ break; Err bitreich.org 70 i case '\n': Err bitreich.org 70 i- case '\r': Err bitreich.org 70 i buf[d++] = ' '; Err bitreich.org 70 i break; Err bitreich.org 70 i default: Err bitreich.org 70 i@@ -305,9 +306,9 @@ end: Err bitreich.org 70 i buf[d] = '\0'; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i-/* Escape characters in text in geomyidae .gph format */ Err bitreich.org 70 i+/* Escape characters in text in geomyidae .gph format, with newlines */ Err bitreich.org 70 i void Err bitreich.org 70 i-gphtext(FILE *fp, const char *s, size_t len) Err bitreich.org 70 i+gphtextnl(FILE *fp, const char *s, size_t len) Err bitreich.org 70 i { Err bitreich.org 70 i size_t i, n = 0; Err bitreich.org 70 i Err bitreich.org 70 i@@ -330,6 +331,23 @@ gphtext(FILE *fp, const char *s, size_t len) Err bitreich.org 70 i } Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i+/* Escape characters in text in geomyidae .gph format, Err bitreich.org 70 i+ newlines are ignored */ Err bitreich.org 70 i+void Err bitreich.org 70 i+gphtext(FILE *fp, const char *s, size_t len) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ size_t i; Err bitreich.org 70 i+ Err bitreich.org 70 i+ for (i = 0; *s && i < len; i++) { Err bitreich.org 70 i+ switch (s[i]) { Err bitreich.org 70 i+ case '\r': Err bitreich.org 70 i+ case '\n': break; Err bitreich.org 70 i+ case '\t': fputs(" ", fp); break; Err bitreich.org 70 i+ default: fputc(s[i], fp); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ } Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i /* Escape characters in links in geomyidae .gph format */ Err bitreich.org 70 i void Err bitreich.org 70 i gphlink(FILE *fp, const char *s, size_t len) Err bitreich.org 70 i@@ -425,6 +443,7 @@ printtimeshort(FILE *fp, const git_time *intime) Err bitreich.org 70 i void Err bitreich.org 70 i writeheader(FILE *fp, const char *title) Err bitreich.org 70 i { Err bitreich.org 70 i+ fputc('t', fp); Err bitreich.org 70 i gphtext(fp, title, strlen(title)); Err bitreich.org 70 i if (title[0] && strippedname[0]) Err bitreich.org 70 i fputs(" - ", fp); Err bitreich.org 70 i@@ -521,7 +540,7 @@ printcommit(FILE *fp, struct commitinfo *ci) Err bitreich.org 70 i } Err bitreich.org 70 i if (ci->msg) { Err bitreich.org 70 i fputc('\n', fp); Err bitreich.org 70 i- gphtext(fp, ci->msg, strlen(ci->msg)); Err bitreich.org 70 i+ gphtextnl(fp, ci->msg, strlen(ci->msg)); Err bitreich.org 70 i fputc('\n', fp); Err bitreich.org 70 i } Err bitreich.org 70 i } Err bitreich.org 70 i@@ -608,7 +627,9 @@ printshowfile(FILE *fp, struct commitinfo *ci) Err bitreich.org 70 i if (git_patch_get_hunk(&hunk, &nhunklines, patch, j)) Err bitreich.org 70 i break; Err bitreich.org 70 i Err bitreich.org 70 i+ fputc('t', fp); Err bitreich.org 70 i gphtext(fp, hunk->header, hunk->header_len); Err bitreich.org 70 i+ fputc('\n', fp); Err bitreich.org 70 i Err bitreich.org 70 i for (k = 0; ; k++) { Err bitreich.org 70 i if (git_patch_get_line_in_hunk(&line, patch, j, k)) Err bitreich.org 70 i@@ -620,6 +641,7 @@ printshowfile(FILE *fp, struct commitinfo *ci) Err bitreich.org 70 i else Err bitreich.org 70 i fputs(" ", fp); Err bitreich.org 70 i gphtext(fp, line->content, line->content_len); Err bitreich.org 70 i+ fputc('\n', fp); Err bitreich.org 70 i } Err bitreich.org 70 i } Err bitreich.org 70 i } Err bitreich.org 70 i@@ -797,6 +819,7 @@ writeblob(git_object *obj, const char *fpath, const char *filename, git_off_t fi Err bitreich.org 70 i Err bitreich.org 70 i fp = efopen(fpath, "w"); Err bitreich.org 70 i writeheader(fp, filename); Err bitreich.org 70 i+ fputc('t', fp); Err bitreich.org 70 i gphtext(fp, filename, strlen(filename)); Err bitreich.org 70 i fprintf(fp, " (%juB)\n", (uintmax_t)filesize); Err bitreich.org 70 i fputs("---\n", fp); Err bitreich.org 70 .