diff --git a/manual/luatex-callbacks.tex b/manual/luatex-callbacks.tex index a65b6e8d1f23a04111f397ad166444e90cb9a309..af914483aec37ab3ef6e8ac5cb7fd50730385f44 100644 --- a/manual/luatex-callbacks.tex +++ b/manual/luatex-callbacks.tex @@ -933,6 +933,21 @@ end This callback replaces the code that prints the error message. The usual interaction after the message is not affected. +\subsection{\cbk {show_ignored_error_message}} + +\topicindex{callbacks+errors} + +\startfunctioncall +function() +end +\stopfunctioncall + +This callback replaces the code that prints the error message +when \prm {ignoreprimitiveerror} is enabled. +As before, the usual +interaction after the message is not affected. + + \subsection{\cbk {show_lua_error_hook}} \topicindex{callbacks+errors} diff --git a/manual/luatex-enhancements.tex b/manual/luatex-enhancements.tex index 537961661f5cc0828d033819a6af7888f5dc3752..2fe818cc962267f4ab138d5670371d247d707974 100644 --- a/manual/luatex-enhancements.tex +++ b/manual/luatex-enhancements.tex @@ -1161,6 +1161,9 @@ but don't apply the related callbacks. The \prm {vsplit} primitive has to be followed by a specification of the required height. As alternative for the \type {to} keyword you can use \type {upto} to get a split of the given size but result has the natural dimensions then. +If \prm {ignoreprimitiveerror} = 1 , the error +"Infinite glue shrinkage found in box being split" that occurs +when vsplit-ting a box containing infinite negative glue is turned into a warning. \stopsubsection diff --git a/manual/luatex.pdf b/manual/luatex.pdf index 3108455c4628e31fcba8fef6dd77d8c6949463d5..f2e14ab1d81e37ca3fc39a23e5b983f7fe472793 100644 Binary files a/manual/luatex.pdf and b/manual/luatex.pdf differ diff --git a/source/texk/web2c/luatexdir/ChangeLog b/source/texk/web2c/luatexdir/ChangeLog index cfb81172427814d886f0026b354fda61a35a1f63..2972639d143b89f5756a261d0f29f4b22f5b4910 100644 --- a/source/texk/web2c/luatexdir/ChangeLog +++ b/source/texk/web2c/luatexdir/ChangeLog @@ -1,3 +1,8 @@ +2025-01-19 Luigi Scarso <luigi.scarso@gmail.com> + * \ignoreprimitiveerror as in pdftex + + + 2025-01-19 Luigi Scarso <luigi.scarso@gmail.com> * Fixed \shapemode does not reset at end of paragraphs (thanks to udifoglle@gmail.com) diff --git a/source/texk/web2c/luatexdir/lua/lcallbacklib.c b/source/texk/web2c/luatexdir/lua/lcallbacklib.c index c4472c07f7ff8bb0517ad3adc765a61158d118c0..4c5bf74c03684c07bd39ae011009d7e43db228c5 100644 --- a/source/texk/web2c/luatexdir/lua/lcallbacklib.c +++ b/source/texk/web2c/luatexdir/lua/lcallbacklib.c @@ -68,7 +68,7 @@ static const char *const callbacknames[] = { "finish_pdffile", "finish_pdfpage", "pre_dump","start_file", "stop_file", - "show_error_message","show_lua_error_hook", + "show_error_message","show_lua_error_hook","show_ignored_error_message", "show_warning_message", "hpack_quality", "vpack_quality", "process_rule", diff --git a/source/texk/web2c/luatexdir/lua/luainit.c b/source/texk/web2c/luatexdir/lua/luainit.c index 1b932a29ca29f99b14b7e14d8e1123843e7b958a..dad4ef7167fe1b876ee7b60eb5fa65a7d975b224 100644 --- a/source/texk/web2c/luatexdir/lua/luainit.c +++ b/source/texk/web2c/luatexdir/lua/luainit.c @@ -491,7 +491,7 @@ static void parse_options(int ac, char **av) "the terms of the GNU General Public License, version 2 or (at your option)\n" "any later version. For more information about these matters, see the file\n" "named COPYING and the LuaTeX source.\n\n" - "LuaTeX is Copyright 2022 Taco Hoekwater and the LuaTeX Team.\n"); + "LuaTeX is Copyright 2025 Taco Hoekwater and the LuaTeX Team.\n"); /* *INDENT-ON* */ uexit(0); } else if (ARGUMENT_IS("credits")) { diff --git a/source/texk/web2c/luatexdir/luatex_svnversion.h b/source/texk/web2c/luatexdir/luatex_svnversion.h index b963f5fbb45b7c7551bf05eeaae0b3b0e9883f94..ce097305255a606c4a0e5f5a694c731a447ad773 100644 --- a/source/texk/web2c/luatexdir/luatex_svnversion.h +++ b/source/texk/web2c/luatexdir/luatex_svnversion.h @@ -1,4 +1,4 @@ #ifndef luatex_svn_revision_h #define luatex_svn_revision_h -#define luatex_svn_revision 7644 +#define luatex_svn_revision 7645 #endif diff --git a/source/texk/web2c/luatexdir/luatexcallbackids.h b/source/texk/web2c/luatexdir/luatexcallbackids.h index 7a56a86b9320ce01599b3e916b550d139ee48134..fbb037462ad5a39f306c7067a6f9e41606b71c72 100644 --- a/source/texk/web2c/luatexdir/luatexcallbackids.h +++ b/source/texk/web2c/luatexdir/luatexcallbackids.h @@ -60,7 +60,7 @@ typedef enum { finish_pdfpage_callback, pre_dump_callback, start_file_callback, stop_file_callback, - show_error_message_callback, show_lua_error_hook_callback, + show_error_message_callback, show_lua_error_hook_callback,show_ignored_error_message_callback, show_warning_message_callback, hpack_quality_callback, vpack_quality_callback, process_rule_callback, diff --git a/source/texk/web2c/luatexdir/tex/commands.c b/source/texk/web2c/luatexdir/tex/commands.c index 1c768cb174b6c10fad471ece04fc55b8804c7d0b..371626daf53d3f0c59b9b2749e40fc37f26021c6 100644 --- a/source/texk/web2c/luatexdir/tex/commands.c +++ b/source/texk/web2c/luatexdir/tex/commands.c @@ -789,6 +789,7 @@ void initialize_etex_commands(void) primitive_etex("lastlinefit", assign_int_cmd, int_base + last_line_fit_code, int_base); primitive_etex("savingvdiscards", assign_int_cmd, int_base + saving_vdiscards_code, int_base); primitive_etex("savinghyphcodes", assign_int_cmd, int_base + saving_hyph_codes_code, int_base); + primitive_etex("ignoreprimitiveerror", assign_int_cmd, int_base + ignore_primitive_error_code, int_base); primitive_luatex("suppressfontnotfounderror", assign_int_cmd, int_base + suppress_fontnotfound_error_code, int_base); primitive_luatex("suppresslongerror", assign_int_cmd, int_base + suppress_long_error_code, int_base); primitive_luatex("suppressprimitiveerror", assign_int_cmd, int_base + suppress_primitive_error_code, int_base); diff --git a/source/texk/web2c/luatexdir/tex/equivalents.h b/source/texk/web2c/luatexdir/tex/equivalents.h index f755af60a3f427f2a3ff445a9e3385f11627f178..bf329b3a1be1c3cb273ef38cb76b7aeaaf1515ff 100644 --- a/source/texk/web2c/luatexdir/tex/equivalents.h +++ b/source/texk/web2c/luatexdir/tex/equivalents.h @@ -316,7 +316,10 @@ the |number_regs| \.{\\dimen} registers. # define math_eq_dir_mode_code 123 # define var_fam_code 124 -# define math_option_code 125 +# define ignore_primitive_error_code 125 /*ignore some primitive/engine errors*/ + +# define math_option_code 126 + # define mathoption_int_base_code (math_option_code+1) /* one reserve */ # define mathoption_int_last_code (mathoption_int_base_code+8) @@ -805,6 +808,7 @@ extern halfword last_cs_name; #define default_hyphen_char_par int_par(default_hyphen_char_code) #define default_skew_char_par int_par(default_skew_char_code) #define saving_hyph_codes_par int_par(saving_hyph_codes_code) +#define ignore_primitive_error_par int_par(ignore_primitive_error_code) #define hyphen_penalty_mode_par int_par(hyphen_penalty_mode_code) #define automatic_hyphen_penalty_par int_par(automatic_hyphen_penalty_code) diff --git a/source/texk/web2c/luatexdir/tex/errors.c b/source/texk/web2c/luatexdir/tex/errors.c index 01b6f44aada8f38cbdab4bfc7a2a94b40a7a9e18..5246940482459f25655253aaef3cff11b2953cef 100644 --- a/source/texk/web2c/luatexdir/tex/errors.c +++ b/source/texk/web2c/luatexdir/tex/errors.c @@ -106,7 +106,12 @@ void flush_err(void) if (callback_id > 0) { run_callback(callback_id, "->"); } else { - tprint(s); + callback_id = callback_defined(show_ignored_error_message_callback); + if (callback_id > 0) { + run_callback(callback_id, "->"); + } else { + tprint(s); + } } in_error = 0 ; } @@ -136,6 +141,30 @@ void print_err(const char *s) } } +void print_ignored_err(const char *s) +{ + int callback_id = callback_defined(show_ignored_error_message_callback); + if (interaction == error_stop_mode) { + wake_up_terminal(); + } + if (callback_id > 0) { + err_old_setting = selector; + selector = new_string; + in_error = 1 ; + } + if (filelineerrorstylep) { + print_file_line(); + } else { + tprint_nl("ignored error "); + } + tprint(s); + if (callback_id <= 0) { + xfree(last_error); + last_error = (string) xmalloc((unsigned) (strlen(s) + 1)); + strcpy(last_error,s); + } +} + /*tex \TeX\ is careful not to call |error| when the print |selector| setting might be diff --git a/source/texk/web2c/luatexdir/tex/packaging.c b/source/texk/web2c/luatexdir/tex/packaging.c index 3d23c8b73207bc83448b88c5eef4abb5ae26e295..c69f65d7aa8a9d0bddfa10a6678c41585a0d944e 100644 --- a/source/texk/web2c/luatexdir/tex/packaging.c +++ b/source/texk/web2c/luatexdir/tex/packaging.c @@ -1854,7 +1854,11 @@ halfword vert_break(halfword p, scaled h, scaled d) active_height[2 + stretch_order(p)] += stretch(p); active_height[7] += shrink(p); if ((shrink_order(p) != normal) && (shrink(p) != 0)) { + if (((unsigned int)ignore_primitive_error_par) & 0x1){ + print_ignored_err("Infinite glue shrinkage found in box being split"); + } else { print_err("Infinite glue shrinkage found in box being split"); + help4( "The box you are \\vsplitting contains some infinitely", "shrinkable glue, e.g., `\\vss' or `\\vskip 0pt minus 1fil'.", @@ -1862,7 +1866,8 @@ halfword vert_break(halfword p, scaled h, scaled d) "since the offensive shrinkability has been made finite." ); error(); - shrink_order(p) = normal; + } + shrink_order(p) = normal; } } cur_height = cur_height + prev_dp + width(p);