diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2018-08-14 01:27:48 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2018-08-14 01:27:48 +0000 |
commit | 239614951577ba74078ca14afdba3508fb622fcb (patch) | |
tree | b0cad4641ba4301bfba799b00568ad282f56890b /man_macro.c | |
parent | 6a76b50ce922aa5133e03e44dd1c91f7f6d7d745 (diff) | |
download | mandoc-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.c | 41 |
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); } } |