1*0a6a1f1dSLionel Sambuc /* Id: man.h,v 1.62 2013/10/17 20:54:58 schwarze Exp */ 2d65f6f70SBen Gras /* 392395e9cSLionel Sambuc * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> 4d65f6f70SBen Gras * 5d65f6f70SBen Gras * Permission to use, copy, modify, and distribute this software for any 6d65f6f70SBen Gras * purpose with or without fee is hereby granted, provided that the above 7d65f6f70SBen Gras * copyright notice and this permission notice appear in all copies. 8d65f6f70SBen Gras * 9d65f6f70SBen Gras * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10d65f6f70SBen Gras * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11d65f6f70SBen Gras * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12d65f6f70SBen Gras * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13d65f6f70SBen Gras * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14d65f6f70SBen Gras * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15d65f6f70SBen Gras * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16d65f6f70SBen Gras */ 17d65f6f70SBen Gras #ifndef MAN_H 18d65f6f70SBen Gras #define MAN_H 19d65f6f70SBen Gras 20d65f6f70SBen Gras enum mant { 21d65f6f70SBen Gras MAN_br = 0, 22d65f6f70SBen Gras MAN_TH, 23d65f6f70SBen Gras MAN_SH, 24d65f6f70SBen Gras MAN_SS, 25d65f6f70SBen Gras MAN_TP, 26d65f6f70SBen Gras MAN_LP, 27d65f6f70SBen Gras MAN_PP, 28d65f6f70SBen Gras MAN_P, 29d65f6f70SBen Gras MAN_IP, 30d65f6f70SBen Gras MAN_HP, 31d65f6f70SBen Gras MAN_SM, 32d65f6f70SBen Gras MAN_SB, 33d65f6f70SBen Gras MAN_BI, 34d65f6f70SBen Gras MAN_IB, 35d65f6f70SBen Gras MAN_BR, 36d65f6f70SBen Gras MAN_RB, 37d65f6f70SBen Gras MAN_R, 38d65f6f70SBen Gras MAN_B, 39d65f6f70SBen Gras MAN_I, 40d65f6f70SBen Gras MAN_IR, 41d65f6f70SBen Gras MAN_RI, 42d65f6f70SBen Gras MAN_na, 43d65f6f70SBen Gras MAN_sp, 44d65f6f70SBen Gras MAN_nf, 45d65f6f70SBen Gras MAN_fi, 46d65f6f70SBen Gras MAN_RE, 47d65f6f70SBen Gras MAN_RS, 48d65f6f70SBen Gras MAN_DT, 49d65f6f70SBen Gras MAN_UC, 50d65f6f70SBen Gras MAN_PD, 51d65f6f70SBen Gras MAN_AT, 52d65f6f70SBen Gras MAN_in, 53d65f6f70SBen Gras MAN_ft, 5492395e9cSLionel Sambuc MAN_OP, 55*0a6a1f1dSLionel Sambuc MAN_EX, 56*0a6a1f1dSLionel Sambuc MAN_EE, 57*0a6a1f1dSLionel Sambuc MAN_UR, 58*0a6a1f1dSLionel Sambuc MAN_UE, 59d65f6f70SBen Gras MAN_MAX 60d65f6f70SBen Gras }; 61d65f6f70SBen Gras 62d65f6f70SBen Gras enum man_type { 63d65f6f70SBen Gras MAN_TEXT, 64d65f6f70SBen Gras MAN_ELEM, 65d65f6f70SBen Gras MAN_ROOT, 66d65f6f70SBen Gras MAN_BLOCK, 67d65f6f70SBen Gras MAN_HEAD, 68d65f6f70SBen Gras MAN_BODY, 6992395e9cSLionel Sambuc MAN_TAIL, 7092395e9cSLionel Sambuc MAN_TBL, 7192395e9cSLionel Sambuc MAN_EQN 72d65f6f70SBen Gras }; 73d65f6f70SBen Gras 74d65f6f70SBen Gras struct man_meta { 75d65f6f70SBen Gras char *msec; /* `TH' section (1, 3p, etc.) */ 7692395e9cSLionel Sambuc char *date; /* `TH' normalised date */ 77d65f6f70SBen Gras char *vol; /* `TH' volume */ 78d65f6f70SBen Gras char *title; /* `TH' title (e.g., FOO) */ 79d65f6f70SBen Gras char *source; /* `TH' source (e.g., GNU) */ 80d65f6f70SBen Gras }; 81d65f6f70SBen Gras 82d65f6f70SBen Gras struct man_node { 83d65f6f70SBen Gras struct man_node *parent; /* parent AST node */ 84d65f6f70SBen Gras struct man_node *child; /* first child AST node */ 85d65f6f70SBen Gras struct man_node *next; /* sibling AST node */ 86d65f6f70SBen Gras struct man_node *prev; /* prior sibling AST node */ 87d65f6f70SBen Gras int nchild; /* number children */ 88d65f6f70SBen Gras int line; 89d65f6f70SBen Gras int pos; 90d65f6f70SBen Gras enum mant tok; /* tok or MAN__MAX if none */ 91d65f6f70SBen Gras int flags; 92d65f6f70SBen Gras #define MAN_VALID (1 << 0) /* has been validated */ 93d65f6f70SBen Gras #define MAN_EOS (1 << 2) /* at sentence boundary */ 9492395e9cSLionel Sambuc #define MAN_LINE (1 << 3) /* first macro/text on line */ 95d65f6f70SBen Gras enum man_type type; /* AST node type */ 96d65f6f70SBen Gras char *string; /* TEXT node argument */ 97d65f6f70SBen Gras struct man_node *head; /* BLOCK node HEAD ptr */ 9892395e9cSLionel Sambuc struct man_node *tail; /* BLOCK node TAIL ptr */ 99d65f6f70SBen Gras struct man_node *body; /* BLOCK node BODY ptr */ 100d65f6f70SBen Gras const struct tbl_span *span; /* TBL */ 10192395e9cSLionel Sambuc const struct eqn *eqn; /* EQN */ 102d65f6f70SBen Gras }; 103d65f6f70SBen Gras 10492395e9cSLionel Sambuc /* Names of macros. Index is enum mant. */ 105d65f6f70SBen Gras extern const char *const *man_macronames; 106d65f6f70SBen Gras 107d65f6f70SBen Gras __BEGIN_DECLS 108d65f6f70SBen Gras 109d65f6f70SBen Gras struct man; 110d65f6f70SBen Gras 111d65f6f70SBen Gras const struct man_node *man_node(const struct man *); 112d65f6f70SBen Gras const struct man_meta *man_meta(const struct man *); 11392395e9cSLionel Sambuc const struct mparse *man_mparse(const struct man *); 114d65f6f70SBen Gras 115d65f6f70SBen Gras __END_DECLS 116d65f6f70SBen Gras 117d65f6f70SBen Gras #endif /*!MAN_H*/ 118