diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2009-03-23 14:22:11 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2009-03-23 14:22:11 +0000 |
commit | dc4e5ca1c9fd9bd34e243dcdb884af02102c9389 (patch) | |
tree | 78f2d3ac00100e778e6832933da1ace2dab9e080 /libman.h | |
parent | d4dba4479e3ed55fdc52b75eab00afe7ad78d5f0 (diff) | |
download | mandoc-dc4e5ca1c9fd9bd34e243dcdb884af02102c9389.tar.gz |
First addition of -man macro support.
Abstraction of mdoc.
Diffstat (limited to 'libman.h')
-rw-r--r-- | libman.h | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/libman.h b/libman.h new file mode 100644 index 00000000..e4aa9d5e --- /dev/null +++ b/libman.h @@ -0,0 +1,66 @@ +/* $Id$ */ +/* + * Copyright (c) 2009 Kristaps Dzonsons <kristaps@openbsd.org> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ +#ifndef LIBMAN_H +#define LIBMAN_H + +#include "man.h" + +enum man_next { + MAN_NEXT_SIBLING = 0, + MAN_NEXT_CHILD +}; + +struct man { + void *htab; + int flags; +#define MAN_LITERAL (1 << 1) + enum man_next next; + struct man_node *last; + struct man_node *first; + struct man_meta meta; +}; + + +#define MACRO_PROT_ARGS struct man *man, int tok, int line, \ + int ppos, int *pos, char *buf + +struct man_macro { + int (*fp)(MACRO_PROT_ARGS); + int flags; +#define MDOC_PROLOGUE (1 << 0) +}; + +extern const struct man_macro *const man_macros; + +__BEGIN_DECLS + +int man_word_alloc(struct man *, int, int, const char *); +int man_elem_alloc(struct man *, int, int, int); +int man_block_alloc(struct man *, int, int, int); +int man_head_alloc(struct man *, int, int, int); +int man_body_alloc(struct man *, int, int, int); +void man_node_free(struct man_node *); +void man_node_freelist(struct man_node *); +void *man_hash_alloc(void); +int man_hash_find(const void *, const char *); +void man_hash_free(void *); + +__END_DECLS + +#endif /*!LIBMAN_H*/ |