=================================================================== RCS file: /cvs/mandoc/mdoc.c,v retrieving revision 1.58 retrieving revision 1.63 diff -u -p -r1.58 -r1.63 --- mandoc/mdoc.c 2009/03/09 13:04:01 1.58 +++ mandoc/mdoc.c 2009/03/12 15:55:11 1.63 @@ -1,4 +1,4 @@ -/* $Id: mdoc.c,v 1.58 2009/03/09 13:04:01 kristaps Exp $ */ +/* $Id: mdoc.c,v 1.63 2009/03/12 15:55:11 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -72,7 +72,8 @@ const char *const __mdoc_macronames[MDOC_MAX] = { "Fo", "Fc", "Oo", "Oc", "Bk", "Ek", "Bt", "Hf", "Fr", "Ud", "Lb", "Ap", - "Lp" + "Lp", "Lk", "Mt", "Brq", + "Bro", "Brc" }; const char *const __mdoc_argnames[MDOC_ARG_MAX] = { @@ -501,10 +502,10 @@ macrowarn(struct mdoc *m, int ln, const char *buf) { if ( ! (MDOC_IGN_MACRO & m->pflags)) return(mdoc_perr(m, ln, 1, "unknown macro: %s%s", - buf, buf[3] ? "..." : "")); + buf, strlen(buf) > 3 ? "..." : "")); return(mdoc_pwarn(m, ln, 1, WARN_SYNTAX, "unknown macro: %s%s", - buf, buf[3] ? "..." : "")); + buf, strlen(buf) > 3 ? "..." : "")); } @@ -519,8 +520,20 @@ parsemacro(struct mdoc *m, int ln, char *buf) int i, c; char mac[5]; - /* Comments are quickly ignored. */ + /* Comments and empties are quickly ignored. */ + if (0 == buf[1]) + return(1); + + if (isspace((unsigned char)buf[1])) { + i = 2; + while (buf[i] && isspace((unsigned char)buf[i])) + i++; + if (0 == buf[i]) + return(1); + return(mdoc_perr(m, ln, 1, "invalid syntax")); + } + if (buf[1] && '\\' == buf[1]) if (buf[2] && '\"' == buf[2]) return(1); @@ -533,8 +546,6 @@ parsemacro(struct mdoc *m, int ln, char *buf) else if (isspace((unsigned char)buf[i])) break; } - - /* FIXME: be able to skip unknown macro lines! */ mac[i - 1] = 0;