diff options
Diffstat (limited to 'Build/source/texk/web2c/luatexdir')
-rw-r--r-- | Build/source/texk/web2c/luatexdir/ChangeLog | 10 | ||||
-rw-r--r-- | Build/source/texk/web2c/luatexdir/luatex_svnversion.h | 2 | ||||
-rw-r--r-- | Build/source/texk/web2c/luatexdir/tex/expand.c | 7 | ||||
-rw-r--r-- | Build/source/texk/web2c/luatexdir/tex/inputstack.c | 3 | ||||
-rw-r--r-- | Build/source/texk/web2c/luatexdir/tex/mainbody.c | 10 | ||||
-rw-r--r-- | Build/source/texk/web2c/luatexdir/tex/mainbody.h | 7 | ||||
-rw-r--r-- | Build/source/texk/web2c/luatexdir/tex/mlist.c | 31 | ||||
-rw-r--r-- | Build/source/texk/web2c/luatexdir/tex/printing.c | 28 | ||||
-rw-r--r-- | Build/source/texk/web2c/luatexdir/tex/printing.h | 1 |
9 files changed, 88 insertions, 11 deletions
diff --git a/Build/source/texk/web2c/luatexdir/ChangeLog b/Build/source/texk/web2c/luatexdir/ChangeLog index 93bdcaf7da0..3c3dc892b35 100644 --- a/Build/source/texk/web2c/luatexdir/ChangeLog +++ b/Build/source/texk/web2c/luatexdir/ChangeLog @@ -1,3 +1,13 @@ +2021-01-31 Luigi Scarso <luigi.scarso@gmail.com> + * mark math glyphs as protected (in order to prevent processing + as text in base mode) (H.Hagen) + * removed width/ic compensation for traditional math code path + (see [Dev-luatex] Duplicated italic correction in do_delimiter ) (H.Hagen) + +2021-01-30 Luigi Scarso <luigi.scarso@gmail.com> + * level_max and level_chr determing what gets put in front of + macro tracing lines (variant on suggestion by PO on implementors list)(H. Hagen) + 2021-01-13 Luigi Scarso <luigi.scarso@gmail.com> * pdftex compatibility hack (H. Hagen) diff --git a/Build/source/texk/web2c/luatexdir/luatex_svnversion.h b/Build/source/texk/web2c/luatexdir/luatex_svnversion.h index 0eb59f10988..c91a2c84ab3 100644 --- a/Build/source/texk/web2c/luatexdir/luatex_svnversion.h +++ b/Build/source/texk/web2c/luatexdir/luatex_svnversion.h @@ -1 +1 @@ -#define luatex_svn_revision 7397 +#define luatex_svn_revision 7402 diff --git a/Build/source/texk/web2c/luatexdir/tex/expand.c b/Build/source/texk/web2c/luatexdir/tex/expand.c index bdf82c8c0da..e85c8f3bdb6 100644 --- a/Build/source/texk/web2c/luatexdir/tex/expand.c +++ b/Build/source/texk/web2c/luatexdir/tex/expand.c @@ -654,7 +654,8 @@ void macro_call(void) if (tracing_macros_par > 0) { /*tex Show the text of the macro being expanded. */ begin_diagnostic(); - print_ln(); + print_input_level(); + // print_ln(); print_cs(warning_index); token_show(ref_count); end_diagnostic(false); @@ -894,7 +895,9 @@ void macro_call(void) incr(n); if (tracing_macros_par > 0) { begin_diagnostic(); - print_nl(match_chr); + print_input_level(); + // print_nl(match_chr); + print(match_chr); print_int(n); tprint("<-"); show_token_list(pstack[n - 1], null, 1000); diff --git a/Build/source/texk/web2c/luatexdir/tex/inputstack.c b/Build/source/texk/web2c/luatexdir/tex/inputstack.c index ad67ac24820..6b0e1a055eb 100644 --- a/Build/source/texk/web2c/luatexdir/tex/inputstack.c +++ b/Build/source/texk/web2c/luatexdir/tex/inputstack.c @@ -525,7 +525,8 @@ void begin_token_list(halfword p, quarterword t) iloc = token_link(p); if (tracing_macros_par > 1) { begin_diagnostic(); - tprint_nl(""); + // tprint_nl(""); + print_input_level(); if (t == mark_text) tprint_esc("mark"); else if (t == write_text) diff --git a/Build/source/texk/web2c/luatexdir/tex/mainbody.c b/Build/source/texk/web2c/luatexdir/tex/mainbody.c index 9116d8bdb67..2f45f9989d2 100644 --- a/Build/source/texk/web2c/luatexdir/tex/mainbody.c +++ b/Build/source/texk/web2c/luatexdir/tex/mainbody.c @@ -237,6 +237,14 @@ int strings_free; int font_k; /*tex + putting a character in front of a macro trace (feature suggested by PO on + tex implementor list +*/ + +int level_max; +int level_chr; + +/*tex maximum number of characters simultaneously present in current lines of open files and in control sequences between \.{\\csname} and \.{\\endcsname}; must not exceed |max_halfword| @@ -378,6 +386,8 @@ int main_initialize(void) setup_bound_var(0, "hash_extra", hash_extra); setup_bound_var(72, "pk_dpi", pk_dpi); setup_bound_var(10000, "expand_depth", expand_depth); + setup_bound_var(0, "level_max", level_max); + setup_bound_var('.', "level_chr", level_chr); /*tex Check other constants against their sup and inf. */ diff --git a/Build/source/texk/web2c/luatexdir/tex/mainbody.h b/Build/source/texk/web2c/luatexdir/tex/mainbody.h index 245535120c8..0d274aeffbe 100644 --- a/Build/source/texk/web2c/luatexdir/tex/mainbody.h +++ b/Build/source/texk/web2c/luatexdir/tex/mainbody.h @@ -68,6 +68,11 @@ in production versions of \TeX. # define inf_expand_depth 100 # define sup_expand_depth 10000000 +# define inf_level_max 0 +# define sup_level_max 500 + +# define inf_level_chr 1 +# define sup_level_chr 126 # include <stdio.h> @@ -125,6 +130,8 @@ extern int error_line; extern int half_error_line; extern int max_print_line; extern int max_strings; +extern int level_max; +extern int level_chr; extern int strings_free; extern int font_k; extern int buf_size; diff --git a/Build/source/texk/web2c/luatexdir/tex/mlist.c b/Build/source/texk/web2c/luatexdir/tex/mlist.c index c34dee48839..2ac631ea339 100644 --- a/Build/source/texk/web2c/luatexdir/tex/mlist.c +++ b/Build/source/texk/web2c/luatexdir/tex/mlist.c @@ -63,6 +63,7 @@ LuaTeX; if not, see <http://www.gnu.org/licenses/>. #define is_new_mathfont(A) ((font_math_params(A) >0) && (math_old_par == 0)) #define is_old_mathfont(A,B) ((font_math_params(A)==0) && (font_params(A)>=(B))) #define do_new_math(A) ((font_math_params(A) >0) && (font_oldmath(A) == 0) && (math_old_par == 0)) +#define protect_glyph(A) subtype(A)=256 #include "ptexlib.h" #include "lua/luatex-api.h" @@ -1149,6 +1150,7 @@ static pointer char_box(internal_font_number f, int c, pointer bb) subtype(b) = math_char_list ; reset_attributes(b, bb); p = new_glyph(f, c); + protect_glyph(p); reset_attributes(p, bb); list_ptr(b) = p; return b; @@ -1649,13 +1651,18 @@ static pointer do_delimiter(pointer q, pointer d, int s, scaled v, boolean flat, if (same != NULL && x == c) { *same = emas; } + /*tex + Here italic is added to width in traditional fonts which makes the delimiter get + the real width. An \OPENTYPE\ font already has the right width. + */ b = char_box(f, c, att); - if (!do_new_math(f)) { - /*tex Italic gets added to width. */ - width(b) += char_italic(f, c); - } + /*tex + There is one case where |delta| (ic) gets subtracted but only for a traditional + font. In that case the traditional width (which is fake width + italic) becomes + less and the delta is added. See (**). (On the mailing list font |ntxexx| was + mentioned as test case by MK.) + */ if (delta != NULL) { - /*tex This used to be (f, x). */ *delta = char_italic(f, c); } if (stack != NULL) @@ -3082,9 +3089,18 @@ static scaled make_op(pointer q, int cur_style) x = do_delimiter(q, y, text_size, ok_size, false, cur_style, true, NULL, &delta, NULL); if (delta != 0) { if (do_new_math(cur_f)) { - /*tex we never added italic correction */ + /*tex + As we never added italic correction we don't need to compensate. The ic + is stored in a special field of the node and applied in some occasions. + */ } else if ((subscr(q) != null) && (subtype(q) != op_noad_type_limits)) { - /*tex remove italic correction */ + /*tex + Here we (selectively) remove the italic correction that always gets added + in a traditional font. See (**). In \OPENTYPE\ mode we insert italic kerns, + but in traditional mode it's width manipulation. This actually makes sense + because those fonts have a fake width and the italic correction sets that + right. + */ width(x) -= delta; } } @@ -4261,6 +4277,7 @@ static pointer check_nucleus_complexity(halfword q, scaled * delta, int cur_styl *delta = char_italic(cur_f, cur_c); } p = new_glyph(cur_f, cur_c); + protect_glyph(p); reset_attributes(p, node_attr(nucleus(q))); if (do_new_math(cur_f)) { if (get_char_cat_code(cur_c) == 11) { diff --git a/Build/source/texk/web2c/luatexdir/tex/printing.c b/Build/source/texk/web2c/luatexdir/tex/printing.c index c85a6a5323c..9cfca1faf28 100644 --- a/Build/source/texk/web2c/luatexdir/tex/printing.c +++ b/Build/source/texk/web2c/luatexdir/tex/printing.c @@ -1297,6 +1297,34 @@ void end_diagnostic(boolean blank_line) selector = global_old_setting; } +/* + Indentation (based on a suggestion by PO on tex-implementors but adapted to + out situation and with built-in limits and so. +*/ + +void print_input_level(void) +{ + int m = level_max; + if (m) { + int l = input_ptr; + int c = level_chr > 0 ? level_chr : '.'; + if (l > m) { + tprint_nl("["); + print_int((l/m)*m); + print(']'); + l = l % m; + } else { + print_ln(); + } + while (l > 0) { + print(c); + l--; + } + } else { + print_ln(); + } +} + /*tex Of course we had better declare another global variable, if the previous routines diff --git a/Build/source/texk/web2c/luatexdir/tex/printing.h b/Build/source/texk/web2c/luatexdir/tex/printing.h index e54186a2710..0d87f3d4ae7 100644 --- a/Build/source/texk/web2c/luatexdir/tex/printing.h +++ b/Build/source/texk/web2c/luatexdir/tex/printing.h @@ -124,6 +124,7 @@ extern void print_csnames(int hstart, int hfinish); extern void print_file_line(void); extern void begin_diagnostic(void); +extern void print_input_level(void); extern void end_diagnostic(boolean blank_line); extern int global_old_setting; |