writeblobhtml: improve file view for text-browsers - stagit-gopher - A git goph… | |
git clone git://bitreich.org/stagit-gopher/ git://enlrupgkhuxnvlhsf6lc3fziv5h2h… | |
Log | |
Files | |
Refs | |
Tags | |
README | |
LICENSE | |
--- | |
commit 44b20f341443cf3daffbe2b092df28df522cad86 | |
parent 4035291297b1a559cd5b0bf4bef65b7fe33c59c1 | |
Author: Hiltjo Posthuma <[email protected]> | |
Date: Sun, 16 Apr 2017 20:37:42 +0200 | |
writeblobhtml: improve file view for text-browsers | |
browsers such as lynx and w3m have some quirks displaying tables and pre | |
elements. | |
links is a bit better with this. | |
Diffstat: | |
M stagit.c | 35 +++++++++++++++++------------… | |
1 file changed, 19 insertions(+), 16 deletions(-) | |
--- | |
diff --git a/stagit.c b/stagit.c | |
@@ -378,28 +378,31 @@ writefooter(FILE *fp) | |
int | |
writeblobhtml(FILE *fp, const git_blob *blob) | |
{ | |
- off_t i; | |
- size_t n = 0; | |
- const char *nfmt = "<a href=\"#l%d\" id=\"l%d\">%d</a>\n"; | |
+ size_t n, i, prev; | |
+ const char *nfmt = "<a href=\"#l%d\" class=\"line\" id=\"l%d\">%6d</a>… | |
const char *s = git_blob_rawcontent(blob); | |
git_off_t len = git_blob_rawsize(blob); | |
- fputs("<table id=\"blob\"><tr><td class=\"num\"><pre>\n", fp); | |
+ fputs("<pre id=\"blob\">\n", fp); | |
- if (len) { | |
- n++; | |
- fprintf(fp, nfmt, n, n, n); | |
- for (i = 0; i < len - 1; i++) { | |
- if (s[i] == '\n') { | |
- n++; | |
- fprintf(fp, nfmt, n, n, n); | |
- } | |
+ if (len > 0) { | |
+ for (i = 0, prev = 0, n = 0; i < (size_t)len; i++) { | |
+ if (s[i] != '\n') | |
+ continue; | |
+ n++; | |
+ fprintf(fp, nfmt, n, n, n); | |
+ xmlencode(fp, &s[prev], i - prev + 1); | |
+ prev = i + 1; | |
+ } | |
+ /* trailing data */ | |
+ if ((i - prev) > 0) { | |
+ n++; | |
+ fprintf(fp, nfmt, n, n, n); | |
+ xmlencode(fp, &s[prev], len - prev); | |
} | |
} | |
- fputs("</pre></td><td><pre>\n", fp); | |
- xmlencode(fp, s, (size_t)len); | |
- fputs("</pre></td></tr></table>\n", fp); | |
+ fputs("</pre>\n", fp); | |
return n; | |
} | |
@@ -486,7 +489,7 @@ printshowfile(FILE *fp, struct commitinfo *ci) | |
fwrite(&linestr[add], 1, del, fp); | |
fputs("</span></td></tr>\n", fp); | |
} | |
- fprintf(fp, "</table>%zu file%s changed, %zu insertion%s(+), %zu delet… | |
+ fprintf(fp, "</table></pre><pre>%zu file%s changed, %zu insertion%s(+)… | |
ci->filecount, ci->filecount == 1 ? "" : "s", | |
ci->addcount, ci->addcount == 1 ? "" : "s", | |
ci->delcount, ci->delcount == 1 ? "" : "s"); |