diff options
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/dvi')
-rw-r--r-- | Build/source/texk/web2c/luatexdir/dvi/dvigen.h | 172 |
1 files changed, 20 insertions, 152 deletions
diff --git a/Build/source/texk/web2c/luatexdir/dvi/dvigen.h b/Build/source/texk/web2c/luatexdir/dvi/dvigen.h index 49552f1d9c2..cfbbc6245b6 100644 --- a/Build/source/texk/web2c/luatexdir/dvi/dvigen.h +++ b/Build/source/texk/web2c/luatexdir/dvi/dvigen.h @@ -21,166 +21,34 @@ #ifndef DVIGEN_H # define DVIGEN_H -extern int total_pages; -extern scaled max_v; -extern scaled max_h; -extern int max_push; -extern int last_bop; -extern int dead_cycles; -extern boolean doing_leaders; -extern int oval, ocmd; -extern int lq, lr; -extern int cur_s; - -typedef int dvi_index; /* an index into the output buffer */ +/* todo: move initialization from mainbody to ensure_open */ extern int dvi_buf_size; extern eight_bits *dvi_buf; /* 0 is unused */ -extern dvi_index half_buf; -extern dvi_index dvi_limit; -extern dvi_index dvi_ptr; -extern int dvi_offset; -extern int dvi_gone; - -/* -To put a byte in the buffer without paying the cost of invoking a procedure -each time, we use the macro |dvi_out|. -*/ - -# define dvi_out(A) do { \ - dvi_buf[dvi_ptr++]=(eight_bits)(A); \ - if (dvi_ptr==dvi_limit) dvi_swap(); \ - } while (0) - -extern void dvi_swap(void); -extern void dvi_four(int x); -extern void dvi_push(void); -extern void dvi_pop(int l); -extern void out_cmd(void); -extern void dvi_font_def(internal_font_number f); - -# define dvi_set(A,B) do { \ - oval=A; ocmd=set1; out_cmd(); dvi.h += (B); \ - } while (0) - -# define dvi_put(A) do { \ - oval=A; ocmd=put1; out_cmd(); \ - } while (0) - -# define location(A) varmem[(A)+1].cint - -extern halfword down_ptr, right_ptr; /* heads of the down and right stacks */ - -/* -The |vinfo| fields in the entries of the down stack or the right stack -have six possible settings: |y_here| or |z_here| mean that the \.{DVI} -command refers to |y| or |z|, respectively (or to |w| or |x|, in the -case of horizontal motion); |yz_OK| means that the \.{DVI} command is -\\{down} (or \\{right}) but can be changed to either |y| or |z| (or -to either |w| or |x|); |y_OK| means that it is \\{down} and can be changed -to |y| but not |z|; |z_OK| is similar; and |d_fixed| means it must stay -\\{down}. - -The four settings |yz_OK|, |y_OK|, |z_OK|, |d_fixed| would not need to -be distinguished from each other if we were simply solving the -digit-subscripting problem mentioned above. But in \TeX's case there is -a complication because of the nested structure of |push| and |pop| -commands. Suppose we add parentheses to the digit-subscripting problem, -redefining hits so that $\delta_y\ldots \delta_y$ is a hit if all $y$'s between -the $\delta$'s are enclosed in properly nested parentheses, and if the -parenthesis level of the right-hand $\delta_y$ is deeper than or equal to -that of the left-hand one. Thus, `(' and `)' correspond to `|push|' -and `|pop|'. Now if we want to assign a subscript to the final 1 in the -sequence -$$2_y\,7_d\,1_d\,(\,8_z\,2_y\,8_z\,)\,1$$ -we cannot change the previous $1_d$ to $1_y$, since that would invalidate -the $2_y\ldots2_y$ hit. But we can change it to $1_z$, scoring a hit -since the intervening $8_z$'s are enclosed in parentheses. -*/ - -typedef enum { - y_here = 1, /* |vinfo| when the movement entry points to a |y| command */ - z_here = 2, /* |vinfo| when the movement entry points to a |z| command */ - yz_OK = 3, /* |vinfo| corresponding to an unconstrained \\{down} command */ - y_OK = 4, /* |vinfo| corresponding to a \\{down} that can't become a |z| */ - z_OK = 5, /* |vinfo| corresponding to a \\{down} that can't become a |y| */ - d_fixed = 6, /* |vinfo| corresponding to a \\{down} that can't change */ -} movement_codes; - -/* As we search through the stack, we are in one of three states, - |y_seen|, |z_seen|, or |none_seen|, depending on whether we have - encountered |y_here| or |z_here| nodes. These states are encoded as - multiples of 6, so that they can be added to the |info| fields for quick - decision-making. */ - -# define none_seen 0 /* no |y_here| or |z_here| nodes have been encountered yet */ -# define y_seen 6 /* we have seen |y_here| but not |z_here| */ -# define z_seen 12 /* we have seen |z_here| but not |y_here| */ - -extern void movement(scaled w, eight_bits o); -extern void prune_movements(int l); - -/* -The actual distances by which we want to move might be computed as the -sum of several separate movements. For example, there might be several -glue nodes in succession, or we might want to move right by the width of -some box plus some amount of glue. More importantly, the baselineskip -distances are computed in terms of glue together with the depth and -height of adjacent boxes, and we want the \.{DVI} file to lump these -three quantities together into a single motion. - -Therefore, \TeX\ maintains two pairs of global variables: |dvi.h| and |dvi.v| -are the |h| and |v| coordinates corresponding to the commands actually -output to the \.{DVI} file, while |cur.h| and |cur.v| are the coordinates -corresponding to the current state of the output routines. Coordinate -changes will accumulate in |cur.h| and |cur.v| without being reflected -in the output, until such a change becomes necessary or desirable; we -can call the |movement| procedure whenever we want to make |dvi.h=pos.h| -or |dvi.v=pos.v|. - -The current font reflected in the \.{DVI} output is called |dvi_f|; -there is no need for a `\\{cur\_f}' variable. - -The depth of nesting of |hlist_out| and |vlist_out| is called |cur_s|; -this is essentially the depth of |push| commands in the \.{DVI} output. -*/ - -# define synch_h(p) do { \ - if (p.h != dvi.h) { \ - movement(p.h - dvi.h, right1); \ - dvi.h = p.h; \ - } \ - } while (0) - -# define synch_v(p) do { \ - if (p.v != dvi.v) { \ - movement(dvi.v - p.v, down1); \ - dvi.v = p.v; \ - } \ - } while (0) - -# define synch_dvi_with_pos(p) do {synch_h(p); synch_v(p); } while (0) - -# define billion 1000000000.0 - -# define vet_glue(A) do { glue_temp=A; \ - if (glue_temp>billion) \ - glue_temp=billion; \ - else if (glue_temp<-billion) \ - glue_temp=-billion; \ - } while (0) - -extern scaledpos dvi; -extern void dvi_special(PDF pdf, halfword p); +/*tex Housekeeping. */ -extern void ensure_dvi_header_written(PDF pdf); -extern void finish_dvi_file(PDF pdf, int version, int revision); +extern void dvi_open_file(PDF pdf); +extern void dvi_write_header(PDF pdf); +extern void dvi_finish_file(PDF pdf, int fatal_error); +extern void dvi_begin_page(PDF pdf); +extern void dvi_end_page(PDF pdf); + +/*tex Specific injections. */ extern void dvi_place_glyph(PDF pdf, internal_font_number f, int c, int ex); extern void dvi_place_rule(PDF pdf, halfword q, scaledpos size); +extern void dvi_special(PDF pdf, halfword p); -extern void dvi_begin_page(PDF pdf); -extern void dvi_end_page(PDF pdf); +/*tex List handling (and nesting). */ + +extern void dvi_push_list(PDF pdf, scaledpos *saved_pos, int *saved_loc); +extern void dvi_pop_list(PDF pdf, scaledpos *saved_pos, int *saved_loc); +extern void dvi_set_reference_point(PDF pdf, posstructure *refpoint); + +/*tex Status information used in |lstatslib|. Not that useful. */ + +extern int dvi_get_status_ptr(PDF pdf); +extern int dvi_get_status_gone(PDF pdf); #endif |