=================================================================== RCS file: /cvs/mandoc/man.c,v retrieving revision 1.4 retrieving revision 1.7 diff -u -p -r1.4 -r1.7 --- mandoc/man.c 2009/03/25 15:17:49 1.4 +++ mandoc/man.c 2009/03/25 21:03:13 1.7 @@ -1,4 +1,4 @@ -/* $Id: man.c,v 1.4 2009/03/25 15:17:49 kristaps Exp $ */ +/* $Id: man.c,v 1.7 2009/03/25 21:03:13 kristaps Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * @@ -18,7 +18,6 @@ */ #include #include -#include #include #include #include @@ -83,7 +82,7 @@ man_free(struct man *man) struct man * -man_alloc(void *data, const struct man_cb *cb) +man_alloc(void *data, int pflags, const struct man_cb *cb) { struct man *p; @@ -98,6 +97,8 @@ man_alloc(void *data, const struct man_cb *cb) p->htab = man_hash_alloc(); p->data = data; + p->pflags = pflags; + return(p); } @@ -133,8 +134,8 @@ man_free1(struct man *man) man_node_freelist(man->first); if (man->meta.title) free(man->meta.title); - if (man->meta.os) - free(man->meta.os); + if (man->meta.source) + free(man->meta.source); if (man->meta.vol) free(man->meta.vol); } @@ -178,21 +179,14 @@ man_node_append(struct man *man, struct man_node *p) /* NOTREACHED */ } -#if 0 - if ( ! man_action_pre(man, p)) - return(0); -#endif - man->last = p; switch (p->type) { case (MAN_TEXT): if ( ! man_valid_post(man)) return(0); -#if 0 if ( ! man_action_post(man)) return(0); -#endif break; default: break; @@ -294,8 +288,7 @@ man_pmacro(struct man *m, int ln, char *buf) i++; if (0 == buf[i]) return(1); - warnx("invalid syntax"); - return(0); + return(man_vwarn(m, ln, 0, "invalid syntax")); } if (buf[1] && '\\' == buf[1]) @@ -314,13 +307,25 @@ man_pmacro(struct man *m, int ln, char *buf) mac[i - 1] = 0; if (i == 5 || i <= 1) { - warnx("unknown macro: %s", mac); - goto err; - } + if ( ! (MAN_IGN_MACRO & m->pflags)) { + (void)man_verr(m, ln, 1, + "ill-formed macro: %s", mac); + goto err; + } + if ( ! man_vwarn(m, ln, 1, "ill-formed macro: %s", mac)) + goto err; + return(1); + } if (MAN_MAX == (c = man_hash_find(m->htab, mac))) { - warnx("unknown macro: %s", mac); - goto err; + if ( ! (MAN_IGN_MACRO & m->pflags)) { + (void)man_verr(m, ln, 1, + "unknown macro: %s", mac); + goto err; + } + if ( ! man_vwarn(m, ln, 1, "unknown macro: %s", mac)) + goto err; + return(1); } /* The macro is sane. Jump to the next word. */