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 
  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         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 
  45 struct  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 
  58 struct  eqn_def {
  59         char             *key;
  60         size_t            keysz;
  61         char             *val;
  62         size_t            valsz;
  63 };
  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 int              tbl_option(struct tbl_node *, int, const char *);
  71 int              tbl_layout(struct tbl_node *, int, const char *);
  72 int              tbl_data(struct tbl_node *, int, const char *);
  73 int              tbl_cdata(struct tbl_node *, int, const char *);
  74 const struct tbl_span   *tbl_span(struct tbl_node *);
  75 void             tbl_end(struct tbl_node **);
  76 struct eqn_node *eqn_alloc(const char *, 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 
  84 #endif /*LIBROFF_H*/