aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/man_macro.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2018-08-14 01:27:48 +0000
committerIngo Schwarze <schwarze@openbsd.org>2018-08-14 01:27:48 +0000
commit239614951577ba74078ca14afdba3508fb622fcb (patch)
treeb0cad4641ba4301bfba799b00568ad282f56890b /man_macro.c
parent6a76b50ce922aa5133e03e44dd1c91f7f6d7d745 (diff)
downloadmandoc-239614951577ba74078ca14afdba3508fb622fcb.tar.gz
mandoc-239614951577ba74078ca14afdba3508fb622fcb.tar.zst
mandoc-239614951577ba74078ca14afdba3508fb622fcb.zip
support tail arguments on the .ME and .UE macros,
used for example in the ditroff(7) manual of the groff package
Diffstat (limited to 'man_macro.c')
-rw-r--r--man_macro.c41
1 files changed, 24 insertions, 17 deletions
diff --git a/man_macro.c b/man_macro.c
index aa8b2001..a146bb11 100644
--- a/man_macro.c
+++ b/man_macro.c
@@ -1,7 +1,7 @@
-/* $Id: man_macro.c,v 1.123 2017/06/25 11:45:37 schwarze Exp $ */
+/* $Id: man_macro.c,v 1.124 2018/08/14 01:27:48 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2012-2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2012-2015, 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>
* Copyright (c) 2013 Franco Fichtner <franco@lastsummer.de>
*
* Permission to use, copy, modify, and distribute this software for any
@@ -189,10 +189,10 @@ rew_scope(struct roff_man *man, enum roff_tok tok)
void
blk_close(MACRO_PROT_ARGS)
{
- enum roff_tok ntok;
+ enum roff_tok ctok, ntok;
const struct roff_node *nn;
char *p;
- int nrew, target;
+ int cline, cpos, nrew, target;
nrew = 1;
switch (tok) {
@@ -234,22 +234,29 @@ blk_close(MACRO_PROT_ARGS)
mandoc_msg(MANDOCERR_BLK_NOTOPEN, man->parse,
line, ppos, roff_name[tok]);
rew_scope(man, MAN_PP);
- } else {
- line = man->last->line;
- ppos = man->last->pos;
- ntok = man->last->tok;
- man_unscope(man, nn);
+ return;
+ }
- if (tok == MAN_RE && nn->head->aux > 0)
- roff_setreg(man->roff, "an-margin",
- nn->head->aux, '-');
+ cline = man->last->line;
+ cpos = man->last->pos;
+ ctok = man->last->tok;
+ man_unscope(man, nn);
- /* Move a trailing paragraph behind the block. */
+ if (tok == MAN_RE && nn->head->aux > 0)
+ roff_setreg(man->roff, "an-margin", nn->head->aux, '-');
- if (ntok == MAN_LP || ntok == MAN_PP || ntok == MAN_P) {
- *pos = strlen(buf);
- blk_imp(man, ntok, line, ppos, pos, buf);
- }
+ /* Trailing text. */
+
+ if (buf[*pos] != '\0') {
+ roff_word_alloc(man, line, ppos, buf + *pos);
+ man->last->flags |= NODE_DELIMC;
+ }
+
+ /* Move a trailing paragraph behind the block. */
+
+ if (ctok == MAN_LP || ctok == MAN_PP || ctok == MAN_P) {
+ *pos = strlen(buf);
+ blk_imp(man, ctok, line, ppos, pos, buf);
}
}