summaryrefslogtreecommitdiffstats
path: root/mdoc.c
diff options
context:
space:
mode:
Diffstat (limited to 'mdoc.c')
-rw-r--r--mdoc.c32
1 files changed, 18 insertions, 14 deletions
diff --git a/mdoc.c b/mdoc.c
index 5fc9ed95..000205be 100644
--- a/mdoc.c
+++ b/mdoc.c
@@ -239,6 +239,20 @@ mdoc_parseln(struct mdoc *m, int ln, char *buf, int offs)
return(0);
m->flags |= MDOC_NEWLINE;
+
+ /*
+ * Let the roff nS register switch SYNOPSIS mode early,
+ * such that the parser knows at all times
+ * whether this mode is on or off.
+ * Note that this mode is also switched by the Sh macro.
+ */
+ if (m->regs->regs[(int)REG_nS].set) {
+ if (m->regs->regs[(int)REG_nS].v.u)
+ m->flags |= MDOC_SYNOPSIS;
+ else
+ m->flags &= ~MDOC_SYNOPSIS;
+ }
+
return(('.' == buf[offs] || '\'' == buf[offs]) ?
mdoc_pmacro(m, ln, buf, offs) :
mdoc_ptext(m, ln, buf, offs));
@@ -373,24 +387,14 @@ node_alloc(struct mdoc *m, int line, int pos,
/* Flag analysis. */
+ if (MDOC_SYNOPSIS & m->flags)
+ p->flags |= MDOC_SYNPRETTY;
+ else
+ p->flags &= ~MDOC_SYNPRETTY;
if (MDOC_NEWLINE & m->flags)
p->flags |= MDOC_LINE;
m->flags &= ~MDOC_NEWLINE;
- /* Section analysis. */
-
- if (SEC_SYNOPSIS == p->sec)
- p->flags |= MDOC_SYNPRETTY;
-
- /* Register analysis. */
-
- if (m->regs->regs[(int)REG_nS].set) {
- if (m->regs->regs[(int)REG_nS].v.u)
- p->flags |= MDOC_SYNPRETTY;
- else
- p->flags &= ~MDOC_SYNPRETTY;
- }
-
return(p);
}