1241675Suqs/* $Id: libroff.h,v 1.27 2011/07/25 15:37:00 kristaps 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 LIBROFF_H 18241675Suqs#define LIBROFF_H 19241675Suqs 20241675Suqs__BEGIN_DECLS 21241675Suqs 22241675Suqsenum tbl_part { 23241675Suqs TBL_PART_OPTS, /* in options (first line) */ 24241675Suqs TBL_PART_LAYOUT, /* describing layout */ 25241675Suqs TBL_PART_DATA, /* creating data rows */ 26241675Suqs TBL_PART_CDATA /* continue previous row */ 27241675Suqs}; 28241675Suqs 29241675Suqsstruct tbl_node { 30241675Suqs struct mparse *parse; /* parse point */ 31241675Suqs int pos; /* invocation column */ 32241675Suqs int line; /* invocation line */ 33241675Suqs enum tbl_part part; 34241675Suqs struct tbl opts; 35241675Suqs struct tbl_row *first_row; 36241675Suqs struct tbl_row *last_row; 37241675Suqs struct tbl_span *first_span; 38241675Suqs struct tbl_span *current_span; 39241675Suqs struct tbl_span *last_span; 40241675Suqs struct tbl_head *first_head; 41241675Suqs struct tbl_head *last_head; 42241675Suqs struct tbl_node *next; 43241675Suqs}; 44241675Suqs 45241675Suqsstruct eqn_node { 46241675Suqs struct eqn_def *defs; 47241675Suqs size_t defsz; 48241675Suqs char *data; 49241675Suqs size_t rew; 50241675Suqs size_t cur; 51241675Suqs size_t sz; 52241675Suqs int gsize; 53241675Suqs struct eqn eqn; 54241675Suqs struct mparse *parse; 55241675Suqs struct eqn_node *next; 56241675Suqs}; 57241675Suqs 58241675Suqsstruct eqn_def { 59241675Suqs char *key; 60241675Suqs size_t keysz; 61241675Suqs char *val; 62241675Suqs size_t valsz; 63241675Suqs}; 64241675Suqs 65241675Suqsstruct tbl_node *tbl_alloc(int, int, struct mparse *); 66241675Suqsvoid tbl_restart(int, int, struct tbl_node *); 67241675Suqsvoid tbl_free(struct tbl_node *); 68241675Suqsvoid tbl_reset(struct tbl_node *); 69241675Suqsenum rofferr tbl_read(struct tbl_node *, int, const char *, int); 70241675Suqsint tbl_option(struct tbl_node *, int, const char *); 71241675Suqsint tbl_layout(struct tbl_node *, int, const char *); 72241675Suqsint tbl_data(struct tbl_node *, int, const char *); 73241675Suqsint tbl_cdata(struct tbl_node *, int, const char *); 74241675Suqsconst struct tbl_span *tbl_span(struct tbl_node *); 75241675Suqsvoid tbl_end(struct tbl_node **); 76241675Suqsstruct eqn_node *eqn_alloc(const char *, int, int, struct mparse *); 77241675Suqsenum rofferr eqn_end(struct eqn_node **); 78241675Suqsvoid eqn_free(struct eqn_node *); 79241675Suqsenum rofferr eqn_read(struct eqn_node **, int, 80241675Suqs const char *, int, int *); 81241675Suqs 82241675Suqs__END_DECLS 83241675Suqs 84241675Suqs#endif /*LIBROFF_H*/ 85