1 /* $Id: man.h,v 1.69 2015/01/24 02:41:49 schwarze Exp $ */ 2 /* 3 * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> 4 * Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org> 5 * 6 * Permission to use, copy, modify, and distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 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. 17 */ 18 19 enum mant { 20 MAN_br = 0, 21 MAN_TH, 22 MAN_SH, 23 MAN_SS, 24 MAN_TP, 25 MAN_LP, 26 MAN_PP, 27 MAN_P, 28 MAN_IP, 29 MAN_HP, 30 MAN_SM, 31 MAN_SB, 32 MAN_BI, 33 MAN_IB, 34 MAN_BR, 35 MAN_RB, 36 MAN_R, 37 MAN_B, 38 MAN_I, 39 MAN_IR, 40 MAN_RI, 41 MAN_sp, 42 MAN_nf, 43 MAN_fi, 44 MAN_RE, 45 MAN_RS, 46 MAN_DT, 47 MAN_UC, 48 MAN_PD, 49 MAN_AT, 50 MAN_in, 51 MAN_ft, 52 MAN_OP, 53 MAN_EX, 54 MAN_EE, 55 MAN_UR, 56 MAN_UE, 57 MAN_ll, 58 MAN_MAX 59 }; 60 61 enum man_type { 62 MAN_TEXT, 63 MAN_ELEM, 64 MAN_ROOT, 65 MAN_BLOCK, 66 MAN_HEAD, 67 MAN_BODY, 68 MAN_TBL, 69 MAN_EQN 70 }; 71 72 struct man_meta { 73 char *msec; /* `TH' section (1, 3p, etc.) */ 74 char *date; /* `TH' normalised date */ 75 char *vol; /* `TH' volume */ 76 char *title; /* `TH' title (e.g., FOO) */ 77 char *source; /* `TH' source (e.g., GNU) */ 78 int hasbody; /* document is not empty */ 79 }; 80 81 struct man_node { 82 struct man_node *parent; /* parent AST node */ 83 struct man_node *child; /* first child AST node */ 84 struct man_node *next; /* sibling AST node */ 85 struct man_node *prev; /* prior sibling AST node */ 86 int nchild; /* number children */ 87 int line; 88 int pos; 89 enum mant tok; /* tok or MAN__MAX if none */ 90 int flags; 91 #define MAN_VALID (1 << 0) /* has been validated */ 92 #define MAN_EOS (1 << 2) /* at sentence boundary */ 93 #define MAN_LINE (1 << 3) /* first macro/text on line */ 94 enum man_type type; /* AST node type */ 95 char *string; /* TEXT node argument */ 96 struct man_node *head; /* BLOCK node HEAD ptr */ 97 struct man_node *tail; /* BLOCK node TAIL ptr */ 98 struct man_node *body; /* BLOCK node BODY ptr */ 99 const struct tbl_span *span; /* TBL */ 100 const struct eqn *eqn; /* EQN */ 101 int aux; /* decoded node data, type-dependent */ 102 }; 103 104 /* Names of macros. Index is enum mant. */ 105 extern const char *const *man_macronames; 106 107 __BEGIN_DECLS 108 109 struct man; 110 111 const struct man_node *man_node(const struct man *); 112 const struct man_meta *man_meta(const struct man *); 113 const struct mparse *man_mparse(const struct man *); 114 void man_deroff(char **, const struct man_node *); 115 116 __END_DECLS 117