Annotation of mandoc/strings.c, Revision 1.2
1.2 ! kristaps 1: /* $Id: strings.c,v 1.1 2008/12/15 03:13:01 kristaps Exp $ */
1.1 kristaps 2: /*
3: * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
4: *
5: * Permission to use, copy, modify, and distribute this software for any
6: * purpose with or without fee is hereby granted, provided that the
7: * above copyright notice and this permission notice appear in all
8: * copies.
9: *
10: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11: * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12: * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13: * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14: * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15: * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16: * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17: * PERFORMANCE OF THIS SOFTWARE.
18: */
19: #include <assert.h>
20: #include <ctype.h>
21: #include <stdlib.h>
22: #include <stdio.h>
1.2 ! kristaps 23: #include <string.h>
1.1 kristaps 24:
25: #include "private.h"
26:
27: int
28: mdoc_isdelim(const char *p)
29: {
30:
31: if (0 == *p)
32: return(0);
33: if (0 != *(p + 1))
34: return(0);
35:
36: switch (*p) {
37: case('{'):
38: /* FALLTHROUGH */
39: case('.'):
40: /* FALLTHROUGH */
41: case(','):
42: /* FALLTHROUGH */
43: case(';'):
44: /* FALLTHROUGH */
45: case(':'):
46: /* FALLTHROUGH */
47: case('?'):
48: /* FALLTHROUGH */
49: case('!'):
50: /* FALLTHROUGH */
51: case('('):
52: /* FALLTHROUGH */
53: case(')'):
54: /* FALLTHROUGH */
55: case('['):
56: /* FALLTHROUGH */
57: case(']'):
58: /* FALLTHROUGH */
59: case('}'):
60: return(1);
61: default:
62: break;
63: }
64:
65: return(0);
66: }
67:
1.2 ! kristaps 68:
! 69: enum mdoc_sec
! 70: mdoc_atosec(size_t sz, const char **p)
! 71: {
! 72:
! 73: assert(sz > 0);
! 74: if (sz > 2)
! 75: return(SEC_CUSTOM);
! 76: if (sz == 2) {
! 77: if (0 == strcmp(*p, "RETURN") &&
! 78: 0 == strcmp(*(p + 1), "VALUES"))
! 79: return(SEC_RETURN_VALUES);
! 80: if (0 == strcmp(*p, "SEE") &&
! 81: 0 == strcmp(*(p + 1), "ALSO"))
! 82: return(SEC_SEE_ALSO);
! 83: return(SEC_CUSTOM);
! 84: }
! 85:
! 86: if (0 == strcmp(*p, "NAME"))
! 87: return(SEC_NAME);
! 88: else if (0 == strcmp(*p, "SYNOPSIS"))
! 89: return(SEC_SYNOPSIS);
! 90: else if (0 == strcmp(*p, "DESCRIPTION"))
! 91: return(SEC_DESCRIPTION);
! 92: else if (0 == strcmp(*p, "ENVIRONMENT"))
! 93: return(SEC_ENVIRONMENT);
! 94: else if (0 == strcmp(*p, "FILES"))
! 95: return(SEC_FILES);
! 96: else if (0 == strcmp(*p, "EXAMPLES"))
! 97: return(SEC_EXAMPLES);
! 98: else if (0 == strcmp(*p, "DIAGNOSTICS"))
! 99: return(SEC_DIAGNOSTICS);
! 100: else if (0 == strcmp(*p, "ERRORS"))
! 101: return(SEC_ERRORS);
! 102: else if (0 == strcmp(*p, "STANDARDS"))
! 103: return(SEC_STANDARDS);
! 104: else if (0 == strcmp(*p, "HISTORY"))
! 105: return(SEC_HISTORY);
! 106: else if (0 == strcmp(*p, "AUTHORS"))
! 107: return(SEC_AUTHORS);
! 108: else if (0 == strcmp(*p, "CAVEATS"))
! 109: return(SEC_CAVEATS);
! 110: else if (0 == strcmp(*p, "BUGS"))
! 111: return(SEC_BUGS);
! 112:
! 113: return(SEC_CUSTOM);
! 114: }
! 115:
! 116:
! 117: time_t
! 118: mdoc_atotime(const char *p)
! 119: {
! 120: struct tm tm;
! 121:
! 122: if (strptime(p, "%b %d %Y", &tm))
! 123: return(mktime(&tm));
! 124: if (strptime(p, "%b %d, %Y", &tm))
! 125: return(mktime(&tm));
! 126:
! 127: return(0);
! 128: }
! 129:
! 130:
! 131: enum mdoc_msec
! 132: mdoc_atomsec(const char *p)
! 133: {
! 134:
! 135: if (0 == strcmp(p, "1"))
! 136: return(MSEC_1);
! 137: else if (0 == strcmp(p, "2"))
! 138: return(MSEC_2);
! 139: else if (0 == strcmp(p, "3"))
! 140: return(MSEC_3);
! 141: else if (0 == strcmp(p, "3f"))
! 142: return(MSEC_3f);
! 143: else if (0 == strcmp(p, "3p"))
! 144: return(MSEC_3p);
! 145: else if (0 == strcmp(p, "4"))
! 146: return(MSEC_4);
! 147: else if (0 == strcmp(p, "5"))
! 148: return(MSEC_5);
! 149: else if (0 == strcmp(p, "6"))
! 150: return(MSEC_6);
! 151: else if (0 == strcmp(p, "7"))
! 152: return(MSEC_7);
! 153: else if (0 == strcmp(p, "8"))
! 154: return(MSEC_8);
! 155: else if (0 == strcmp(p, "9"))
! 156: return(MSEC_9);
! 157: else if (0 == strcmp(p, "X11"))
! 158: return(MSEC_X11);
! 159: else if (0 == strcmp(p, "X11R6"))
! 160: return(MSEC_X11R6);
! 161: else if (0 == strcmp(p, "local"))
! 162: return(MSEC_local);
! 163: else if (0 == strcmp(p, "n"))
! 164: return(MSEC_n);
! 165: else if (0 == strcmp(p, "unass"))
! 166: return(MSEC_unass);
! 167: else if (0 == strcmp(p, "draft"))
! 168: return(MSEC_draft);
! 169: else if (0 == strcmp(p, "paper"))
! 170: return(MSEC_paper);
! 171:
! 172: return(MSEC_DEFAULT);
! 173: }
! 174:
! 175:
! 176: enum mdoc_vol
! 177: mdoc_atovol(const char *p)
! 178: {
! 179:
! 180: if (0 == strcmp(p, "AMD"))
! 181: return(VOL_AMD);
! 182: else if (0 == strcmp(p, "IND"))
! 183: return(VOL_IND);
! 184: else if (0 == strcmp(p, "KM"))
! 185: return(VOL_KM);
! 186: else if (0 == strcmp(p, "LOCAL"))
! 187: return(VOL_LOCAL);
! 188: else if (0 == strcmp(p, "PRM"))
! 189: return(VOL_PRM);
! 190: else if (0 == strcmp(p, "PS1"))
! 191: return(VOL_PS1);
! 192: else if (0 == strcmp(p, "SMM"))
! 193: return(VOL_SMM);
! 194: else if (0 == strcmp(p, "URM"))
! 195: return(VOL_URM);
! 196: else if (0 == strcmp(p, "USD"))
! 197: return(VOL_USD);
! 198:
! 199: return(VOL_DEFAULT);
! 200: }
! 201:
! 202:
! 203: enum mdoc_arch
! 204: mdoc_atoarch(const char *p)
! 205: {
! 206:
! 207: if (0 == strcmp(p, "alpha"))
! 208: return(ARCH_alpha);
! 209: else if (0 == strcmp(p, "amd64"))
! 210: return(ARCH_amd64);
! 211: else if (0 == strcmp(p, "amiga"))
! 212: return(ARCH_amiga);
! 213: else if (0 == strcmp(p, "arc"))
! 214: return(ARCH_arc);
! 215: else if (0 == strcmp(p, "armish"))
! 216: return(ARCH_armish);
! 217: else if (0 == strcmp(p, "aviion"))
! 218: return(ARCH_aviion);
! 219: else if (0 == strcmp(p, "hp300"))
! 220: return(ARCH_hp300);
! 221: else if (0 == strcmp(p, "hppa"))
! 222: return(ARCH_hppa);
! 223: else if (0 == strcmp(p, "hppa64"))
! 224: return(ARCH_hppa64);
! 225: else if (0 == strcmp(p, "i386"))
! 226: return(ARCH_i386);
! 227: else if (0 == strcmp(p, "landisk"))
! 228: return(ARCH_landisk);
! 229: else if (0 == strcmp(p, "luna88k"))
! 230: return(ARCH_luna88k);
! 231: else if (0 == strcmp(p, "mac68k"))
! 232: return(ARCH_mac68k);
! 233: else if (0 == strcmp(p, "macppc"))
! 234: return(ARCH_macppc);
! 235: else if (0 == strcmp(p, "mvme68k"))
! 236: return(ARCH_mvme68k);
! 237: else if (0 == strcmp(p, "mvme88k"))
! 238: return(ARCH_mvme88k);
! 239: else if (0 == strcmp(p, "mvmeppc"))
! 240: return(ARCH_mvmeppc);
! 241: else if (0 == strcmp(p, "pmax"))
! 242: return(ARCH_pmax);
! 243: else if (0 == strcmp(p, "sgi"))
! 244: return(ARCH_sgi);
! 245: else if (0 == strcmp(p, "socppc"))
! 246: return(ARCH_socppc);
! 247: else if (0 == strcmp(p, "sparc"))
! 248: return(ARCH_sparc);
! 249: else if (0 == strcmp(p, "sparc64"))
! 250: return(ARCH_sparc64);
! 251: else if (0 == strcmp(p, "sun3"))
! 252: return(ARCH_sun3);
! 253: else if (0 == strcmp(p, "vax"))
! 254: return(ARCH_vax);
! 255: else if (0 == strcmp(p, "zaurus"))
! 256: return(ARCH_zaurus);
! 257:
! 258: return(ARCH_DEFAULT);
! 259: }
CVSweb