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,
|
||||
size_t line_len, struct str *output)
|
||||
{
|
||||
int eaten = 0;
|
||||
size_t eaten = 0;
|
||||
|
||||
// First try going word by word
|
||||
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);
|
||||
|
||||
// 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);
|
||||
hard_assert (next);
|
||||
|
||||
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;
|
||||
eaten = p - text;
|
||||
hard_assert ((p = utf8_next (p, text_len - eaten, NULL)));
|
||||
}
|
||||
str_append_data (output, text, eaten);
|
||||
return eaten;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue