[BACK]Return to tbl_extern.h CVS log [TXT][DIR] Up to [local] / src / usr.bin / mandoc

File: [local] / src / usr.bin / mandoc / Attic / tbl_extern.h (download)

Revision 1.1, Fri Oct 15 19:20:03 2010 UTC (13 years, 7 months ago) by schwarze
Branch: MAIN

Import tbl parser and renderer written by kristaps@.
Unchanged code from bsd.lv release 0.1.5, but without the main program.
Not yet linked to the build; next commit will integrate it into mandoc.

/*	$Id: tbl_extern.h,v 1.1 2010/10/15 19:20:03 schwarze Exp $ */
/*
 * Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */
#ifndef TBL_EXTERN_H
#define TBL_EXTERN_H

enum	tbl_err {
	ERR_SYNTAX,
	ERR_OPTION,
	ERR_MAX
};

enum	tbl_tok {
	TBL_TOK_WORD,
	TBL_TOK_OPENPAREN,
	TBL_TOK_CLOSEPAREN,
	TBL_TOK_COMMA,
	TBL_TOK_SEMICOLON,
	TBL_TOK_PERIOD,
	TBL_TOK_SPACE,
	TBL_TOK_TAB,
	TBL_TOK_NIL
};

enum	tbl_part {
	TBL_PART_OPTS,
	TBL_PART_LAYOUT,
	TBL_PART_CLAYOUT,
	TBL_PART_DATA,
	TBL_PART_ERROR
};

struct	tbl;
struct	tbl_head;
struct	tbl_row;
struct	tbl_cell;
struct	tbl_span;
struct	tbl_data;

TAILQ_HEAD(tbl_rowh, tbl_row);
TAILQ_HEAD(tbl_cellh, tbl_cell);
TAILQ_HEAD(tbl_headh, tbl_head);
TAILQ_HEAD(tbl_spanh, tbl_span);
TAILQ_HEAD(tbl_datah, tbl_data);

struct	tbl {
	enum tbl_part	 	 part;
	int		 	 opts;
#define	TBL_OPT_CENTRE		(1 << 0)
#define	TBL_OPT_EXPAND		(1 << 1)
#define	TBL_OPT_BOX		(1 << 2)
#define	TBL_OPT_DBOX		(1 << 3)
#define	TBL_OPT_ALLBOX		(1 << 4)
#define	TBL_OPT_NOKEEP		(1 << 5)
#define	TBL_OPT_NOSPACE		(1 << 6)
	char		 	 tab;
	char		 	 decimal;
	int		 	 linesize;
	char		 	 delims[2];
	struct tbl_spanh	 span;
	struct tbl_headh	 head;
	struct tbl_rowh		 row;
};

enum	tbl_headt {
	TBL_HEAD_DATA,
	TBL_HEAD_VERT,
	TBL_HEAD_DVERT,
	TBL_HEAD_MAX
};

struct	tbl_head {
	struct tbl		*tbl;
	enum tbl_headt	 	 pos;
	int			 width;
	int			 decimal;
	TAILQ_ENTRY(tbl_head)	 entries;
};

struct	tbl_row {
	struct tbl		*tbl;
	struct tbl_cellh	 cell;
	TAILQ_ENTRY(tbl_row)	 entries;
};

enum	tbl_cellt {
	TBL_CELL_CENTRE,	/* c, C */
	TBL_CELL_RIGHT,		/* r, R */
	TBL_CELL_LEFT,		/* l, L */
	TBL_CELL_NUMBER,	/* n, N */
	TBL_CELL_SPAN,		/* s, S */
	TBL_CELL_LONG,		/* a, A */
	TBL_CELL_DOWN,		/* ^ */
	TBL_CELL_HORIZ,		/* _, - */
	TBL_CELL_DHORIZ,	/* = */
	TBL_CELL_VERT,		/* | */
	TBL_CELL_DVERT,		/* || */
	TBL_CELL_MAX
};

struct	tbl_cell {
	struct tbl_row		*row;
	struct tbl_head		*head;
	enum tbl_cellt	 	 pos;
	int		  	 spacing;
	int		 	 flags;
#define	TBL_CELL_TALIGN		(1 << 0)	/* t, T */
#define	TBL_CELL_BALIGN		(1 << 1)	/* d, D */
#define	TBL_CELL_BOLD		(1 << 2)	/* fB, B, b */
#define	TBL_CELL_ITALIC		(1 << 3)	/* fI, I, i */
#define	TBL_CELL_EQUAL		(1 << 4)	/* e, E */
#define	TBL_CELL_UP		(1 << 5)	/* u, U */
#define	TBL_CELL_WIGN		(1 << 6)	/* z, Z */
	TAILQ_ENTRY(tbl_cell)	 entries;
};

struct	tbl_data {
	struct tbl_span		*span;
	struct tbl_cell		*cell;
	int		 	 flags;
#define	TBL_DATA_HORIZ		(1 << 0)
#define	TBL_DATA_DHORIZ		(1 << 1)
#define	TBL_DATA_NHORIZ		(1 << 2)
#define	TBL_DATA_NDHORIZ 	(1 << 3)
	char			*string;
	TAILQ_ENTRY(tbl_data)	 entries;
};

struct	tbl_span {
	struct tbl_row		*row;
	struct tbl		*tbl;
	int		 	 flags;
#define	TBL_SPAN_HORIZ		(1 << 0)
#define	TBL_SPAN_DHORIZ		(1 << 1)
	struct tbl_datah	 data;
	TAILQ_ENTRY(tbl_span)	 entries;
};

__BEGIN_DECLS

int	 	 tbl_option(struct tbl *, 
			const char *, int, const char *);
int	 	 tbl_layout(struct tbl *, 
			const char *, int, const char *);
int	 	 tbl_data(struct tbl *, 
			const char *, int, const char *);
int		 tbl_data_close(struct tbl *,  const char *, int);

enum tbl_tok	 tbl_next(const char *, int *);
const char	*tbl_last(void);
int		 tbl_last_uint(void);
int		 tbl_errx(struct tbl *, enum tbl_err, 
			const char *, int, int);
int		 tbl_warnx(struct tbl *, enum tbl_err, 
			const char *, int, int);
int		 tbl_err(struct tbl *);

struct tbl_row	*tbl_row_alloc(struct tbl *);
struct tbl_cell	*tbl_cell_alloc(struct tbl_row *, enum tbl_cellt);
struct tbl_span	*tbl_span_alloc(struct tbl *);
struct tbl_data	*tbl_data_alloc(struct tbl_span *);

int		 tbl_write_term(const struct tbl *);
int		 tbl_calc_term(struct tbl *);
int		 tbl_write_tree(const struct tbl *);
int		 tbl_calc_tree(struct tbl *);

__END_DECLS

#endif /*TBL_EXTERN_H*/