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