]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc_macro.c
First step of adding register support. This is inspired by a significant
[mandoc.git] / mdoc_macro.c
index f80c84b7f666779a22f14f61c24394a75b619c23..0b0fe4080f5ecaa5ad81acaa66187e4d0499e70a 100644 (file)
@@ -1,6 +1,6 @@
-/*     $Id: mdoc_macro.c,v 1.76 2010/05/31 11:52:06 kristaps Exp $ */
+/*     $Id: mdoc_macro.c,v 1.80 2010/06/19 20:46:28 kristaps Exp $ */
 /*
- * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
+ * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@bsd.lv>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -1118,7 +1118,7 @@ blk_full(MACRO_PROT_ARGS)
        /* If we've already opened our body, exit now. */
 
        if (NULL != body)
-               return(1);
+               goto out;
 
 #ifdef UGLY
        /*
@@ -1145,6 +1145,16 @@ blk_full(MACRO_PROT_ARGS)
        if ( ! mdoc_body_alloc(m, line, ppos, tok))
                return(0);
 
+out:
+       if ( ! (MDOC_FREECOL & m->flags))
+               return(1);
+
+       if ( ! rew_sub(MDOC_BODY, m, tok, line, ppos))
+               return(0);
+       if ( ! rew_sub(MDOC_BLOCK, m, tok, line, ppos))
+               return(0);
+
+       m->flags &= ~MDOC_FREECOL;
        return(1);
 }
 
@@ -1673,13 +1683,13 @@ phrase(struct mdoc *m, int line, int ppos, char *buf)
 }
 
 
+/* ARGSUSED */
 static int
 phrase_ta(MACRO_PROT_ARGS)
 {
        int               la;
        enum mdoct        ntok;
        enum margserr     ac;
-       struct mdoc_node *n;
        char             *p;
 
        /*
@@ -1687,29 +1697,8 @@ phrase_ta(MACRO_PROT_ARGS)
         * it should simply error out with ARGSLOST.
         */
 
-       n = m->last;
        if ( ! rew_sub(MDOC_BODY, m, MDOC_It, line, ppos))
                return(0);
-
-       /* 
-        * FIXME: this is necessary in bogus constructions like
-        *  .Bl -column foo bar
-        *  .Sy foo Ta bar
-        * It is, however, an ugly way to do it.
-        *
-        * XXX; remove this when the above construct builds an implied
-        * `It' marker.
-        */ 
-       if (NULL == m->last || 
-                       MDOC_BODY != m->last->type ||
-                       MDOC_It != m->last->tok ||
-                       NULL == m->last->parent->parent ||
-                       MDOC_Bl != m->last->parent->parent->tok ||
-                       LIST_column != m->last->parent->parent->data.list) {
-               swarn(m, tok, line, ppos, n);
-               return(0);
-       }
-
        if ( ! mdoc_body_alloc(m, line, ppos, MDOC_It))
                return(0);