version 1.3, 2008/12/28 00:34:20 |
version 1.10, 2009/01/20 13:49:36 |
|
|
#include <stdlib.h> |
#include <stdlib.h> |
#include <stdio.h> |
#include <stdio.h> |
#include <string.h> |
#include <string.h> |
|
#ifndef __OpenBSD__ |
|
#include <time.h> |
|
#endif |
|
|
#include "private.h" |
#include "private.h" |
|
|
|
#ifdef __linux__ |
|
extern char *strptime(const char *, const char *, struct tm *); |
|
#endif |
|
|
int |
int |
mdoc_iscdelim(char p) |
mdoc_iscdelim(char p) |
{ |
{ |
|
|
switch (p) { |
switch (p) { |
case('{'): |
|
/* FALLTHROUGH */ |
|
case('.'): |
case('.'): |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case(','): |
case(','): |
Line 51 mdoc_iscdelim(char p) |
|
Line 56 mdoc_iscdelim(char p) |
|
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case(']'): |
case(']'): |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
|
case('{'): |
|
/* FALLTHROUGH */ |
case('}'): |
case('}'): |
return(1); |
return(1); |
default: |
default: |
Line 74 mdoc_isdelim(const char *p) |
|
Line 81 mdoc_isdelim(const char *p) |
|
|
|
|
|
enum mdoc_sec |
enum mdoc_sec |
mdoc_atosec(size_t sz, const char **p) |
mdoc_atosec(const char *p) |
{ |
{ |
|
|
assert(sz > 0); |
assert(p); |
if (sz > 2) |
if (0 == strcmp(p, "NAME")) |
return(SEC_CUSTOM); |
|
if (sz == 2) { |
|
if (0 == strcmp(*p, "RETURN") && |
|
0 == strcmp(*(p + 1), "VALUES")) |
|
return(SEC_RETURN_VALUES); |
|
if (0 == strcmp(*p, "SEE") && |
|
0 == strcmp(*(p + 1), "ALSO")) |
|
return(SEC_SEE_ALSO); |
|
return(SEC_CUSTOM); |
|
} |
|
|
|
if (0 == strcmp(*p, "NAME")) |
|
return(SEC_NAME); |
return(SEC_NAME); |
else if (0 == strcmp(*p, "SYNOPSIS")) |
else if (0 == strcmp(p, "RETURN VALUES")) |
|
return(SEC_RETURN_VALUES); |
|
else if (0 == strcmp(p, "SEE ALSO")) |
|
return(SEC_SEE_ALSO); |
|
else if (0 == strcmp(p, "SYNOPSIS")) |
return(SEC_SYNOPSIS); |
return(SEC_SYNOPSIS); |
else if (0 == strcmp(*p, "DESCRIPTION")) |
else if (0 == strcmp(p, "DESCRIPTION")) |
return(SEC_DESCRIPTION); |
return(SEC_DESCRIPTION); |
else if (0 == strcmp(*p, "ENVIRONMENT")) |
else if (0 == strcmp(p, "ENVIRONMENT")) |
return(SEC_ENVIRONMENT); |
return(SEC_ENVIRONMENT); |
else if (0 == strcmp(*p, "FILES")) |
else if (0 == strcmp(p, "FILES")) |
return(SEC_FILES); |
return(SEC_FILES); |
else if (0 == strcmp(*p, "EXAMPLES")) |
else if (0 == strcmp(p, "EXAMPLES")) |
return(SEC_EXAMPLES); |
return(SEC_EXAMPLES); |
else if (0 == strcmp(*p, "DIAGNOSTICS")) |
else if (0 == strcmp(p, "DIAGNOSTICS")) |
return(SEC_DIAGNOSTICS); |
return(SEC_DIAGNOSTICS); |
else if (0 == strcmp(*p, "ERRORS")) |
else if (0 == strcmp(p, "ERRORS")) |
return(SEC_ERRORS); |
return(SEC_ERRORS); |
else if (0 == strcmp(*p, "STANDARDS")) |
else if (0 == strcmp(p, "STANDARDS")) |
return(SEC_STANDARDS); |
return(SEC_STANDARDS); |
else if (0 == strcmp(*p, "HISTORY")) |
else if (0 == strcmp(p, "HISTORY")) |
return(SEC_HISTORY); |
return(SEC_HISTORY); |
else if (0 == strcmp(*p, "AUTHORS")) |
else if (0 == strcmp(p, "AUTHORS")) |
return(SEC_AUTHORS); |
return(SEC_AUTHORS); |
else if (0 == strcmp(*p, "CAVEATS")) |
else if (0 == strcmp(p, "CAVEATS")) |
return(SEC_CAVEATS); |
return(SEC_CAVEATS); |
else if (0 == strcmp(*p, "BUGS")) |
else if (0 == strcmp(p, "BUGS")) |
return(SEC_BUGS); |
return(SEC_BUGS); |
|
|
return(SEC_CUSTOM); |
return(SEC_CUSTOM); |
Line 126 mdoc_atotime(const char *p) |
|
Line 125 mdoc_atotime(const char *p) |
|
{ |
{ |
struct tm tm; |
struct tm tm; |
|
|
if (strptime(p, "%b %d %Y", &tm)) |
(void)memset(&tm, 0, sizeof(struct tm)); |
|
|
|
if (0 == strptime(p, "%b %d %Y", &tm)) |
return(mktime(&tm)); |
return(mktime(&tm)); |
if (strptime(p, "%b %d, %Y", &tm)) |
if (0 == strptime(p, "%b %d, %Y", &tm)) |
return(mktime(&tm)); |
return(mktime(&tm)); |
|
|
return(0); |
return(0); |
Line 219 mdoc_atoarch(const char *p) |
|
Line 220 mdoc_atoarch(const char *p) |
|
return(ARCH_amiga); |
return(ARCH_amiga); |
else if (0 == strcmp(p, "arc")) |
else if (0 == strcmp(p, "arc")) |
return(ARCH_arc); |
return(ARCH_arc); |
|
else if (0 == strcmp(p, "arm")) |
|
return(ARCH_arm); |
else if (0 == strcmp(p, "armish")) |
else if (0 == strcmp(p, "armish")) |
return(ARCH_armish); |
return(ARCH_armish); |
else if (0 == strcmp(p, "aviion")) |
else if (0 == strcmp(p, "aviion")) |
Line 263 mdoc_atoarch(const char *p) |
|
Line 266 mdoc_atoarch(const char *p) |
|
return(ARCH_zaurus); |
return(ARCH_zaurus); |
|
|
return(ARCH_DEFAULT); |
return(ARCH_DEFAULT); |
|
} |
|
|
|
|
|
enum mdoc_att |
|
mdoc_atoatt(const char *p) |
|
{ |
|
|
|
assert(p); |
|
if (0 == strcmp(p, "v1")) |
|
return(ATT_v1); |
|
else if (0 == strcmp(p, "v2")) |
|
return(ATT_v2); |
|
else if (0 == strcmp(p, "v3")) |
|
return(ATT_v3); |
|
else if (0 == strcmp(p, "v4")) |
|
return(ATT_v4); |
|
else if (0 == strcmp(p, "v5")) |
|
return(ATT_v5); |
|
else if (0 == strcmp(p, "v6")) |
|
return(ATT_v6); |
|
else if (0 == strcmp(p, "v7")) |
|
return(ATT_v7); |
|
else if (0 == strcmp(p, "32v")) |
|
return(ATT_32v); |
|
else if (0 == strcmp(p, "V.1")) |
|
return(ATT_V1); |
|
else if (0 == strcmp(p, "V.2")) |
|
return(ATT_V2); |
|
else if (0 == strcmp(p, "V.3")) |
|
return(ATT_V3); |
|
else if (0 == strcmp(p, "V.4")) |
|
return(ATT_V4); |
|
|
|
return(ATT_DEFAULT); |
|
} |
|
|
|
|
|
char * |
|
mdoc_type2a(enum mdoc_type type) |
|
{ |
|
switch (type) { |
|
case (MDOC_ROOT): |
|
return("root"); |
|
case (MDOC_BLOCK): |
|
return("block"); |
|
case (MDOC_HEAD): |
|
return("block-head"); |
|
case (MDOC_BODY): |
|
return("block-body"); |
|
case (MDOC_TAIL): |
|
return("block-tail"); |
|
case (MDOC_ELEM): |
|
return("elem"); |
|
case (MDOC_TEXT): |
|
return("text"); |
|
default: |
|
break; |
|
} |
|
|
|
abort(); |
|
/* NOTREACHED */ |
} |
} |