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