=================================================================== RCS file: /cvs/mandoc/roff_term.c,v retrieving revision 1.21 retrieving revision 1.24 diff -u -p -r1.21 -r1.24 --- mandoc/roff_term.c 2020/09/03 17:42:15 1.21 +++ mandoc/roff_term.c 2021/09/19 18:07:09 1.24 @@ -1,6 +1,6 @@ -/* $Id: roff_term.c,v 1.21 2020/09/03 17:42:15 schwarze Exp $ */ +/* $OpenBSD: roff_term.c,v 1.24 2021/09/19 18:07:09 schwarze Exp $ */ /* - * Copyright (c) 2010,2014,2015,2017-2019 Ingo Schwarze + * Copyright (c) 2010,2014,2015,2017-2020 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -112,9 +112,11 @@ roff_term_pre_ft(ROFF_TERM_ARGS) cp = n->child->string; switch (mandoc_font(cp, (int)strlen(cp))) { case ESCAPE_FONTBOLD: + case ESCAPE_FONTCB: term_fontrepl(p, TERMFONT_BOLD); break; case ESCAPE_FONTITALIC: + case ESCAPE_FONTCI: term_fontrepl(p, TERMFONT_UNDER); break; case ESCAPE_FONTBI: @@ -124,7 +126,7 @@ roff_term_pre_ft(ROFF_TERM_ARGS) term_fontlast(p); break; case ESCAPE_FONTROMAN: - case ESCAPE_FONTCW: + case ESCAPE_FONTCR: term_fontrepl(p, TERMFONT_NONE); break; default: @@ -157,9 +159,13 @@ static void roff_term_pre_po(ROFF_TERM_ARGS) { struct roffsu su; - static int po, polast; + static int po, pouse, polast; int ponew; + /* Revert the currently active page offset. */ + p->tcol->offset -= pouse; + + /* Determine the requested page offset. */ if (n->child != NULL && a2roffsu(n->child->string, &su, SCALE_EM) != NULL) { ponew = term_hen(p, &su); @@ -168,11 +174,15 @@ roff_term_pre_po(ROFF_TERM_ARGS) ponew += po; } else ponew = polast; + + /* Remeber both the previous and the newly requested offset. */ polast = po; po = ponew; - ponew = po - polast + (int)p->tcol->offset; - p->tcol->offset = ponew > 0 ? ponew : 0; + /* Truncate to the range [-offset, 60], remember, and apply it. */ + pouse = po >= 60 ? 60 : + po < -(int)p->tcol->offset ? -(int)p->tcol->offset : po; + p->tcol->offset += pouse; } static void