aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--mdoc_man.c19
-rw-r--r--roff.76
-rw-r--r--roff.c18
-rw-r--r--roff.h4
-rw-r--r--roff_html.c3
-rw-r--r--roff_term.c32
-rw-r--r--roff_validate.c3
7 files changed, 46 insertions, 39 deletions
diff --git a/mdoc_man.c b/mdoc_man.c
index cd4acb63..65916cf4 100644
--- a/mdoc_man.c
+++ b/mdoc_man.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_man.c,v 1.120 2017/06/10 01:28:33 schwarze Exp $ */
+/* $Id: mdoc_man.c,v 1.121 2017/06/14 13:00:31 schwarze Exp $ */
/*
* Copyright (c) 2011-2017 Ingo Schwarze <schwarze@openbsd.org>
*
@@ -125,14 +125,15 @@ static void print_count(int *);
static void print_node(DECL_ARGS);
static const void_fp roff_manacts[ROFF_MAX] = {
- pre_br,
- pre_onearg,
- pre_ft,
- pre_onearg,
- pre_onearg,
- pre_sp,
- pre_ta,
- pre_onearg,
+ pre_br, /* br */
+ pre_onearg, /* ce */
+ pre_ft, /* ft */
+ pre_onearg, /* ll */
+ pre_onearg, /* mc */
+ pre_onearg, /* rj */
+ pre_sp, /* sp */
+ pre_ta, /* ta */
+ pre_onearg, /* ti */
};
static const struct manact __manacts[MDOC_MAX - MDOC_Dd] = {
diff --git a/roff.7 b/roff.7
index c2200a2a..85c5d6eb 100644
--- a/roff.7
+++ b/roff.7
@@ -1,4 +1,4 @@
-.\" $Id: roff.7,v 1.88 2017/06/14 01:31:26 schwarze Exp $
+.\" $Id: roff.7,v 1.89 2017/06/14 13:00:31 schwarze Exp $
.\"
.\" Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
.\" Copyright (c) 2010,2011,2013-2015,2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -1477,7 +1477,9 @@ This is a Heirloom extension and currently ignored.
Justify the next
.Ar N
input lines to the right margin without filling.
-Currently ignored.
+.Ar N
+defaults to 1.
+An argument of 0 or less ends right adjustment.
.It Ic \&rm Ar macroname
Remove a request, macro or string.
.It Ic \&rn Ar oldname newname
diff --git a/roff.c b/roff.c
index 34085d1a..c5f2815c 100644
--- a/roff.c
+++ b/roff.c
@@ -1,4 +1,4 @@
-/* $Id: roff.c,v 1.308 2017/06/13 13:51:11 schwarze Exp $ */
+/* $Id: roff.c,v 1.309 2017/06/14 13:00:31 schwarze Exp $ */
/*
* Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -222,8 +222,8 @@ static enum rofferr roff_userdef(ROFF_ARGS);
const char *__roff_name[MAN_MAX + 1] = {
"br", "ce", "ft", "ll",
- "mc", "sp", "ta", "ti",
- NULL,
+ "mc", "rj", "sp", "ta",
+ "ti", NULL,
"ab", "ad", "af", "aln",
"als", "am", "am1", "ami",
"ami1", "as", "as1", "asciify",
@@ -267,7 +267,7 @@ const char *__roff_name[MAN_MAX + 1] = {
"pn", "pnr", "po", "ps",
"psbb", "pshape", "pso", "ptr",
"pvs", "rchar", "rd", "recursionlimit",
- "return", "rfschar", "rhang", "rj",
+ "return", "rfschar", "rhang",
"rm", "rn", "rnn", "rr",
"rs", "rt", "schar", "sentchar",
"shc", "shift", "sizes", "so",
@@ -334,6 +334,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 }, /* rj */
{ roff_onearg, NULL, NULL, 0 }, /* sp */
{ roff_manyarg, NULL, NULL, 0 }, /* ta */
{ roff_onearg, NULL, NULL, 0 }, /* ti */
@@ -511,7 +512,6 @@ static struct roffmac roffs[TOKEN_NONE] = {
{ roff_unsupp, NULL, NULL, 0 }, /* return */
{ roff_unsupp, NULL, NULL, 0 }, /* rfschar */
{ roff_line_ignore, NULL, NULL, 0 }, /* rhang */
- { roff_line_ignore, NULL, NULL, 0 }, /* rj */
{ roff_rm, NULL, NULL, 0 }, /* rm */
{ roff_rn, NULL, NULL, 0 }, /* rn */
{ roff_unsupp, NULL, NULL, 0 }, /* rnn */
@@ -1549,7 +1549,7 @@ roff_parseln(struct roff *r, int ln, struct buf *buf, int *offs)
/* Tables ignore most macros. */
if (r->tbl != NULL && (t == TOKEN_NONE || t == ROFF_TS ||
- t == ROFF_br || t == ROFF_ce || t == ROFF_sp)) {
+ t == ROFF_br || t == ROFF_ce || t == ROFF_rj || t == ROFF_sp)) {
mandoc_msg(MANDOCERR_TBLMACRO, r->parse,
ln, pos, buf->buf + spos);
if (t != TOKEN_NONE)
@@ -2880,7 +2880,7 @@ roff_onearg(ROFF_ARGS)
(tok == ROFF_sp || tok == ROFF_ti))
man_breakscope(r->man, tok);
- if (tok == ROFF_ce && roffce_node != NULL) {
+ if (roffce_node != NULL && (tok == ROFF_ce || tok == ROFF_rj)) {
r->man->last = roffce_node;
r->man->next = ROFF_NEXT_SIBLING;
}
@@ -2901,8 +2901,8 @@ roff_onearg(ROFF_ARGS)
roff_word_alloc(r->man, ln, pos, buf->buf + pos);
}
- if (tok == ROFF_ce) {
- if (r->man->last->tok == ROFF_ce) {
+ if (tok == ROFF_ce || tok == ROFF_rj) {
+ if (r->man->last->type == ROFFT_ELEM) {
roff_word_alloc(r->man, ln, pos, "1");
r->man->last->flags |= NODE_NOSRC;
}
diff --git a/roff.h b/roff.h
index bf5c4c17..7cc4ad27 100644
--- a/roff.h
+++ b/roff.h
@@ -1,4 +1,4 @@
-/* $Id: roff.h,v 1.52 2017/06/07 23:29:49 schwarze Exp $ */
+/* $Id: roff.h,v 1.53 2017/06/14 13:00:31 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_rj,
ROFF_sp,
ROFF_ta,
ROFF_ti,
@@ -257,7 +258,6 @@ enum roff_tok {
ROFF_return,
ROFF_rfschar,
ROFF_rhang,
- ROFF_rj,
ROFF_rm,
ROFF_rn,
ROFF_rnn,
diff --git a/roff_html.c b/roff_html.c
index f023a9c4..7f440dfe 100644
--- a/roff_html.c
+++ b/roff_html.c
@@ -1,4 +1,4 @@
-/* $Id: roff_html.c,v 1.8 2017/06/08 12:54:58 schwarze Exp $ */
+/* $Id: roff_html.c,v 1.9 2017/06/14 13:00:31 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 */
+ roff_html_pre_ce, /* rj */
roff_html_pre_sp, /* sp */
NULL, /* ta */
NULL, /* ti */
diff --git a/roff_term.c b/roff_term.c
index 7574102b..bfcb2d0f 100644
--- a/roff_term.c
+++ b/roff_term.c
@@ -1,4 +1,4 @@
-/* $Id: roff_term.c,v 1.10 2017/06/08 12:54:58 schwarze Exp $ */
+/* $Id: roff_term.c,v 1.11 2017/06/14 13:00:31 schwarze Exp $ */
/*
* Copyright (c) 2010, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
*
@@ -42,6 +42,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_ce, /* rj */
roff_term_pre_sp, /* sp */
roff_term_pre_ta, /* ta */
roff_term_pre_ti, /* ti */
@@ -69,33 +70,34 @@ roff_term_pre_br(ROFF_TERM_ARGS)
static void
roff_term_pre_ce(ROFF_TERM_ARGS)
{
- const struct roff_node *nch;
+ const struct roff_node *nc1, *nc2;
size_t len, lm;
roff_term_pre_br(p, n);
lm = p->tcol->offset;
- n = n->child->next;
- while (n != NULL) {
- nch = n;
+ nc1 = n->child->next;
+ while (nc1 != NULL) {
+ nc2 = nc1;
len = 0;
do {
- if (n->type == ROFFT_TEXT) {
+ if (nc2->type == ROFFT_TEXT) {
if (len)
len++;
- len += term_strlen(p, nch->string);
+ len += term_strlen(p, nc2->string);
}
- nch = nch->next;
- } while (nch != NULL && (n->type != ROFFT_TEXT ||
- (n->flags & NODE_LINE) == 0));
+ nc2 = nc2->next;
+ } while (nc2 != NULL && (nc2->type != ROFFT_TEXT ||
+ (nc2->flags & NODE_LINE) == 0));
p->tcol->offset = len >= p->tcol->rmargin ? 0 :
lm + len >= p->tcol->rmargin ? p->tcol->rmargin - len :
+ n->tok == ROFF_rj ? p->tcol->rmargin - len :
(lm + p->tcol->rmargin - len) / 2;
- while (n != nch) {
- if (n->type == ROFFT_TEXT)
- term_word(p, n->string);
+ while (nc1 != nc2) {
+ if (nc1->type == ROFFT_TEXT)
+ term_word(p, nc1->string);
else
- roff_term_pre(p, n);
- n = n->next;
+ roff_term_pre(p, nc1);
+ nc1 = nc1->next;
}
p->flags |= TERMP_NOSPACE;
term_flushln(p);
diff --git a/roff_validate.c b/roff_validate.c
index feadfb40..b76f12ce 100644
--- a/roff_validate.c
+++ b/roff_validate.c
@@ -1,4 +1,4 @@
-/* $Id: roff_validate.c,v 1.7 2017/06/06 15:01:04 schwarze Exp $ */
+/* $Id: roff_validate.c,v 1.8 2017/06/14 13:00:31 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, /* rj */
NULL, /* sp */
NULL, /* ta */
NULL, /* ti */