1/* $Id: libroff.h,v 1.27 2011/07/25 15:37:00 kristaps Exp $ */ 2/* 3 * Copyright (c) 2009, 2010, 2011 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 22enum 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 29struct tbl_node { 30 struct mparse *parse; /* parse point */ 31 int pos; /* invocation column */ 32 int line; /* invocation line */ 33 enum tbl_part part; 34 struct tbl opts; 35 struct tbl_row *first_row; 36 struct tbl_row *last_row; 37 struct tbl_span *first_span; 38 struct tbl_span *current_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 45struct eqn_node { 46 struct eqn_def *defs; 47 size_t defsz; 48 char *data; 49 size_t rew; 50 size_t cur; 51 size_t sz; 52 int gsize; 53 struct eqn eqn; 54 struct mparse *parse; 55 struct eqn_node *next; 56}; 57 58struct eqn_def { 59 char *key; 60 size_t keysz; 61 char *val; 62 size_t valsz; 63}; 64 65struct tbl_node *tbl_alloc(int, int, struct mparse *); 66void tbl_restart(int, int, struct tbl_node *); 67void tbl_free(struct tbl_node *); 68void tbl_reset(struct tbl_node *); 69enum rofferr tbl_read(struct tbl_node *, int, const char *, int); 70int tbl_option(struct tbl_node *, int, const char *); 71int tbl_layout(struct tbl_node *, int, const char *); 72int tbl_data(struct tbl_node *, int, const char *); 73int tbl_cdata(struct tbl_node *, int, const char *); 74const struct tbl_span *tbl_span(struct tbl_node *); 75void tbl_end(struct tbl_node **); 76struct eqn_node *eqn_alloc(const char *, int, int, struct mparse *); 77enum rofferr eqn_end(struct eqn_node **); 78void eqn_free(struct eqn_node *); 79enum rofferr eqn_read(struct eqn_node **, int, 80 const char *, int, int *); 81 82__END_DECLS 83 84#endif /*LIBROFF_H*/ 85