]> git.cameronkatri.com Git - mandoc.git/blobdiff - macro.c
Added argv regression tests.
[mandoc.git] / macro.c
diff --git a/macro.c b/macro.c
index b72b2fc576338f2de13ed9ef16ddda906c598a40..1f4642fd9063632383c606a33d860a153f5a6c1f 100644 (file)
--- a/macro.c
+++ b/macro.c
@@ -1,4 +1,4 @@
-/* $Id: macro.c,v 1.52 2009/02/24 16:16:45 kristaps Exp $ */
+/* $Id: macro.c,v 1.56 2009/03/05 12:08:53 kristaps Exp $ */
 /*
  * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
  *
  * macro. 
  */
 
+/* 
+ * FIXME: don't use static mdoc_argv values, as they require us to do a
+ * complicated copy-over when actually assigning them to dynamic memory.
+ */
+
 #include "private.h"
 
 static int       macro_obsolete(MACRO_PROT_ARGS);
@@ -750,7 +755,8 @@ macro_text(MACRO_PROT_ARGS)
                return(perr(mdoc, line, ppos, EARGVLIM));
        }
 
-       c = mdoc_elem_alloc(mdoc, line, ppos, tok, argc, argv);
+       c = mdoc_elem_alloc(mdoc, line, ppos, 
+                       tok, (size_t)argc, argv);
 
        if (0 == c) {
                mdoc_argv_free(argc, argv);
@@ -795,6 +801,8 @@ macro_text(MACRO_PROT_ARGS)
                        return(0);
                }
 
+               /* FIXME: .Fl and .Ar handling of `|'. */
+
                if (ARGS_QWORD != w && mdoc_isdelim(p)) {
                        if (0 == lastpunct && ! rewind_elem(mdoc, tok)) {
                                mdoc_argv_free(argc, argv);
@@ -802,8 +810,8 @@ macro_text(MACRO_PROT_ARGS)
                        }
                        lastpunct = 1;
                } else if (lastpunct) {
-                       c = mdoc_elem_alloc(mdoc, line, 
-                                       ppos, tok, argc, argv);
+                       c = mdoc_elem_alloc(mdoc, line, ppos, 
+                                       tok, (size_t)argc, argv);
                        if (0 == c) {
                                mdoc_argv_free(argc, argv);
                                return(0);
@@ -921,11 +929,8 @@ macro_scoped(MACRO_PROT_ARGS)
 
                if (ARGS_ERROR == c)
                        return(0);
-               if (ARGS_PUNCT == c)
-                       break;
                if (ARGS_EOLN == c)
                        break;
-
                if (ARGS_PHRASE == c) {
                        /*
                        if ( ! mdoc_phrase(mdoc, line, lastarg, buf))
@@ -952,10 +957,10 @@ macro_scoped(MACRO_PROT_ARGS)
                break;
        }
        
-       if ( ! rewind_subblock(MDOC_HEAD, mdoc, tok, line, ppos))
-               return(0);
        if (1 == ppos && ! append_delims(mdoc, line, pos, buf))
                return(0);
+       if ( ! rewind_subblock(MDOC_HEAD, mdoc, tok, line, ppos))
+               return(0);
 
        if ( ! mdoc_body_alloc(mdoc, line, ppos, tok))
                return(0);
@@ -1228,7 +1233,9 @@ macro_constant_delimited(MACRO_PROT_ARGS)
                return(perr(mdoc, line, ppos, EARGVLIM));
        }
 
-       c = mdoc_elem_alloc(mdoc, line, ppos, tok, argc, argv);
+       c = mdoc_elem_alloc(mdoc, line, ppos, 
+                       tok, (size_t)argc, argv);
+
        mdoc_argv_free(argc, argv);
 
        if (0 == c)
@@ -1319,7 +1326,9 @@ macro_constant(MACRO_PROT_ARGS)
                return(perr(mdoc, line, ppos, EARGVLIM));
        }
 
-       c = mdoc_elem_alloc(mdoc, line, ppos, tok, argc, argv);
+       c = mdoc_elem_alloc(mdoc, line, ppos, 
+                       tok, (size_t)argc, argv);
+
        mdoc_argv_free(argc, argv);
 
        if (0 == c)