texbuildpage.h /size: 4984 b    last modification: 2024-01-16 10:22
1/*
2    See license.txt in the root of this project.
3*/
4
5# ifndef LMT_BUILDPAGE_H
6# define LMT_BUILDPAGE_H
7
8/*tex
9
10    The state of |page_contents| is indicated by two special values.
11
12*/
13
14typedef enum  contribution_codes {
15    contribute_nothing,
16    contribute_insert,  /*tex An insert node has been contributed, but no boxes. */
17    contribute_box,     /*tex A box has been contributed. */
18    contribute_rule,    /*tex A rule has been contributed. */
19} contribution_codes;
20
21typedef enum page_property_states { 
22    page_unused_state,
23    page_initial_state, 
24    page_stretch_state,
25    page_fistretch_state,
26    page_filstretch_state,
27    page_fillstretch_state,
28    page_filllstretch_state,
29    page_shrink_state,
30} page_property_states;
31
32typedef struct page_builder_state_info {
33    halfword page_tail;  /*tex The final node on the current page. */
34    int      contents;   /*tex What is on the current page so far? */
35    scaled   max_depth;  /*tex The maximum box depth on page being built. */
36    halfword best_break; /*tex Break here to get the best page known so far. */
37    int      least_cost; /*tex The score for this currently best page. */
38    scaled   best_size;  /*tex Its |page_goal| so it can go away. */
39    scaled   goal; 
40    scaled   vsize; 
41    scaled   total; 
42    scaled   depth; 
43    scaled   excess;
44    scaled   padding; 
45    scaled   last_height;
46    scaled   last_depth;
47    union { 
48        /*tex The upcoming height and glue of the current page. */
49        scaled page_so_far[8];
50        struct {
51            scaled unused; 
52            scaled initial;       
53            scaled stretch;       
54            scaled fistretch;     
55            scaled filstretch;    
56            scaled fillstretch;   
57            scaled filllstretch;  
58            scaled shrink;           
59        };
60    };
61    union { 
62        /*tex The effective height and glue of the current page. */
63        scaled page_last_so_far[8];    
64        struct {
65            scaled last_unused; 
66            scaled last_initial; 
67            scaled last_stretch;       
68            scaled last_fistretch;     
69            scaled last_filstretch;    
70            scaled last_fillstretch;   
71            scaled last_filllstretch;  
72            scaled last_shrink;           
73        };
74    };
75    int      insert_penalties;  /*tex The sum of the penalties for held-over insertions. */
76    halfword insert_heights;
77    halfword last_glue;         /*tex Used to implement |\lastskip|. */
78    halfword last_penalty;      /*tex Used to implement |\lastpenalty|. */
79    scaled   last_kern;         /*tex Used to implement |\lastkern|. */
80    halfword last_boundary;
81    int      last_extra_used;
82    int      last_node_type;    /*tex Used to implement |\lastnodetype|. */
83    int      last_node_subtype; /*tex Used to implement |\lastnodesubtype|. */
84    int      output_active;
85    int      dead_cycles;
86    int      current_state;
87} page_builder_state_info;
88
89extern page_builder_state_info lmt_page_builder_state;
90
91//define page_state_offset(c) (c - page_stretch_code + page_stretch_state)
92
93extern void tex_initialize_buildpage (void);
94extern void tex_initialize_pagestate (void);
95extern void tex_build_page           (halfword context, halfword boundary);
96extern void tex_resume_after_output  (void);
97extern void tex_additional_page_skip (void);
98
99# define contribute_tail        lmt_nest_state.nest[0].tail        /*tex The tail of the contribution list. */
100
101# define page_goal              lmt_page_builder_state.goal        /*tex The desired height of information on page being built. */
102# define page_vsize             lmt_page_builder_state.vsize
103# define page_total             lmt_page_builder_state.total       /*tex The height of the current page. */
104# define page_depth             lmt_page_builder_state.depth       /*tex The depth of the current page. */
105# define page_excess            lmt_page_builder_state.excess
106# define page_last_height       lmt_page_builder_state.last_height /*tex The height so far. */
107# define page_last_depth        lmt_page_builder_state.last_depth  /*tex The depth so far. */
108                                
109# define page_stretch           lmt_page_builder_state.stretch
110# define page_fistretch         lmt_page_builder_state.fistretch    
111# define page_filstretch        lmt_page_builder_state.filstretch
112# define page_fillstretch       lmt_page_builder_state.fillstretch
113# define page_filllstretch      lmt_page_builder_state.filllstretch
114# define page_shrink            lmt_page_builder_state.shrink    
115
116# define page_last_stretch      lmt_page_builder_state.last_stretch
117# define page_last_fistretch    lmt_page_builder_state.last_fistretch    
118# define page_last_filstretch   lmt_page_builder_state.last_filstretch
119# define page_last_fillstretch  lmt_page_builder_state.last_fillstretch
120# define page_last_filllstretch lmt_page_builder_state.last_filllstretch
121# define page_last_shrink       lmt_page_builder_state.last_shrink    
122
123# endif
124