diff options
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/tex/buildpage.h')
-rw-r--r-- | Build/source/texk/web2c/luatexdir/tex/buildpage.h | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/luatexdir/tex/buildpage.h b/Build/source/texk/web2c/luatexdir/tex/buildpage.h new file mode 100644 index 00000000000..9c013514efa --- /dev/null +++ b/Build/source/texk/web2c/luatexdir/tex/buildpage.h @@ -0,0 +1,74 @@ +/* buildpage.h + + Copyright 2009 Taco Hoekwater <taco@luatex.org> + + This file is part of LuaTeX. + + LuaTeX is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + LuaTeX is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + + You should have received a copy of the GNU General Public License along + with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */ + + +#ifndef BUILDPAGE_H +# define BUILDPAGE_H + +/* empty = 0 */ +# define inserts_only 1 /* |page_contents| when an insert node has been contributed, but no boxes */ +# define box_there 2 /* |page_contents| when a box or rule has been contributed */ + +extern halfword page_tail; /* the final node on the current page */ +extern int page_contents; /* what is on the current page so far? */ +extern scaled page_max_depth; /* maximum box depth on page being built */ +extern halfword best_page_break; /* break here to get the best page known so far */ +extern int least_page_cost; /* the score for this currently best page */ +extern scaled best_size; /* its |page_goal| */ + +/* +The data structure definitions here use the fact that the |@!height| field +appears in the fourth word of a box node. +@^data structure assumptions@> +*/ + +# define broken_ptr(A) vlink((A)+2) /* an insertion for this class will break here if anywhere */ +# define broken_ins(A) vinfo((A)+2) /* this insertion might break at |broken_ptr| */ +# define last_ins_ptr(A) vlink((A)+3) /* the most recent insertion for this |subtype| */ +# define best_ins_ptr(A) vinfo((A)+3) /* the optimum most recent insertion */ + +extern void initialize_buildpage(void); + +# define page_goal page_so_far[0] /* desired height of information on page being built */ +# define page_total page_so_far[1] /* height of the current page */ +# define page_shrink page_so_far[6] /* shrinkability of the current page */ +# define page_depth page_so_far[7] /* depth of the current page */ + +extern scaled page_so_far[8]; /* height and glue of the current page */ +extern halfword last_glue; /* used to implement \.{\\lastskip */ +extern int last_penalty; /* used to implement \.{\\lastpenalty} */ +extern scaled last_kern; /* used to implement \.{\\lastkern} */ +extern int last_node_type; /* used to implement \.{\\lastnodetype} */ +extern int insert_penalties; /* sum of the penalties for held-over insertions */ + +extern void print_totals(void); +extern void freeze_page_specs(int s); + +extern boolean output_active; + +extern void start_new_page(void); + +# define contrib_tail nest[0].tail_field + /* tail of the contribution list */ + +extern void build_page(void); /* append contributions to the current page */ +extern void fire_up(halfword c); +extern void resume_after_output(void); + +#endif |