1 /* $Id: man.h,v 1.9 2009/09/18 22:46:14 schwarze Exp $ */ 2 /* 3 * Copyright (c) 2009 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 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 MAN_H 18 #define MAN_H 19 20 #include <time.h> 21 22 #define MAN_br 0 23 #define MAN_TH 1 24 #define MAN_SH 2 25 #define MAN_SS 3 26 #define MAN_TP 4 27 #define MAN_LP 5 28 #define MAN_PP 6 29 #define MAN_P 7 30 #define MAN_IP 8 31 #define MAN_HP 9 32 #define MAN_SM 10 33 #define MAN_SB 11 34 #define MAN_BI 12 35 #define MAN_IB 13 36 #define MAN_BR 14 37 #define MAN_RB 15 38 #define MAN_R 16 39 #define MAN_B 17 40 #define MAN_I 18 41 #define MAN_IR 19 42 #define MAN_RI 20 43 #define MAN_na 21 44 #define MAN_i 22 45 #define MAN_sp 23 46 #define MAN_nf 24 47 #define MAN_fi 25 48 #define MAN_r 26 49 #define MAN_RE 27 50 #define MAN_RS 28 51 #define MAN_DT 29 52 #define MAN_UC 30 53 #define MAN_MAX 31 54 55 enum man_type { 56 MAN_TEXT, 57 MAN_ELEM, 58 MAN_ROOT, 59 MAN_BLOCK, 60 MAN_HEAD, 61 MAN_BODY 62 }; 63 64 struct man_meta { 65 int msec; 66 time_t date; 67 char *vol; 68 char *title; 69 char *source; 70 }; 71 72 struct man_node { 73 struct man_node *parent; 74 struct man_node *child; 75 struct man_node *next; 76 struct man_node *prev; 77 int nchild; 78 int line; 79 int pos; 80 int tok; 81 int flags; 82 #define MAN_VALID (1 << 0) 83 #define MAN_ACTED (1 << 1) 84 enum man_type type; 85 char *string; 86 struct man_node *head; 87 struct man_node *body; 88 }; 89 90 #define MAN_IGN_MACRO (1 << 0) 91 #define MAN_IGN_CHARS (1 << 1) 92 #define MAN_IGN_ESCAPE (1 << 2) 93 94 extern const char *const *man_macronames; 95 96 struct man_cb { 97 int (*man_warn)(void *, int, int, const char *); 98 int (*man_err)(void *, int, int, const char *); 99 }; 100 101 __BEGIN_DECLS 102 103 struct man; 104 105 void man_free(struct man *); 106 struct man *man_alloc(void *, int, const struct man_cb *); 107 int man_reset(struct man *); 108 int man_parseln(struct man *, int, char *buf); 109 int man_endparse(struct man *); 110 int man_valid_post(struct man *); 111 112 const struct man_node *man_node(const struct man *); 113 const struct man_meta *man_meta(const struct man *); 114 115 __END_DECLS 116 117 #endif /*!MAN_H*/ 118