summaryrefslogtreecommitdiff
path: root/source/luametatex/source/tex/texbuildpage.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/luametatex/source/tex/texbuildpage.h')
-rw-r--r--source/luametatex/source/tex/texbuildpage.h104
1 files changed, 104 insertions, 0 deletions
diff --git a/source/luametatex/source/tex/texbuildpage.h b/source/luametatex/source/tex/texbuildpage.h
new file mode 100644
index 000000000..328bed2a1
--- /dev/null
+++ b/source/luametatex/source/tex/texbuildpage.h
@@ -0,0 +1,104 @@
+/*
+ See license.txt in the root of this project.
+*/
+
+# ifndef LMT_BUILDPAGE_H
+# define LMT_BUILDPAGE_H
+
+/*tex
+
+ The state of |page_contents| is indicated by two special values.
+
+*/
+
+typedef enum contribution_codes {
+ contribute_nothing,
+ contribute_insert, /*tex An insert node has been contributed, but no boxes. */
+ contribute_box, /*tex A box has been contributed. */
+ contribute_rule, /*tex A rule has been contributed. */
+} contribution_codes;
+
+typedef struct page_builder_state_info {
+ halfword page_tail; /*tex The final node on the current page. */
+ int contents; /*tex What is on the current page so far? */
+ scaled max_depth; /*tex The maximum box depth on page being built. */
+ halfword best_break; /*tex Break here to get the best page known so far. */
+ int least_cost; /*tex The score for this currently best page. */
+ scaled best_size; /*tex Its |page_goal| so it can go away. */
+ scaled goal;
+ scaled vsize;
+ scaled total;
+ scaled depth;
+ union {
+ scaled page_so_far[6]; /*tex The height and glue of the current page. */
+ struct {
+ scaled initial;
+ scaled stretch;
+ scaled filstretch;
+ scaled fillstretch;
+ scaled filllstretch;
+ scaled shrink;
+ };
+ };
+ int insert_penalties; /*tex The sum of the penalties for held-over insertions. */
+ halfword insert_heights;
+ halfword last_glue; /*tex Used to implement |\lastskip|. */
+ halfword last_penalty; /*tex Used to implement |\lastpenalty|. */
+ scaled last_kern; /*tex Used to implement |\lastkern|. */
+ int last_extra_used;
+ halfword last_boundary;
+ int last_node_type; /*tex Used to implement |\lastnodetype|. */
+ int last_node_subtype; /*tex Used to implement |\lastnodesubtype|. */
+ int output_active;
+ int dead_cycles;
+ int current_state;
+} page_builder_state_info;
+
+extern page_builder_state_info lmt_page_builder_state;
+
+typedef enum page_property_states {
+ page_initial_state, /* we need an offset and are aligned anyway */
+ page_stretch_state,
+ page_filstretch_state,
+ page_fillstretch_state,
+ page_filllstretch_state,
+ page_shrink_state,
+} page_property_states;
+
+# define page_state_offset(c) (c - page_stretch_code + page_stretch_state)
+
+/*tex
+
+ The data structure definitions here use the fact that the |height| field
+ appears in the fourth word of a box node.
+
+*/
+
+extern void tex_initialize_buildpage (void);
+extern void tex_initialize_pagestate (void);
+extern void tex_build_page (void);
+extern void tex_resume_after_output (void);
+extern void tex_print_page_totals (void);
+
+/*tex The tail of the contribution list: */
+
+# define contribute_tail lmt_nest_state.nest[0].tail
+
+# define page_goal lmt_page_builder_state.goal /*tex The desired height of information on page being built. */
+# define page_vsize lmt_page_builder_state.vsize
+# define page_total lmt_page_builder_state.total /*tex The height of the current page. */
+# define page_depth lmt_page_builder_state.depth /*tex The depth of the current page. */
+
+//# define page_stretch lmt_page_builder_state.page_so_far[page_stretch_state]
+//# define page_filstretch lmt_page_builder_state.page_so_far[page_filstretch_state]
+//# define page_fillstretch lmt_page_builder_state.page_so_far[page_fillstretch_state]
+//# define page_filllstretch lmt_page_builder_state.page_so_far[page_filllstretch_state]
+//# define page_shrink lmt_page_builder_state.page_so_far[page_shrink_state]
+
+# define page_stretch lmt_page_builder_state.stretch
+# define page_filstretch lmt_page_builder_state.filstretch
+# define page_fillstretch lmt_page_builder_state.fillstretch
+# define page_filllstretch lmt_page_builder_state.filllstretch
+# define page_shrink lmt_page_builder_state.shrink
+
+# endif