summaryrefslogtreecommitdiff
path: root/color.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2009-01-25 17:13:29 -0800
committerJunio C Hamano <gitster@pobox.com>2009-01-25 17:13:29 -0800
commit9847a524321afbfa6dbb08bfd9b6a0746f965578 (patch)
tree4bceeb48691dab9f86b63b02c7001eb5119716d5 /color.c
parentd64d4835b83669d5c9c8ce1989859efa803874db (diff)
parentae3b970ac3e21324a95fea75213c2569180d74c6 (diff)
downloadgit-9847a524321afbfa6dbb08bfd9b6a0746f965578.tar.gz
Merge branch 'js/diff-color-words'
* js/diff-color-words: Change the spelling of "wordregex". color-words: Support diff.wordregex config option color-words: make regex configurable via attributes color-words: expand docs with precise semantics color-words: enable REG_NEWLINE to help user color-words: take an optional regular expression describing words color-words: change algorithm to allow for 0-character word boundaries color-words: refactor word splitting and use ALLOC_GROW() Add color_fwrite_lines(), a function coloring each line individually
Diffstat (limited to 'color.c')
-rw-r--r--color.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/color.c b/color.c
index 915d7a97f6..db4dccfb77 100644
--- a/color.c
+++ b/color.c
@@ -202,3 +202,31 @@ int color_fprintf_ln(FILE *fp, const char *color, const char *fmt, ...)
va_end(args);
return r;
}
+
+/*
+ * This function splits the buffer by newlines and colors the lines individually.
+ *
+ * Returns 0 on success.
+ */
+int color_fwrite_lines(FILE *fp, const char *color,
+ size_t count, const char *buf)
+{
+ if (!*color)
+ return fwrite(buf, count, 1, fp) != 1;
+ while (count) {
+ char *p = memchr(buf, '\n', count);
+ if (p != buf && (fputs(color, fp) < 0 ||
+ fwrite(buf, p ? p - buf : count, 1, fp) != 1 ||
+ fputs(COLOR_RESET, fp) < 0))
+ return -1;
+ if (!p)
+ return 0;
+ if (fputc('\n', fp) < 0)
+ return -1;
+ count -= p + 1 - buf;
+ buf = p + 1;
+ }
+ return 0;
+}
+
+