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

Annotation of mandoc/mandoc.h, Revision 1.21

1.21    ! kristaps    1: /*     $Id: mandoc.h,v 1.20 2010/09/27 09:26:27 kristaps Exp $ */
1.1       kristaps    2: /*
                      3:  * Copyright (c) 2010 Kristaps Dzonsons <kristaps@bsd.lv>
                      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 above
                      7:  * copyright notice and this permission notice appear in all copies.
                      8:  *
                      9:  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
                     10:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
                     11:  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
                     12:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
                     13:  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
                     14:  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
                     15:  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
                     16:  */
                     17: #ifndef MANDOC_H
                     18: #define MANDOC_H
1.7       kristaps   19:
                     20: #define ASCII_NBRSP     31  /* non-breaking space */
                     21: #define        ASCII_HYPH       30  /* breakable hyphen */
                     22:
1.1       kristaps   23: __BEGIN_DECLS
                     24:
1.18      schwarze   25: enum   mandoclevel {
                     26:        MANDOCLEVEL_OK = 0,
                     27:        MANDOCLEVEL_RESERVED,
                     28:        MANDOCLEVEL_WARNING,
                     29:        MANDOCLEVEL_ERROR,
                     30:        MANDOCLEVEL_FATAL,
                     31:        MANDOCLEVEL_BADARG,
                     32:        MANDOCLEVEL_SYSERR,
                     33:        MANDOCLEVEL_MAX
                     34: };
                     35:
1.1       kristaps   36: enum   mandocerr {
                     37:        MANDOCERR_OK,
1.13      schwarze   38:
1.21    ! kristaps   39:        MANDOCERR_WARNING, /* ===== start of warnings ===== */
1.5       kristaps   40:        MANDOCERR_UPPERCASE, /* text should be uppercase */
1.9       kristaps   41:        MANDOCERR_SECOOO, /* sections out of conventional order */
1.5       kristaps   42:        MANDOCERR_SECREP, /* section name repeats */
                     43:        MANDOCERR_PROLOGOOO, /* out of order prologue */
                     44:        MANDOCERR_PROLOGREP, /* repeated prologue entry */
                     45:        MANDOCERR_LISTFIRST, /* list type must come first */
                     46:        MANDOCERR_BADSTANDARD, /* bad standard */
                     47:        MANDOCERR_BADLIB, /* bad library */
1.17      kristaps   48:        MANDOCERR_BADTAB, /* tab in non-literal context */
1.5       kristaps   49:        MANDOCERR_BADESCAPE, /* bad escape sequence */
                     50:        MANDOCERR_BADQUOTE, /* unterminated quoted string */
                     51:        MANDOCERR_NOWIDTHARG, /* argument requires the width argument */
1.12      kristaps   52:        /* FIXME: merge with MANDOCERR_IGNARGV. */
1.5       kristaps   53:        MANDOCERR_WIDTHARG, /* superfluous width argument */
1.13      schwarze   54:        MANDOCERR_IGNARGV, /* ignoring argument */
1.5       kristaps   55:        MANDOCERR_BADDATE, /* bad date argument */
                     56:        MANDOCERR_BADWIDTH, /* bad width argument */
1.9       kristaps   57:        MANDOCERR_BADMSEC, /* unknown manual section */
1.5       kristaps   58:        MANDOCERR_SECMSEC, /* section not in conventional manual section */
                     59:        MANDOCERR_EOLNSPACE, /* end of line whitespace */
1.14      schwarze   60:        MANDOCERR_SCOPENEST, /* blocks badly nested */
1.13      schwarze   61:
1.21    ! kristaps   62:        MANDOCERR_ERROR, /* ===== start of errors ===== */
1.5       kristaps   63:        MANDOCERR_NAMESECFIRST, /* NAME section must come first */
                     64:        MANDOCERR_BADBOOL, /* bad Boolean value */
                     65:        MANDOCERR_CHILD, /* child violates parent syntax */
                     66:        MANDOCERR_BADATT, /* bad AT&T symbol */
                     67:        MANDOCERR_LISTREP, /* list type repeated */
                     68:        MANDOCERR_DISPREP, /* display type repeated */
                     69:        MANDOCERR_ARGVREP, /* argument repeated */
                     70:        MANDOCERR_NONAME, /* manual name not yet set */
                     71:        MANDOCERR_MACROOBS, /* obsolete macro ignored */
                     72:        MANDOCERR_MACROEMPTY, /* empty macro ignored */
                     73:        MANDOCERR_BADBODY, /* macro not allowed in body */
                     74:        MANDOCERR_BADPROLOG, /* macro not allowed in prologue */
                     75:        MANDOCERR_BADCHAR, /* bad character */
                     76:        MANDOCERR_BADNAMESEC, /* bad NAME section contents */
                     77:        MANDOCERR_NOBLANKLN, /* no blank lines */
                     78:        MANDOCERR_NOTEXT, /* no text in this context */
                     79:        MANDOCERR_BADCOMMENT, /* bad comment style */
                     80:        MANDOCERR_MACRO, /* unknown macro will be lost */
                     81:        MANDOCERR_LINESCOPE, /* line scope broken */
                     82:        MANDOCERR_ARGCOUNT, /* argument count wrong */
1.14      schwarze   83:        MANDOCERR_NOSCOPE, /* no such block is open */
1.5       kristaps   84:        MANDOCERR_SCOPEREP, /* scope already open */
1.19      schwarze   85:        MANDOCERR_SCOPEEXIT, /* scope open on exit */
1.5       kristaps   86:        /* FIXME: merge following with MANDOCERR_ARGCOUNT */
                     87:        MANDOCERR_NOARGS, /* macro requires line argument(s) */
                     88:        MANDOCERR_NOBODY, /* macro requires body argument(s) */
                     89:        MANDOCERR_NOARGV, /* macro requires argument(s) */
                     90:        MANDOCERR_NOTITLE, /* no title in document */
1.10      kristaps   91:        MANDOCERR_LISTTYPE, /* missing list type */
1.11      kristaps   92:        MANDOCERR_DISPTYPE, /* missing display type */
1.15      kristaps   93:        MANDOCERR_FONTTYPE, /* missing font type */
1.5       kristaps   94:        MANDOCERR_ARGSLOST, /* line argument(s) will be lost */
                     95:        MANDOCERR_BODYLOST, /* body argument(s) will be lost */
1.20      kristaps   96:        MANDOCERR_IGNPAR, /* paragraph macro ignored */
1.13      schwarze   97:
1.21    ! kristaps   98:        MANDOCERR_FATAL, /* ===== start of fatal errors ===== */
1.8       kristaps   99:        MANDOCERR_COLUMNS, /* column syntax is inconsistent */
1.5       kristaps  100:        /* FIXME: this should be a MANDOCERR_ERROR */
                    101:        MANDOCERR_NESTEDDISP, /* displays may not be nested */
1.11      kristaps  102:        MANDOCERR_BADDISP, /* unsupported display type */
1.14      schwarze  103:        MANDOCERR_SCOPEFATAL, /* blocks badly nested */
1.13      schwarze  104:        MANDOCERR_SYNTNOSCOPE, /* no scope to rewind: syntax violated */
1.5       kristaps  105:        MANDOCERR_SYNTLINESCOPE, /* line scope broken, syntax violated */
                    106:        MANDOCERR_SYNTARGVCOUNT, /* argument count wrong, violates syntax */
                    107:        MANDOCERR_SYNTCHILD, /* child violates parent syntax */
                    108:        MANDOCERR_SYNTARGCOUNT, /* argument count wrong, violates syntax */
                    109:        MANDOCERR_NODOCBODY, /* no document body */
                    110:        MANDOCERR_NODOCPROLOG, /* no document prologue */
1.13      schwarze  111:        MANDOCERR_UTSNAME, /* utsname system call failed */
1.18      schwarze  112:        MANDOCERR_MEM, /* static buffer exhausted */
1.1       kristaps  113:        MANDOCERR_MAX
                    114: };
                    115:
1.16      kristaps  116: enum   regs {
                    117:        REG_nS = 0,     /* register: nS */
                    118:        REG__MAX
1.21    ! kristaps  119: };
        !           120:
        !           121: enum   mant {
        !           122:        MAN_br = 0,
        !           123:        MAN_TH,
        !           124:        MAN_SH,
        !           125:        MAN_SS,
        !           126:        MAN_TP,
        !           127:        MAN_LP,
        !           128:        MAN_PP,
        !           129:        MAN_P,
        !           130:        MAN_IP,
        !           131:        MAN_HP,
        !           132:        MAN_SM,
        !           133:        MAN_SB,
        !           134:        MAN_BI,
        !           135:        MAN_IB,
        !           136:        MAN_BR,
        !           137:        MAN_RB,
        !           138:        MAN_R,
        !           139:        MAN_B,
        !           140:        MAN_I,
        !           141:        MAN_IR,
        !           142:        MAN_RI,
        !           143:        MAN_na,
        !           144:        MAN_i,
        !           145:        MAN_sp,
        !           146:        MAN_nf,
        !           147:        MAN_fi,
        !           148:        MAN_r,
        !           149:        MAN_RE,
        !           150:        MAN_RS,
        !           151:        MAN_DT,
        !           152:        MAN_UC,
        !           153:        MAN_PD,
        !           154:        MAN_Sp,
        !           155:        MAN_Vb,
        !           156:        MAN_Ve,
        !           157:        MAN_AT,
        !           158:        MAN_in,
        !           159:        MAN_MAX
        !           160: };
        !           161:
        !           162: enum   man_type {
        !           163:        MAN_TEXT,
        !           164:        MAN_ELEM,
        !           165:        MAN_ROOT,
        !           166:        MAN_BLOCK,
        !           167:        MAN_HEAD,
        !           168:        MAN_BODY
        !           169: };
        !           170:
        !           171: enum   mdoct {
        !           172:        MDOC_Ap = 0,
        !           173:        MDOC_Dd,
        !           174:        MDOC_Dt,
        !           175:        MDOC_Os,
        !           176:        MDOC_Sh,
        !           177:        MDOC_Ss,
        !           178:        MDOC_Pp,
        !           179:        MDOC_D1,
        !           180:        MDOC_Dl,
        !           181:        MDOC_Bd,
        !           182:        MDOC_Ed,
        !           183:        MDOC_Bl,
        !           184:        MDOC_El,
        !           185:        MDOC_It,
        !           186:        MDOC_Ad,
        !           187:        MDOC_An,
        !           188:        MDOC_Ar,
        !           189:        MDOC_Cd,
        !           190:        MDOC_Cm,
        !           191:        MDOC_Dv,
        !           192:        MDOC_Er,
        !           193:        MDOC_Ev,
        !           194:        MDOC_Ex,
        !           195:        MDOC_Fa,
        !           196:        MDOC_Fd,
        !           197:        MDOC_Fl,
        !           198:        MDOC_Fn,
        !           199:        MDOC_Ft,
        !           200:        MDOC_Ic,
        !           201:        MDOC_In,
        !           202:        MDOC_Li,
        !           203:        MDOC_Nd,
        !           204:        MDOC_Nm,
        !           205:        MDOC_Op,
        !           206:        MDOC_Ot,
        !           207:        MDOC_Pa,
        !           208:        MDOC_Rv,
        !           209:        MDOC_St,
        !           210:        MDOC_Va,
        !           211:        MDOC_Vt,
        !           212:        MDOC_Xr,
        !           213:        MDOC__A,
        !           214:        MDOC__B,
        !           215:        MDOC__D,
        !           216:        MDOC__I,
        !           217:        MDOC__J,
        !           218:        MDOC__N,
        !           219:        MDOC__O,
        !           220:        MDOC__P,
        !           221:        MDOC__R,
        !           222:        MDOC__T,
        !           223:        MDOC__V,
        !           224:        MDOC_Ac,
        !           225:        MDOC_Ao,
        !           226:        MDOC_Aq,
        !           227:        MDOC_At,
        !           228:        MDOC_Bc,
        !           229:        MDOC_Bf,
        !           230:        MDOC_Bo,
        !           231:        MDOC_Bq,
        !           232:        MDOC_Bsx,
        !           233:        MDOC_Bx,
        !           234:        MDOC_Db,
        !           235:        MDOC_Dc,
        !           236:        MDOC_Do,
        !           237:        MDOC_Dq,
        !           238:        MDOC_Ec,
        !           239:        MDOC_Ef,
        !           240:        MDOC_Em,
        !           241:        MDOC_Eo,
        !           242:        MDOC_Fx,
        !           243:        MDOC_Ms,
        !           244:        MDOC_No,
        !           245:        MDOC_Ns,
        !           246:        MDOC_Nx,
        !           247:        MDOC_Ox,
        !           248:        MDOC_Pc,
        !           249:        MDOC_Pf,
        !           250:        MDOC_Po,
        !           251:        MDOC_Pq,
        !           252:        MDOC_Qc,
        !           253:        MDOC_Ql,
        !           254:        MDOC_Qo,
        !           255:        MDOC_Qq,
        !           256:        MDOC_Re,
        !           257:        MDOC_Rs,
        !           258:        MDOC_Sc,
        !           259:        MDOC_So,
        !           260:        MDOC_Sq,
        !           261:        MDOC_Sm,
        !           262:        MDOC_Sx,
        !           263:        MDOC_Sy,
        !           264:        MDOC_Tn,
        !           265:        MDOC_Ux,
        !           266:        MDOC_Xc,
        !           267:        MDOC_Xo,
        !           268:        MDOC_Fo,
        !           269:        MDOC_Fc,
        !           270:        MDOC_Oo,
        !           271:        MDOC_Oc,
        !           272:        MDOC_Bk,
        !           273:        MDOC_Ek,
        !           274:        MDOC_Bt,
        !           275:        MDOC_Hf,
        !           276:        MDOC_Fr,
        !           277:        MDOC_Ud,
        !           278:        MDOC_Lb,
        !           279:        MDOC_Lp,
        !           280:        MDOC_Lk,
        !           281:        MDOC_Mt,
        !           282:        MDOC_Brq,
        !           283:        MDOC_Bro,
        !           284:        MDOC_Brc,
        !           285:        MDOC__C,
        !           286:        MDOC_Es,
        !           287:        MDOC_En,
        !           288:        MDOC_Dx,
        !           289:        MDOC__Q,
        !           290:        MDOC_br,
        !           291:        MDOC_sp,
        !           292:        MDOC__U,
        !           293:        MDOC_Ta,
        !           294:        MDOC_MAX
        !           295: };
        !           296:
        !           297: enum   mdocargt {
        !           298:        MDOC_Split,
        !           299:        MDOC_Nosplit,
        !           300:        MDOC_Ragged,
        !           301:        MDOC_Unfilled,
        !           302:        MDOC_Literal,
        !           303:        MDOC_File,
        !           304:        MDOC_Offset,
        !           305:        MDOC_Bullet,
        !           306:        MDOC_Dash,
        !           307:        MDOC_Hyphen,
        !           308:        MDOC_Item,
        !           309:        MDOC_Enum,
        !           310:        MDOC_Tag,
        !           311:        MDOC_Diag,
        !           312:        MDOC_Hang,
        !           313:        MDOC_Ohang,
        !           314:        MDOC_Inset,
        !           315:        MDOC_Column,
        !           316:        MDOC_Width,
        !           317:        MDOC_Compact,
        !           318:        MDOC_Std,
        !           319:        MDOC_Filled,
        !           320:        MDOC_Words,
        !           321:        MDOC_Emphasis,
        !           322:        MDOC_Symbolic,
        !           323:        MDOC_Nested,
        !           324:        MDOC_Centred,
        !           325:        MDOC_ARG_MAX
        !           326: };
        !           327:
        !           328: enum   mdoc_type {
        !           329:        MDOC_TEXT,
        !           330:        MDOC_ELEM,
        !           331:        MDOC_HEAD,
        !           332:        MDOC_TAIL,
        !           333:        MDOC_BODY,
        !           334:        MDOC_BLOCK,
        !           335:        MDOC_ROOT
        !           336: };
        !           337:
        !           338: enum   mdoc_sec {
        !           339:        SEC_NONE,
        !           340:        SEC_NAME,
        !           341:        SEC_LIBRARY,
        !           342:        SEC_SYNOPSIS,
        !           343:        SEC_DESCRIPTION,
        !           344:        SEC_IMPLEMENTATION,
        !           345:        SEC_RETURN_VALUES,
        !           346:        SEC_ENVIRONMENT,
        !           347:        SEC_FILES,
        !           348:        SEC_EXIT_STATUS,
        !           349:        SEC_EXAMPLES,
        !           350:        SEC_DIAGNOSTICS,
        !           351:        SEC_COMPATIBILITY,
        !           352:        SEC_ERRORS,
        !           353:        SEC_SEE_ALSO,
        !           354:        SEC_STANDARDS,
        !           355:        SEC_HISTORY,
        !           356:        SEC_AUTHORS,
        !           357:        SEC_CAVEATS,
        !           358:        SEC_BUGS,
        !           359:        SEC_SECURITY,
        !           360:        SEC_CUSTOM,
        !           361:        SEC__MAX
        !           362: };
        !           363:
        !           364: enum   mdoc_endbody {
        !           365:        ENDBODY_NOT = 0,
        !           366:        ENDBODY_SPACE,
        !           367:        ENDBODY_NOSPACE
        !           368: };
        !           369:
        !           370: enum   mdoc_list {
        !           371:        LIST__NONE = 0,
        !           372:        LIST_bullet,
        !           373:        LIST_column,
        !           374:        LIST_dash,
        !           375:        LIST_diag,
        !           376:        LIST_enum,
        !           377:        LIST_hang,
        !           378:        LIST_hyphen,
        !           379:        LIST_inset,
        !           380:        LIST_item,
        !           381:        LIST_ohang,
        !           382:        LIST_tag
        !           383: };
        !           384:
        !           385: enum   mdoc_disp {
        !           386:        DISP__NONE = 0,
        !           387:        DISP_centred,
        !           388:        DISP_ragged,
        !           389:        DISP_unfilled,
        !           390:        DISP_filled,
        !           391:        DISP_literal
        !           392: };
        !           393:
        !           394: enum   mdoc_auth {
        !           395:        AUTH__NONE = 0,
        !           396:        AUTH_split,
        !           397:        AUTH_nosplit
        !           398: };
        !           399:
        !           400: enum   mdoc_font {
        !           401:        FONT__NONE = 0,
        !           402:        FONT_Em,
        !           403:        FONT_Li,
        !           404:        FONT_Sy
        !           405: };
        !           406:
        !           407: struct man_meta {
        !           408:        char            *msec; /* `TH' section (e.g., 1--9) */
        !           409:        time_t           date; /* parsed `TH' date */
        !           410:        char            *rawdate; /* raw `TH' date */
        !           411:        char            *vol; /* `TH' volume (e.g., KM) */
        !           412:        char            *title; /* `TH' title (e.g., LS, CAT) */
        !           413:        char            *source; /* `TH' source (e.g., GNU) */
        !           414: };
        !           415:
        !           416: struct man_node {
        !           417:        struct man_node *parent;
        !           418:        struct man_node *child;
        !           419:        struct man_node *next;
        !           420:        struct man_node *prev;
        !           421:        int              nchild;
        !           422:        int              line;
        !           423:        int              pos;
        !           424:        enum mant        tok;
        !           425:        int              flags;
        !           426: #define        MAN_VALID       (1 << 0)
        !           427: #define        MAN_ACTED       (1 << 1)
        !           428: #define        MAN_EOS         (1 << 2)
        !           429:        enum man_type    type;
        !           430:        char            *string;
        !           431:        struct man_node *head;
        !           432:        struct man_node *body;
        !           433: };
        !           434:
        !           435: struct mdoc_meta {
        !           436:        char             *msec; /* `Dt' section (e.g., 1--9) */
        !           437:        char             *vol; /* `Dt' volume (e.g., LOCAL) */
        !           438:        char             *arch; /* `Dt' architecture (e.g., i386) */
        !           439:        time_t            date; /* `Dd' date */
        !           440:        char             *title; /* `Dt' title (e.g., LS, CAT) */
        !           441:        char             *os; /* `Os' system (e.g., OpenBSD) */
        !           442:        char             *name; /* leading `Nm' (e.g., ls, cat) */
        !           443: };
        !           444:
        !           445: struct mdoc_argv {
        !           446:        enum mdocargt     arg;
        !           447:        int               line;
        !           448:        int               pos;
        !           449:        size_t            sz;
        !           450:        char            **value;
        !           451: };
        !           452:
        !           453: struct         mdoc_arg {
        !           454:        size_t            argc;
        !           455:        struct mdoc_argv *argv;
        !           456:        unsigned int      refcnt;
        !           457: };
        !           458:
        !           459:
        !           460: struct mdoc_bd {
        !           461:        const char       *offs; /* -offset */
        !           462:        enum mdoc_disp    type; /* -ragged, etc. */
        !           463:        int               comp; /* -compact */
        !           464: };
        !           465:
        !           466: struct mdoc_bl {
        !           467:        const char       *width; /* -width */
        !           468:        const char       *offs; /* -offset */
        !           469:        enum mdoc_list    type; /* -tag, -enum, etc. */
        !           470:        int               comp; /* -compact */
        !           471:        size_t            ncols; /* -column arg count */
        !           472:        const char      **cols; /* -column val ptr */
        !           473: };
        !           474:
        !           475: struct mdoc_bf {
        !           476:        enum mdoc_font    font; /* font */
        !           477: };
        !           478:
        !           479: struct mdoc_an {
        !           480:        enum mdoc_auth    auth; /* -split, etc. */
        !           481: };
        !           482:
        !           483: struct mdoc_node {
        !           484:        struct mdoc_node *parent; /* parent AST node */
        !           485:        struct mdoc_node *child; /* first child AST node */
        !           486:        struct mdoc_node *next; /* sibling AST node */
        !           487:        struct mdoc_node *prev; /* prior sibling AST node */
        !           488:        int               nchild; /* number children */
        !           489:        int               line; /* parse line */
        !           490:        int               pos; /* parse column */
        !           491:        enum mdoct        tok; /* tok or MDOC__MAX if none */
        !           492:        int               flags;
        !           493: #define        MDOC_VALID       (1 << 0) /* has been validated */
        !           494: #define        MDOC_ACTED       (1 << 1) /* has been acted upon */
        !           495: #define        MDOC_EOS         (1 << 2) /* at sentence boundary */
        !           496: #define        MDOC_LINE        (1 << 3) /* first macro/text on line */
        !           497: #define        MDOC_SYNPRETTY   (1 << 4) /* SYNOPSIS-style formatting */
        !           498: #define        MDOC_ENDED       (1 << 5) /* rendering has been ended */
        !           499:        enum mdoc_type    type; /* AST node type */
        !           500:        enum mdoc_sec     sec; /* current named section */
        !           501:        /* XXX: these can be union'd to shave a few bytes. */
        !           502:        struct mdoc_arg  *args;         /* BLOCK/ELEM */
        !           503:        struct mdoc_node *pending;      /* BLOCK */
        !           504:        struct mdoc_node *head;         /* BLOCK */
        !           505:        struct mdoc_node *body;         /* BLOCK */
        !           506:        struct mdoc_node *tail;         /* BLOCK */
        !           507:        char             *string;       /* TEXT */
        !           508:        enum mdoc_endbody end;          /* BODY */
        !           509:
        !           510:        union {
        !           511:                struct mdoc_an  An;
        !           512:                struct mdoc_bd *Bd;
        !           513:                struct mdoc_bf *Bf;
        !           514:                struct mdoc_bl *Bl;
        !           515:        } data;
1.16      kristaps  516: };
                    517:
                    518: /*
                    519:  * A single register entity.  If "set" is zero, the value of the
                    520:  * register should be the default one, which is per-register.  It's
                    521:  * assumed that callers know which type in "v" corresponds to which
                    522:  * register value.
                    523:  */
                    524: struct reg {
                    525:        int               set; /* whether set or not */
                    526:        union {
                    527:                unsigned  u; /* unsigned integer */
                    528:        } v;
                    529: };
                    530:
                    531: /*
                    532:  * The primary interface to setting register values is in libroff,
                    533:  * although libmdoc and libman from time to time will manipulate
                    534:  * registers (such as `.Sh SYNOPSIS' enabling REG_nS).
                    535:  */
                    536: struct regset {
                    537:        struct reg        regs[REG__MAX];
                    538: };
                    539:
                    540: /*
                    541:  * Callback function for warnings, errors, and fatal errors as they
                    542:  * occur in the compilers libroff, libmdoc, and libman.
                    543:  */
                    544: typedef        int             (*mandocmsg)(enum mandocerr, void *,
                    545:                                int, int, const char *);
1.1       kristaps  546:
                    547: __END_DECLS
                    548:
                    549: #endif /*!MANDOC_H*/

CVSweb