1 /* $Id: libroff.h,v 1.38 2015/01/30 04:11:50 schwarze Exp $ */ 2 /* 3 * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> 4 * Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org> 5 * 6 * Permission to use, copy, modify, and distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19 enum tbl_part { 20 TBL_PART_OPTS, /* in options (first line) */ 21 TBL_PART_LAYOUT, /* describing layout */ 22 TBL_PART_DATA, /* creating data rows */ 23 TBL_PART_CDATA /* continue previous row */ 24 }; 25 26 struct tbl_node { 27 struct mparse *parse; /* parse point */ 28 int pos; /* invocation column */ 29 int line; /* invocation line */ 30 enum tbl_part part; 31 struct tbl_opts opts; 32 struct tbl_row *first_row; 33 struct tbl_row *last_row; 34 struct tbl_span *first_span; 35 struct tbl_span *current_span; 36 struct tbl_span *last_span; 37 struct tbl_node *next; 38 }; 39 40 struct eqn_node { 41 struct eqn eqn; /* syntax tree of this equation */ 42 struct mparse *parse; /* main parser, for error reporting */ 43 struct eqn_node *next; /* singly linked list of equations */ 44 struct eqn_def *defs; /* array of definitions */ 45 char *data; /* source code of this equation */ 46 size_t defsz; /* number of definitions */ 47 size_t sz; /* length of the source code */ 48 size_t cur; /* parse point in the source code */ 49 size_t rew; /* beginning of the current token */ 50 int gsize; /* default point size */ 51 int delim; /* in-line delimiters enabled */ 52 char odelim; /* in-line opening delimiter */ 53 char cdelim; /* in-line closing delimiter */ 54 }; 55 56 struct eqn_def { 57 char *key; 58 size_t keysz; 59 char *val; 60 size_t valsz; 61 }; 62 63 __BEGIN_DECLS 64 65 struct tbl_node *tbl_alloc(int, int, struct mparse *); 66 void tbl_restart(int, int, struct tbl_node *); 67 void tbl_free(struct tbl_node *); 68 void tbl_reset(struct tbl_node *); 69 enum rofferr tbl_read(struct tbl_node *, int, const char *, int); 70 void tbl_option(struct tbl_node *, int, const char *, int *); 71 void tbl_layout(struct tbl_node *, int, const char *, int); 72 void tbl_data(struct tbl_node *, int, const char *, int); 73 int tbl_cdata(struct tbl_node *, int, const char *, int); 74 const struct tbl_span *tbl_span(struct tbl_node *); 75 int tbl_end(struct tbl_node **); 76 struct eqn_node *eqn_alloc(int, int, struct mparse *); 77 enum rofferr eqn_end(struct eqn_node **); 78 void eqn_free(struct eqn_node *); 79 enum rofferr eqn_read(struct eqn_node **, int, 80 const char *, int, int *); 81 82 __END_DECLS 83