diff options
Diffstat (limited to 'source/ui-blame.c')
-rw-r--r--source/ui-blame.c18
1 file changed, 14 insertions, 4 deletions
diff --git a/source/ui-blame.c b/source/ui-blame.c
index 8fd6c83..f60020c 100644
--- a/source/ui-blame.c
+++ b/source/ui-blame.c
@@ -211,6 +211,15 @@ static size_t line_width(struct blame_scoreboard *sb, int line)
size_t width = 0;
while (pos < end) {
+ size_t len;
+ const char *esc = html_line_break_escape(pos, end, &len);
+
+ // An escaped character takes the room of its escape sequence.
+ if (esc) {
+ width += strlen(esc);
+ pos += len;
+ continue;
+ }
width++;
if (*pos++ == '\t')
width = (width + TAB_WIDTH - 1) & ~(TAB_WIDTH - 1);
@@ -297,9 +306,10 @@ static void print_blame_page(const struct object_id *oid, const char *path,
cgit_tree_link("tree", NULL, NULL, ctx.qry.head, rev, path);
html(")</div>\n");
- // A NUL past the window buffer_is_binary sniffs would end html_txt
- // early while the hash and line number columns still cover the whole
- // file, so a blob holding one anywhere is treated as binary too.
+ // A NUL past the window buffer_is_binary sniffs would end a Lua
+ // filter's output early while the hash and line number columns still
+ // cover the whole file, so a blob holding one anywhere is treated as
+ // binary too.
if (buffer_is_binary(buf, size) || memchr(buf, 0, size)) {
struct blame_entry *ent = sb.ent, *next;
@@ -334,7 +344,7 @@ static void print_blame_page(const struct object_id *oid, const char *path,
cgit_close_filter(ctx.repo->source_filter);
free(filter_arg);
} else {
- html_txt(buf);
+ html_blob_txt(buf, size);
}
html("</code></pre>");