void fwd(void) { int oldcol, oldmax; oldcol = col; oldmax = maxcol; flushln(); setcol(oldcol); maxcol = oldmax; }
static void fwd(void) { int oldcol, oldmax; oldcol = col; oldmax = maxcol; flushln(); col = oldcol; maxcol = oldmax; }
static void filter(FILE *f) { wint_t c; int i, w; while ((c = getwc(f)) != WEOF && col < MAXBUF) switch(c) { case '\b': if (col > 0) col--; continue; case '\t': col = (col+8) & ~07; if (col > maxcol) maxcol = col; continue; case '\r': col = 0; continue; case SO: mode |= ALTSET; continue; case SI: mode &= ~ALTSET; continue; case IESC: switch (c = getwc(f)) { case HREV: if (halfpos == 0) { mode |= SUPERSC; halfpos--; } else if (halfpos > 0) { mode &= ~SUBSC; halfpos--; } else { halfpos = 0; reverse(); } continue; case HFWD: if (halfpos == 0) { mode |= SUBSC; halfpos++; } else if (halfpos < 0) { mode &= ~SUPERSC; halfpos++; } else { halfpos = 0; fwd(); } continue; case FREV: reverse(); continue; default: errx(1, "unknown escape sequence in input: %o, %o", IESC, c); } continue; case '_': if (obuf[col].c_char || obuf[col].c_width < 0) { while (col > 0 && obuf[col].c_width < 0) col--; w = obuf[col].c_width; for (i = 0; i < w; i++) obuf[col++].c_mode |= UNDERL | mode; if (col > maxcol) maxcol = col; continue; } obuf[col].c_char = '_'; obuf[col].c_width = 1; /* FALLTHROUGH */ case ' ': col++; if (col > maxcol) maxcol = col; continue; case '\n': flushln(); continue; case '\f': flushln(); putwchar('\f'); continue; default: if ((w = wcwidth(c)) <= 0) /* non printing */ continue; if (obuf[col].c_char == '\0') { obuf[col].c_char = c; for (i = 0; i < w; i++) obuf[col + i].c_mode = mode; obuf[col].c_width = w; for (i = 1; i < w; i++) obuf[col + i].c_width = -1; } else if (obuf[col].c_char == '_') { obuf[col].c_char = c; for (i = 0; i < w; i++) obuf[col + i].c_mode |= UNDERL|mode; obuf[col].c_width = w; for (i = 1; i < w; i++) obuf[col + i].c_width = -1; } else if ((wint_t)obuf[col].c_char == c) { for (i = 0; i < w; i++) obuf[col + i].c_mode |= BOLD|mode; } else { w = obuf[col].c_width; for (i = 0; i < w; i++) obuf[col + i].c_mode = mode; } col += w; if (col > maxcol) maxcol = col; continue; } if (ferror(f)) err(1, NULL); if (maxcol) flushln(); }
void filter(FILE *f) { wint_t c; int i, w; while ((c = getwc(f)) != WEOF) switch(c) { case '\b': setcol(col - 1); continue; case '\t': setcol((col+8) & ~07); continue; case '\r': setcol(0); continue; case SO: mode |= ALTSET; continue; case SI: mode &= ~ALTSET; continue; case IESC: switch (c = getwc(f)) { case HREV: if (halfpos == 0) { mode |= SUPERSC; halfpos--; } else if (halfpos > 0) { mode &= ~SUBSC; halfpos--; } else { halfpos = 0; reverse(); } continue; case HFWD: if (halfpos == 0) { mode |= SUBSC; halfpos++; } else if (halfpos < 0) { mode &= ~SUPERSC; halfpos++; } else { halfpos = 0; fwd(); } continue; case FREV: reverse(); continue; default: errx(EXIT_FAILURE, _("unknown escape sequence in input: %o, %o"), IESC, c); break; } continue; case '_': if (obuf[col].c_char || obuf[col].c_width < 0) { while(col > 0 && obuf[col].c_width < 0) col--; w = obuf[col].c_width; for (i = 0; i < w; i++) obuf[col++].c_mode |= UNDERL | mode; setcol(col); continue; } obuf[col].c_char = '_'; obuf[col].c_width = 1; /* fall through */ case ' ': setcol(col + 1); continue; case '\n': flushln(); continue; case '\f': flushln(); putwchar('\f'); continue; default: if (!iswprint(c)) /* non printing */ continue; w = wcwidth(c); needcol(col + w); if (obuf[col].c_char == '\0') { obuf[col].c_char = c; for (i = 0; i < w; i++) obuf[col+i].c_mode = mode; obuf[col].c_width = w; for (i = 1; i < w; i++) obuf[col+i].c_width = -1; } else if (obuf[col].c_char == '_') { obuf[col].c_char = c; for (i = 0; i < w; i++) obuf[col+i].c_mode |= UNDERL|mode; obuf[col].c_width = w; for (i = 1; i < w; i++) obuf[col+i].c_width = -1; } else if (obuf[col].c_char == c) { for (i = 0; i < w; i++) obuf[col+i].c_mode |= BOLD|mode; } else { w = obuf[col].c_width; for (i = 0; i < w; i++) obuf[col+i].c_mode = mode; } setcol(col + w); continue; } if (maxcol) flushln(); }
static void filtr(struct iblok *f) { wint_t c; char b, *cp; int i, n, w = 0; while((mb_cur_max > 1 ? cp = ib_getw(f, &c, &n) : (b = c = ib_get(f), n = 1, cp = c == (wint_t)EOF ? 0 : &b)), cp != NULL) switch(c) { case '\b': if (col > 0) col--; continue; case '\t': col = (col+8) & ~07; if (col > maxcol) maxcol = col; continue; case '\r': col = 0; continue; case SO: mode |= ALTSET; continue; case SI: mode &= ~ALTSET; continue; case IESC: mb_cur_max > 1 ? cp = ib_getw(f, &c, &n) : (b = c = ib_get(f), n = 1, cp = c == (wint_t)EOF ? 0 : &b); switch (c) { case HREV: if (halfpos == 0) { mode |= SUPERSC; halfpos--; } else if (halfpos > 0) { mode &= ~SUBSC; halfpos--; } else { halfpos = 0; reverse(); } continue; case HFWD: if (halfpos == 0) { mode |= SUBSC; halfpos++; } else if (halfpos < 0) { mode &= ~SUPERSC; halfpos++; } else { halfpos = 0; fwd(); } continue; case FREV: reverse(); continue; default: fprintf(stderr, "Unknown escape sequence in input: %o, %o\n", IESC, cp?*cp:EOF); exit(1); } continue; case '_': obaccs(col); if (obuf[col].c_char) obuf[col].c_mode |= UNDERL | mode; else obuf[col].c_char = '_'; case ' ': col++; if (col > maxcol) maxcol = col; continue; case '\n': flushln(); continue; default: if (mb_cur_max > 1 ? c == WEOF || (w = wcwidth(c)) < 0 || w == 0 && !iswprint(c) : (w = 1, c == (wint_t)EOF || !isprint(c))) /* non printing */ continue; obaccs(col); if (obuf[col].c_char == '\0') { obuf[col].c_char = c; obuf[col].c_mode = mode; } else if (obuf[col].c_char == '_') { obuf[col].c_char = c; obuf[col].c_mode |= UNDERL|mode; } else if (obuf[col].c_char == c) obuf[col].c_mode |= BOLD|mode; else { obuf[col].c_mode = c; obuf[col].c_mode = mode; } obaccs(col+w-1); for (i = 1; i < w; i++) { obuf[col+i].c_mode = obuf[col].c_mode|FILLER; obuf[col+i].c_char = obuf[col].c_char; } col += w; if (col > maxcol) maxcol = col; continue; } if (maxcol) flushln(); }