]> git.cameronkatri.com Git - mandoc.git/commitdiff
All macros have lines/positions.
authorKristaps Dzonsons <kristaps@bsd.lv>
Wed, 7 Jan 2009 16:11:40 +0000 (16:11 +0000)
committerKristaps Dzonsons <kristaps@bsd.lv>
Wed, 7 Jan 2009 16:11:40 +0000 (16:11 +0000)
macro.c
mdoc.c
private.h

diff --git a/macro.c b/macro.c
index f7395c8b09af7ff62ed9537c0f8c5af5b47af652..7997533e85505d5aec4c27a4f9351df1fe918a97 100644 (file)
--- a/macro.c
+++ b/macro.c
@@ -1,4 +1,4 @@
-/* $Id: macro.c,v 1.26 2009/01/07 15:57:14 kristaps Exp $ */
+/* $Id: macro.c,v 1.27 2009/01/07 16:11:40 kristaps Exp $ */
 /*
  * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -35,7 +35,8 @@ static        int       rewind_expblock(struct mdoc *, int, int, int);
 static int       rewind_head(struct mdoc *, int, int);
 static int       rewind_body(struct mdoc *, int, int, int);
 static int       rewind_last(struct mdoc *, int, struct mdoc_node *);
-static int       append_delims(struct mdoc *, int, int *, char *);
+static int       append_delims(struct mdoc *, 
+                       int, int, int *, char *);
 static int       lookup(struct mdoc *, int, const char *);
 
 
@@ -181,7 +182,8 @@ rewind_impblock(struct mdoc *mdoc, int ppos, int tok)
 
 
 static int
-append_delims(struct mdoc *mdoc, int tok, int *pos, char *buf)
+append_delims(struct mdoc *mdoc, int tok, 
+               int line, int *pos, char *buf)
 {
        int              c, lastarg;
        char            *p;
@@ -197,7 +199,7 @@ append_delims(struct mdoc *mdoc, int tok, int *pos, char *buf)
                else if (ARGS_EOLN == c)
                        break;
                assert(mdoc_isdelim(p));
-               mdoc_word_alloc(mdoc, lastarg, p);
+               mdoc_word_alloc(mdoc, line, lastarg, p);
                mdoc->next = MDOC_NEXT_SIBLING;
        }
 
@@ -287,7 +289,7 @@ macro_close_explicit(MACRO_PROT_ARGS)
        flushed = 0;
 
        if (maxargs > 0) {
-               mdoc_tail_alloc(mdoc, ppos, tt);
+               mdoc_tail_alloc(mdoc, line, ppos, tt);
                mdoc->next = MDOC_NEXT_CHILD;
        }
 
@@ -319,7 +321,7 @@ macro_close_explicit(MACRO_PROT_ARGS)
                        break;
                }
 
-               mdoc_word_alloc(mdoc, lastarg, p);
+               mdoc_word_alloc(mdoc, line, lastarg, p);
                mdoc->next = MDOC_NEXT_SIBLING;
        }
 
@@ -332,7 +334,7 @@ macro_close_explicit(MACRO_PROT_ARGS)
 
        if (ppos > 1)
                return(1);
-       return(append_delims(mdoc, tok, pos, buf));
+       return(append_delims(mdoc, tok, line, pos, buf));
 }
 
 
@@ -376,14 +378,14 @@ macro_text(MACRO_PROT_ARGS)
        if (MDOC_QUOTABLE & mdoc_macros[tok].flags)
                fl |= ARGS_QUOTED;
 
-       mdoc_elem_alloc(mdoc, lastarg, tok, argc, argv);
+       mdoc_elem_alloc(mdoc, line, lastarg, tok, argc, argv);
        mdoc->next = MDOC_NEXT_CHILD;
 
        for (lastpunct = sz = 0; sz + argc < MDOC_LINEARG_MAX; sz++) {
                lastarg = *pos;
 
                if (lastpunct) {
-                       mdoc_elem_alloc(mdoc, lastarg, tok, argc, argv);
+                       mdoc_elem_alloc(mdoc, line, lastarg, tok, argc, argv);
                        mdoc->next = MDOC_NEXT_CHILD;
                        lastpunct = 0;
                }
@@ -409,7 +411,7 @@ macro_text(MACRO_PROT_ARGS)
                                return(0);
                        if (ppos > 1)
                                return(1);
-                       return(append_delims(mdoc, tok, pos, buf));
+                       return(append_delims(mdoc, tok, line, pos, buf));
                }
 
                if (mdoc_isdelim(p)) {
@@ -419,7 +421,7 @@ macro_text(MACRO_PROT_ARGS)
                        }
                        lastpunct = 1;
                }
-               mdoc_word_alloc(mdoc, lastarg, p);
+               mdoc_word_alloc(mdoc, line, lastarg, p);
                mdoc->next = MDOC_NEXT_SIBLING;
        }
 
@@ -432,7 +434,7 @@ macro_text(MACRO_PROT_ARGS)
                return(0);
        if (ppos > 1)
                return(1);
-       return(append_delims(mdoc, tok, pos, buf));
+       return(append_delims(mdoc, tok, line, pos, buf));
 }
 
 
@@ -470,21 +472,21 @@ macro_scoped(MACRO_PROT_ARGS)
                return(0);
        }
 
-       mdoc_block_alloc(mdoc, ppos, tok, (size_t)argc, argv);
+       mdoc_block_alloc(mdoc, line, ppos, tok, (size_t)argc, argv);
        mdoc->next = MDOC_NEXT_CHILD;
 
        mdoc_argv_free(argc, argv);
 
        if (0 == buf[*pos]) {
-               mdoc_head_alloc(mdoc, ppos, tok);
+               mdoc_head_alloc(mdoc, line, ppos, tok);
                if ( ! rewind_head(mdoc, ppos, tok))
                        return(0);
-               mdoc_body_alloc(mdoc, ppos, tok);
+               mdoc_body_alloc(mdoc, line, ppos, tok);
                mdoc->next = MDOC_NEXT_CHILD;
                return(1);
        }
 
-       mdoc_head_alloc(mdoc, ppos, tok);
+       mdoc_head_alloc(mdoc, line, ppos, tok);
        mdoc->next = MDOC_NEXT_CHILD;
 
        for (j = 0; j < MDOC_LINEARG_MAX; j++) {
@@ -499,7 +501,7 @@ macro_scoped(MACRO_PROT_ARGS)
                        break;
        
                if (MDOC_MAX == (c = lookup(mdoc, tok, p))) {
-                       mdoc_word_alloc(mdoc, lastarg, p);
+                       mdoc_word_alloc(mdoc, line, lastarg, p);
                        mdoc->next = MDOC_NEXT_SIBLING;
                        continue;
                }
@@ -514,10 +516,10 @@ macro_scoped(MACRO_PROT_ARGS)
 
        if ( ! rewind_head(mdoc, ppos, tok))
                return(0);
-       if (1 == ppos && ! append_delims(mdoc, tok, pos, buf))
+       if (1 == ppos && ! append_delims(mdoc, tok, line, pos, buf))
                return(0);
 
-       mdoc_body_alloc(mdoc, ppos, tok);
+       mdoc_body_alloc(mdoc, line, ppos, tok);
        mdoc->next = MDOC_NEXT_CHILD;
 
        return(1);
@@ -535,10 +537,10 @@ macro_scoped_line(MACRO_PROT_ARGS)
        int               lastarg, c, j;
        char              *p;
 
-       mdoc_block_alloc(mdoc, ppos, tok, 0, NULL);
+       mdoc_block_alloc(mdoc, line, ppos, tok, 0, NULL);
        mdoc->next = MDOC_NEXT_CHILD;
 
-       mdoc_head_alloc(mdoc, ppos, tok);
+       mdoc_head_alloc(mdoc, line, ppos, tok);
        mdoc->next = MDOC_NEXT_CHILD;
 
        /* XXX - no known argument macros. */
@@ -560,7 +562,7 @@ macro_scoped_line(MACRO_PROT_ARGS)
                        break;
 
                if (MDOC_MAX == (c = lookup(mdoc, tok, p))) {
-                       mdoc_word_alloc(mdoc, lastarg, p);
+                       mdoc_word_alloc(mdoc, line, lastarg, p);
                        mdoc->next = MDOC_NEXT_SIBLING;
                        continue;
                }
@@ -576,7 +578,7 @@ macro_scoped_line(MACRO_PROT_ARGS)
        if (1 == ppos) {
                if ( ! rewind_head(mdoc, ppos, tok))
                        return(0);
-               if ( ! append_delims(mdoc, tok, pos, buf))
+               if ( ! append_delims(mdoc, tok, line, pos, buf))
                        return(0);
        }
        return(rewind_impblock(mdoc, ppos, tok));
@@ -604,17 +606,17 @@ macro_constant_scoped(MACRO_PROT_ARGS)
        if ( ! mdoc_valid_pre(mdoc, tok, ppos, 0, NULL))
                return(0);
 
-       mdoc_block_alloc(mdoc, ppos, tok, 0, NULL);
+       mdoc_block_alloc(mdoc, line, ppos, tok, 0, NULL);
        mdoc->next = MDOC_NEXT_CHILD;
 
        if (0 == maxargs) {
-               mdoc_head_alloc(mdoc, ppos, tok);
+               mdoc_head_alloc(mdoc, line, ppos, tok);
                if ( ! rewind_head(mdoc, ppos, tok))
                        return(0);
-               mdoc_body_alloc(mdoc, ppos, tok);
+               mdoc_body_alloc(mdoc, line, ppos, tok);
                flushed = 1;
        } else
-               mdoc_head_alloc(mdoc, ppos, tok);
+               mdoc_head_alloc(mdoc, line, ppos, tok);
 
        mdoc->next = MDOC_NEXT_CHILD;
 
@@ -625,7 +627,7 @@ macro_constant_scoped(MACRO_PROT_ARGS)
                        if ( ! rewind_head(mdoc, ppos, tok))
                                return(0);
                        flushed = 1;
-                       mdoc_body_alloc(mdoc, ppos, tok);
+                       mdoc_body_alloc(mdoc, line, ppos, tok);
                        mdoc->next = MDOC_NEXT_CHILD;
                }
 
@@ -642,7 +644,7 @@ macro_constant_scoped(MACRO_PROT_ARGS)
                                if ( ! rewind_head(mdoc, ppos, tok))
                                        return(0);
                                flushed = 1;
-                               mdoc_body_alloc(mdoc, ppos, tok);
+                               mdoc_body_alloc(mdoc, line, ppos, tok);
                                mdoc->next = MDOC_NEXT_CHILD;
                        }
                        if ( ! mdoc_macro(mdoc, c, line, lastarg, pos, buf))
@@ -654,11 +656,11 @@ macro_constant_scoped(MACRO_PROT_ARGS)
                        if ( ! rewind_head(mdoc, ppos, tok))
                                return(0);
                        flushed = 1;
-                       mdoc_body_alloc(mdoc, ppos, tok);
+                       mdoc_body_alloc(mdoc, line, ppos, tok);
                        mdoc->next = MDOC_NEXT_CHILD;
                }
        
-               mdoc_word_alloc(mdoc, lastarg, p);
+               mdoc_word_alloc(mdoc, line, lastarg, p);
                mdoc->next = MDOC_NEXT_SIBLING;
        }
 
@@ -668,13 +670,13 @@ macro_constant_scoped(MACRO_PROT_ARGS)
        if ( ! flushed) {
                if ( ! rewind_head(mdoc, ppos, tok))
                        return(0);
-               mdoc_body_alloc(mdoc, ppos, tok);
+               mdoc_body_alloc(mdoc, line, ppos, tok);
                mdoc->next = MDOC_NEXT_CHILD;
        }
 
        if (ppos > 1)
                return(1);
-       return(append_delims(mdoc, tok, pos, buf));
+       return(append_delims(mdoc, tok, line, pos, buf));
 }
 
 
@@ -725,7 +727,7 @@ macro_constant_delimited(MACRO_PROT_ARGS)
                return(0);
        }
 
-       mdoc_elem_alloc(mdoc, lastarg, tok, argc, argv);
+       mdoc_elem_alloc(mdoc, line, lastarg, tok, argc, argv);
        mdoc->next = MDOC_NEXT_CHILD;
 
        mdoc_argv_free(argc, argv);
@@ -762,7 +764,7 @@ macro_constant_delimited(MACRO_PROT_ARGS)
                        flushed = 1;
                }
        
-               mdoc_word_alloc(mdoc, lastarg, p);
+               mdoc_word_alloc(mdoc, line, lastarg, p);
                mdoc->next = MDOC_NEXT_SIBLING;
        }
 
@@ -774,7 +776,7 @@ macro_constant_delimited(MACRO_PROT_ARGS)
 
        if (ppos > 1)
                return(1);
-       return(append_delims(mdoc, tok, pos, buf));
+       return(append_delims(mdoc, tok, line, pos, buf));
 }
 
 
@@ -815,7 +817,7 @@ macro_constant(MACRO_PROT_ARGS)
                return(mdoc_err(mdoc, tok, lastarg, ERR_ARGS_MANY));
        }
 
-       mdoc_elem_alloc(mdoc, ppos, tok, argc, argv);
+       mdoc_elem_alloc(mdoc, line, ppos, tok, argc, argv);
        mdoc->next = MDOC_NEXT_CHILD;
 
        mdoc_argv_free(argc, argv);
@@ -828,7 +830,7 @@ macro_constant(MACRO_PROT_ARGS)
                if (ARGS_EOLN == c)
                        break;
 
-               mdoc_word_alloc(mdoc, lastarg, p);
+               mdoc_word_alloc(mdoc, line, lastarg, p);
                mdoc->next = MDOC_NEXT_SIBLING;
        }
 
diff --git a/mdoc.c b/mdoc.c
index fc6d8afc5dd1c29527820c38b90a2568d5e1520d..8515954145424cb9a1436d21bcb0e5f69fb1e7dd 100644 (file)
--- a/mdoc.c
+++ b/mdoc.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc.c,v 1.21 2009/01/07 15:57:14 kristaps Exp $ */
+/* $Id: mdoc.c,v 1.22 2009/01/07 16:11:40 kristaps Exp $ */
 /*
  * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -121,7 +121,7 @@ const       struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
        { macro_obsolete, 0 }, /* Ot */
        { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Pa */
        { macro_constant, 0 }, /* Rv */
-       /* XXX - supposed to be (but isn't) callable. */
+       /* XXX - .St supposed to be (but isn't) callable. */
        { macro_constant_delimited, MDOC_PARSED }, /* St */ 
        { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Va */
        { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Vt */ 
@@ -278,7 +278,7 @@ mdoc_parseln(struct mdoc *mdoc, int line, char *buf)
        if ('.' != *buf) {
                if (SEC_PROLOGUE == mdoc->sec_lastn)
                        return(mdoc_err(mdoc, -1, 0, ERR_SYNTAX_NOTEXT));
-               mdoc_word_alloc(mdoc, 0, buf);
+               mdoc_word_alloc(mdoc, line, 0, buf);
                mdoc->next = MDOC_NEXT_SIBLING;
                return(1);
        }
@@ -376,7 +376,8 @@ mdoc_macro(struct mdoc *mdoc, int tok,
                return(0);
        }
 
-       return((*mdoc_macros[tok].fp)(mdoc, tok, line, ppos, pos, buf));
+       return((*mdoc_macros[tok].fp)(mdoc, tok, 
+                               line, ppos, pos, buf));
 }
 
 
@@ -478,7 +479,7 @@ mdoc_node_append(struct mdoc *mdoc, int pos, struct mdoc_node *p)
 
 
 void
-mdoc_tail_alloc(struct mdoc *mdoc, int pos, int tok)
+mdoc_tail_alloc(struct mdoc *mdoc, int line, int pos, int tok)
 {
        struct mdoc_node *p;
 
@@ -487,6 +488,8 @@ mdoc_tail_alloc(struct mdoc *mdoc, int pos, int tok)
 
        p = xcalloc(1, sizeof(struct mdoc_node));
 
+       p->line = line;
+       p->pos = pos;
        p->type = MDOC_TAIL;
        p->data.tail.tok = tok;
 
@@ -495,7 +498,7 @@ mdoc_tail_alloc(struct mdoc *mdoc, int pos, int tok)
 
 
 void
-mdoc_head_alloc(struct mdoc *mdoc, int pos, int tok)
+mdoc_head_alloc(struct mdoc *mdoc, int line, int pos, int tok)
 {
        struct mdoc_node *p;
 
@@ -504,6 +507,8 @@ mdoc_head_alloc(struct mdoc *mdoc, int pos, int tok)
 
        p = xcalloc(1, sizeof(struct mdoc_node));
 
+       p->line = line;
+       p->pos = pos;
        p->type = MDOC_HEAD;
        p->data.head.tok = tok;
 
@@ -512,7 +517,7 @@ mdoc_head_alloc(struct mdoc *mdoc, int pos, int tok)
 
 
 void
-mdoc_body_alloc(struct mdoc *mdoc, int pos, int tok)
+mdoc_body_alloc(struct mdoc *mdoc, int line, int pos, int tok)
 {
        struct mdoc_node *p;
 
@@ -521,6 +526,8 @@ mdoc_body_alloc(struct mdoc *mdoc, int pos, int tok)
 
        p = xcalloc(1, sizeof(struct mdoc_node));
 
+       p->line = line;
+       p->pos = pos;
        p->type = MDOC_BODY;
        p->data.body.tok = tok;
 
@@ -529,13 +536,15 @@ mdoc_body_alloc(struct mdoc *mdoc, int pos, int tok)
 
 
 void
-mdoc_block_alloc(struct mdoc *mdoc, int pos, int tok,
-               size_t argsz, const struct mdoc_arg *args)
+mdoc_block_alloc(struct mdoc *mdoc, int line, int pos, 
+               int tok, size_t argsz, const struct mdoc_arg *args)
 {
        struct mdoc_node *p;
 
        p = xcalloc(1, sizeof(struct mdoc_node));
 
+       p->pos = pos;
+       p->line = line;
        p->type = MDOC_BLOCK;
        p->data.block.tok = tok;
        p->data.block.argc = argsz;
@@ -546,12 +555,15 @@ mdoc_block_alloc(struct mdoc *mdoc, int pos, int tok,
 
 
 void
-mdoc_elem_alloc(struct mdoc *mdoc, int pos, int tok
-               size_t argsz, const struct mdoc_arg *args)
+mdoc_elem_alloc(struct mdoc *mdoc, int line, int pos
+               int tok, size_t argsz, const struct mdoc_arg *args)
 {
        struct mdoc_node *p;
 
        p = xcalloc(1, sizeof(struct mdoc_node));
+
+       p->line = line;
+       p->pos = pos;
        p->type = MDOC_ELEM;
        p->data.elem.tok = tok;
        p->data.elem.argc = argsz;
@@ -562,11 +574,14 @@ mdoc_elem_alloc(struct mdoc *mdoc, int pos, int tok,
 
 
 void
-mdoc_word_alloc(struct mdoc *mdoc, int pos, const char *word)
+mdoc_word_alloc(struct mdoc *mdoc, 
+               int line, int pos, const char *word)
 {
        struct mdoc_node *p;
 
        p = xcalloc(1, sizeof(struct mdoc_node));
+       p->line = line;
+       p->pos = pos;
        p->type = MDOC_TEXT;
        p->data.text.string = xstrdup(word);
 
index 9a441f0acfae8285323f6b506ba1b7db4d548b93..19b1ed48869bbc069616d68baca6939c32d4f066 100644 (file)
--- a/private.h
+++ b/private.h
@@ -1,4 +1,4 @@
-/* $Id: private.h,v 1.58 2009/01/07 15:57:14 kristaps Exp $ */
+/* $Id: private.h,v 1.59 2009/01/07 16:11:40 kristaps Exp $ */
 /*
  * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -64,14 +64,15 @@ int           mdoc_warn(struct mdoc *, int, int, enum mdoc_warn);
 void             mdoc_msg(struct mdoc *, int, const char *, ...);
 int              mdoc_macro(MACRO_PROT_ARGS);
 int              mdoc_find(const struct mdoc *, const char *);
-void             mdoc_word_alloc(struct mdoc *, int, const char *);
+void             mdoc_word_alloc(struct mdoc *, 
+                       int, int, const char *);
 void             mdoc_elem_alloc(struct mdoc *, int, int, 
-                       size_t, const struct mdoc_arg *);
+                       int, size_t, const struct mdoc_arg *);
 void             mdoc_block_alloc(struct mdoc *, int, int, 
-                       size_t, const struct mdoc_arg *);
-void             mdoc_head_alloc(struct mdoc *, int, int);
-void             mdoc_tail_alloc(struct mdoc *, int, int);
-void             mdoc_body_alloc(struct mdoc *, int, int);
+                       int, size_t, const struct mdoc_arg *);
+void             mdoc_head_alloc(struct mdoc *, int, int, int);
+void             mdoc_tail_alloc(struct mdoc *, int, int, int);
+void             mdoc_body_alloc(struct mdoc *, int, int, int);
 void             mdoc_node_free(struct mdoc_node *);
 void             mdoc_sibling(struct mdoc *, int, struct mdoc_node **,
                        struct mdoc_node **, struct mdoc_node *);