degesch: compactify word wrapping algorithm
This commit is contained in:
parent
2ae916fc1a
commit
07201b7bdc
19
degesch.c
19
degesch.c
|
@ -6794,7 +6794,7 @@ static size_t
|
||||||
wrap_text_for_single_line (const char *text, size_t text_len,
|
wrap_text_for_single_line (const char *text, size_t text_len,
|
||||||
size_t line_len, struct str *output)
|
size_t line_len, struct str *output)
|
||||||
{
|
{
|
||||||
int eaten = 0;
|
size_t eaten = 0;
|
||||||
|
|
||||||
// First try going word by word
|
// First try going word by word
|
||||||
const char *word_start;
|
const char *word_start;
|
||||||
|
@ -6822,21 +6822,12 @@ wrap_text_for_single_line (const char *text, size_t text_len,
|
||||||
return eaten + (word_start - text);
|
return eaten + (word_start - text);
|
||||||
|
|
||||||
// And if that doesn't help, cut the longest valid block of characters
|
// And if that doesn't help, cut the longest valid block of characters
|
||||||
while (true)
|
for (const char *p = text; (size_t) (p - text) <= line_len; )
|
||||||
{
|
{
|
||||||
const char *next = utf8_next (text, text_len - eaten, NULL);
|
eaten = p - text;
|
||||||
hard_assert (next);
|
hard_assert ((p = utf8_next (p, text_len - eaten, NULL)));
|
||||||
|
|
||||||
size_t char_len = next - text;
|
|
||||||
if (char_len > line_len)
|
|
||||||
break;
|
|
||||||
|
|
||||||
str_append_data (output, text, char_len);
|
|
||||||
|
|
||||||
text += char_len;
|
|
||||||
eaten += char_len;
|
|
||||||
line_len -= char_len;
|
|
||||||
}
|
}
|
||||||
|
str_append_data (output, text, eaten);
|
||||||
return eaten;
|
return eaten;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue