]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc.c
Remove `am', `ami', `de', `dei', and `.' from -man, as they're now in the roff prepro...
[mandoc.git] / mdoc.c
diff --git a/mdoc.c b/mdoc.c
index 8cb8c4edaf4d47a76ecaef1ec4bcc7c9b05cec12..9ef84d58f7ba0dbafe2acba1088ac40bd01dfe72 100644 (file)
--- a/mdoc.c
+++ b/mdoc.c
@@ -1,4 +1,4 @@
-/*     $Id: mdoc.c,v 1.129 2010/05/12 17:08:03 kristaps Exp $ */
+/*     $Id: mdoc.c,v 1.133 2010/05/15 16:24:37 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -69,7 +69,6 @@ const char *const __mdoc_merrnames[MERRMAX] = {
        "prologue macro out of conventional order", /* EPROLOOO */
        "prologue macro repeated", /* EPROLREP */
        "invalid manual section", /* EBADMSEC */
-       "invalid section", /* EBADSEC */
        "invalid font mode", /* EFONT */
        "invalid date syntax", /* EBADDATE */
        "invalid number format", /* ENUMFMT */
@@ -191,6 +190,8 @@ mdoc_free1(struct mdoc *mdoc)
                free(mdoc->meta.arch);
        if (mdoc->meta.vol)
                free(mdoc->meta.vol);
+       if (mdoc->meta.msec)
+               free(mdoc->meta.msec);
 }
 
 
@@ -289,7 +290,9 @@ mdoc_parseln(struct mdoc *m, int ln, char *buf)
        if (MDOC_HALT & m->flags)
                return(0);
 
-       return('.' == *buf ? mdoc_pmacro(m, ln, buf) :
+       m->flags |= MDOC_NEWLINE;
+       return('.' == *buf ? 
+                       mdoc_pmacro(m, ln, buf) :
                        mdoc_ptext(m, ln, buf));
 }
 
@@ -453,7 +456,9 @@ node_alloc(struct mdoc *m, int line, int pos,
        p->pos = pos;
        p->tok = tok;
        p->type = type;
-
+       if (MDOC_NEWLINE & m->flags)
+               p->flags |= MDOC_LINE;
+       m->flags &= ~MDOC_NEWLINE;
        return(p);
 }
 
@@ -698,6 +703,8 @@ mdoc_ptext(struct mdoc *m, int line, char *buf)
         * sentence.  The front-end will know how to interpret this.
         */
 
+       /* FIXME: chain of close delims. */
+
        assert(i);
 
        if (mandoc_eos(buf, (size_t)i))
@@ -726,7 +733,7 @@ int
 mdoc_pmacro(struct mdoc *m, int ln, char *buf)
 {
        enum mdoct      tok;
-       int             i, j;
+       int             i, j, sv;
        char            mac[5];
 
        /* Empty lines are ignored. */
@@ -746,6 +753,8 @@ mdoc_pmacro(struct mdoc *m, int ln, char *buf)
                        return(1);
        }
 
+       sv = i;
+
        /* Copy the first word into a nil-terminated buffer. */
 
        for (j = 0; j < 4; j++, i++) {
@@ -793,7 +802,7 @@ mdoc_pmacro(struct mdoc *m, int ln, char *buf)
         * Begin recursive parse sequence.  Since we're at the start of
         * the line, we don't need to do callable/parseable checks.
         */
-       if ( ! mdoc_macro(m, tok, ln, 1, &i, buf)) 
+       if ( ! mdoc_macro(m, tok, ln, sv, &i, buf)) 
                goto err;
 
        return(1);