improvements - stagit-gopher - A git gopher frontend. (mirror) HTML git clone git://bitreich.org/stagit-gopher/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/stagit-gopher/ DIR Log DIR Files DIR Refs DIR Tags DIR README DIR LICENSE --- DIR commit d97002d21462133dbd3b0f37732a62b2f5f4a529 DIR parent 05fb5a9a9cc33ea54b3df72f0caa762519a0ccaa HTML Author: Hiltjo Posthuma <hiltjo@codemadness.org> Date: Thu, 15 Jun 2017 21:44:47 +0200 improvements - utf-8 ellipsis to indicate truncation - minor style and documentation fixes - escape [ properly also - add atom feed link (only below log lines). Diffstat: M README | 1 + M stagit-gopher-index.c | 5 ++++- M stagit-gopher.c | 14 ++++++++++---- 3 files changed, 15 insertions(+), 5 deletions(-) --- DIR diff --git a/README b/README @@ -31,6 +31,7 @@ $ make Dependencies ------------ +- geomyidae (for .gph file serving). - libgit2 (v0.22+). - libc (tested with OpenBSD, FreeBSD, glibc and musl). - C compiler (C99). DIR diff --git a/stagit-gopher-index.c b/stagit-gopher-index.c @@ -43,6 +43,10 @@ printutf8pad(FILE *fp, const char *s, size_t len, int pad) if ((r = wcwidth(w)) == -1) r = 1; n += (size_t)r; + if (n >= len) { + fputs("\xe2\x80\xa6", fp); + break; + } } putc(*s, fp); } @@ -182,7 +186,6 @@ usage(const char *argv0) exit(1); } - int main(int argc, char *argv[]) { DIR diff --git a/stagit-gopher.c b/stagit-gopher.c @@ -81,14 +81,19 @@ printutf8pad(FILE *fp, const char *s, size_t len, int pad) for (i = 0; *s && n < len; i++, s++) { if (ISUTF8(*s)) { - if ((r = mbtowc(&w, s, 4)) == -1) + if (mbtowc(&w, s, 4) == -1) break; if ((r = wcwidth(w)) == -1) r = 1; n += (size_t)r; + if (n >= len) { + fputs("\xe2\x80\xa6", fp); + break; + } } putc(*s, fp); } + for (; n < len; n++) putc(pad, fp); } @@ -313,7 +318,7 @@ gphtext(FILE *fp, const char *s, size_t len) n = 0; /* escape 't' at the start of a line */ - if (!n && s[i] == 't') { + if (!n && (s[i] == 't' || s[i] == '[')) { fputc('t', fp); n = 1; } @@ -340,7 +345,7 @@ gphlink(FILE *fp, const char *s, size_t len) fputc(' ', fp); break; case '\r': /* ignore CR */ - case '|': /* ignore separators for now */ + case '|': /* ignore separators here */ break; case '\t': fputs(" ", fp); @@ -1056,7 +1061,6 @@ usage(char *argv0) exit(1); } -/* TODO: add base argument, gopher does not support relative urls, document it too */ int main(int argc, char *argv[]) { @@ -1167,6 +1171,7 @@ main(int argc, char *argv[]) fp = efopen("log.gph", "w"); mkdir("commit", 0755); writeheader(fp, "Log"); + fprintf(fp, "%-16.16s ", "Date"); fprintf(fp, "%-50.50s ", "Commit message"); fprintf(fp, "%-25.25s\n", "Author"); @@ -1208,6 +1213,7 @@ main(int argc, char *argv[]) if (head) writelog(fp, head); } + fprintf(fp, "\n[1|Atom feed|%satom.xml|server|port]\n", relpath); writefooter(fp); fclose(fp);