]> git.cameronkatri.com Git - mandoc.git/blobdiff - man.c
Show the flags MDOC_DELIMO, MDOC_DELIMC, MDOC_EOS, and MAN_EOS.
[mandoc.git] / man.c
diff --git a/man.c b/man.c
index e65e8c8cade240afc7ee552b28aa3a7a4ef65585..f231f9b69377181191c97727970f047e3eeb89f8 100644 (file)
--- a/man.c
+++ b/man.c
@@ -1,4 +1,4 @@
-/*     $Id: man.c,v 1.161 2015/04/19 14:57:38 schwarze Exp $ */
+/*     $Id: man.c,v 1.164 2015/09/04 21:25:00 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -55,13 +55,6 @@ static       int              man_ptext(struct roff_man *, int, char *, int);
 static int              man_pmacro(struct roff_man *, int, char *, int);
 
 
-void
-man_endparse(struct roff_man *man)
-{
-
-       man_macroend(man);
-}
-
 int
 man_parseln(struct roff_man *man, int ln, char *buf, int offs)
 {
@@ -289,6 +282,20 @@ man_breakscope(struct roff_man *man, int tok)
                man->flags &= ~MAN_ELINE;
        }
 
+       /*
+        * Weird special case:
+        * Switching fill mode closes section headers.
+        */
+
+       if (man->flags & MAN_BLINE &&
+           (tok == MAN_nf || tok == MAN_fi) &&
+           (man->last->tok == MAN_SH || man->last->tok == MAN_SS)) {
+               n = man->last;
+               man_unscope(man, n);
+               roff_body_alloc(man, n->line, n->pos, n->tok);
+               man->flags &= ~MAN_BLINE;
+       }
+
        /*
         * A block header next line scope is open,
         * and the new macro is not allowed inside block headers.
@@ -325,49 +332,3 @@ man_mparse(const struct roff_man *man)
        assert(man && man->parse);
        return(man->parse);
 }
-
-void
-man_deroff(char **dest, const struct roff_node *n)
-{
-       char    *cp;
-       size_t   sz;
-
-       if (n->type != ROFFT_TEXT) {
-               for (n = n->child; n; n = n->next)
-                       man_deroff(dest, n);
-               return;
-       }
-
-       /* Skip leading whitespace and escape sequences. */
-
-       cp = n->string;
-       while ('\0' != *cp) {
-               if ('\\' == *cp) {
-                       cp++;
-                       mandoc_escape((const char **)&cp, NULL, NULL);
-               } else if (isspace((unsigned char)*cp))
-                       cp++;
-               else
-                       break;
-       }
-
-       /* Skip trailing whitespace. */
-
-       for (sz = strlen(cp); sz; sz--)
-               if (0 == isspace((unsigned char)cp[sz-1]))
-                       break;
-
-       /* Skip empty strings. */
-
-       if (0 == sz)
-               return;
-
-       if (NULL == *dest) {
-               *dest = mandoc_strndup(cp, sz);
-               return;
-       }
-
-       mandoc_asprintf(&cp, "%s %*s", *dest, (int)sz, cp);
-       free(*dest);
-       *dest = cp;
-}