Welcome to mirror list, hosted at ThFree Co, Russian Federation.

wordwrap.c « utils - github.com/mRemoteNG/PuTTYNG.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 330b6a03a82558f833049482185262fc9bfb456c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*
 * Function to wrap text to a fixed number of columns.
 *
 * Currently, assumes the text is in a single-byte character set,
 * because it's only used to display host key prompt messages.
 * Extending to Unicode and using wcwidth() could be an extension.
 */

#include "misc.h"

void wordwrap(BinarySink *bs, ptrlen input, size_t maxwid)
{
    size_t col = 0;
    while (true) {
        ptrlen word = ptrlen_get_word(&input, " ");
        if (!word.len)
            break;

        /* At the start of a line, any word is legal, even if it's
         * overlong, because we have to display it _somehow_ and
         * wrapping to the next line won't make it any better. */
        if (col > 0) {
            size_t newcol = col + 1 + word.len;
            if (newcol <= maxwid) {
                put_byte(bs, ' ');
                col++;
            } else {
                put_byte(bs, '\n');
                col = 0;
            }
        }

        put_datapl(bs, word);
        col += word.len;
    }
}