//--- // flow: Horizontal flows of nodes arranged from left to right //--- #ifndef TEX_FLOW #define TEX_FLOW #include struct TeX_Node; /* TeX_Flow This object represents a horizontal line of nodes following the flow of the text; each node can be a plain string or a functional node. All share the same base line when rendered. */ struct TeX_Flow { /* Pointer to first and last elements of the line */ struct TeX_Node *first; struct TeX_Node *last; uint16_t width; uint16_t height; uint16_t line; }; /* Possible subscript and superscript mode. TEX_FLOW_INLINE: Subscripts and superscripts are placed on the right of the base, and displaced vertically. (LaTeX's inline mode) TEX_FLOW_DISPLAY: Subscripts and superscripts are placed under and above the base. (LaTeX's display mode) TEX_FLOW_PREFER_DISPLAY: Use display mode when possible, but fall back to inline mode if the user builds an inline mode. */ #define TEX_FLOW_INLINE 0 #define TEX_FLOW_DISPLAY 1 #define TEX_FLOW_PREFER_DISPLAY 2 //--- // Flow construction and destruction functions //--- /* TeX_flow_add_node(): Add a new node to a flow The provided node is added at the right of the flow. If [flow] is NULL, creates and returns a new flow. Otherwise, always returns [flow]. */ struct TeX_Flow *TeX_flow_add_node(struct TeX_Flow *flow, struct TeX_Node *node); /* TeX_flow_free(): Free TeX_Flow objects Destroys a flow and all of its contained elements. */ void TeX_flow_free(struct TeX_Flow *flow); //--- // Layout and rendering //--- /* TeX_flow_layout(): Calculate the layout of a flow This function calculates the size taken by nodes sharing the same baseline. It heeds for special size and alignment exceptions such as parenthesis-type characters and subscripts/superscripts. Modifies the flow's metadata. */ void TeX_flow_layout(struct TeX_Flow *flow, int display); /* TeX_flow_render(): Render a flow and all its components This function renders all horizontal objects in a flow. The layout of the flow must have been computed. */ void TeX_flow_render(struct TeX_Flow const * flow, int x, int y, int color); #endif /* TEX_FLOW */