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.