1241675Suqs/*	$Id: libman.h,v 1.55 2011/11/07 01:24:40 schwarze Exp $ */
2241675Suqs/*
3241675Suqs * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
4241675Suqs *
5241675Suqs * Permission to use, copy, modify, and distribute this software for any
6241675Suqs * purpose with or without fee is hereby granted, provided that the above
7241675Suqs * copyright notice and this permission notice appear in all copies.
8241675Suqs *
9241675Suqs * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10241675Suqs * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11241675Suqs * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12241675Suqs * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13241675Suqs * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14241675Suqs * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15241675Suqs * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16241675Suqs */
17241675Suqs#ifndef LIBMAN_H
18241675Suqs#define LIBMAN_H
19241675Suqs
20241675Suqsenum	man_next {
21241675Suqs	MAN_NEXT_SIBLING = 0,
22241675Suqs	MAN_NEXT_CHILD
23241675Suqs};
24241675Suqs
25241675Suqsstruct	man {
26241675Suqs	struct mparse	*parse; /* parse pointer */
27241675Suqs	int		 flags; /* parse flags */
28241675Suqs#define	MAN_HALT	(1 << 0) /* badness happened: die */
29241675Suqs#define	MAN_ELINE	(1 << 1) /* Next-line element scope. */
30241675Suqs#define	MAN_BLINE	(1 << 2) /* Next-line block scope. */
31241675Suqs#define	MAN_ILINE	(1 << 3) /* Ignored in next-line scope. */
32241675Suqs#define	MAN_LITERAL	(1 << 4) /* Literal input. */
33241675Suqs#define	MAN_BPLINE	(1 << 5)
34241675Suqs#define	MAN_NEWLINE	(1 << 6) /* first macro/text in a line */
35241675Suqs	enum man_next	 next; /* where to put the next node */
36241675Suqs	struct man_node	*last; /* the last parsed node */
37241675Suqs	struct man_node	*first; /* the first parsed node */
38241675Suqs	struct man_meta	 meta; /* document meta-data */
39241675Suqs	struct roff	*roff;
40241675Suqs};
41241675Suqs
42241675Suqs#define	MACRO_PROT_ARGS	  struct man *m, \
43241675Suqs			  enum mant tok, \
44241675Suqs			  int line, \
45241675Suqs			  int ppos, \
46241675Suqs			  int *pos, \
47241675Suqs			  char *buf
48241675Suqs
49241675Suqsstruct	man_macro {
50241675Suqs	int		(*fp)(MACRO_PROT_ARGS);
51241675Suqs	int		  flags;
52241675Suqs#define	MAN_SCOPED	 (1 << 0)
53241675Suqs#define	MAN_EXPLICIT	 (1 << 1)	/* See blk_imp(). */
54241675Suqs#define	MAN_FSCOPED	 (1 << 2)	/* See blk_imp(). */
55241675Suqs#define	MAN_NSCOPED	 (1 << 3)	/* See in_line_eoln(). */
56241675Suqs#define	MAN_NOCLOSE	 (1 << 4)	/* See blk_exp(). */
57241675Suqs#define	MAN_BSCOPE	 (1 << 5)	/* Break BLINE scope. */
58241675Suqs};
59241675Suqs
60241675Suqsextern	const struct man_macro *const man_macros;
61241675Suqs
62241675Suqs__BEGIN_DECLS
63241675Suqs
64241675Suqs#define		  man_pmsg(m, l, p, t) \
65241675Suqs		  mandoc_msg((t), (m)->parse, (l), (p), NULL)
66241675Suqs#define		  man_nmsg(m, n, t) \
67241675Suqs		  mandoc_msg((t), (m)->parse, (n)->line, (n)->pos, NULL)
68241675Suqsint		  man_word_alloc(struct man *, int, int, const char *);
69241675Suqsint		  man_block_alloc(struct man *, int, int, enum mant);
70241675Suqsint		  man_head_alloc(struct man *, int, int, enum mant);
71241675Suqsint		  man_tail_alloc(struct man *, int, int, enum mant);
72241675Suqsint		  man_body_alloc(struct man *, int, int, enum mant);
73241675Suqsint		  man_elem_alloc(struct man *, int, int, enum mant);
74241675Suqsvoid		  man_node_delete(struct man *, struct man_node *);
75241675Suqsvoid		  man_hash_init(void);
76241675Suqsenum mant	  man_hash_find(const char *);
77241675Suqsint		  man_macroend(struct man *);
78241675Suqsint		  man_valid_post(struct man *);
79241675Suqsint		  man_valid_pre(struct man *, struct man_node *);
80241675Suqsint		  man_unscope(struct man *,
81241675Suqs			const struct man_node *, enum mandocerr);
82241675Suqs
83241675Suqs__END_DECLS
84241675Suqs
85241675Suqs#endif /*!LIBMAN_H*/
86