pdftex[944]
commits+thanh at tug.org
commits+thanh at tug.org
Sat Jan 25 09:14:23 CET 2025
Revision: 944
https://tug.org/svn/pdftex?view=revision&revision=944
Author: thanh
Date: 2025-01-25 09:14:23 +0100 (Sat, 25 Jan 2025)
Log Message:
-----------
implement \ignoreprimitiveerror
Modified Paths:
--------------
branches/stable/source/src/texk/web2c/pdftexdir/pdftex.web
Modified: branches/stable/source/src/texk/web2c/pdftexdir/pdftex.web
===================================================================
--- branches/stable/source/src/texk/web2c/pdftexdir/pdftex.web 2025-01-23 10:30:59 UTC (rev 943)
+++ branches/stable/source/src/texk/web2c/pdftexdir/pdftex.web 2025-01-25 08:14:23 UTC (rev 944)
@@ -1887,6 +1887,9 @@
@d print_err(#)==begin if interaction=error_stop_mode then wake_up_terminal;
print_nl("! "); print(#);
end
+ at d print_ignored_err(#)==begin if interaction=error_stop_mode then wake_up_terminal;
+ print_nl("ignored error: "); print(#);
+ end
@<Glob...@>=
@!interaction:batch_mode..error_stop_mode; {current level of interaction}
@@ -5720,8 +5723,9 @@
@d last_line_fit_code=etex_int_base+6 {adjustment for last line of paragraph}
@d saving_vdiscards_code=etex_int_base+7 {save items discarded from vlists}
@d saving_hyph_codes_code=etex_int_base+8 {save hyphenation codes for languages}
- at d eTeX_state_code=etex_int_base+9 {\eTeX\ state variables}
- at d etex_int_pars=eTeX_state_code+eTeX_states {total number of \eTeX's integer parameters}
+ at d ignore_primitive_error_code=etex_int_base+9 {ignore some primitive/engine errors}
+ at d eTeX_state_code=etex_int_base+10 {\eTeX\ state variables}
+ at d etex_int_pars=eTeX_state_code+eTeX_state_code {total number of \eTeX's integer parameters}
@#
@d int_pars=etex_int_pars {total number of integer parameters}
@d count_base=int_base+int_pars {256 user \.{\\count} registers}
@@ -5834,6 +5838,7 @@
@d last_line_fit==int_par(last_line_fit_code)
@d saving_vdiscards==int_par(saving_vdiscards_code)
@d saving_hyph_codes==int_par(saving_hyph_codes_code)
+ at d ignore_primitive_error==int_par(ignore_primitive_error_code)
@<Assign the values |depth_threshold:=show_box_depth|...@>=
depth_threshold:=show_box_depth;
@@ -15857,6 +15862,16 @@
round_xn_over_d := -u;
end;
+function is_bit_set(n: integer; s: small_number): boolean;
+{check if s-th bit of n is set}
+var m, i: integer;
+begin
+ m := 1;
+ for i := 1 to s - 1 do
+ m := m * 2;
+ is_bit_set := (n div m) mod 2;
+end;
+
@ Next subroutines are needed for controlling spacing in PDF page description.
For a given character |c| from a font |f|,
the procedure |adv_char_width| advances |pdf_h|
@@ -27639,13 +27654,18 @@
active_height[6]:=active_height[6]+shrink(q);
if (shrink_order(q)<>normal)and(shrink(q)<>0) then
begin at t@>@;@/
- print_err("Infinite glue shrinkage found in box being split");@/
+ if is_bit_set(ignore_primitive_error, 1) then
+ print_ignored_err("Infinite glue shrinkage found in box being split")
+ else begin
+ print_err("Infinite glue shrinkage found in box being split");@/
@.Infinite glue shrinkage...@>
- help4("The box you are \vsplitting contains some infinitely")@/
- ("shrinkable glue, e.g., `\vss' or `\vskip 0pt minus 1fil'.")@/
- ("Such glue doesn't belong there; but you can safely proceed,")@/
- ("since the offensive shrinkability has been made finite.");
- error; r:=new_spec(q); shrink_order(r):=normal; delete_glue_ref(q);
+ help4("The box you are \vsplitting contains some infinitely")@/
+ ("shrinkable glue, e.g., `\vss' or `\vskip 0pt minus 1fil'.")@/
+ ("Such glue doesn't belong there; but you can safely proceed,")@/
+ ("since the offensive shrinkability has been made finite.");
+ error;
+ end;
+ r:=new_spec(q); shrink_order(r):=normal; delete_glue_ref(q);
glue_ptr(p):=r; q:=r;
end;
end;
@@ -37209,6 +37229,8 @@
@!@:saving_vdiscards_}{\.{\\savingvdiscards} primitive@>
primitive("savinghyphcodes",assign_int,int_base+saving_hyph_codes_code);@/
@!@:saving_hyph_codes_}{\.{\\savinghyphcodes} primitive@>
+primitive("ignoreprimitiveerror",assign_int,int_base+ignore_primitive_error_code);@/
+@!@:ignore_primitive_error_}{\.{\\ignoreprimitiveerror} primitive@>
@ @d every_eof==equiv(every_eof_loc)
@@ -37225,6 +37247,7 @@
last_line_fit_code:print_esc("lastlinefit");
saving_vdiscards_code:print_esc("savingvdiscards");
saving_hyph_codes_code:print_esc("savinghyphcodes");
+ignore_primitive_error_code:print_esc("ignoreprimitiveerror");
@ In order to handle \.{\\everyeof} we need an array |eof_seen| of
boolean variables.
More information about the pdftex-commits
mailing list.