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

Annotation of mandoc/roff.h, Revision 1.66

1.66    ! schwarze    1: /*     $Id: roff.h,v 1.65 2018/12/14 06:33:14 schwarze Exp $   */
1.1       kristaps    2: /*
1.28      schwarze    3:  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
1.61      schwarze    4:  * Copyright (c) 2013,2014,2015,2017,2018 Ingo Schwarze <schwarze@openbsd.org>
1.1       kristaps    5:  *
                      6:  * Permission to use, copy, modify, and distribute this software for any
1.12      kristaps    7:  * purpose with or without fee is hereby granted, provided that the above
                      8:  * copyright notice and this permission notice appear in all copies.
1.1       kristaps    9:  *
1.28      schwarze   10:  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
1.12      kristaps   11:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1.28      schwarze   12:  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
1.12      kristaps   13:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
                     14:  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
                     15:  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
                     16:  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1.63      schwarze   17:  *
                     18:  * Common data types for all syntax trees and related functions.
1.1       kristaps   19:  */
                     20:
1.42      schwarze   21: struct ohash;
1.29      schwarze   22: struct mdoc_arg;
                     23: union  mdoc_data;
1.66    ! schwarze   24: struct tbl_span;
        !            25: struct eqn_box;
1.29      schwarze   26:
1.32      schwarze   27: enum   roff_macroset {
                     28:        MACROSET_NONE = 0,
                     29:        MACROSET_MDOC,
                     30:        MACROSET_MAN
                     31: };
                     32:
1.29      schwarze   33: enum   roff_sec {
                     34:        SEC_NONE = 0,
                     35:        SEC_NAME,
                     36:        SEC_LIBRARY,
                     37:        SEC_SYNOPSIS,
                     38:        SEC_DESCRIPTION,
                     39:        SEC_CONTEXT,
                     40:        SEC_IMPLEMENTATION,     /* IMPLEMENTATION NOTES */
                     41:        SEC_RETURN_VALUES,
                     42:        SEC_ENVIRONMENT,
                     43:        SEC_FILES,
                     44:        SEC_EXIT_STATUS,
                     45:        SEC_EXAMPLES,
                     46:        SEC_DIAGNOSTICS,
                     47:        SEC_COMPATIBILITY,
                     48:        SEC_ERRORS,
                     49:        SEC_SEE_ALSO,
                     50:        SEC_STANDARDS,
                     51:        SEC_HISTORY,
                     52:        SEC_AUTHORS,
                     53:        SEC_CAVEATS,
                     54:        SEC_BUGS,
                     55:        SEC_SECURITY,
                     56:        SEC_CUSTOM,
                     57:        SEC__MAX
                     58: };
                     59:
1.28      schwarze   60: enum   roff_type {
                     61:        ROFFT_ROOT,
                     62:        ROFFT_BLOCK,
                     63:        ROFFT_HEAD,
                     64:        ROFFT_BODY,
                     65:        ROFFT_TAIL,
                     66:        ROFFT_ELEM,
                     67:        ROFFT_TEXT,
1.59      schwarze   68:        ROFFT_COMMENT,
1.28      schwarze   69:        ROFFT_TBL,
                     70:        ROFFT_EQN
1.29      schwarze   71: };
                     72:
1.41      schwarze   73: enum   roff_tok {
1.43      schwarze   74:        ROFF_br = 0,
1.50      schwarze   75:        ROFF_ce,
1.44      schwarze   76:        ROFF_ft,
1.45      schwarze   77:        ROFF_ll,
1.49      schwarze   78:        ROFF_mc,
1.54      schwarze   79:        ROFF_po,
1.53      schwarze   80:        ROFF_rj,
1.46      schwarze   81:        ROFF_sp,
1.47      schwarze   82:        ROFF_ta,
1.48      schwarze   83:        ROFF_ti,
1.43      schwarze   84:        ROFF_MAX,
                     85:        ROFF_ab,
1.41      schwarze   86:        ROFF_ad,
                     87:        ROFF_af,
                     88:        ROFF_aln,
                     89:        ROFF_als,
                     90:        ROFF_am,
                     91:        ROFF_am1,
                     92:        ROFF_ami,
                     93:        ROFF_ami1,
                     94:        ROFF_as,
                     95:        ROFF_as1,
                     96:        ROFF_asciify,
                     97:        ROFF_backtrace,
                     98:        ROFF_bd,
                     99:        ROFF_bleedat,
                    100:        ROFF_blm,
                    101:        ROFF_box,
                    102:        ROFF_boxa,
                    103:        ROFF_bp,
                    104:        ROFF_BP,
                    105:        ROFF_break,
                    106:        ROFF_breakchar,
                    107:        ROFF_brnl,
                    108:        ROFF_brp,
                    109:        ROFF_brpnl,
                    110:        ROFF_c2,
                    111:        ROFF_cc,
                    112:        ROFF_cf,
                    113:        ROFF_cflags,
                    114:        ROFF_ch,
                    115:        ROFF_char,
                    116:        ROFF_chop,
                    117:        ROFF_class,
                    118:        ROFF_close,
                    119:        ROFF_CL,
                    120:        ROFF_color,
                    121:        ROFF_composite,
                    122:        ROFF_continue,
                    123:        ROFF_cp,
                    124:        ROFF_cropat,
                    125:        ROFF_cs,
                    126:        ROFF_cu,
                    127:        ROFF_da,
                    128:        ROFF_dch,
                    129:        ROFF_Dd,
                    130:        ROFF_de,
                    131:        ROFF_de1,
                    132:        ROFF_defcolor,
                    133:        ROFF_dei,
                    134:        ROFF_dei1,
                    135:        ROFF_device,
                    136:        ROFF_devicem,
                    137:        ROFF_di,
                    138:        ROFF_do,
                    139:        ROFF_ds,
                    140:        ROFF_ds1,
                    141:        ROFF_dwh,
                    142:        ROFF_dt,
                    143:        ROFF_ec,
                    144:        ROFF_ecr,
                    145:        ROFF_ecs,
                    146:        ROFF_el,
                    147:        ROFF_em,
                    148:        ROFF_EN,
                    149:        ROFF_eo,
                    150:        ROFF_EP,
                    151:        ROFF_EQ,
                    152:        ROFF_errprint,
                    153:        ROFF_ev,
                    154:        ROFF_evc,
                    155:        ROFF_ex,
                    156:        ROFF_fallback,
                    157:        ROFF_fam,
                    158:        ROFF_fc,
                    159:        ROFF_fchar,
                    160:        ROFF_fcolor,
                    161:        ROFF_fdeferlig,
                    162:        ROFF_feature,
                    163:        /* MAN_fi; ignored in mdoc(7) */
                    164:        ROFF_fkern,
                    165:        ROFF_fl,
                    166:        ROFF_flig,
                    167:        ROFF_fp,
                    168:        ROFF_fps,
                    169:        ROFF_fschar,
                    170:        ROFF_fspacewidth,
                    171:        ROFF_fspecial,
                    172:        ROFF_ftr,
                    173:        ROFF_fzoom,
                    174:        ROFF_gcolor,
                    175:        ROFF_hc,
                    176:        ROFF_hcode,
                    177:        ROFF_hidechar,
                    178:        ROFF_hla,
                    179:        ROFF_hlm,
                    180:        ROFF_hpf,
                    181:        ROFF_hpfa,
                    182:        ROFF_hpfcode,
                    183:        ROFF_hw,
                    184:        ROFF_hy,
                    185:        ROFF_hylang,
                    186:        ROFF_hylen,
                    187:        ROFF_hym,
                    188:        ROFF_hypp,
                    189:        ROFF_hys,
                    190:        ROFF_ie,
                    191:        ROFF_if,
                    192:        ROFF_ig,
                    193:        /* MAN_in; ignored in mdoc(7) */
                    194:        ROFF_index,
                    195:        ROFF_it,
                    196:        ROFF_itc,
                    197:        ROFF_IX,
                    198:        ROFF_kern,
                    199:        ROFF_kernafter,
                    200:        ROFF_kernbefore,
                    201:        ROFF_kernpair,
                    202:        ROFF_lc,
                    203:        ROFF_lc_ctype,
                    204:        ROFF_lds,
                    205:        ROFF_length,
                    206:        ROFF_letadj,
                    207:        ROFF_lf,
                    208:        ROFF_lg,
                    209:        ROFF_lhang,
                    210:        ROFF_linetabs,
                    211:        ROFF_lnr,
                    212:        ROFF_lnrf,
                    213:        ROFF_lpfx,
                    214:        ROFF_ls,
                    215:        ROFF_lsm,
                    216:        ROFF_lt,
                    217:        ROFF_mediasize,
                    218:        ROFF_minss,
                    219:        ROFF_mk,
                    220:        ROFF_mso,
                    221:        ROFF_na,
                    222:        ROFF_ne,
                    223:        /* MAN_nf; ignored in mdoc(7) */
                    224:        ROFF_nh,
                    225:        ROFF_nhychar,
                    226:        ROFF_nm,
                    227:        ROFF_nn,
                    228:        ROFF_nop,
                    229:        ROFF_nr,
                    230:        ROFF_nrf,
                    231:        ROFF_nroff,
                    232:        ROFF_ns,
                    233:        ROFF_nx,
                    234:        ROFF_open,
                    235:        ROFF_opena,
                    236:        ROFF_os,
                    237:        ROFF_output,
                    238:        ROFF_padj,
                    239:        ROFF_papersize,
                    240:        ROFF_pc,
                    241:        ROFF_pev,
                    242:        ROFF_pi,
                    243:        ROFF_PI,
                    244:        ROFF_pl,
                    245:        ROFF_pm,
                    246:        ROFF_pn,
                    247:        ROFF_pnr,
                    248:        ROFF_ps,
                    249:        ROFF_psbb,
                    250:        ROFF_pshape,
                    251:        ROFF_pso,
                    252:        ROFF_ptr,
                    253:        ROFF_pvs,
                    254:        ROFF_rchar,
                    255:        ROFF_rd,
                    256:        ROFF_recursionlimit,
                    257:        ROFF_return,
                    258:        ROFF_rfschar,
                    259:        ROFF_rhang,
                    260:        ROFF_rm,
                    261:        ROFF_rn,
                    262:        ROFF_rnn,
                    263:        ROFF_rr,
                    264:        ROFF_rs,
                    265:        ROFF_rt,
                    266:        ROFF_schar,
                    267:        ROFF_sentchar,
                    268:        ROFF_shc,
                    269:        ROFF_shift,
                    270:        ROFF_sizes,
                    271:        ROFF_so,
                    272:        ROFF_spacewidth,
                    273:        ROFF_special,
                    274:        ROFF_spreadwarn,
                    275:        ROFF_ss,
                    276:        ROFF_sty,
                    277:        ROFF_substring,
                    278:        ROFF_sv,
                    279:        ROFF_sy,
                    280:        ROFF_T_,
                    281:        ROFF_tc,
                    282:        ROFF_TE,
                    283:        ROFF_TH,
                    284:        ROFF_tkf,
                    285:        ROFF_tl,
                    286:        ROFF_tm,
                    287:        ROFF_tm1,
                    288:        ROFF_tmc,
                    289:        ROFF_tr,
                    290:        ROFF_track,
                    291:        ROFF_transchar,
                    292:        ROFF_trf,
                    293:        ROFF_trimat,
                    294:        ROFF_trin,
                    295:        ROFF_trnt,
                    296:        ROFF_troff,
                    297:        ROFF_TS,
                    298:        ROFF_uf,
                    299:        ROFF_ul,
                    300:        ROFF_unformat,
                    301:        ROFF_unwatch,
                    302:        ROFF_unwatchn,
                    303:        ROFF_vpt,
                    304:        ROFF_vs,
                    305:        ROFF_warn,
                    306:        ROFF_warnscale,
                    307:        ROFF_watch,
                    308:        ROFF_watchlength,
                    309:        ROFF_watchn,
                    310:        ROFF_wh,
                    311:        ROFF_while,
                    312:        ROFF_write,
                    313:        ROFF_writec,
                    314:        ROFF_writem,
                    315:        ROFF_xflag,
                    316:        ROFF_cblock,
1.51      schwarze  317:        ROFF_RENAMED,
1.41      schwarze  318:        ROFF_USERDEF,
                    319:        TOKEN_NONE,
                    320:        MDOC_Dd,
                    321:        MDOC_Dt,
                    322:        MDOC_Os,
                    323:        MDOC_Sh,
                    324:        MDOC_Ss,
                    325:        MDOC_Pp,
                    326:        MDOC_D1,
                    327:        MDOC_Dl,
                    328:        MDOC_Bd,
                    329:        MDOC_Ed,
                    330:        MDOC_Bl,
                    331:        MDOC_El,
                    332:        MDOC_It,
                    333:        MDOC_Ad,
                    334:        MDOC_An,
                    335:        MDOC_Ap,
                    336:        MDOC_Ar,
                    337:        MDOC_Cd,
                    338:        MDOC_Cm,
                    339:        MDOC_Dv,
                    340:        MDOC_Er,
                    341:        MDOC_Ev,
                    342:        MDOC_Ex,
                    343:        MDOC_Fa,
                    344:        MDOC_Fd,
                    345:        MDOC_Fl,
                    346:        MDOC_Fn,
                    347:        MDOC_Ft,
                    348:        MDOC_Ic,
                    349:        MDOC_In,
                    350:        MDOC_Li,
                    351:        MDOC_Nd,
                    352:        MDOC_Nm,
                    353:        MDOC_Op,
                    354:        MDOC_Ot,
                    355:        MDOC_Pa,
                    356:        MDOC_Rv,
                    357:        MDOC_St,
                    358:        MDOC_Va,
                    359:        MDOC_Vt,
                    360:        MDOC_Xr,
                    361:        MDOC__A,
                    362:        MDOC__B,
                    363:        MDOC__D,
                    364:        MDOC__I,
                    365:        MDOC__J,
                    366:        MDOC__N,
                    367:        MDOC__O,
                    368:        MDOC__P,
                    369:        MDOC__R,
                    370:        MDOC__T,
                    371:        MDOC__V,
                    372:        MDOC_Ac,
                    373:        MDOC_Ao,
                    374:        MDOC_Aq,
                    375:        MDOC_At,
                    376:        MDOC_Bc,
                    377:        MDOC_Bf,
                    378:        MDOC_Bo,
                    379:        MDOC_Bq,
                    380:        MDOC_Bsx,
                    381:        MDOC_Bx,
                    382:        MDOC_Db,
                    383:        MDOC_Dc,
                    384:        MDOC_Do,
                    385:        MDOC_Dq,
                    386:        MDOC_Ec,
                    387:        MDOC_Ef,
                    388:        MDOC_Em,
                    389:        MDOC_Eo,
                    390:        MDOC_Fx,
                    391:        MDOC_Ms,
                    392:        MDOC_No,
                    393:        MDOC_Ns,
                    394:        MDOC_Nx,
                    395:        MDOC_Ox,
                    396:        MDOC_Pc,
                    397:        MDOC_Pf,
                    398:        MDOC_Po,
                    399:        MDOC_Pq,
                    400:        MDOC_Qc,
                    401:        MDOC_Ql,
                    402:        MDOC_Qo,
                    403:        MDOC_Qq,
                    404:        MDOC_Re,
                    405:        MDOC_Rs,
                    406:        MDOC_Sc,
                    407:        MDOC_So,
                    408:        MDOC_Sq,
                    409:        MDOC_Sm,
                    410:        MDOC_Sx,
                    411:        MDOC_Sy,
                    412:        MDOC_Tn,
                    413:        MDOC_Ux,
                    414:        MDOC_Xc,
                    415:        MDOC_Xo,
                    416:        MDOC_Fo,
                    417:        MDOC_Fc,
                    418:        MDOC_Oo,
                    419:        MDOC_Oc,
                    420:        MDOC_Bk,
                    421:        MDOC_Ek,
                    422:        MDOC_Bt,
                    423:        MDOC_Hf,
                    424:        MDOC_Fr,
                    425:        MDOC_Ud,
                    426:        MDOC_Lb,
                    427:        MDOC_Lp,
                    428:        MDOC_Lk,
                    429:        MDOC_Mt,
                    430:        MDOC_Brq,
                    431:        MDOC_Bro,
                    432:        MDOC_Brc,
                    433:        MDOC__C,
                    434:        MDOC_Es,
                    435:        MDOC_En,
                    436:        MDOC_Dx,
                    437:        MDOC__Q,
                    438:        MDOC__U,
                    439:        MDOC_Ta,
                    440:        MDOC_MAX,
                    441:        MAN_TH,
                    442:        MAN_SH,
                    443:        MAN_SS,
                    444:        MAN_TP,
1.60      schwarze  445:        MAN_TQ,
1.41      schwarze  446:        MAN_LP,
                    447:        MAN_PP,
                    448:        MAN_P,
                    449:        MAN_IP,
                    450:        MAN_HP,
                    451:        MAN_SM,
                    452:        MAN_SB,
                    453:        MAN_BI,
                    454:        MAN_IB,
                    455:        MAN_BR,
                    456:        MAN_RB,
                    457:        MAN_R,
                    458:        MAN_B,
                    459:        MAN_I,
                    460:        MAN_IR,
                    461:        MAN_RI,
                    462:        MAN_nf,
                    463:        MAN_fi,
                    464:        MAN_RE,
                    465:        MAN_RS,
                    466:        MAN_DT,
                    467:        MAN_UC,
                    468:        MAN_PD,
                    469:        MAN_AT,
                    470:        MAN_in,
1.61      schwarze  471:        MAN_SY,
                    472:        MAN_YS,
1.41      schwarze  473:        MAN_OP,
                    474:        MAN_EX,
                    475:        MAN_EE,
                    476:        MAN_UR,
                    477:        MAN_UE,
1.57      schwarze  478:        MAN_MT,
                    479:        MAN_ME,
1.41      schwarze  480:        MAN_MAX
                    481: };
                    482:
1.29      schwarze  483: /*
                    484:  * Indicates that a BODY's formatting has ended, but
                    485:  * the scope is still open.  Used for badly nested blocks.
                    486:  */
                    487: enum   mdoc_endbody {
                    488:        ENDBODY_NOT = 0,
1.40      schwarze  489:        ENDBODY_SPACE   /* Is broken: append a space. */
1.64      schwarze  490: };
                    491:
                    492: enum   mandoc_os {
                    493:        MANDOC_OS_OTHER = 0,
                    494:        MANDOC_OS_NETBSD,
                    495:        MANDOC_OS_OPENBSD
1.29      schwarze  496: };
                    497:
                    498: struct roff_node {
                    499:        struct roff_node *parent;  /* Parent AST node. */
                    500:        struct roff_node *child;   /* First child AST node. */
                    501:        struct roff_node *last;    /* Last child AST node. */
                    502:        struct roff_node *next;    /* Sibling AST node. */
                    503:        struct roff_node *prev;    /* Prior sibling AST node. */
                    504:        struct roff_node *head;    /* BLOCK */
                    505:        struct roff_node *body;    /* BLOCK/ENDBODY */
                    506:        struct roff_node *tail;    /* BLOCK */
                    507:        struct mdoc_arg  *args;    /* BLOCK/ELEM */
                    508:        union mdoc_data  *norm;    /* Normalized arguments. */
                    509:        char             *string;  /* TEXT */
1.62      schwarze  510:        struct tbl_span  *span;    /* TBL */
1.58      schwarze  511:        struct eqn_box   *eqn;     /* EQN */
1.29      schwarze  512:        int               line;    /* Input file line number. */
                    513:        int               pos;     /* Input file column number. */
                    514:        int               flags;
1.39      schwarze  515: #define        NODE_VALID       (1 << 0)  /* Has been validated. */
                    516: #define        NODE_ENDED       (1 << 1)  /* Gone past body end mark. */
                    517: #define        NODE_EOS         (1 << 2)  /* At sentence boundary. */
                    518: #define        NODE_LINE        (1 << 3)  /* First macro/text on line. */
                    519: #define        NODE_SYNPRETTY   (1 << 4)  /* SYNOPSIS-style formatting. */
                    520: #define        NODE_BROKEN      (1 << 5)  /* Must validate parent when ending. */
                    521: #define        NODE_DELIMO      (1 << 6)
                    522: #define        NODE_DELIMC      (1 << 7)
1.38      schwarze  523: #define        NODE_NOSRC       (1 << 8)  /* Generated node, not in input file. */
                    524: #define        NODE_NOPRT       (1 << 9)  /* Shall not print anything. */
1.29      schwarze  525:        int               prev_font; /* Before entering this node. */
                    526:        int               aux;     /* Decoded node data, type-dependent. */
1.41      schwarze  527:        enum roff_tok     tok;     /* Request or macro ID. */
1.29      schwarze  528:        enum roff_type    type;    /* AST node type. */
                    529:        enum roff_sec     sec;     /* Current named section. */
                    530:        enum mdoc_endbody end;     /* BODY */
1.28      schwarze  531: };
1.30      schwarze  532:
                    533: struct roff_meta {
1.66    ! schwarze  534:        struct roff_node *first;   /* The first node parsed. */
1.30      schwarze  535:        char             *msec;    /* Manual section, usually a digit. */
                    536:        char             *vol;     /* Manual volume title. */
                    537:        char             *os;      /* Operating system. */
                    538:        char             *arch;    /* Machine architecture. */
                    539:        char             *title;   /* Manual title, usually CAPS. */
                    540:        char             *name;    /* Leading manual name. */
                    541:        char             *date;    /* Normalized date. */
1.66    ! schwarze  542:        char             *sodest;  /* .so target file name or NULL. */
1.30      schwarze  543:        int               hasbody; /* Document is not empty. */
1.56      schwarze  544:        int               rcsids;  /* Bits indexed by enum mandoc_os. */
                    545:        enum mandoc_os    os_e;    /* Operating system. */
1.32      schwarze  546:        enum roff_macroset macroset; /* Kind of high-level macros used. */
1.30      schwarze  547: };
1.34      schwarze  548:
1.41      schwarze  549: extern const char *const *roff_name;
1.34      schwarze  550:
1.42      schwarze  551:
1.34      schwarze  552: void            deroff(char **, const struct roff_node *);

CVSweb