Home | History | Annotate | Line # | Download | only in dist
man.h revision 1.1.1.4
      1 /*	$Vendor-Id: man.h,v 1.27 2010/03/27 10:13:16 kristaps Exp $ */
      2 /*
      3  * Copyright (c) 2009 Kristaps Dzonsons <kristaps (at) 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 enum	mant {
     23 	MAN_br = 0,
     24 	MAN_TH,
     25 	MAN_SH,
     26 	MAN_SS,
     27 	MAN_TP,
     28 	MAN_LP,
     29 	MAN_PP,
     30 	MAN_P,
     31 	MAN_IP,
     32 	MAN_HP,
     33 	MAN_SM,
     34 	MAN_SB,
     35 	MAN_BI,
     36 	MAN_IB,
     37 	MAN_BR,
     38 	MAN_RB,
     39 	MAN_R,
     40 	MAN_B,
     41 	MAN_I,
     42 	MAN_IR,
     43 	MAN_RI,
     44 	MAN_na,
     45 	MAN_i,
     46 	MAN_sp,
     47 	MAN_nf,
     48 	MAN_fi,
     49 	MAN_r,
     50 	MAN_RE,
     51 	MAN_RS,
     52 	MAN_DT,
     53 	MAN_UC,
     54 	MAN_PD,
     55 	MAN_Sp,
     56 	MAN_Vb,
     57 	MAN_Ve,
     58 	MAN_de,
     59 	MAN_dei,
     60 	MAN_am,
     61 	MAN_ami,
     62 	MAN_ig,
     63 	MAN_dot,
     64 	MAN_MAX
     65 };
     66 
     67 enum	man_type {
     68 	MAN_TEXT,
     69 	MAN_ELEM,
     70 	MAN_ROOT,
     71 	MAN_BLOCK,
     72 	MAN_HEAD,
     73 	MAN_BODY
     74 };
     75 
     76 struct	man_meta {
     77 	int		 msec;
     78 	time_t		 date;
     79 	char		*vol;
     80 	char		*title;
     81 	char		*source;
     82 };
     83 
     84 struct	man_node {
     85 	struct man_node	*parent;
     86 	struct man_node	*child;
     87 	struct man_node	*next;
     88 	struct man_node	*prev;
     89 	int		 nchild;
     90 	int		 line;
     91 	int		 pos;
     92 	enum mant	 tok;
     93 	int		 flags;
     94 #define	MAN_VALID	(1 << 0)
     95 #define	MAN_ACTED	(1 << 1)
     96 	enum man_type	 type;
     97 	char		*string;
     98 	struct man_node	*head;
     99 	struct man_node	*body;
    100 };
    101 
    102 #define	MAN_IGN_MACRO	 (1 << 0)
    103 #define	MAN_IGN_CHARS	 (1 << 1)
    104 #define	MAN_IGN_ESCAPE	 (1 << 2)
    105 
    106 extern	const char *const *man_macronames;
    107 
    108 struct	man_cb {
    109 	int	(*man_warn)(void *, int, int, const char *);
    110 	int	(*man_err)(void *, int, int, const char *);
    111 };
    112 
    113 __BEGIN_DECLS
    114 
    115 struct	man;
    116 
    117 void	 	  man_free(struct man *);
    118 struct	man	 *man_alloc(void *, int, const struct man_cb *);
    119 void		  man_reset(struct man *);
    120 int	 	  man_parseln(struct man *, int, char *buf);
    121 int		  man_endparse(struct man *);
    122 
    123 const struct man_node *man_node(const struct man *);
    124 const struct man_meta *man_meta(const struct man *);
    125 
    126 __END_DECLS
    127 
    128 #endif /*!MAN_H*/
    129