summaryrefslogtreecommitdiffstatshomepage
path: root/mdocml.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2008-12-17 17:18:38 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2008-12-17 17:18:38 +0000
commitf7f7004dc82d9163e8abca23d2d7371cf27afadc (patch)
tree49564495d5f367f5df986e9ac8e2c03cfd0bf2c6 /mdocml.c
parent6c3b37813f4c2bc4a7e1a49ffaf581369c41dea1 (diff)
downloadmandoc-f7f7004dc82d9163e8abca23d2d7371cf27afadc.tar.gz
mandoc-f7f7004dc82d9163e8abca23d2d7371cf27afadc.tar.zst
mandoc-f7f7004dc82d9163e8abca23d2d7371cf27afadc.zip
Prologue Dd and Dt macros.
Diffstat (limited to 'mdocml.c')
-rw-r--r--mdocml.c44
1 files changed, 38 insertions, 6 deletions
diff --git a/mdocml.c b/mdocml.c
index 60bf8943..3829dc54 100644
--- a/mdocml.c
+++ b/mdocml.c
@@ -1,4 +1,4 @@
-/* $Id: mdocml.c,v 1.22 2008/12/15 02:23:12 kristaps Exp $ */
+/* $Id: mdocml.c,v 1.23 2008/12/17 17:18:38 kristaps Exp $ */
/*
* Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -265,9 +265,9 @@ parse_begin(struct md_parse *p)
for (i = 0; i < sz; i++) {
if ('\n' != p->buf[i]) {
if (pos < sizeof(line)) {
- /* LINTED */
- sv[pos] = p->buf[i];
- line[pos++] = p->buf[i];
+ sv[(int)pos] = p->buf[(int)i];
+ line[(int)pos++] =
+ p->buf[(int)i];
continue;
}
warnx("%s: line %d too long",
@@ -306,6 +306,9 @@ msg_err(void *arg, int tok, int col, enum mdoc_err type)
case (ERR_SYNTAX_WS):
lit = "syntax: whitespace in argument";
break;
+ case (ERR_SYNTAX_ARGS):
+ fmt = "syntax: macro `%s' arguments malformed";
+ break;
case (ERR_SCOPE_BREAK):
/* Which scope is broken? */
fmt = "macro `%s' breaks prior explicit scope";
@@ -316,9 +319,27 @@ msg_err(void *arg, int tok, int col, enum mdoc_err type)
case (ERR_MACRO_NOTCALL):
fmt = "macro `%s' not callable";
break;
+ case (ERR_SEC_PROLOGUE):
+ fmt = "macro `%s' cannot be called in the prologue";
+ break;
+ case (ERR_SEC_NPROLOGUE):
+ fmt = "macro `%s' called outside of prologue";
+ break;
case (ERR_ARGS_GE1):
fmt = "macro `%s' expects one or more arguments";
break;
+ case (ERR_ARGS_MANY):
+ fmt = "macro `%s' has too many arguments";
+ break;
+ case (ERR_SEC_PROLOGUE_OO):
+ fmt = "prologue macro `%s' is out-of-order";
+ break;
+ case (ERR_SEC_PROLOGUE_REP):
+ fmt = "prologue macro `%s' repeated";
+ break;
+ case (ERR_SEC_NAME):
+ lit = "`NAME' section must be first";
+ break;
default:
abort();
/* NOTREACHED */
@@ -333,7 +354,11 @@ msg_err(void *arg, int tok, int col, enum mdoc_err type)
p->name, p->lnn, lit);
if (p->dbg < 1) {
- (void)fprintf(stderr, " (column %d)\n", col);
+ if (-1 != col)
+ (void)fprintf(stderr, " (column %d)\n", col);
+ return(0);
+ } else if (-1 == col) {
+ (void)fprintf(stderr, "\nFrom: %s", p->line);
return(0);
}
@@ -360,7 +385,11 @@ msg_msg(void *arg, int col, const char *msg)
(void)printf("%s:%d: %s", p->name, p->lnn, msg);
if (p->dbg < 3) {
- (void)printf(" (column %d)\n", col);
+ if (-1 != col)
+ (void)printf(" (column %d)\n", col);
+ return;
+ } else if (-1 == col) {
+ (void)printf("\nFrom %s\n", p->line);
return;
}
@@ -393,6 +422,9 @@ msg_warn(void *arg, int tok, int col, enum mdoc_warn type)
case (WARN_SYNTAX_MACLIKE):
lit = "syntax: macro-like argument";
break;
+ case (WARN_SEC_OO):
+ lit = "section is out of conventional order";
+ break;
case (WARN_ARGS_GE1):
fmt = "macro `%s' suggests one or more arguments";
break;