=================================================================== RCS file: /cvs/mandoc/Attic/mdoc_strings.c,v retrieving revision 1.17 retrieving revision 1.25 diff -u -p -r1.17 -r1.25 --- mandoc/Attic/mdoc_strings.c 2010/05/08 07:30:19 1.17 +++ mandoc/Attic/mdoc_strings.c 2011/03/17 01:23:29 1.25 @@ -1,6 +1,6 @@ -/* $Id: mdoc_strings.c,v 1.17 2010/05/08 07:30:19 kristaps Exp $ */ +/* $Id: mdoc_strings.c,v 1.25 2011/03/17 01:23:29 kristaps Exp $ */ /* - * Copyright (c) 2008 Kristaps Dzonsons + * Copyright (c) 2008, 2009, 2010 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 @@ -26,100 +26,86 @@ #include #include +#include "mandoc.h" #include "libmdoc.h" -/* FIXME: this file is poorly named. */ - -struct mdoc_secname { - const char *name; /* Name of section. */ - enum mdoc_sec sec; /* Corresponding section. */ +static const char * const secnames[SEC__MAX] = { + NULL, + "NAME", + "LIBRARY", + "SYNOPSIS", + "DESCRIPTION", + "IMPLEMENTATION NOTES", + "RETURN VALUES", + "ENVIRONMENT", + "FILES", + "EXIT STATUS", + "EXAMPLES", + "DIAGNOSTICS", + "COMPATIBILITY", + "ERRORS", + "SEE ALSO", + "STANDARDS", + "HISTORY", + "AUTHORS", + "CAVEATS", + "BUGS", + "SECURITY CONSIDERATIONS", + NULL }; -#define SECNAME_MAX (20) - -static const struct mdoc_secname secnames[SECNAME_MAX] = { - { "NAME", SEC_NAME }, - { "LIBRARY", SEC_LIBRARY }, - { "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 }, - { "EXAMPLES", SEC_EXAMPLES }, - { "DIAGNOSTICS", SEC_DIAGNOSTICS }, - { "COMPATIBILITY", SEC_COMPATIBILITY }, - { "ERRORS", SEC_ERRORS }, - { "SEE ALSO", SEC_SEE_ALSO }, - { "STANDARDS", SEC_STANDARDS }, - { "HISTORY", SEC_HISTORY }, - { "AUTHORS", SEC_AUTHORS }, - { "CAVEATS", SEC_CAVEATS }, - { "BUGS", SEC_BUGS }, - { "SECURITY CONSIDERATIONS", SEC_SECURITY } -}; - - -/* - * FIXME: this is repeated in print_text() (html.c) and term_word() - * (term.c). - */ -int -mdoc_iscdelim(char p) +enum mdelim +mdoc_isdelim(const char *p) { - switch (p) { - case('|'): /* FIXME! */ - /* FALLTHROUGH */ - case('('): - /* FALLTHROUGH */ - case('['): - return(1); - case('.'): - /* FALLTHROUGH */ - case(','): - /* FALLTHROUGH */ - case(';'): - /* FALLTHROUGH */ - case(':'): - /* FALLTHROUGH */ - case('?'): - /* FALLTHROUGH */ - case('!'): - /* FALLTHROUGH */ - case(')'): - /* FALLTHROUGH */ - case(']'): - return(2); - default: - break; - } + if ('\0' == p[0]) + return(DELIM_NONE); - return(0); -} + if ('\0' == p[1]) + switch (p[0]) { + case('('): + /* FALLTHROUGH */ + case('['): + return(DELIM_OPEN); + case('|'): + return(DELIM_MIDDLE); + case('.'): + /* FALLTHROUGH */ + case(','): + /* FALLTHROUGH */ + case(';'): + /* FALLTHROUGH */ + case(':'): + /* FALLTHROUGH */ + case('?'): + /* FALLTHROUGH */ + case('!'): + /* FALLTHROUGH */ + case(')'): + /* FALLTHROUGH */ + case(']'): + return(DELIM_CLOSE); + default: + return(DELIM_NONE); + } - -int -mdoc_isdelim(const char *p) -{ - - if (0 == *p) - return(0); - if (0 != *(p + 1)) - return(0); - return(mdoc_iscdelim(*p)); + /* + * 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(strcmp(p, "\\*(Ba") ? DELIM_NONE : DELIM_MIDDLE); } enum mdoc_sec -mdoc_atosec(const char *p) +mdoc_str2sec(const char *p) { int i; - for (i = 0; i < SECNAME_MAX; i++) - if (0 == strcmp(p, secnames[i].name)) - return(secnames[i].sec); + for (i = 0; i < (int)SEC__MAX; i++) + if (secnames[i] && 0 == strcmp(p, secnames[i])) + return((enum mdoc_sec)i); return(SEC_CUSTOM); }