[BACK]Return to literals.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Annotation of mandoc/literals.c, Revision 1.5

1.5     ! kristaps    1: /* $Id: literals.c,v 1.4 2008/12/09 00:27:17 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 <string.h>
                     21: #include <stdlib.h>
                     22:
                     23: #include "private.h"
                     24:
1.5     ! kristaps   25: #define        ROFF_ATTname_V1         "v1"
        !            26: #define        ROFF_ATTname_V2         "v1"
        !            27: #define        ROFF_ATTname_V3         "v3"
        !            28: #define        ROFF_ATTname_V6         "v6"
        !            29: #define        ROFF_ATTname_V7         "v7"
        !            30: #define        ROFF_ATTname_32V        "32v"
        !            31: #define        ROFF_ATTname_V_1        "V.1"
        !            32: #define        ROFF_ATTname_V_4        "V.4"
        !            33:
        !            34: #define        ROFFSecname_NAME        "NAME"
        !            35: #define        ROFFSecname_SYNOP       "SYNOPSIS"
        !            36: #define        ROFFSecname_DESC        "DESCRIPTION"
        !            37: #define        ROFFSecname_ENV         "ENVIRONMENT"
        !            38: #define        ROFFSecname_FILES       "FILES"
        !            39: #define        ROFFSecname_EX          "EXAMPLES"
        !            40: #define        ROFFSecname_DIAG        "DIAGNOSTICS"
        !            41: #define        ROFFSecname_ERRS        "ERRORS"
        !            42: #define        ROFFSecname_STAND       "STANDARDS"
        !            43: #define        ROFFSecname_HIST        "HISTORY"
        !            44: #define        ROFFSecname_AUTH        "AUTHORS"
        !            45: #define        ROFFSecname_CAVEATS     "CAVEATS"
        !            46: #define        ROFFSecname_BUGS        "BUGS"
        !            47: #define        ROFFSecname_RETVAL      "RETURN VALUES"
        !            48: #define        ROFFSecname_RETVAL1     "RETURN"
        !            49: #define        ROFFSecname_RETVAL2     "VALUES"
        !            50: #define        ROFFSecname_SEEALSO     "SEE ALSO"
        !            51: #define        ROFFSecname_SEEALSO1    "SEE"
        !            52: #define        ROFFSecname_SEEALSO2    "ALSO"
        !            53:
        !            54: #define        ROFF_MSECname_1         "1"
        !            55: #define        ROFF_MSECname_2         "2"
        !            56: #define        ROFF_MSECname_3         "3"
        !            57: #define        ROFF_MSECname_3p        "3p"
        !            58: #define        ROFF_MSECname_4         "4"
        !            59: #define        ROFF_MSECname_5         "5"
        !            60: #define        ROFF_MSECname_6         "6"
        !            61: #define        ROFF_MSECname_7         "7"
        !            62: #define        ROFF_MSECname_8         "8"
        !            63: #define        ROFF_MSECname_9         "9"
        !            64: #define        ROFF_MSECname_UNASS     "unass"
        !            65: #define        ROFF_MSECname_DRAFT     "draft"
        !            66: #define        ROFF_MSECname_PAPER     "paper"
        !            67:
        !            68: int
        !            69: roff_sec(const char **p)
        !            70: {
        !            71:
        !            72:        assert(*p);
        !            73:        if (NULL != *(p + 1)) {
        !            74:                if (NULL != *(p + 2))
        !            75:                        return(ROFFSec_OTHER);
        !            76:                if (0 == strcmp(*p, ROFFSecname_RETVAL1) &&
        !            77:                        0 == strcmp(*(p + 1), ROFFSecname_RETVAL2))
        !            78:                        return(ROFFSec_RETVAL);
        !            79:                if (0 == strcmp(*p, ROFFSecname_SEEALSO1) &&
        !            80:                        0 == strcmp(*(p + 1), ROFFSecname_SEEALSO2))
        !            81:                        return(ROFFSec_SEEALSO);
        !            82:                return(ROFFSec_OTHER);
        !            83:        }
        !            84:
        !            85:        if (0 == strcmp(*p, ROFFSecname_NAME))
        !            86:                return(ROFFSec_NAME);
        !            87:        else if (0 == strcmp(*p, ROFFSecname_SYNOP))
        !            88:                return(ROFFSec_SYNOP);
        !            89:        else if (0 == strcmp(*p, ROFFSecname_DESC))
        !            90:                return(ROFFSec_DESC);
        !            91:        else if (0 == strcmp(*p, ROFFSecname_ENV))
        !            92:                return(ROFFSec_ENV);
        !            93:        else if (0 == strcmp(*p, ROFFSecname_FILES))
        !            94:                return(ROFFSec_FILES);
        !            95:        else if (0 == strcmp(*p, ROFFSecname_EX))
        !            96:                return(ROFFSec_EX);
        !            97:        else if (0 == strcmp(*p, ROFFSecname_DIAG))
        !            98:                return(ROFFSec_DIAG);
        !            99:        else if (0 == strcmp(*p, ROFFSecname_ERRS))
        !           100:                return(ROFFSec_ERRS);
        !           101:        else if (0 == strcmp(*p, ROFFSecname_STAND))
        !           102:                return(ROFFSec_STAND);
        !           103:        else if (0 == strcmp(*p, ROFFSecname_HIST))
        !           104:                return(ROFFSec_HIST);
        !           105:        else if (0 == strcmp(*p, ROFFSecname_AUTH))
        !           106:                return(ROFFSec_AUTH);
        !           107:        else if (0 == strcmp(*p, ROFFSecname_CAVEATS))
        !           108:                return(ROFFSec_CAVEATS);
        !           109:        else if (0 == strcmp(*p, ROFFSecname_BUGS))
        !           110:                return(ROFFSec_BUGS);
        !           111:        else if (0 == strcmp(*p, ROFFSecname_RETVAL))
        !           112:                return(ROFFSec_RETVAL);
        !           113:        else if (0 == strcmp(*p, ROFFSecname_SEEALSO))
        !           114:                return(ROFFSec_SEEALSO);
        !           115:
        !           116:        return(ROFFSec_OTHER);
        !           117: }
        !           118:
        !           119:
        !           120: enum roffmsec
        !           121: roff_msec(const char *p)
        !           122: {
        !           123:
        !           124:        assert(p);
        !           125:        if (0 == strcmp(p, ROFF_MSECname_1))
        !           126:                return(ROFF_MSEC_1);
        !           127:        else if (0 == strcmp(p, ROFF_MSECname_2))
        !           128:                return(ROFF_MSEC_2);
        !           129:        else if (0 == strcmp(p, ROFF_MSECname_3))
        !           130:                return(ROFF_MSEC_3);
        !           131:        else if (0 == strcmp(p, ROFF_MSECname_3p))
        !           132:                return(ROFF_MSEC_3p);
        !           133:        else if (0 == strcmp(p, ROFF_MSECname_4))
        !           134:                return(ROFF_MSEC_4);
        !           135:        else if (0 == strcmp(p, ROFF_MSECname_5))
        !           136:                return(ROFF_MSEC_5);
        !           137:        else if (0 == strcmp(p, ROFF_MSECname_6))
        !           138:                return(ROFF_MSEC_6);
        !           139:        else if (0 == strcmp(p, ROFF_MSECname_7))
        !           140:                return(ROFF_MSEC_7);
        !           141:        else if (0 == strcmp(p, ROFF_MSECname_8))
        !           142:                return(ROFF_MSEC_8);
        !           143:        else if (0 == strcmp(p, ROFF_MSECname_9))
        !           144:                return(ROFF_MSEC_9);
        !           145:        else if (0 == strcmp(p, ROFF_MSECname_UNASS))
        !           146:                return(ROFF_MSEC_UNASS);
        !           147:        else if (0 == strcmp(p, ROFF_MSECname_DRAFT))
        !           148:                return(ROFF_MSEC_DRAFT);
        !           149:        else if (0 == strcmp(p, ROFF_MSECname_PAPER))
        !           150:                return(ROFF_MSEC_PAPER);
        !           151:
        !           152:        return(ROFF_MSEC_MAX);
        !           153: }
1.4       kristaps  154:
1.1       kristaps  155:
                    156: char *
1.5     ! kristaps  157: roff_msecname(enum roffmsec sec)
1.2       kristaps  158: {
                    159:
                    160:        switch (sec) {
                    161:        case(ROFF_MSEC_1):
1.5     ! kristaps  162:                return(ROFF_MSECname_1);
1.2       kristaps  163:        case(ROFF_MSEC_2):
1.5     ! kristaps  164:                return(ROFF_MSECname_2);
1.2       kristaps  165:        case(ROFF_MSEC_3):
1.5     ! kristaps  166:                return(ROFF_MSECname_3);
1.2       kristaps  167:        case(ROFF_MSEC_3p):
1.5     ! kristaps  168:                return(ROFF_MSECname_3p);
1.2       kristaps  169:        case(ROFF_MSEC_4):
1.5     ! kristaps  170:                return(ROFF_MSECname_4);
1.2       kristaps  171:        case(ROFF_MSEC_5):
1.5     ! kristaps  172:                return(ROFF_MSECname_5);
1.2       kristaps  173:        case(ROFF_MSEC_6):
1.5     ! kristaps  174:                return(ROFF_MSECname_6);
1.2       kristaps  175:        case(ROFF_MSEC_7):
1.5     ! kristaps  176:                return(ROFF_MSECname_7);
1.2       kristaps  177:        case(ROFF_MSEC_8):
1.5     ! kristaps  178:                return(ROFF_MSECname_8);
1.2       kristaps  179:        case(ROFF_MSEC_9):
1.5     ! kristaps  180:                return(ROFF_MSECname_9);
1.2       kristaps  181:        case(ROFF_MSEC_UNASS):
1.5     ! kristaps  182:                return(ROFF_MSECname_UNASS);
1.2       kristaps  183:        case(ROFF_MSEC_DRAFT):
1.5     ! kristaps  184:                return(ROFF_MSECname_DRAFT);
1.2       kristaps  185:        case(ROFF_MSEC_PAPER):
1.5     ! kristaps  186:                return(ROFF_MSECname_PAPER);
1.2       kristaps  187:        default:
                    188:                break;
                    189:        }
                    190:
                    191:        abort();
                    192:        /* NOTREACHED */
                    193: }
                    194:
                    195:
                    196: char *
1.5     ! kristaps  197: roff_fmtstring(int tok)
1.1       kristaps  198: {
                    199:
                    200:        switch (tok) {
                    201:        case (ROFF_Ex):
                    202:                return ("The %s utility exits 0 on success, and "
1.5     ! kristaps  203:                                ">0 if an error occurs.");
1.1       kristaps  204:        case (ROFF_Rv):
                    205:                return ("The %s() function returns the value 0 if "
                    206:                                "successful; otherwise the value -1 "
                    207:                                "is returned and the global variable "
1.5     ! kristaps  208:                                "errno is set to indicate the error.");
1.1       kristaps  209:        case (ROFF_In):
1.5     ! kristaps  210:                return("#include \\*(Lt%s\\*(Gt");
        !           211:        default:
        !           212:                break;
        !           213:        }
        !           214:
        !           215:        abort();
        !           216:        /* NOTREACHED */
        !           217: }
        !           218:
        !           219:
        !           220: char *
        !           221: roff_literal(int tok, const int *argc,
        !           222:                const char **argv, const char **morep)
        !           223: {
        !           224:
        !           225:        switch (tok) {
1.1       kristaps  226:        case (ROFF_At):
                    227:                assert(NULL == *argv);
                    228:                assert(ROFF_ARGMAX == *argc);
                    229:                if (NULL == *morep)
1.5     ! kristaps  230:                        return("AT&T UNIX");
        !           231:
        !           232:                switch (roff_att(*morep)) {
        !           233:                case (ROFF_ATT_V1):
        !           234:                        return("Version 1 AT&T UNIX");
        !           235:                case (ROFF_ATT_V2):
        !           236:                        return("Version 2 AT&T UNIX");
        !           237:                case (ROFF_ATT_V3):
        !           238:                        return("Version 3 AT&T UNIX");
        !           239:                case (ROFF_ATT_V6):
        !           240:                        return("Version 6 AT&T UNIX");
        !           241:                case (ROFF_ATT_V7):
        !           242:                        return("Version 7 AT&T UNIX");
        !           243:                case (ROFF_ATT_32V):
        !           244:                        return("Version 32v AT&T UNIX");
        !           245:                case (ROFF_ATT_V_1):
        !           246:                        return("AT&T System V.1 UNIX");
        !           247:                case (ROFF_ATT_V_4):
        !           248:                        return("AT&T System V.4 UNIX");
        !           249:                default:
        !           250:                        break;
        !           251:                }
        !           252:
1.1       kristaps  253:                abort();
                    254:                /* NOTREACHED */
1.5     ! kristaps  255:
1.1       kristaps  256:        case (ROFF_St):
                    257:                assert(ROFF_ARGMAX != *argc);
                    258:                assert(NULL == *argv);
                    259:                switch (*argc) {
                    260:                case(ROFF_p1003_1_88):
                    261:                        return("IEEE Std 1003.1-1988 "
1.5     ! kristaps  262:                                        "(\\*(LqPOSIX\\*(Rq)");
1.1       kristaps  263:                case(ROFF_p1003_1_90):
                    264:                        return("IEEE Std 1003.1-1990 "
1.5     ! kristaps  265:                                        "(\\*(LqPOSIX\\*(Rq)");
1.1       kristaps  266:                case(ROFF_p1003_1_96):
                    267:                        return("ISO/IEC 9945-1:1996 "
1.5     ! kristaps  268:                                        "(\\*(LqPOSIX\\*(Rq)");
1.1       kristaps  269:                case(ROFF_p1003_1_2001):
                    270:                        return("IEEE Std 1003.1-2001 "
1.5     ! kristaps  271:                                        "(\\*(LqPOSIX\\*(Rq)");
1.1       kristaps  272:                case(ROFF_p1003_1_2004):
                    273:                        return("IEEE Std 1003.1-2004 "
1.5     ! kristaps  274:                                        "(\\*(LqPOSIX\\*(Rq)");
1.1       kristaps  275:                case(ROFF_p1003_1):
                    276:                        return("IEEE Std 1003.1 "
1.5     ! kristaps  277:                                        "(\\*(LqPOSIX\\*(Rq)");
1.1       kristaps  278:                case(ROFF_p1003_1b):
                    279:                        return("IEEE Std 1003.1b "
1.5     ! kristaps  280:                                        "(\\*(LqPOSIX\\*(Rq)");
1.1       kristaps  281:                case(ROFF_p1003_1b_93):
                    282:                        return("IEEE Std 1003.1b-1993 "
1.5     ! kristaps  283:                                        "(\\*(LqPOSIX\\*(Rq)");
1.1       kristaps  284:                case(ROFF_p1003_1c_95):
                    285:                        return("IEEE Std 1003.1c-1995 "
1.5     ! kristaps  286:                                        "(\\*(LqPOSIX\\*(Rq)");
1.1       kristaps  287:                case(ROFF_p1003_1g_2000):
                    288:                        return("IEEE Std 1003.1g-2000 "
1.5     ! kristaps  289:                                        "(\\*(LqPOSIX\\*(Rq)");
1.1       kristaps  290:                case(ROFF_p1003_2_92):
                    291:                        return("IEEE Std 1003.2-1992 "
1.5     ! kristaps  292:                                        "(\\*(LqPOSIX.2\\*(Rq)");
1.1       kristaps  293:                case(ROFF_p1387_2_95):
                    294:                        return("IEEE Std 1387.2-1995 "
1.5     ! kristaps  295:                                        "(\\*(LqPOSIX.7.2\\*(Rq)");
1.1       kristaps  296:                case(ROFF_p1003_2):
                    297:                        return("IEEE Std 1003.2 "
1.5     ! kristaps  298:                                        "(\\*(LqPOSIX.2\\*(Rq)");
1.1       kristaps  299:                case(ROFF_p1387_2):
                    300:                        return("IEEE Std 1387.2 "
1.5     ! kristaps  301:                                        "(\\*(LqPOSIX.7.2\\*(Rq)");
1.1       kristaps  302:                case(ROFF_isoC_90):
                    303:                        return("ISO/IEC 9899:1990 "
1.5     ! kristaps  304:                                        "(\\*(LqISO C90\\*(Rq)");
1.1       kristaps  305:                case(ROFF_isoC_amd1):
                    306:                        return("ISO/IEC 9899/AMD1:1995 "
1.5     ! kristaps  307:                                        "(\\*(LqISO C90\\*(Rq)");
1.1       kristaps  308:                case(ROFF_isoC_tcor1):
                    309:                        return("ISO/IEC 9899/TCOR1:1994 "
1.5     ! kristaps  310:                                        "(\\*(LqISO C90\\*(Rq)");
1.1       kristaps  311:                case(ROFF_isoC_tcor2):
                    312:                        return("ISO/IEC 9899/TCOR2:1995 "
1.5     ! kristaps  313:                                        "(\\*(LqISO C90\\*(Rq)");
1.1       kristaps  314:                case(ROFF_isoC_99):
                    315:                        return("ISO/IEC 9899:1999 "
1.5     ! kristaps  316:                                        "(\\*(LqISO C99\\*(Rq)");
1.1       kristaps  317:                case(ROFF_ansiC):
                    318:                        return("ANSI X3.159-1989 "
1.5     ! kristaps  319:                                        "(\\*(LqANSI C\\*(Rq)");
1.1       kristaps  320:                case(ROFF_ansiC_89):
                    321:                        return("ANSI X3.159-1989 "
1.5     ! kristaps  322:                                        "(\\*(LqANSI C\\*(Rq)");
1.1       kristaps  323:                case(ROFF_ansiC_99):
                    324:                        return("ANSI/ISO/IEC 9899-1999 "
1.5     ! kristaps  325:                                        "(\\*(LqANSI C99\\*(Rq)");
1.1       kristaps  326:                case(ROFF_ieee754):
                    327:                        return("IEEE Std 754-1985");
                    328:                case(ROFF_iso8802_3):
                    329:                        return("ISO 8802-3: 1989");
                    330:                case(ROFF_xpg3):
                    331:                        return("X/Open Portability Guide Issue 3 "
1.5     ! kristaps  332:                                        "(\\*(LqXPG3\\*(Rq)");
1.1       kristaps  333:                case(ROFF_xpg4):
                    334:                        return("X/Open Portability Guide Issue 4 "
1.5     ! kristaps  335:                                        "(\\*(LqXPG4\\*(Rq)");
1.1       kristaps  336:                case(ROFF_xpg4_2):
                    337:                        return("X/Open Portability Guide Issue 4.2 "
1.5     ! kristaps  338:                                        "(\\*(LqXPG4.2\\*(Rq)");
1.1       kristaps  339:                case(ROFF_xpg4_3):
                    340:                        return("X/Open Portability Guide Issue 4.3 "
1.5     ! kristaps  341:                                        "(\\*(LqXPG4.3\\*(Rq)");
1.1       kristaps  342:                case(ROFF_xbd5):
                    343:                        return("X/Open System Interface Definitions "
1.5     ! kristaps  344:                                        "Issue 5 (\\*(LqXBD5\\*(Rq)");
1.1       kristaps  345:                case(ROFF_xcu5):
                    346:                        return("X/Open Commands and Utilities Issue 5 "
1.5     ! kristaps  347:                                        "(\\*(LqXCU5\\*(Rq)");
1.1       kristaps  348:                case(ROFF_xsh5):
                    349:                        return("X/Open System Interfaces and Headers "
1.5     ! kristaps  350:                                        "Issue 5 (\\*(LqXSH5\\*(Rq)");
1.1       kristaps  351:                case(ROFF_xns5):
                    352:                        return("X/Open Networking Services Issue 5 "
1.5     ! kristaps  353:                                        "(\\*(LqXNS5\\*(Rq)");
1.1       kristaps  354:                case(ROFF_xns5_2d2_0):
                    355:                        return("X/Open Networking Services "
                    356:                                        "Issue 5.2 Draft 2.0 "
1.5     ! kristaps  357:                                        "(\\*(LqXNS5.2D2.0\\*(Rq)");
1.1       kristaps  358:                case(ROFF_xcurses4_2):
                    359:                        return("X/Open Curses Issue 4 Version 2 "
1.5     ! kristaps  360:                                        "(\\*(LqXCURSES4.2\\*(Rq)");
1.1       kristaps  361:                case(ROFF_susv2):
                    362:                        return("Version 2 of the Single "
                    363:                                        "UNIX Specification");
                    364:                case(ROFF_susv3):
                    365:                        return("Version 3 of the Single "
                    366:                                        "UNIX Specification");
                    367:                case(ROFF_svid4):
                    368:                        return("System V Interface Definition, Fourth "
1.5     ! kristaps  369:                                        "Edition (\\*(LqSVID4\\*(Rq)");
1.1       kristaps  370:                default:
                    371:                        break;
                    372:                }
                    373:                abort();
                    374:                /* NOTREACHED */
1.5     ! kristaps  375:
1.1       kristaps  376:        case (ROFF_Bt):
                    377:                return("is currently in beta test.");
                    378:        case (ROFF_Ud):
                    379:                return("currently under development.");
                    380:        case (ROFF_Fx):
                    381:                return("FreeBSD");
                    382:        case (ROFF_Nx):
                    383:                return("NetBSD");
                    384:        case (ROFF_Ox):
                    385:                return("OpenBSD");
                    386:        case (ROFF_Ux):
                    387:                return("UNIX");
                    388:        case (ROFF_Bx):
                    389:                return("BSD");
                    390:        case (ROFF_Bsx):
                    391:                return("BSDI BSD/OS");
                    392:        default:
                    393:                break;
                    394:        }
1.5     ! kristaps  395:
1.1       kristaps  396:        abort();
                    397:        /* NOTREACHED */
                    398: }
                    399:
1.5     ! kristaps  400:
        !           401: enum roffatt
        !           402: roff_att(const char *p)
        !           403: {
        !           404:
        !           405:        assert(p);
        !           406:        if (0 == strcmp(p, ROFF_ATTname_V1))
        !           407:                return(ROFF_ATT_V1);
        !           408:        else if (0 == strcmp(p, ROFF_ATTname_V2))
        !           409:                return(ROFF_ATT_V2);
        !           410:        else if (0 == strcmp(p, ROFF_ATTname_V3))
        !           411:                return(ROFF_ATT_V3);
        !           412:        else if (0 == strcmp(p, ROFF_ATTname_V6))
        !           413:                return(ROFF_ATT_V6);
        !           414:        else if (0 == strcmp(p, ROFF_ATTname_V7))
        !           415:                return(ROFF_ATT_V7);
        !           416:        else if (0 == strcmp(p, ROFF_ATTname_32V))
        !           417:                return(ROFF_ATT_32V);
        !           418:        else if (0 == strcmp(p, ROFF_ATTname_V_1))
        !           419:                return(ROFF_ATT_V_1);
        !           420:        else if (0 == strcmp(p, ROFF_ATTname_V_4))
        !           421:                return(ROFF_ATT_V_4);
        !           422:
        !           423:        return(ROFF_ATT_MAX);
        !           424: }
        !           425:

CVSweb