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 | |
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 :).
-rw-r--r-- | mdoc_man.c | 3 | ||||
-rw-r--r-- | regress/roff/Makefile | 2 | ||||
-rw-r--r-- | regress/roff/po/Makefile | 5 | ||||
-rw-r--r-- | regress/roff/po/basic-mdoc.in | 20 | ||||
-rw-r--r-- | regress/roff/po/basic-mdoc.out_ascii | 17 | ||||
-rw-r--r-- | roff.7 | 13 | ||||
-rw-r--r-- | roff.c | 10 | ||||
-rw-r--r-- | roff.h | 4 | ||||
-rw-r--r-- | roff_html.c | 3 | ||||
-rw-r--r-- | roff_term.c | 26 | ||||
-rw-r--r-- | roff_validate.c | 3 |
11 files changed, 91 insertions, 15 deletions
@@ -1,4 +1,4 @@ -/* $Id: mdoc_man.c,v 1.121 2017/06/14 13:00:31 schwarze Exp $ */ +/* $Id: mdoc_man.c,v 1.122 2017/06/14 22:51:25 schwarze Exp $ */ /* * Copyright (c) 2011-2017 Ingo Schwarze <schwarze@openbsd.org> * @@ -130,6 +130,7 @@ static const void_fp roff_manacts[ROFF_MAX] = { pre_ft, /* ft */ pre_onearg, /* ll */ pre_onearg, /* mc */ + pre_onearg, /* po */ pre_onearg, /* rj */ pre_sp, /* sp */ pre_ta, /* ta */ diff --git a/regress/roff/Makefile b/regress/roff/Makefile index 0a464197..dae2ac37 100644 --- a/regress/roff/Makefile +++ b/regress/roff/Makefile @@ -1,7 +1,7 @@ # $OpenBSD: Makefile,v 1.20 2015/02/06 16:05:51 schwarze Exp $ SUBDIR = args cond esc scale string -SUBDIR += br cc de ds ft ig it ll na nr ps rm sp ta ti tr +SUBDIR += br cc de ds ft ig it ll na nr po ps rm sp ta ti tr .include "../Makefile.sub" .include <bsd.subdir.mk> diff --git a/regress/roff/po/Makefile b/regress/roff/po/Makefile new file mode 100644 index 00000000..dabc7c9e --- /dev/null +++ b/regress/roff/po/Makefile @@ -0,0 +1,5 @@ +# $OpenBSD: Makefile,v 1.1 2017/05/08 15:33:43 schwarze Exp $ + +REGRESS_TARGETS = basic-mdoc + +.include <bsd.regress.mk> diff --git a/regress/roff/po/basic-mdoc.in b/regress/roff/po/basic-mdoc.in new file mode 100644 index 00000000..082be68c --- /dev/null +++ b/regress/roff/po/basic-mdoc.in @@ -0,0 +1,20 @@ +.Dd June 14, 2017 +.Dt PO-BASIC-MDOC 1 +.Os OpenBSD +.Sh NAME +.Nm po-basic-mdoc +.Nd the roff page offset request +.Sh DESCRIPTION +initial text +.Pp +.po -2n +shifted left +.Pp +.po +5n +shifted right +.Pp +.po XXX +shifted left +.Pp +.po 0 +final text diff --git a/regress/roff/po/basic-mdoc.out_ascii b/regress/roff/po/basic-mdoc.out_ascii new file mode 100644 index 00000000..0b35c2bd --- /dev/null +++ b/regress/roff/po/basic-mdoc.out_ascii @@ -0,0 +1,17 @@ +PO-BASIC-MDOC(1) General Commands Manual PO-BASIC-MDOC(1) + +NNAAMMEE + ppoo--bbaassiicc--mmddoocc - the roff page offset request + +DDEESSCCRRIIPPTTIIOONN + initial text + + shifted left + + shifted right + + shifted left + + final text + +OpenBSD June 14, 2017 OpenBSD @@ -1,4 +1,4 @@ -.\" $Id: roff.7,v 1.91 2017/06/14 19:39:18 schwarze Exp $ +.\" $Id: roff.7,v 1.92 2017/06/14 22:51:25 schwarze Exp $ .\" .\" Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv> .\" Copyright (c) 2010,2011,2013-2015,2017 Ingo Schwarze <schwarze@openbsd.org> @@ -1441,8 +1441,15 @@ Currently ignored. Print all number registers on standard error output. Currently ignored. .It Ic \&po Op Oo Cm + Ns | Ns Cm - Oc Ns Ar offset -Set horizontal page offset. -Currently ignored. +Set a horizontal page offset. +If no argument is specified, the page offset is reverted to its +previous value. +If a sign is specified, the new page offset is calculated relative +to the current one; otherwise, it is absolute. +The argument follows the syntax of +.Sx Scaling Widths +and the default scaling unit is +.Cm m . .It Ic \&ps Op Oo Cm + Ns | Ns Cm - Oc Ns size Change point size. Currently ignored. @@ -1,4 +1,4 @@ -/* $Id: roff.c,v 1.311 2017/06/14 19:39:18 schwarze Exp $ */ +/* $Id: roff.c,v 1.312 2017/06/14 22:51:25 schwarze Exp $ */ /* * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv> * Copyright (c) 2010-2015, 2017 Ingo Schwarze <schwarze@openbsd.org> @@ -223,8 +223,8 @@ static enum rofferr roff_userdef(ROFF_ARGS); const char *__roff_name[MAN_MAX + 1] = { "br", "ce", "ft", "ll", - "mc", "rj", "sp", "ta", - "ti", NULL, + "mc", "po", "rj", "sp", + "ta", "ti", NULL, "ab", "ad", "af", "aln", "als", "am", "am1", "ami", "ami1", "as", "as1", "asciify", @@ -265,7 +265,7 @@ const char *__roff_name[MAN_MAX + 1] = { "open", "opena", "os", "output", "padj", "papersize", "pc", "pev", "pi", "PI", "pl", "pm", - "pn", "pnr", "po", "ps", + "pn", "pnr", "ps", "psbb", "pshape", "pso", "ptr", "pvs", "rchar", "rd", "recursionlimit", "return", "rfschar", "rhang", @@ -335,6 +335,7 @@ static struct roffmac roffs[TOKEN_NONE] = { { roff_onearg, NULL, NULL, 0 }, /* ft */ { roff_onearg, NULL, NULL, 0 }, /* ll */ { roff_onearg, NULL, NULL, 0 }, /* mc */ + { roff_onearg, NULL, NULL, 0 }, /* po */ { roff_onearg, NULL, NULL, 0 }, /* rj */ { roff_onearg, NULL, NULL, 0 }, /* sp */ { roff_manyarg, NULL, NULL, 0 }, /* ta */ @@ -500,7 +501,6 @@ static struct roffmac roffs[TOKEN_NONE] = { { roff_line_ignore, NULL, NULL, 0 }, /* pm */ { roff_line_ignore, NULL, NULL, 0 }, /* pn */ { roff_line_ignore, NULL, NULL, 0 }, /* pnr */ - { roff_line_ignore, NULL, NULL, 0 }, /* po */ { roff_line_ignore, NULL, NULL, 0 }, /* ps */ { roff_unsupp, NULL, NULL, 0 }, /* psbb */ { roff_unsupp, NULL, NULL, 0 }, /* pshape */ @@ -1,4 +1,4 @@ -/* $Id: roff.h,v 1.53 2017/06/14 13:00:31 schwarze Exp $ */ +/* $Id: roff.h,v 1.54 2017/06/14 22:51:25 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org> @@ -77,6 +77,7 @@ enum roff_tok { ROFF_ft, ROFF_ll, ROFF_mc, + ROFF_po, ROFF_rj, ROFF_sp, ROFF_ta, @@ -245,7 +246,6 @@ enum roff_tok { ROFF_pm, ROFF_pn, ROFF_pnr, - ROFF_po, ROFF_ps, ROFF_psbb, ROFF_pshape, diff --git a/roff_html.c b/roff_html.c index 7f440dfe..909604f8 100644 --- a/roff_html.c +++ b/roff_html.c @@ -1,4 +1,4 @@ -/* $Id: roff_html.c,v 1.9 2017/06/14 13:00:31 schwarze Exp $ */ +/* $Id: roff_html.c,v 1.10 2017/06/14 22:51:25 schwarze Exp $ */ /* * Copyright (c) 2010 Kristaps Dzonsons <kristaps@bsd.lv> * Copyright (c) 2014, 2017 Ingo Schwarze <schwarze@openbsd.org> @@ -38,6 +38,7 @@ static const roff_html_pre_fp roff_html_pre_acts[ROFF_MAX] = { NULL, /* ft */ NULL, /* ll */ NULL, /* mc */ + NULL, /* po */ roff_html_pre_ce, /* rj */ roff_html_pre_sp, /* sp */ NULL, /* ta */ 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; diff --git a/roff_validate.c b/roff_validate.c index b76f12ce..801e9314 100644 --- a/roff_validate.c +++ b/roff_validate.c @@ -1,4 +1,4 @@ -/* $Id: roff_validate.c,v 1.8 2017/06/14 13:00:31 schwarze Exp $ */ +/* $Id: roff_validate.c,v 1.9 2017/06/14 22:51:25 schwarze Exp $ */ /* * Copyright (c) 2010, 2017 Ingo Schwarze <schwarze@openbsd.org> * @@ -36,6 +36,7 @@ static const roff_valid_fp roff_valids[ROFF_MAX] = { roff_valid_ft, /* ft */ NULL, /* ll */ NULL, /* mc */ + NULL, /* po */ NULL, /* rj */ NULL, /* sp */ NULL, /* ta */ |