diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2017-06-14 22:51:25 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2017-06-14 22:51:25 +0000 |
commit | a5cb8b874ed422ba6f202f5cd0dc73e4689e168b (patch) | |
tree | 04995cd7ced1bad663ee8096460feda6fa6f3b5a /roff_term.c | |
parent | e9ac0876da23cde98a17d36ab849630061754ff0 (diff) | |
download | mandoc-a5cb8b874ed422ba6f202f5cd0dc73e4689e168b.tar.gz mandoc-a5cb8b874ed422ba6f202f5cd0dc73e4689e168b.tar.zst mandoc-a5cb8b874ed422ba6f202f5cd0dc73e4689e168b.zip |
Naive implementation of the roff(7) .po (page offset) request.
This clearly works when .po is called on the top level, but might
not be sophisticated enough if people call .po inside indentation-changing
contexts, but i haven't seen that in manual pages (yet :).
Diffstat (limited to 'roff_term.c')
-rw-r--r-- | roff_term.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/roff_term.c b/roff_term.c index db59db08..0b0b6fda 100644 --- a/roff_term.c +++ b/roff_term.c @@ -1,4 +1,4 @@ -/* $Id: roff_term.c,v 1.12 2017/06/14 17:51:15 schwarze Exp $ */ +/* $Id: roff_term.c,v 1.13 2017/06/14 22:51:25 schwarze Exp $ */ /* * Copyright (c) 2010, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org> * @@ -32,6 +32,7 @@ static void roff_term_pre_ce(ROFF_TERM_ARGS); static void roff_term_pre_ft(ROFF_TERM_ARGS); static void roff_term_pre_ll(ROFF_TERM_ARGS); static void roff_term_pre_mc(ROFF_TERM_ARGS); +static void roff_term_pre_po(ROFF_TERM_ARGS); static void roff_term_pre_sp(ROFF_TERM_ARGS); static void roff_term_pre_ta(ROFF_TERM_ARGS); static void roff_term_pre_ti(ROFF_TERM_ARGS); @@ -42,6 +43,7 @@ static const roff_term_pre_fp roff_term_pre_acts[ROFF_MAX] = { roff_term_pre_ft, /* ft */ roff_term_pre_ll, /* ll */ roff_term_pre_mc, /* mc */ + roff_term_pre_po, /* po */ roff_term_pre_ce, /* rj */ roff_term_pre_sp, /* sp */ roff_term_pre_ta, /* ta */ @@ -153,6 +155,28 @@ roff_term_pre_mc(ROFF_TERM_ARGS) } static void +roff_term_pre_po(ROFF_TERM_ARGS) +{ + struct roffsu su; + static int po, polast; + int ponew; + + if (n->child != NULL && + a2roffsu(n->child->string, &su, SCALE_EM) != NULL) { + ponew = term_hen(p, &su); + if (*n->child->string == '+' || + *n->child->string == '-') + ponew += po; + } else + ponew = polast; + polast = po; + po = ponew; + + ponew = po - polast + (int)p->tcol->offset; + p->tcol->offset = ponew > 0 ? ponew : 0; +} + +static void roff_term_pre_sp(ROFF_TERM_ARGS) { struct roffsu su; |