=================================================================== RCS file: /cvs/mandoc/Attic/mdoc_strings.c,v retrieving revision 1.9 retrieving revision 1.18 diff -u -p -r1.9 -r1.18 --- mandoc/Attic/mdoc_strings.c 2009/07/04 09:01:55 1.9 +++ mandoc/Attic/mdoc_strings.c 2010/05/09 21:06:50 1.18 @@ -1,4 +1,4 @@ -/* $Id: mdoc_strings.c,v 1.9 2009/07/04 09:01:55 kristaps Exp $ */ +/* $Id: mdoc_strings.c,v 1.18 2010/05/09 21:06:50 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -14,12 +14,17 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include #include #include #include #include +#include #include "libmdoc.h" @@ -30,7 +35,7 @@ struct mdoc_secname { enum mdoc_sec sec; /* Corresponding section. */ }; -#define SECNAME_MAX (18) +#define SECNAME_MAX (20) static const struct mdoc_secname secnames[SECNAME_MAX] = { { "NAME", SEC_NAME }, @@ -38,6 +43,7 @@ static const struct mdoc_secname secnames[SECNAME_MAX] { "SYNOPSIS", SEC_SYNOPSIS }, { "DESCRIPTION", SEC_DESCRIPTION }, { "IMPLEMENTATION NOTES", SEC_IMPLEMENTATION }, + { "EXIT STATUS", SEC_EXIT_STATUS }, { "RETURN VALUES", SEC_RETURN_VALUES }, { "ENVIRONMENT", SEC_ENVIRONMENT }, { "FILES", SEC_FILES }, @@ -51,13 +57,14 @@ static const struct mdoc_secname secnames[SECNAME_MAX] { "AUTHORS", SEC_AUTHORS }, { "CAVEATS", SEC_CAVEATS }, { "BUGS", SEC_BUGS }, + { "SECURITY CONSIDERATIONS", SEC_SECURITY } }; -#ifdef __linux__ -extern char *strptime(const char *, const char *, struct tm *); -#endif - +/* + * FIXME: this is repeated in print_text() (html.c) and term_word() + * (term.c). + */ int mdoc_iscdelim(char p) { @@ -65,6 +72,10 @@ mdoc_iscdelim(char p) switch (p) { case('|'): /* FALLTHROUGH */ + case('('): + /* FALLTHROUGH */ + case('['): + return(1); case('.'): /* FALLTHROUGH */ case(','): @@ -77,18 +88,10 @@ mdoc_iscdelim(char p) /* FALLTHROUGH */ case('!'): /* FALLTHROUGH */ - case('('): - /* FALLTHROUGH */ case(')'): /* FALLTHROUGH */ - case('['): - /* FALLTHROUGH */ case(']'): - /* FALLTHROUGH */ - case('{'): - /* FALLTHROUGH */ - case('}'): - return(1); + return(2); default: break; } @@ -101,11 +104,17 @@ int mdoc_isdelim(const char *p) { - if (0 == *p) + if ('\0' == p[0]) return(0); - if (0 != *(p + 1)) - return(0); - return(mdoc_iscdelim(*p)); + if ('\0' == p[1]) + return(mdoc_iscdelim(p[0])); + + /* + * XXX; account for groff bubu where the \*(Ba reserved string + * is treated in exactly the same way as the vertical bar. This + * is the only function that checks for this. + */ + return(0 == strcmp(p, "\\*(Ba")); } @@ -122,31 +131,9 @@ mdoc_atosec(const char *p) } -time_t -mdoc_atotime(const char *p) -{ - struct tm tm; - char *pp; - - bzero(&tm, sizeof(struct tm)); - - if (0 == strcmp(p, "$" "Mdocdate$")) - return(time(NULL)); - if ((pp = strptime(p, "$" "Mdocdate: %b %d %Y $", &tm)) && 0 == *pp) - return(mktime(&tm)); - /* XXX - this matches "June 1999", which is wrong. */ - if ((pp = strptime(p, "%b %d %Y", &tm)) && 0 == *pp) - return(mktime(&tm)); - if ((pp = strptime(p, "%b %d, %Y", &tm)) && 0 == *pp) - return(mktime(&tm)); - - return(0); -} - - /* FIXME: move this into an editable .in file. */ size_t -mdoc_macro2len(int macro) +mdoc_macro2len(enum mdoct macro) { switch (macro) {