From e5b395c743b2bac472ad457fa3dd62a5956261c6 Mon Sep 17 00:00:00 2001 From: Kristaps Dzonsons Date: Sun, 29 Aug 2010 11:29:51 +0000 Subject: [PATCH] Allow `.xx\}' where xx is a macro (e.g., `.br\}') to close scope. This is experimental and hasn't been rigorously tested. It's only implemented in -mdoc for the time being. This is absolutely required for pod2man. It does, however, make the pod2man preamble be processed in full. --- mdoc.c | 9 ++++++--- roff.c | 13 ++++++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/mdoc.c b/mdoc.c index f8b09f7a..bee01503 100644 --- a/mdoc.c +++ b/mdoc.c @@ -1,4 +1,4 @@ -/* $Id: mdoc.c,v 1.163 2010/08/20 01:02:07 schwarze Exp $ */ +/* $Id: mdoc.c,v 1.164 2010/08/29 11:29:51 kristaps Exp $ */ /* * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons * Copyright (c) 2010 Ingo Schwarze @@ -758,11 +758,14 @@ mdoc_pmacro(struct mdoc *m, int ln, char *buf, int offs) /* * Copy the first word into a nil-terminated buffer. - * Stop copying when a tab, space, or eoln is encountered. + * Stop copying when a tab, space, backslash, or eoln is encountered. */ j = 0; - while (j < 4 && '\0' != buf[i] && ' ' != buf[i] && '\t' != buf[i]) + while (j < 4 && '\0' != buf[i] && + ' ' != buf[i] && + '\t' != buf[i] && + '\\' != buf[i]) mac[j++] = buf[i++]; mac[j] = '\0'; diff --git a/roff.c b/roff.c index b111ad23..ece3dfd2 100644 --- a/roff.c +++ b/roff.c @@ -1,4 +1,4 @@ -/* $Id: roff.c,v 1.99 2010/08/24 12:48:43 kristaps Exp $ */ +/* $Id: roff.c,v 1.100 2010/08/29 11:29:51 kristaps Exp $ */ /* * Copyright (c) 2010 Kristaps Dzonsons * Copyright (c) 2010 Ingo Schwarze @@ -59,7 +59,7 @@ enum rofft { ROFF_rm, ROFF_tr, ROFF_cblock, - ROFF_ccond, + ROFF_ccond, /* FIXME: remove this. */ ROFF_nr, ROFF_MAX }; @@ -764,8 +764,13 @@ roff_cond_sub(ROFF_ARGS) if (l != r->last) return(ROFFRULE_DENY == rr ? ROFF_IGN : ROFF_CONT); - if (ROFF_MAX == (t = roff_parse(*bufp, &pos))) + if (ROFF_MAX == (t = roff_parse(*bufp, &pos))) { + if ('\\' == (*bufp)[pos] && '}' == (*bufp)[pos + 1]) + return(roff_ccond + (r, ROFF_ccond, bufp, szp, + ln, pos, pos + 2, offs)); return(ROFFRULE_DENY == rr ? ROFF_IGN : ROFF_CONT); + } /* * A denied conditional must evaluate its children if and only @@ -797,6 +802,8 @@ roff_cond_text(ROFF_ARGS) * scope permits us to do so. */ + /* FIXME: use roff_ccond? */ + st = &(*bufp)[pos]; if (NULL == (ep = strstr(st, "\\}"))) { roffnode_cleanscope(r); -- 2.47.1