=================================================================== RCS file: /cvs/mandoc/mdoc.c,v retrieving revision 1.77 retrieving revision 1.80 diff -u -p -r1.77 -r1.80 --- mandoc/mdoc.c 2009/06/12 12:52:51 1.77 +++ mandoc/mdoc.c 2009/06/15 10:36:01 1.80 @@ -1,4 +1,4 @@ -/* $Id: mdoc.c,v 1.77 2009/06/12 12:52:51 kristaps Exp $ */ +/* $Id: mdoc.c,v 1.80 2009/06/15 10:36:01 kristaps Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * @@ -242,42 +242,58 @@ mdoc_parseln(struct mdoc *m, int ln, char *buf) } -void -mdoc_vmsg(struct mdoc *mdoc, int ln, int pos, const char *fmt, ...) +int +mdoc_verr(struct mdoc *mdoc, int ln, int pos, + const char *fmt, ...) { - char buf[256]; - va_list ap; + char buf[256]; + va_list ap; - if (NULL == mdoc->cb.mdoc_msg) - return; + if (NULL == mdoc->cb.mdoc_err) + return(0); va_start(ap, fmt); (void)vsnprintf(buf, sizeof(buf) - 1, fmt, ap); va_end(ap); - (*mdoc->cb.mdoc_msg)(mdoc->data, ln, pos, buf); + return((*mdoc->cb.mdoc_err)(mdoc->data, ln, pos, buf)); } int -mdoc_verr(struct mdoc *mdoc, int ln, int pos, - const char *fmt, ...) +mdoc_vwarn(struct mdoc *mdoc, int ln, int pos, + enum mdoc_warn type, const char *fmt, ...) { char buf[256]; va_list ap; + if (NULL == mdoc->cb.mdoc_warn) + return(0); + + va_start(ap, fmt); + (void)vsnprintf(buf, sizeof(buf) - 1, fmt, ap); + va_end(ap); + return((*mdoc->cb.mdoc_warn)(mdoc->data, ln, pos, type, buf)); +} + + +int +mdoc_nerr(struct mdoc *mdoc, const struct mdoc_node *node, const char *fmt, ...) +{ + char buf[256]; + va_list ap; + if (NULL == mdoc->cb.mdoc_err) return(0); va_start(ap, fmt); (void)vsnprintf(buf, sizeof(buf) - 1, fmt, ap); va_end(ap); - return((*mdoc->cb.mdoc_err)(mdoc->data, ln, pos, buf)); + return((*mdoc->cb.mdoc_err)(mdoc->data, node->line, node->pos, buf)); } int -mdoc_vwarn(struct mdoc *mdoc, int ln, int pos, - enum mdoc_warn type, const char *fmt, ...) +mdoc_warn(struct mdoc *mdoc, enum mdoc_warn type, const char *fmt, ...) { char buf[256]; va_list ap; @@ -288,7 +304,57 @@ mdoc_vwarn(struct mdoc *mdoc, int ln, int pos, va_start(ap, fmt); (void)vsnprintf(buf, sizeof(buf) - 1, fmt, ap); va_end(ap); - return((*mdoc->cb.mdoc_warn)(mdoc->data, ln, pos, type, buf)); + return((*mdoc->cb.mdoc_warn)(mdoc->data, mdoc->last->line, + mdoc->last->pos, type, buf)); +} + + +int +mdoc_err(struct mdoc *mdoc, const char *fmt, ...) +{ + char buf[256]; + va_list ap; + + if (NULL == mdoc->cb.mdoc_err) + return(0); + + va_start(ap, fmt); + (void)vsnprintf(buf, sizeof(buf) - 1, fmt, ap); + va_end(ap); + return((*mdoc->cb.mdoc_err)(mdoc->data, mdoc->last->line, + mdoc->last->pos, buf)); +} + + +int +mdoc_pwarn(struct mdoc *mdoc, int line, int pos, enum mdoc_warn type, + const char *fmt, ...) +{ + char buf[256]; + va_list ap; + + if (NULL == mdoc->cb.mdoc_warn) + return(0); + + va_start(ap, fmt); + (void)vsnprintf(buf, sizeof(buf) - 1, fmt, ap); + va_end(ap); + return((*mdoc->cb.mdoc_warn)(mdoc->data, line, pos, type, buf)); +} + +int +mdoc_perr(struct mdoc *mdoc, int line, int pos, const char *fmt, ...) +{ + char buf[256]; + va_list ap; + + if (NULL == mdoc->cb.mdoc_err) + return(0); + + va_start(ap, fmt); + (void)vsnprintf(buf, sizeof(buf) - 1, fmt, ap); + va_end(ap); + return((*mdoc->cb.mdoc_err)(mdoc->data, line, pos, buf)); }