Download raw body.
simplify scroll_wline/format_line
On Thu, Jun 16, 2022 at 08:23:57PM +0200, Omar Polo wrote: > diff 4cb9d869771dfcbb9e460e1f2924b289b34aff7c /home/op/w/got > blob - 6db125a8a56dececb4b421750f0f92d3644f8601 > file + tog/tog.c > --- tog/tog.c > +++ tog/tog.c > @@ -1263,51 +1263,38 @@ expand_tab(char **ptr, const char *src) > return NULL; > } > > -/* > - * Skip leading nscroll columns of a wide character string. > - * Returns the index to the first character of the scrolled string. > +/* > + * Advance at max n columns from wline starting at offset off. Return s/at max/at most/ > + * the index to the first character after the span operation and the > + * reached column. I would use one sentence per return value, for clarity: Return the index to the first wide character after the span operation. Return the combined column width of all spanned wide characters in *rcol. > */ > -static const struct got_error * > -scroll_wline(int *scrollx , wchar_t *wline, int nscroll, > - int col_tab_align) > +static int > +span_wline(int *rcol, int off, wchar_t *wline, int n, int col_tab_align) > { > - int cols = 0; > - size_t wlen = wcslen(wline); > - int i = 0; > + int width, i, cols = 0; > > - *scrollx = 0; > + if (n == 0) { > + *rcol = cols; > + return off; > + } > > - while (i < wlen && cols < nscroll) { > - int width = wcwidth(wline[i]); > + for (i = off; wline[i] != L'\0'; ++i) { > + width = wcwidth(wline[i]); > + if (wline[i] == L'\t') > + width = TABSIZE - ((cols + col_tab_align) % TABSIZE); There is no need to call wcwidth() on \t. if (wline[i] == L'\t') width = TABSIZE - ((cols + col_tab_align) % TABSIZE); else width = wcwidth(wline[i]); > - if (width == 0) { > - i++; > - continue; > + if (width == -1) { > + width = 1; > + wline[i] = L'.';
simplify scroll_wline/format_line