b4e043a7ac4107af413d65c56230967a96529ece
[dragonfly.git] / contrib / mdocml / libroff.h
1 /*      $Id: libroff.h,v 1.16 2011/01/04 15:02:00 kristaps Exp $ */
2 /*
3  * Copyright (c) 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
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 LIBROFF_H
18 #define LIBROFF_H
19
20 __BEGIN_DECLS
21
22 enum    tbl_part {
23         TBL_PART_OPTS, /* in options (first line) */
24         TBL_PART_LAYOUT, /* describing layout */
25         TBL_PART_DATA, /* creating data rows */
26         TBL_PART_CDATA /* continue previous row */
27 };
28
29 struct  tbl_node {
30         mandocmsg         msg; /* status messages */
31         void             *data; /* privdata for messages */
32         int               pos; /* invocation column */
33         int               line; /* invocation line */
34         enum tbl_part     part;
35         struct tbl        opts;
36         struct tbl_row   *first_row;
37         struct tbl_row   *last_row;
38         struct tbl_span  *first_span;
39         struct tbl_span  *last_span;
40         struct tbl_head  *first_head;
41         struct tbl_head  *last_head;
42         struct tbl_node  *next;
43 };
44
45 #define TBL_MSG(tblp, type, line, col) \
46         (*(tblp)->msg)((type), (tblp)->data, (line), (col), NULL)
47
48 struct tbl_node *tbl_alloc(int, int, void *, mandocmsg);
49 void             tbl_restart(int, int, struct tbl_node *);
50 void             tbl_free(struct tbl_node *);
51 void             tbl_reset(struct tbl_node *);
52 enum rofferr     tbl_read(struct tbl_node *, int, const char *, int);
53 int              tbl_option(struct tbl_node *, int, const char *);
54 int              tbl_layout(struct tbl_node *, int, const char *);
55 int              tbl_data(struct tbl_node *, int, const char *);
56 int              tbl_cdata(struct tbl_node *, int, const char *);
57 const struct tbl_span *tbl_span(const struct tbl_node *);
58 void             tbl_end(struct tbl_node *);
59
60 __END_DECLS
61
62 #endif /*LIBROFF_H*/