1/*	$Id: eqn.h,v 1.1 2018/12/13 05:23:38 schwarze Exp $ */
2/*
3 * Copyright (c) 2011, 2014 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 AUTHORS DISCLAIM ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS 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 * Public data types for eqn(7) syntax trees.
18 */
19
20enum	eqn_boxt {
21	EQN_TEXT,	/* Text, e.g. number, variable, operator, ... */
22	EQN_SUBEXPR,	/* Nested eqn(7) subexpression. */
23	EQN_LIST,	/* List, for example in braces. */
24	EQN_PILE,	/* Vertical pile. */
25	EQN_MATRIX	/* List of columns. */
26};
27
28enum	eqn_fontt {
29	EQNFONT_NONE = 0,
30	EQNFONT_ROMAN,
31	EQNFONT_BOLD,
32	EQNFONT_FAT,
33	EQNFONT_ITALIC,
34	EQNFONT__MAX
35};
36
37enum	eqn_post {
38	EQNPOS_NONE = 0,
39	EQNPOS_SUP,
40	EQNPOS_SUBSUP,
41	EQNPOS_SUB,
42	EQNPOS_TO,
43	EQNPOS_FROM,
44	EQNPOS_FROMTO,
45	EQNPOS_OVER,
46	EQNPOS_SQRT,
47	EQNPOS__MAX
48};
49
50 /*
51 * A "box" is a parsed mathematical expression as defined by the eqn.7
52 * grammar.
53 */
54struct	eqn_box {
55	struct eqn_box	 *parent;
56	struct eqn_box	 *prev;
57	struct eqn_box	 *next;
58	struct eqn_box	 *first;   /* First child node. */
59	struct eqn_box	 *last;    /* Last child node. */
60	char		 *text;    /* Text (or NULL). */
61	char		 *left;    /* Left-hand fence. */
62	char		 *right;   /* Right-hand fence. */
63	char		 *top;     /* Symbol above. */
64	char		 *bottom;  /* Symbol below. */
65	size_t		  expectargs; /* Maximal number of arguments. */
66	size_t		  args;    /* Actual number of arguments. */
67	int		  size;    /* Font size. */
68#define	EQN_DEFSIZE	  INT_MIN
69	enum eqn_boxt	  type;    /* Type of node. */
70	enum eqn_fontt	  font;    /* Font in this box. */
71	enum eqn_post	  pos;     /* Position of the next box. */
72};
73