]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc.c
Make args_checkpunct() use mdoc_isdelim() instead of mdoc_iscdelim(),
[mandoc.git] / mdoc.c
diff --git a/mdoc.c b/mdoc.c
index ddc2198cf60a1d404b4e8a352559a389a7349569..9354d376114d0fda1c0d588abc9fdaa6603a7c13 100644 (file)
--- a/mdoc.c
+++ b/mdoc.c
@@ -1,6 +1,6 @@
-/*     $Id: mdoc.c,v 1.179 2011/02/06 22:05:20 kristaps Exp $ */
+/*     $Id: mdoc.c,v 1.183 2011/03/15 13:23:33 kristaps Exp $ */
 /*
- * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
+ * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
  *
  * Permission to use, copy, modify, and distribute this software for any
@@ -98,9 +98,6 @@ static        int               node_append(struct mdoc *,
                                struct mdoc_node *);
 static int               mdoc_ptext(struct mdoc *, int, char *, int);
 static int               mdoc_pmacro(struct mdoc *, int, char *, int);
-static int               mdoc_span_alloc(struct mdoc *, 
-                               const struct tbl_span *);
-
 
 const struct mdoc_node *
 mdoc_node(const struct mdoc *m)
@@ -141,6 +138,8 @@ mdoc_free1(struct mdoc *mdoc)
                free(mdoc->meta.vol);
        if (mdoc->meta.msec)
                free(mdoc->meta.msec);
+       if (mdoc->meta.date)
+               free(mdoc->meta.date);
 }
 
 
@@ -224,9 +223,34 @@ mdoc_endparse(struct mdoc *m)
        return(0);
 }
 
+int
+mdoc_addeqn(struct mdoc *m, const struct eqn *ep)
+{
+       struct mdoc_node *n;
+
+       assert( ! (MDOC_HALT & m->flags));
+
+       /* No text before an initial macro. */
+
+       if (SEC_NONE == m->lastnamed) {
+               mdoc_pmsg(m, ep->line, ep->pos, MANDOCERR_NOTEXT);
+               return(1);
+       }
+
+       n = node_alloc(m, ep->line, ep->pos, MDOC_MAX, MDOC_EQN);
+       n->eqn = ep;
+
+       if ( ! node_append(m, n))
+               return(0);
+
+       m->next = MDOC_NEXT_SIBLING;
+       return(1);
+}
+
 int
 mdoc_addspan(struct mdoc *m, const struct tbl_span *sp)
 {
+       struct mdoc_node *n;
 
        assert( ! (MDOC_HALT & m->flags));
 
@@ -237,7 +261,14 @@ mdoc_addspan(struct mdoc *m, const struct tbl_span *sp)
                return(1);
        }
 
-       return(mdoc_span_alloc(m, sp));
+       n = node_alloc(m, sp->line, 0, MDOC_MAX, MDOC_TBL);
+       n->span = sp;
+
+       if ( ! node_append(m, n))
+               return(0);
+
+       m->next = MDOC_NEXT_SIBLING;
+       return(1);
 }
 
 
@@ -313,8 +344,9 @@ mdoc_macro(MACRO_PROT_ARGS)
                        m->meta.vol = mandoc_strdup("LOCAL");
                if (NULL == m->meta.os)
                        m->meta.os = mandoc_strdup("LOCAL");
-               if (0 == m->meta.date)
-                       m->meta.date = time(NULL);
+               if (NULL == m->meta.date)
+                       m->meta.date = mandoc_normdate(NULL,
+                           m->msg, m->data, line, ppos);
                m->flags |= MDOC_PBODY;
        }
 
@@ -545,22 +577,6 @@ mdoc_elem_alloc(struct mdoc *m, int line, int pos,
        return(1);
 }
 
-static int
-mdoc_span_alloc(struct mdoc *m, const struct tbl_span *sp)
-{
-       struct mdoc_node *n;
-
-       n = node_alloc(m, sp->line, 0, MDOC_MAX, MDOC_TBL);
-       n->span = sp;
-
-       if ( ! node_append(m, n))
-               return(0);
-
-       m->next = MDOC_NEXT_SIBLING;
-       return(1);
-}
-
-
 int
 mdoc_word_alloc(struct mdoc *m, int line, int pos, const char *p)
 {