xref: /illumos-gate/usr/src/cmd/mandoc/eqn.h (revision cec8643b)
1*cec8643bSMichal Nowak /*	$Id: eqn.h,v 1.1 2018/12/13 05:23:38 schwarze Exp $ */
2*cec8643bSMichal Nowak /*
3*cec8643bSMichal Nowak  * Copyright (c) 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
4*cec8643bSMichal Nowak  *
5*cec8643bSMichal Nowak  * Permission to use, copy, modify, and distribute this software for any
6*cec8643bSMichal Nowak  * purpose with or without fee is hereby granted, provided that the above
7*cec8643bSMichal Nowak  * copyright notice and this permission notice appear in all copies.
8*cec8643bSMichal Nowak  *
9*cec8643bSMichal Nowak  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
10*cec8643bSMichal Nowak  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11*cec8643bSMichal Nowak  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
12*cec8643bSMichal Nowak  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13*cec8643bSMichal Nowak  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14*cec8643bSMichal Nowak  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15*cec8643bSMichal Nowak  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*cec8643bSMichal Nowak  *
17*cec8643bSMichal Nowak  * Public data types for eqn(7) syntax trees.
18*cec8643bSMichal Nowak  */
19*cec8643bSMichal Nowak 
20*cec8643bSMichal Nowak enum	eqn_boxt {
21*cec8643bSMichal Nowak 	EQN_TEXT,	/* Text, e.g. number, variable, operator, ... */
22*cec8643bSMichal Nowak 	EQN_SUBEXPR,	/* Nested eqn(7) subexpression. */
23*cec8643bSMichal Nowak 	EQN_LIST,	/* List, for example in braces. */
24*cec8643bSMichal Nowak 	EQN_PILE,	/* Vertical pile. */
25*cec8643bSMichal Nowak 	EQN_MATRIX	/* List of columns. */
26*cec8643bSMichal Nowak };
27*cec8643bSMichal Nowak 
28*cec8643bSMichal Nowak enum	eqn_fontt {
29*cec8643bSMichal Nowak 	EQNFONT_NONE = 0,
30*cec8643bSMichal Nowak 	EQNFONT_ROMAN,
31*cec8643bSMichal Nowak 	EQNFONT_BOLD,
32*cec8643bSMichal Nowak 	EQNFONT_FAT,
33*cec8643bSMichal Nowak 	EQNFONT_ITALIC,
34*cec8643bSMichal Nowak 	EQNFONT__MAX
35*cec8643bSMichal Nowak };
36*cec8643bSMichal Nowak 
37*cec8643bSMichal Nowak enum	eqn_post {
38*cec8643bSMichal Nowak 	EQNPOS_NONE = 0,
39*cec8643bSMichal Nowak 	EQNPOS_SUP,
40*cec8643bSMichal Nowak 	EQNPOS_SUBSUP,
41*cec8643bSMichal Nowak 	EQNPOS_SUB,
42*cec8643bSMichal Nowak 	EQNPOS_TO,
43*cec8643bSMichal Nowak 	EQNPOS_FROM,
44*cec8643bSMichal Nowak 	EQNPOS_FROMTO,
45*cec8643bSMichal Nowak 	EQNPOS_OVER,
46*cec8643bSMichal Nowak 	EQNPOS_SQRT,
47*cec8643bSMichal Nowak 	EQNPOS__MAX
48*cec8643bSMichal Nowak };
49*cec8643bSMichal Nowak 
50*cec8643bSMichal Nowak  /*
51*cec8643bSMichal Nowak  * A "box" is a parsed mathematical expression as defined by the eqn.7
52*cec8643bSMichal Nowak  * grammar.
53*cec8643bSMichal Nowak  */
54*cec8643bSMichal Nowak struct	eqn_box {
55*cec8643bSMichal Nowak 	struct eqn_box	 *parent;
56*cec8643bSMichal Nowak 	struct eqn_box	 *prev;
57*cec8643bSMichal Nowak 	struct eqn_box	 *next;
58*cec8643bSMichal Nowak 	struct eqn_box	 *first;   /* First child node. */
59*cec8643bSMichal Nowak 	struct eqn_box	 *last;    /* Last child node. */
60*cec8643bSMichal Nowak 	char		 *text;    /* Text (or NULL). */
61*cec8643bSMichal Nowak 	char		 *left;    /* Left-hand fence. */
62*cec8643bSMichal Nowak 	char		 *right;   /* Right-hand fence. */
63*cec8643bSMichal Nowak 	char		 *top;     /* Symbol above. */
64*cec8643bSMichal Nowak 	char		 *bottom;  /* Symbol below. */
65*cec8643bSMichal Nowak 	size_t		  expectargs; /* Maximal number of arguments. */
66*cec8643bSMichal Nowak 	size_t		  args;    /* Actual number of arguments. */
67*cec8643bSMichal Nowak 	int		  size;    /* Font size. */
68*cec8643bSMichal Nowak #define	EQN_DEFSIZE	  INT_MIN
69*cec8643bSMichal Nowak 	enum eqn_boxt	  type;    /* Type of node. */
70*cec8643bSMichal Nowak 	enum eqn_fontt	  font;    /* Font in this box. */
71*cec8643bSMichal Nowak 	enum eqn_post	  pos;     /* Position of the next box. */
72*cec8643bSMichal Nowak };
73