From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from krisdoz.my.domain (schwarze@localhost [127.0.0.1]) by krisdoz.my.domain (8.14.3/8.14.3) with ESMTP id p271Zqhe028122 for ; Sun, 6 Mar 2011 20:35:52 -0500 (EST) Received: (from schwarze@localhost) by krisdoz.my.domain (8.14.3/8.14.3/Submit) id p271ZpID029414; Sun, 6 Mar 2011 20:35:51 -0500 (EST) Date: Sun, 6 Mar 2011 20:35:51 -0500 (EST) Message-Id: <201103070135.p271ZpID029414@krisdoz.my.domain> X-Mailinglist: mdocml-source Reply-To: source@mdocml.bsd.lv MIME-Version: 1.0 From: schwarze@mdocml.bsd.lv To: source@mdocml.bsd.lv Subject: mdocml: Clean up date handling, as a first step to get rid of the X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Log Message: ----------- Clean up date handling, as a first step to get rid of the frequent petty warnings in this area: - always store dates as strings, not as seconds since the Epoch - for input, try the three most common formats everywhere - for unrecognized format, just pass the date though verbatim - when there is no date at all, still use the current date Originally triggered by a one-line patch from Tim van der Molen, , which is included here. Feedback and OK on manual parts from jmc@. "please check this in" kristaps@ Modified Files: -------------- mdocml: libmandoc.h main.c man.7 man.c man.h man_html.c man_term.c man_validate.c mandoc.c mandoc.h mdoc.7 mdoc.c mdoc.h mdoc_html.c mdoc_term.c mdoc_validate.c out.h Revision Data ------------- Index: man.7 =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/man.7,v retrieving revision 1.98 retrieving revision 1.99 diff -Lman.7 -Lman.7 -u -p -r1.98 -r1.99 --- man.7 +++ man.7 @@ -118,15 +118,6 @@ rendered as an empty line. .Pp In macro lines, whitespace delimits arguments and is discarded. If arguments are quoted, whitespace within the quotes is retained. -.Ss Dates -The -.Sx \&TH -macro is the only -.Nm -macro that requires a date. -The form for this date is the ISO-8601 -standard -.Cm YYYY-MM-DD . .Ss Scaling Widths Many macros support scaled widths for their arguments, such as stipulating a two-inch paragraph indentation with the following: @@ -763,26 +754,27 @@ The paragraph left-margin width is reset Sets the title of the manual page with the following syntax: .Bd -filled -offset indent .Pf \. Sx \&TH -.Cm title section -.Op Cm date Op Cm source Op Cm volume +.Ar title section date +.Op Ar source Op Ar volume .Ed .Pp -At least the upper-case document -.Cm title -and the manual -.Cm section -arguments must be provided. -The -.Cm date -argument should be formatted as described in -.Sx Dates , -but will be printed verbatim if it is not. -If the date is not specified, the current date is used. -The -.Cm source +Conventionally, the document +.Ar title +is given in all caps. +The recommended +.Ar date +format is +.Sy YYYY-MM-DD +as specified in the ISO-8601 standard; +if the argument does not conform, it is printed verbatim. +If the +.Ar date +is empty or not specified, the current date is used. +The optional +.Ar source string specifies the organisation providing the utility. The -.Cm volume +.Ar volume string replaces the default rendered volume, which is dictated by the manual section. .Pp Index: mandoc.h =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mandoc.h,v retrieving revision 1.57 retrieving revision 1.58 diff -Lmandoc.h -Lmandoc.h -u -p -r1.57 -r1.58 --- mandoc.h +++ mandoc.h @@ -50,7 +50,8 @@ enum mandocerr { MANDOCERR_NOTITLE, /* no title in document */ MANDOCERR_UPPERCASE, /* document title should be all caps */ MANDOCERR_BADMSEC, /* unknown manual section */ - MANDOCERR_BADDATE, /* cannot parse date argument */ + MANDOCERR_NODATE, /* date missing, using today's date */ + MANDOCERR_BADDATE, /* cannot parse date, using it verbatim */ MANDOCERR_PROLOGOOO, /* prologue macros out of order */ MANDOCERR_PROLOGREP, /* duplicate prologue macro */ MANDOCERR_BADPROLOG, /* macro not allowed in prologue */ Index: main.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/main.c,v retrieving revision 1.146 retrieving revision 1.147 diff -Lmain.c -Lmain.c -u -p -r1.146 -r1.147 --- main.c +++ main.c @@ -128,7 +128,8 @@ static const char * const mandocerrs[MAN "no title in document", "document title should be all caps", "unknown manual section", - "cannot parse date argument", + "date missing, using today's date", + "cannot parse date, using it verbatim", "prologue macros out of order", "duplicate prologue macro", "macro not allowed in prologue", Index: mdoc_validate.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_validate.c,v retrieving revision 1.157 retrieving revision 1.158 diff -Lmdoc_validate.c -Lmdoc_validate.c -u -p -r1.157 -r1.158 --- mdoc_validate.c +++ mdoc_validate.c @@ -140,7 +140,7 @@ static v_post posts_bx[] = { post_bx, N static v_post posts_bool[] = { ebool, NULL }; static v_post posts_eoln[] = { post_eoln, NULL }; static v_post posts_defaults[] = { post_defaults, NULL }; -static v_post posts_dd[] = { ewarn_ge1, post_dd, post_prol, NULL }; +static v_post posts_dd[] = { post_dd, post_prol, NULL }; static v_post posts_dl[] = { post_literal, bwarn_ge1, NULL }; static v_post posts_dt[] = { post_dt, post_prol, NULL }; static v_post posts_fo[] = { hwarn_eq1, bwarn_ge1, NULL }; @@ -221,7 +221,7 @@ const struct valids mdoc_valids[MDOC_MAX { NULL, posts_text }, /* Xr */ { NULL, posts_text }, /* %A */ { NULL, posts_text }, /* %B */ /* FIXME: can be used outside Rs/Re. */ - { NULL, posts_text }, /* %D */ /* FIXME: check date with mandoc_a2time(). */ + { NULL, posts_text }, /* %D */ { NULL, posts_text }, /* %I */ { NULL, posts_text }, /* %J */ { NULL, posts_text }, /* %N */ @@ -919,7 +919,7 @@ static int pre_dt(PRE_ARGS) { - if (0 == mdoc->meta.date || mdoc->meta.os) + if (NULL == mdoc->meta.date || mdoc->meta.os) mdoc_nmsg(mdoc, n, MANDOCERR_PROLOGOOO); if (mdoc->meta.title) @@ -932,7 +932,7 @@ static int pre_os(PRE_ARGS) { - if (NULL == mdoc->meta.title || 0 == mdoc->meta.date) + if (NULL == mdoc->meta.title || NULL == mdoc->meta.date) mdoc_nmsg(mdoc, n, MANDOCERR_PROLOGOOO); if (mdoc->meta.os) @@ -1971,23 +1971,21 @@ post_dd(POST_ARGS) char buf[DATESIZE]; struct mdoc_node *n; - n = mdoc->last; + if (mdoc->meta.date) + free(mdoc->meta.date); - if (NULL == n->child) { - mdoc->meta.date = time(NULL); + n = mdoc->last; + if (NULL == n->child || '\0' == n->child->string[0]) { + mdoc->meta.date = mandoc_normdate(NULL, + mdoc->msg, mdoc->data, n->line, n->pos); return(1); } if ( ! concat(mdoc, buf, n->child, DATESIZE)) return(0); - mdoc->meta.date = mandoc_a2time - (MTIME_MDOCDATE | MTIME_CANONICAL, buf); - - if (0 == mdoc->meta.date) { - mdoc_nmsg(mdoc, n, MANDOCERR_BADDATE); - mdoc->meta.date = time(NULL); - } + mdoc->meta.date = mandoc_normdate(buf, + mdoc->msg, mdoc->data, n->line, n->pos); return(1); } Index: man.h =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/man.h,v retrieving revision 1.53 retrieving revision 1.54 diff -Lman.h -Lman.h -u -p -r1.53 -r1.54 --- man.h +++ man.h @@ -1,6 +1,6 @@ /* $Id$ */ /* - * Copyright (c) 2009, 2010 Kristaps Dzonsons + * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -76,8 +76,7 @@ enum man_type { */ struct man_meta { char *msec; /* `TH' section (1, 3p, etc.) */ - time_t date; /* `TH' normalised date */ - char *rawdate; /* raw `TH' date */ + char *date; /* `TH' normalised date */ char *vol; /* `TH' volume */ char *title; /* `TH' title (e.g., FOO) */ char *source; /* `TH' source (e.g., GNU) */ Index: mdoc.h =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc.h,v retrieving revision 1.117 retrieving revision 1.118 diff -Lmdoc.h -Lmdoc.h -u -p -r1.117 -r1.118 --- mdoc.h +++ mdoc.h @@ -1,6 +1,6 @@ /* $Id$ */ /* - * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons + * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -232,7 +232,7 @@ struct mdoc_meta { char *msec; /* `Dt' section (1, 3p, etc.) */ char *vol; /* `Dt' volume (implied) */ char *arch; /* `Dt' arch (i386, etc.) */ - time_t date; /* `Dd' normalised date */ + char *date; /* `Dd' normalised date */ char *title; /* `Dt' title (FOO, etc.) */ char *os; /* `Os' system (OpenBSD, etc.) */ char *name; /* leading `Nm' name */ Index: man_validate.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/man_validate.c,v retrieving revision 1.62 retrieving revision 1.63 diff -Lman_validate.c -Lman_validate.c -u -p -r1.62 -r1.63 --- man_validate.c +++ man_validate.c @@ -1,6 +1,7 @@ /* $Id$ */ /* - * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons + * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons + * Copyright (c) 2010 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -194,8 +195,9 @@ check_root(CHKARGS) */ m->meta.title = mandoc_strdup("unknown"); - m->meta.date = time(NULL); m->meta.msec = mandoc_strdup("1"); + m->meta.date = mandoc_normdate(NULL, + m->msg, m->data, n->line, n->pos); } return(1); @@ -298,7 +300,7 @@ check_ft(CHKARGS) } if (0 == ok) { - man_vmsg(m, MANDOCERR_BADFONT, + man_vmsg(m, MANDOCERR_BADFONT, n->line, n->pos, "%s", cp); *cp = '\0'; } @@ -377,6 +379,7 @@ static int post_TH(CHKARGS) { const char *p; + int line, pos; if (m->meta.title) free(m->meta.title); @@ -386,12 +389,13 @@ post_TH(CHKARGS) free(m->meta.source); if (m->meta.msec) free(m->meta.msec); - if (m->meta.rawdate) - free(m->meta.rawdate); + if (m->meta.date) + free(m->meta.date); - m->meta.title = m->meta.vol = m->meta.rawdate = + line = n->line; + pos = n->pos; + m->meta.title = m->meta.vol = m->meta.date = m->meta.msec = m->meta.source = NULL; - m->meta.date = 0; /* ->TITLE<- MSEC DATE SOURCE VOL */ @@ -419,24 +423,12 @@ post_TH(CHKARGS) /* TITLE MSEC ->DATE<- SOURCE VOL */ - /* - * Try to parse the date. If this works, stash the epoch (this - * is optimal because we can reformat it in the canonical form). - * If it doesn't parse, isn't specified at all, or is an empty - * string, then use the current date. - */ - if (n) n = n->next; - if (n && n->string && *n->string) { - m->meta.date = mandoc_a2time - (MTIME_ISO_8601, n->string); - if (0 == m->meta.date) { - man_nmsg(m, n, MANDOCERR_BADDATE); - m->meta.rawdate = mandoc_strdup(n->string); - } - } else - m->meta.date = time(NULL); + if (n) + pos = n->pos; + m->meta.date = mandoc_normdate(n ? n->string : NULL, + m->msg, m->data, line, pos); /* TITLE MSEC DATE ->SOURCE<- VOL */ Index: mandoc.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mandoc.c,v retrieving revision 1.36 retrieving revision 1.37 diff -Lmandoc.c -Lmandoc.c -u -p -r1.36 -r1.37 --- mandoc.c +++ mandoc.c @@ -31,8 +31,10 @@ #include "mandoc.h" #include "libmandoc.h" -static int a2time(time_t *, const char *, const char *); +#define DATESIZE 32 +static int a2time(time_t *, const char *, const char *); +static char *time2a(time_t); int mandoc_special(char *p) @@ -380,38 +382,55 @@ a2time(time_t *t, const char *fmt, const } -/* - * Convert from a manual date string (see mdoc(7) and man(7)) into a - * date according to the stipulated date type. - */ -time_t -mandoc_a2time(int flags, const char *p) +static char * +time2a(time_t t) +{ + struct tm tm; + char buf[DATESIZE]; + char *p; + size_t nsz, rsz; + int isz; + + localtime_r(&t, &tm); + + p = buf; + rsz = DATESIZE; + + if (0 == (nsz = strftime(p, rsz, "%B ", &tm))) + return(NULL); + + p += (int)nsz; + rsz -= nsz; + + if (-1 == (isz = snprintf(p, rsz, "%d, ", tm.tm_mday))) + return(NULL); + + p += isz; + rsz -= isz; + + return(strftime(p, rsz, "%Y", &tm) ? buf : NULL); +} + + +char * +mandoc_normdate(char *in, mandocmsg msg, void *data, int ln, int pos) { + char *out; time_t t; - if (MTIME_MDOCDATE & flags) { - if (0 == strcmp(p, "$" "Mdocdate$")) - return(time(NULL)); - if (a2time(&t, "$" "Mdocdate: %b %d %Y $", p)) - return(t); - } - - if (MTIME_CANONICAL & flags || MTIME_REDUCED & flags) - if (a2time(&t, "%b %d, %Y", p)) - return(t); - - if (MTIME_ISO_8601 & flags) - if (a2time(&t, "%Y-%m-%d", p)) - return(t); - - if (MTIME_REDUCED & flags) { - if (a2time(&t, "%d, %Y", p)) - return(t); - if (a2time(&t, "%Y", p)) - return(t); + if (NULL == in || '\0' == *in || + 0 == strcmp(in, "$" "Mdocdate$")) { + (*msg)(MANDOCERR_NODATE, data, ln, pos, NULL); + time(&t); + } + else if (!a2time(&t, "$" "Mdocdate: %b %d %Y $", in) && + !a2time(&t, "%b %d, %Y", in) && + !a2time(&t, "%Y-%m-%d", in)) { + (*msg)(MANDOCERR_BADDATE, data, ln, pos, NULL); + t = 0; } - - return(0); + out = t ? time2a(t) : NULL; + return(mandoc_strdup(out ? out : in)); } Index: man_html.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/man_html.c,v retrieving revision 1.69 retrieving revision 1.70 diff -Lman_html.c -Lman_html.c -u -p -r1.69 -r1.70 --- man_html.c +++ man_html.c @@ -1,6 +1,6 @@ /* $Id$ */ /* - * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons + * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -352,12 +352,6 @@ man_root_post(MAN_ARGS) { struct htmlpair tag[3]; struct tag *t, *tt; - char b[DATESIZ]; - - if (m->rawdate) - strlcpy(b, m->rawdate, DATESIZ); - else - time2a(m->date, b, DATESIZ); PAIR_SUMMARY_INIT(&tag[0], "Document Footer"); PAIR_CLASS_INIT(&tag[1], "foot"); @@ -375,7 +369,7 @@ man_root_post(MAN_ARGS) PAIR_CLASS_INIT(&tag[0], "foot-date"); print_otag(h, TAG_TD, 1, tag); - print_text(h, b); + print_text(h, m->date); print_stagq(h, tt); PAIR_CLASS_INIT(&tag[0], "foot-os"); Index: out.h =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/out.h,v retrieving revision 1.16 retrieving revision 1.17 diff -Lout.h -Lout.h -u -p -r1.16 -r1.17 --- out.h +++ out.h @@ -17,8 +17,6 @@ #ifndef OUT_H #define OUT_H -#define DATESIZ 24 - __BEGIN_DECLS struct roffcol { Index: mdoc_html.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_html.c,v retrieving revision 1.153 retrieving revision 1.154 diff -Lmdoc_html.c -Lmdoc_html.c -u -p -r1.153 -r1.154 --- mdoc_html.c +++ mdoc_html.c @@ -500,9 +500,6 @@ mdoc_root_post(MDOC_ARGS) { struct htmlpair tag[3]; struct tag *t, *tt; - char b[DATESIZ]; - - time2a(m->date, b, DATESIZ); PAIR_SUMMARY_INIT(&tag[0], "Document Footer"); PAIR_CLASS_INIT(&tag[1], "foot"); @@ -522,7 +519,7 @@ mdoc_root_post(MDOC_ARGS) PAIR_CLASS_INIT(&tag[0], "foot-date"); print_otag(h, TAG_TD, 1, tag); - print_text(h, b); + print_text(h, m->date); print_stagq(h, tt); PAIR_CLASS_INIT(&tag[0], "foot-os"); Index: man.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/man.c,v retrieving revision 1.101 retrieving revision 1.102 diff -Lman.c -Lman.c -u -p -r1.101 -r1.102 --- man.c +++ man.c @@ -1,6 +1,6 @@ /* $Id$ */ /* - * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons + * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -146,8 +146,8 @@ man_free1(struct man *man) free(man->meta.title); if (man->meta.source) free(man->meta.source); - if (man->meta.rawdate) - free(man->meta.rawdate); + if (man->meta.date) + free(man->meta.date); if (man->meta.vol) free(man->meta.vol); if (man->meta.msec) Index: mdoc.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc.c,v retrieving revision 1.181 retrieving revision 1.182 diff -Lmdoc.c -Lmdoc.c -u -p -r1.181 -r1.182 --- mdoc.c +++ mdoc.c @@ -1,6 +1,6 @@ /* $Id$ */ /* - * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons + * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2010 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any @@ -342,8 +342,9 @@ mdoc_macro(MACRO_PROT_ARGS) m->meta.vol = mandoc_strdup("LOCAL"); if (NULL == m->meta.os) m->meta.os = mandoc_strdup("LOCAL"); - if (0 == m->meta.date) - m->meta.date = time(NULL); + if (NULL == m->meta.date) + m->meta.date = mandoc_normdate(NULL, + m->msg, m->data, line, ppos); m->flags |= MDOC_PBODY; } Index: mdoc.7 =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc.7,v retrieving revision 1.180 retrieving revision 1.181 diff -Lmdoc.7 -Lmdoc.7 -u -p -r1.180 -r1.181 --- mdoc.7 +++ mdoc.7 @@ -197,34 +197,6 @@ Thus, the following produces .Ed .Pp In free-form mode, quotes are regarded as opaque text. -.Ss Dates -There are several macros in -.Nm -that require a date argument. -The canonical form for dates is the American format: -.Pp -.D1 Cm Month Day , Year -.Pp -The -.Cm Day -value is an optionally zero-padded numeral. -The -.Cm Month -value is the full month name. -The -.Cm Year -value is the full four-digit year. -.Pp -Reduced form dates are broken-down canonical form dates: -.Pp -.D1 Cm Month , Year -.D1 Cm Year -.Pp -Some examples of valid dates follow: -.Pp -.D1 "May, 2009" Pq reduced form -.D1 "2009" Pq reduced form -.D1 "May 20, 2009" Pq canonical form .Ss Scaling Widths Many macros support scaled widths for their arguments, such as stipulating a two-inch list indentation with the following: @@ -886,8 +858,10 @@ block. Publication date of an .Sx \&Rs block. -This should follow the reduced or canonical form syntax described in -.Sx Dates . +Recommended formats of arguments are +.Ar month day , year +or just +.Ar year . .Ss \&%I Publisher or issuer name of an .Sx \&Rs @@ -1469,17 +1443,36 @@ This is the mandatory first macro of any manual. Its syntax is as follows: .Pp -.D1 Pf \. Sx \&Dd Op Ar date +.D1 Pf \. Sx \&Dd Ar month day , year .Pp The -.Ar date -may be either -.Ar $\&Mdocdate$ , -which signifies the current manual revision date dictated by +.Ar month +is the full English month name, the +.Ar day +is an optionally zero-padded numeral, and the +.Ar year +is the full four-digit year. +.Pp +Other arguments are not portable; the +.Xr mandoc 1 +utility handles them as follows: +.Bl -dash -offset 3n -compact +.It +To have the date automatically filled in by the +.Ox +version of .Xr cvs 1 , -or instead a valid canonical date as specified by -.Sx Dates . -If a date does not conform or is empty, the current date is used. +the special string +.Dq $\&Mdocdate$ +can be given as an argument. +.It +A few alternative date formats are accepted as well +and converted to the standard form. +.It +If a date string cannot be parsed, it is used verbatim. +.It +If no date string is given, the current date is used. +.El .Pp Examples: .Dl \&.Dd $\&Mdocdate$ @@ -2771,9 +2764,12 @@ does not start a new line. \*[hist] .It .Sx \&Dd -without an argument prints -.Dq Epoch . -In mandoc, it resolves to the current date. +with non-standard arguments behaves very strangely. +When there are three arguments, they are printed verbatim. +Any other number of arguments is replaced by the current date, +but without any arguments the string +.Dq Epoch +is printed. .It .Sx \&Fl does not print a dash for an empty argument. Index: man_term.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/man_term.c,v retrieving revision 1.103 retrieving revision 1.104 diff -Lman_term.c -Lman_term.c -u -p -r1.103 -r1.104 --- man_term.c +++ man_term.c @@ -946,24 +946,18 @@ print_man_nodelist(DECL_ARGS) static void print_man_foot(struct termp *p, const void *arg) { - char buf[DATESIZ]; const struct man_meta *meta; meta = (const struct man_meta *)arg; term_fontrepl(p, TERMFONT_NONE); - if (meta->rawdate) - strlcpy(buf, meta->rawdate, DATESIZ); - else - time2a(meta->date, buf, DATESIZ); - term_vspace(p); term_vspace(p); term_vspace(p); p->flags |= TERMP_NOSPACE | TERMP_NOBREAK; - p->rmargin = p->maxrmargin - term_strlen(p, buf); + p->rmargin = p->maxrmargin - term_strlen(p, meta->date); p->offset = 0; /* term_strlen() can return zero. */ @@ -981,7 +975,7 @@ print_man_foot(struct termp *p, const vo p->rmargin = p->maxrmargin; p->flags &= ~TERMP_NOBREAK; - term_word(p, buf); + term_word(p, meta->date); term_flushln(p); } Index: mdoc_term.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_term.c,v retrieving revision 1.219 retrieving revision 1.220 diff -Lmdoc_term.c -Lmdoc_term.c -u -p -r1.219 -r1.220 --- mdoc_term.c +++ mdoc_term.c @@ -413,7 +413,6 @@ print_mdoc_node(DECL_ARGS) static void print_mdoc_foot(struct termp *p, const void *arg) { - char buf[DATESIZ], os[BUFSIZ]; const struct mdoc_meta *m; m = (const struct mdoc_meta *)arg; @@ -428,24 +427,21 @@ print_mdoc_foot(struct termp *p, const v * SYSTEM DATE SYSTEM */ - time2a(m->date, buf, DATESIZ); - strlcpy(os, m->os, BUFSIZ); - term_vspace(p); p->offset = 0; p->rmargin = (p->maxrmargin - - term_strlen(p, buf) + term_len(p, 1)) / 2; + term_strlen(p, m->date) + term_len(p, 1)) / 2; p->flags |= TERMP_NOSPACE | TERMP_NOBREAK; - term_word(p, os); + term_word(p, m->os); term_flushln(p); p->offset = p->rmargin; - p->rmargin = p->maxrmargin - term_strlen(p, os); + p->rmargin = p->maxrmargin - term_strlen(p, m->os); p->flags |= TERMP_NOLPAD | TERMP_NOSPACE; - term_word(p, buf); + term_word(p, m->date); term_flushln(p); p->offset = p->rmargin; @@ -453,7 +449,7 @@ print_mdoc_foot(struct termp *p, const v p->flags &= ~TERMP_NOBREAK; p->flags |= TERMP_NOLPAD | TERMP_NOSPACE; - term_word(p, os); + term_word(p, m->os); term_flushln(p); p->offset = 0; Index: libmandoc.h =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/libmandoc.h,v retrieving revision 1.10 retrieving revision 1.11 diff -Llibmandoc.h -Llibmandoc.h -u -p -r1.10 -r1.11 --- libmandoc.h +++ libmandoc.h @@ -25,11 +25,7 @@ char *mandoc_strdup(const char *); void *mandoc_malloc(size_t); void *mandoc_realloc(void *, size_t); char *mandoc_getarg(char **, mandocmsg, void *, int, int *); -time_t mandoc_a2time(int, const char *); -#define MTIME_CANONICAL (1 << 0) -#define MTIME_REDUCED (1 << 1) -#define MTIME_MDOCDATE (1 << 2) -#define MTIME_ISO_8601 (1 << 3) +char *mandoc_normdate(char *, mandocmsg, void *, int, int); int mandoc_eos(const char *, size_t, int); int mandoc_hyph(const char *, const char *); -- To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv