aboutsummaryrefslogtreecommitdiffstats
path: root/utf8.c
diff options
context:
space:
mode:
authorRené Scharfe <rene.scharfe@lsrfire.ath.cx>2009-11-22 17:15:29 +0100
committerJunio C Hamano <gitster@pobox.com>2009-11-22 16:22:02 -0800
commit37bb5d744309df6ff05ea5f34112082cdc301d69 (patch)
tree5962f15b720baccff5a2110b0d64081641e19f0f /utf8.c
parentb48275998399561780af85d429da3caceeecd2fe (diff)
downloadgit-37bb5d744309df6ff05ea5f34112082cdc301d69.tar.gz
strbuf_add_wrapped_text(): factor out strbuf_add_indented_text()
Add a new helper function, strbuf_add_indented_text(), to indent text without a width limit, and call it from strbuf_add_wrapped_text(). It respects both indent (applied to the first line) and indent2 (applied to the rest of the lines); indent2 was ignored by the indent-only path of strbuf_add_wrapped_text() before the patch. Two simple test cases are added, one exercising strbuf_add_wrapped_text() and the other strbuf_add_indented_text(). Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'utf8.c')
-rw-r--r--utf8.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/utf8.c b/utf8.c
index 5c18f0c281..01d1869fa3 100644
--- a/utf8.c
+++ b/utf8.c
@@ -298,6 +298,22 @@ static void print_spaces(struct strbuf *buf, int count)
strbuf_write(buf, s, count);
}
+static void strbuf_add_indented_text(struct strbuf *buf, const char *text,
+ int indent, int indent2)
+{
+ if (indent < 0)
+ indent = 0;
+ while (*text) {
+ const char *eol = strchrnul(text, '\n');
+ if (*eol == '\n')
+ eol++;
+ print_spaces(buf, indent);
+ strbuf_write(buf, text, eol - text);
+ text = eol;
+ indent = indent2;
+ }
+}
+
/*
* Wrap the text, if necessary. The variable indent is the indent for the
* first line, indent2 is the indent for all other lines.
@@ -311,15 +327,7 @@ int strbuf_add_wrapped_text(struct strbuf *buf,
const char *bol = text, *space = NULL;
if (width <= 0) {
- /* just indent */
- while (*text) {
- const char *eol = strchrnul(text, '\n');
- if (*eol == '\n')
- eol++;
- print_spaces(buf, indent);
- strbuf_write(buf, text, eol-text);
- text = eol;
- }
+ strbuf_add_indented_text(buf, text, indent, indent2);
return 1;
}