diff options
-rw-r--r-- | mdoc_man.c | 1 | ||||
-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 | 11 | ||||
-rw-r--r-- | roff.c | 8 | ||||
-rw-r--r-- | roff.h | 2 | ||||
-rw-r--r-- | roff_html.c | 1 | ||||
-rw-r--r-- | roff_term.c | 24 | ||||
-rw-r--r-- | roff_validate.c | 1 |
11 files changed, 84 insertions, 8 deletions
@@ -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 @@ -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. @@ -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 */ @@ -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 9e30bedd..1ce83659 100644 --- a/roff_html.c +++ b/roff_html.c @@ -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 59de74fc..5a838ea2 100644 --- a/roff_term.c +++ b/roff_term.c @@ -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 7b8d3beb..5c05cce6 100644 --- a/roff_validate.c +++ b/roff_validate.c @@ -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 */ |