diff options
author | 2020-01-19 16:44:50 +0000 | |
---|---|---|
committer | 2020-01-19 16:44:50 +0000 | |
commit | 66e8f935f05d1018898cee9e0c4ad713fc6b8673 (patch) | |
tree | 0e589a7384a81e59e9bb291c205fd9582ad8fd84 /mandoc.c | |
parent | 8e1caa4a243aa8682d2c7d4fb644be63c055bb5d (diff) | |
download | mandoc-66e8f935f05d1018898cee9e0c4ad713fc6b8673.tar.gz mandoc-66e8f935f05d1018898cee9e0c4ad713fc6b8673.tar.zst mandoc-66e8f935f05d1018898cee9e0c4ad713fc6b8673.zip |
Align to the new, sane behaviour of the groff_mdoc(7) .Dd macro:
without an argument, use the empty string, and always concatenate
all arguments, no matter their number.
This allows reducing the number of arguments of mandoc_normdate()
and some other simplifications, at the same time polishing some
error messages by adding the name of the macro in question.
Diffstat (limited to 'mandoc.c')
-rw-r--r-- | mandoc.c | 56 |
1 files changed, 35 insertions, 21 deletions
@@ -1,7 +1,7 @@ -/* $Id: mandoc.c,v 1.116 2019/06/27 15:07:30 schwarze Exp $ */ +/* $Id: mandoc.c,v 1.117 2020/01/19 16:44:50 schwarze Exp $ */ /* * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv> - * Copyright (c) 2011-2015, 2017, 2018 Ingo Schwarze <schwarze@openbsd.org> + * Copyright (c) 2011-2015, 2017-2020 Ingo Schwarze <schwarze@openbsd.org> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -536,45 +536,59 @@ fail: } char * -mandoc_normdate(struct roff_man *man, char *in, int ln, int pos) +mandoc_normdate(struct roff_node *nch, struct roff_node *nbl) { char *cp; time_t t; - if (man->quick) - return mandoc_strdup(in == NULL ? "" : in); + /* No date specified. */ - /* No date specified: use today's date. */ - - if (in == NULL || *in == '\0') - mandoc_msg(MANDOCERR_DATE_MISSING, ln, pos, NULL); - if (in == NULL || *in == '\0' || strcmp(in, "$" "Mdocdate$") == 0) + if (nch == NULL) { + if (nbl == NULL) + mandoc_msg(MANDOCERR_DATE_MISSING, 0, 0, NULL); + else + mandoc_msg(MANDOCERR_DATE_MISSING, nbl->line, + nbl->pos, "%s", roff_name[nbl->tok]); + return mandoc_strdup(""); + } + if (*nch->string == '\0') { + mandoc_msg(MANDOCERR_DATE_MISSING, nch->line, + nch->pos, "%s", roff_name[nbl->tok]); + return mandoc_strdup(""); + } + if (strcmp(nch->string, "$" "Mdocdate$") == 0) return time2a(time(NULL)); /* Valid mdoc(7) date format. */ - if (a2time(&t, "$" "Mdocdate: %b %d %Y $", in) || - a2time(&t, "%b %d, %Y", in)) { + if (a2time(&t, "$" "Mdocdate: %b %d %Y $", nch->string) || + a2time(&t, "%b %d, %Y", nch->string)) { cp = time2a(t); if (t > time(NULL) + 86400) - mandoc_msg(MANDOCERR_DATE_FUTURE, ln, pos, "%s", cp); - else if (*in != '$' && strcmp(in, cp) != 0) - mandoc_msg(MANDOCERR_DATE_NORM, ln, pos, "%s", cp); + mandoc_msg(MANDOCERR_DATE_FUTURE, nch->line, + nch->pos, "%s %s", roff_name[nbl->tok], cp); + else if (*nch->string != '$' && + strcmp(nch->string, cp) != 0) + mandoc_msg(MANDOCERR_DATE_NORM, nch->line, + nch->pos, "%s %s", roff_name[nbl->tok], cp); return cp; } /* In man(7), do not warn about the legacy format. */ - if (a2time(&t, "%Y-%m-%d", in) == 0) - mandoc_msg(MANDOCERR_DATE_BAD, ln, pos, "%s", in); + if (a2time(&t, "%Y-%m-%d", nch->string) == 0) + mandoc_msg(MANDOCERR_DATE_BAD, nch->line, nch->pos, + "%s %s", roff_name[nbl->tok], nch->string); else if (t > time(NULL) + 86400) - mandoc_msg(MANDOCERR_DATE_FUTURE, ln, pos, "%s", in); - else if (man->meta.macroset == MACROSET_MDOC) - mandoc_msg(MANDOCERR_DATE_LEGACY, ln, pos, "Dd %s", in); + mandoc_msg(MANDOCERR_DATE_FUTURE, nch->line, nch->pos, + "%s %s", roff_name[nbl->tok], nch->string); + else if (nbl->tok == MDOC_Dd) + mandoc_msg(MANDOCERR_DATE_LEGACY, nch->line, nch->pos, + "Dd %s", nch->string); /* Use any non-mdoc(7) date verbatim. */ - return mandoc_strdup(in); + return mandoc_strdup(nch->string); } int |