]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/mdocml/libman.h
Update clang to trunk r256633.
[FreeBSD/FreeBSD.git] / contrib / mdocml / libman.h
1 /*      $Id: libman.h,v 1.67 2014/12/28 14:42:27 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    man_next {
20         MAN_NEXT_SIBLING = 0,
21         MAN_NEXT_CHILD
22 };
23
24 struct  man {
25         struct mparse   *parse; /* parse pointer */
26         const char      *defos; /* default OS argument for .TH */
27         int              quick; /* abort parse early */
28         int              flags; /* parse flags */
29 #define MAN_ELINE       (1 << 1) /* Next-line element scope. */
30 #define MAN_BLINE       (1 << 2) /* Next-line block scope. */
31 #define MAN_LITERAL     (1 << 4) /* Literal input. */
32 #define MAN_NEWLINE     (1 << 6) /* first macro/text in a line */
33         enum man_next    next; /* where to put the next node */
34         struct man_node *last; /* the last parsed node */
35         struct man_node *first; /* the first parsed node */
36         struct man_meta  meta; /* document meta-data */
37         struct roff     *roff;
38 };
39
40 #define MACRO_PROT_ARGS   struct man *man, \
41                           enum mant tok, \
42                           int line, \
43                           int ppos, \
44                           int *pos, \
45                           char *buf
46
47 struct  man_macro {
48         void            (*fp)(MACRO_PROT_ARGS);
49         int               flags;
50 #define MAN_SCOPED       (1 << 0)
51 #define MAN_EXPLICIT     (1 << 1)       /* See blk_imp(). */
52 #define MAN_FSCOPED      (1 << 2)       /* See blk_imp(). */
53 #define MAN_NSCOPED      (1 << 3)       /* See in_line_eoln(). */
54 #define MAN_NOCLOSE      (1 << 4)       /* See blk_exp(). */
55 #define MAN_BSCOPE       (1 << 5)       /* Break BLINE scope. */
56 #define MAN_JOIN         (1 << 6)       /* Join arguments together. */
57 };
58
59 extern  const struct man_macro *const man_macros;
60
61 __BEGIN_DECLS
62
63 void              man_word_alloc(struct man *, int, int, const char *);
64 void              man_word_append(struct man *, const char *);
65 void              man_block_alloc(struct man *, int, int, enum mant);
66 void              man_head_alloc(struct man *, int, int, enum mant);
67 void              man_body_alloc(struct man *, int, int, enum mant);
68 void              man_elem_alloc(struct man *, int, int, enum mant);
69 void              man_node_delete(struct man *, struct man_node *);
70 void              man_hash_init(void);
71 enum mant         man_hash_find(const char *);
72 void              man_macroend(struct man *);
73 void              man_valid_post(struct man *);
74 void              man_unscope(struct man *, const struct man_node *);
75
76 __END_DECLS