//--- // env: Environments //--- #ifndef TEX_ENV #define TEX_ENV #include struct TeX_Node; /* Simple type definition trick to use struct TeX_Env inside prototypes within the struct definition itself */ typedef struct TeX_Env TeX_Env; struct TeX_Env { /* Environment name */ char const * name; /* free(): Free an environment instance */ void (*free)(TeX_Env *env); /* add_node(): Add a node to an environment */ void (*add_node)(TeX_Env *env, struct TeX_Node *node); /* add_separator(): Add a separator ("&") */ void (*add_separator)(TeX_Env *env); /* add_break(): Add a break ("\\") */ void (*add_break)(TeX_Env *env); /* layout(): Compute environment layout */ void (*layout)(TeX_Env *env, int display); /* render(): Render environment */ void (*render)(TeX_Env *env, int x, int y, int color); /* Dimensions */ uint16_t width; uint16_t height; uint16_t line; /* More data, each TeX_Env_* subtype will decide */ }; //--- // Environment construction functions //--- /* TeX_env_primary(): make a primary, single-flow environment This is the environment type of whole formulas. It consists of a single flow and ignores separators and breaks. Creates and returns a new environment which must be freed by TeX_free(). */ struct TeX_Env *TeX_env_primary(void); /* TeX_env_matrix(): make a variable-size matrix This environment builds matrices without surrounding delimiters. Separators are used to separate elements, and breaks mark the end of each line. Rows of uneven length are all padded with empty elements to the maximum row length of the whole matrix. Returns a new environment; free with TeX_free(). */ struct TeX_Env *TeX_env_matrix(void); #endif /* TEX_ENV */