summaryrefslogtreecommitdiffstatshomepage
path: root/mdoc_macro.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2010-05-17 22:11:42 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2010-05-17 22:11:42 +0000
commit95356d6189f5e5d41011a7cb60176f147e1fff7d (patch)
treec923ce026d6b8f420d203f151868c8b858e4501d /mdoc_macro.c
parent114426748445942cb51394e59f2c62ad79bd974c (diff)
downloadmandoc-95356d6189f5e5d41011a7cb60176f147e1fff7d.tar.gz
mandoc-95356d6189f5e5d41011a7cb60176f147e1fff7d.tar.zst
mandoc-95356d6189f5e5d41011a7cb60176f147e1fff7d.zip
Enable the unified error/warning enumeration in mandoc.h that's
stringified in main.c. Allow `An' to handle an argument and child (with a warning). Allow `Rv' and `Ex' to work without a prior `Nm' as groff does (with a warning). Allow inconsistent column syntax to only raise a warning.
Diffstat (limited to 'mdoc_macro.c')
-rw-r--r--mdoc_macro.c34
1 files changed, 19 insertions, 15 deletions
diff --git a/mdoc_macro.c b/mdoc_macro.c
index 3cdfca3a..6754c9a0 100644
--- a/mdoc_macro.c
+++ b/mdoc_macro.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_macro.c,v 1.67 2010/05/15 08:54:04 schwarze Exp $ */
+/* $Id: mdoc_macro.c,v 1.68 2010/05/17 22:11:42 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -25,6 +25,7 @@
#include <string.h>
#include <time.h>
+#include "mandoc.h"
#include "libmdoc.h"
#include "libmandoc.h"
@@ -195,6 +196,7 @@ swarn(struct mdoc *mdoc, enum mdoc_type type,
int line, int pos, const struct mdoc_node *p)
{
const char *n, *t, *tt;
+ int rc;
n = t = "<root>";
tt = "block";
@@ -227,13 +229,11 @@ swarn(struct mdoc *mdoc, enum mdoc_type type,
break;
}
- if ( ! (MDOC_IGN_SCOPE & mdoc->pflags))
- return(mdoc_verr(mdoc, line, pos,
- "%s scope breaks %s scope of %s",
- tt, t, n));
- return(mdoc_vwarn(mdoc, line, pos,
- "%s scope breaks %s scope of %s",
- tt, t, n));
+ rc = mdoc_vmsg(mdoc, MANDOCERR_SCOPE, line, pos,
+ "%s scope breaks %s of %s", tt, t, n);
+
+ /* FIXME: logic should be in driver. */
+ return(MDOC_IGN_SCOPE & mdoc->pflags ? rc : 0);
}
@@ -256,7 +256,8 @@ mdoc_macroend(struct mdoc *m)
continue;
if ( ! (MDOC_EXPLICIT & mdoc_macros[n->tok].flags))
continue;
- return(mdoc_nerr(m, n, EOPEN));
+ mdoc_nmsg(m, n, MANDOCERR_SYNTSCOPE);
+ return(0);
}
/* Rewind to the first. */
@@ -588,7 +589,9 @@ rew_sub(enum mdoc_type t, struct mdoc *m,
return(1);
if ( ! (MDOC_EXPLICIT & mdoc_macros[tok].flags))
return(1);
- return(mdoc_perr(m, line, ppos, ENOCTX));
+ /* FIXME: shouldn't raise an error */
+ mdoc_pmsg(m, line, ppos, MANDOCERR_SYNTNOSCOPE);
+ return(0);
}
if (REWIND_REWIND == c)
break;
@@ -686,8 +689,9 @@ blk_exp_close(MACRO_PROT_ARGS)
}
if ( ! (MDOC_CALLABLE & mdoc_macros[tok].flags)) {
+ /* FIXME: do this in validate */
if (buf[*pos])
- if ( ! mdoc_pwarn(m, line, ppos, ENOLINE))
+ if ( ! mdoc_pmsg(m, line, ppos, MANDOCERR_ARGSLOST))
return(0);
if ( ! rew_sub(MDOC_BODY, m, tok, line, ppos))
@@ -831,7 +835,7 @@ in_line(MACRO_PROT_ARGS)
return(0);
} else if ( ! nc && 0 == cnt) {
mdoc_argv_free(arg);
- if ( ! mdoc_pwarn(m, line, ppos, EIGNE))
+ if ( ! mdoc_pmsg(m, line, ppos, MANDOCERR_MACROEMPTY))
return(0);
}
if ( ! mdoc_macro(m, ntok, line, la, pos, buf))
@@ -892,7 +896,7 @@ in_line(MACRO_PROT_ARGS)
return(0);
} else if ( ! nc && 0 == cnt) {
mdoc_argv_free(arg);
- if ( ! mdoc_pwarn(m, line, ppos, EIGNE))
+ if ( ! mdoc_pmsg(m, line, ppos, MANDOCERR_MACROEMPTY))
return(0);
}
@@ -1198,7 +1202,7 @@ blk_part_imp(MACRO_PROT_ARGS)
if (body == n)
break;
- if (NULL == n && ! mdoc_nwarn(m, body, EIMPBRK))
+ if (NULL == n && ! mdoc_nmsg(m, body, MANDOCERR_SCOPE))
return(0);
if (n && ! rew_last(m, body))
@@ -1564,7 +1568,7 @@ static int
obsolete(MACRO_PROT_ARGS)
{
- return(mdoc_pwarn(m, line, ppos, EOBS));
+ return(mdoc_pmsg(m, line, ppos, MANDOCERR_MACROOBS));
}