Skip to content
This repository has been archived by the owner on Mar 6, 2023. It is now read-only.

Commit

Permalink
sync with experimental
Browse files Browse the repository at this point in the history
git-svn-id: https://serveur-svn.lri.fr/svn/modhel/luatex/trunk@7398 0b2b3880-5936-4365-a048-eb17d2e5a6bf
  • Loading branch information
luigiScarso committed Jan 15, 2021
1 parent 39cb640 commit 6cde127
Show file tree
Hide file tree
Showing 27 changed files with 159 additions and 46 deletions.
4 changes: 4 additions & 0 deletions manual/luatex-lua.tex
Original file line number Diff line number Diff line change
Expand Up @@ -608,6 +608,10 @@
\NC \type{readbytetable(f,n)} \NC \type {n} bytes\NC \NR
\stoptabulate
There are eight additional little endian variants for the \type {cardinal[1-4]}
and \type {integer[1-4]} readers: \type {cardinal[1-4]le} and \type
{integer[1-4]le}.
\stopsubsection
\startsubsection[title={Binary input from strings with \type {sio}}]
Expand Down
3 changes: 3 additions & 0 deletions manual/luatex-math.tex
Original file line number Diff line number Diff line change
Expand Up @@ -1331,6 +1331,9 @@ \subsection{Fractions}
\stoptabulate
\stop

The keyword \type {norule} will hide the rule with the above variants while
keeping the rule related spacing.

\subsection {Delimiters: \type{\Uleft}, \prm {Umiddle} and \prm {Uright}}

\topicindex {math+delimiters}
Expand Down
2 changes: 2 additions & 0 deletions manual/luatex-modifications.tex
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,8 @@
\protected\def\pdfmapline {\pdfextension mapline }
\protected\def\pdftrailer {\pdfextension trailer }
\protected\def\pdfglyphtounicode {\pdfextension glyphtounicode }
\protected\def\pdfrunninglinkoff {\pdfextension linkstate 1 }
\protected\def\pdfrunninglinkon {\pdfextension linkstate 0 }
\stoptyping

The introspective primitives can be defined as:
Expand Down
26 changes: 23 additions & 3 deletions manual/luatex-tex.tex
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,8 @@

\topicindex{parameters+internal}

\libindex{set} \libindex{get}
\libindex{set}
\libindex{get}

For all the parameters in this section, it is possible to access them directly
using their names as index in the \type {tex} table, or by using one of the
Expand Down Expand Up @@ -357,6 +358,10 @@ \subsubsection{Integer parameters}
tex.deadcycles
tex.insertpenalties
tex.parshape
tex.interlinepenalties
tex.clubpenalties
tex.widowpenalties
tex.displaywidowpenalties
tex.prevgraf
tex.spacefactor
\stoptyping
Expand Down Expand Up @@ -605,6 +610,8 @@ \subsubsection{Tokenlist parameters}

\libindex{scantoks}

\libindex{getmark}

\TEX's attributes (\lpr {attribute}), counters (\prm {count}), dimensions (\prm
{dimen}), skips (\prm {skip}, \prm {muskip}) and token (\prm {toks}) registers
can be accessed and written to using two times five virtual sub|-|tables of the
Expand Down Expand Up @@ -741,6 +748,12 @@ \subsubsection{Tokenlist parameters}
In the function|-|based interface, it is possible to define values globally by
using the string \type {global} as the first function argument.

There is a dedicated getter for marks: \type {getmark} that takes two arguments.
The first argument is one of \type {top}, \type {bottom}, \type {first}, \type
{splitbottom} or \type {splitfirst}, and the second argument is a marks class
number. When no arguments are given the current maximum number of classes is
returned.

\stopsubsection

\startsubsection[title={Character code registers: \type {[get|set]*code[s]}}]
Expand Down Expand Up @@ -2063,8 +2076,7 @@ \subsubsection{\type {getlocallevel}}
\NC \type{scan_toks} \NC definer, expand \NC returns a table of tokens tokens \NC \NR
\NC \type{scan_code} \NC bitset \NC returns a character if its category is in the given bitset (representing catcodes) \NC \NR
\NC \type{scan_string} \NC \NC returns a string given between \type {{}}, as \type {\macro} or as sequence of characters with catcode 11 or 12 \NC \NR
\NC \type{scan_argument} \NC \NC this one is simular to \type {scanstring} but also accepts a \type {\cs}
(which then get expanded) \NC \NR
\NC \type{scan_argument} \NC boolean \NC this one is simular to \type {scanstring} but also accepts a \type {\cs} \NC \NR
\NC \type{scan_word} \NC \NC returns a sequence of characters with catcode 11 or 12 as string \NC \NR
\NC \type{scan_csname} \NC \NC returns \type {foo} after scanning \type {\foo} \NC \NR
\NC \type{scan_list} \NC \NC picks up a box specification and returns a \type {[h|v]list} node \NC \NR
Expand All @@ -2080,6 +2092,11 @@ \subsubsection{\type {getlocallevel}}
arguments are expected and in the result this is separated from the meaning by a
separator token. The \type {expand} flag determines if the list will be expanded.
The \type {scan_argument} function expands the given argument. When a braced
argument is scanned, expansion can be prohibited by passing \type {false}
(default is \type {true}). In case of a control sequence passing \type {false}
will result in a one|-|level expansion (the meaning of the macro).
The string scanner scans for something between curly braces and expands on the
way, or when it sees a control sequence it will return its meaning. Otherwise it
will scan characters with catcode \type {letter} or \type {other}. So, given the
Expand Down Expand Up @@ -2292,6 +2309,9 @@ \subsubsection{\type {getlocallevel}}
local okay = token.is_defined("foo")
\stoptyping
When a second argument to \type {is_defined} is \type {true} the check is for an
undefined control sequence (only), otherwise any undefined command gives true.
The largest character possible is returned by \type {biggest_char}, just in case you
need to know that boundary condition.
Expand Down
Binary file modified manual/luatex.pdf
Binary file not shown.
4 changes: 4 additions & 0 deletions source/texk/web2c/lib/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
2021-01-01 Akira Kakuto <kakuto@w32tex.org>

* printversion.c: Update copyright year.

2020-12-10 Akira Kakuto <kakuto@w32tex.org>

* lib.h: Definition of eof() contradicts corecrt_io.h
Expand Down
2 changes: 1 addition & 1 deletion source/texk/web2c/lib/printversion.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ printversionandexit (const_string banner,
#endif

if (copyright_holder) {
printf ("Copyright 2020 %s.\n", copyright_holder);
printf ("Copyright 2021 %s.\n", copyright_holder);
if (!author)
author = copyright_holder;
}
Expand Down
3 changes: 3 additions & 0 deletions source/texk/web2c/luatexdir/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
2021-01-13 Luigi Scarso <luigi.scarso@gmail.com>
* pdftex compatibility hack (H. Hagen)

2020-12-13 Luigi Scarso <luigi.scarso@gmail.com>
* fixed Hyphenation issue regarding frozen glyph nodes (M.F. Krüger)

Expand Down
6 changes: 6 additions & 0 deletions source/texk/web2c/luatexdir/lua/lnodelib.c
Original file line number Diff line number Diff line change
Expand Up @@ -6772,6 +6772,12 @@ static int lua_nodelib_setfield_whatsit(lua_State * L, int n, const char *s)
} else {
return nodelib_cantset(L, n, s);
}
} else if (t == pdf_link_state_node) {
if (lua_key_eq(s, value)) {
pdf_link_state(n) = (halfword) lua_tointeger(L, 3);
} else {
return nodelib_cantset(L, n, s);
}
} else if ((t == pdf_end_link_node) || (t == pdf_end_thread_node) || (t == save_pos_node) ||
(t == pdf_save_node) || (t == pdf_restore_node)) {
return nodelib_cantset(L, n, s);
Expand Down
11 changes: 11 additions & 0 deletions source/texk/web2c/luatexdir/lua/ltexlib.c
Original file line number Diff line number Diff line change
Expand Up @@ -2668,10 +2668,21 @@ static int tex_hashpairs(lua_State * L)
while (cs < hash_size) {
s = hash_text(cs);
if (s > 0) {
halfword n = cs_next(cs);
char *ss = makecstring(s);
lua_pushstring(L, ss);
free(ss);
lua_rawseti(L, -2, ++nt);
while (n) {
s = cs_text(n);
if (s) {
ss = makecstring(s);
lua_pushstring(L, ss);
free(ss);
lua_rawseti(L, -2, ++nt);
}
n = cs_next(n);
}
}
cs++;
}
Expand Down
3 changes: 3 additions & 0 deletions source/texk/web2c/luatexdir/lua/luatex-api.h
Original file line number Diff line number Diff line change
Expand Up @@ -1014,6 +1014,7 @@ make_lua_key(pdf_destination);\
make_lua_key(pdf_end_link);\
make_lua_key(pdf_end_thread);\
make_lua_key(pdf_link_data);\
make_lua_key(pdf_link_state);\
make_lua_key(pdf_literal);\
make_lua_key(pdf_refobj);\
make_lua_key(pdf_restore);\
Expand Down Expand Up @@ -1715,6 +1716,7 @@ init_lua_key(pdf_destination);\
init_lua_key(pdf_end_link);\
init_lua_key(pdf_end_thread);\
init_lua_key(pdf_link_data);\
init_lua_key(pdf_link_state);\
init_lua_key(pdf_literal);\
init_lua_key(pdf_refobj);\
init_lua_key(pdf_restore);\
Expand Down Expand Up @@ -2483,6 +2485,7 @@ use_lua_key(pdf_destination);
use_lua_key(pdf_end_link);
use_lua_key(pdf_end_thread);
use_lua_key(pdf_link_data);
use_lua_key(pdf_link_state);
use_lua_key(pdf_literal);
use_lua_key(pdf_refobj);
use_lua_key(pdf_restore);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -531,7 +531,7 @@ return( pt_number );
}
} else {
*val = strtod(tokbuf,&end);
if ( !finite(*val) ) {
if ( !isfinite(*val) ) {
/* GT: NaN is a concept in IEEE floating point which means "Not a Number" */
/* GT: it is used to represent errors like 0/0 or sqrt(-1). */
LogError( _("Bad number, infinity or nan: %s\n"), tokbuf );
Expand Down Expand Up @@ -677,14 +677,14 @@ return( sp );
}

static void CheckMakeB(BasePoint *test, BasePoint *good) {
if ( !finite(test->x) || test->x>100000 || test->x<-100000 ) {
if ( !isfinite(test->x) || test->x>100000 || test->x<-100000 ) {
LogError( _("Value out of bounds in spline.\n") );
if ( good!=NULL )
test->x = good->x;
else
test->x = 0;
}
if ( !finite(test->y) || test->y>100000 || test->y<-100000 ) {
if ( !isfinite(test->y) || test->y>100000 || test->y<-100000 ) {
LogError( _("Value out of bounds in spline.\n") );
if ( good!=NULL )
test->y = good->y;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ void SplineRefigure3(Spline *spline) {
if ( ysp->a==0 && xsp->a==0 && ysp->b==0 && xsp->b==0 )
spline->islinear = true; /* This seems extremely unlikely... */
}
if ( !finite(ysp->a) || !finite(xsp->a) || !finite(ysp->c) || !finite(xsp->c) || !finite(ysp->d) || !finite(xsp->d))
if ( !isfinite(ysp->a) || !isfinite(xsp->a) || !isfinite(ysp->c) || !isfinite(xsp->c) || !isfinite(ysp->d) || !isfinite(xsp->d))
IError("NaN value in spline creation");
LinearApproxFree(spline->approx);
spline->approx = NULL;
Expand Down
2 changes: 1 addition & 1 deletion source/texk/web2c/luatexdir/luatex_svnversion.h
Original file line number Diff line number Diff line change
@@ -1 +1 @@
#define luatex_svn_revision 7393
#define luatex_svn_revision 7397
11 changes: 11 additions & 0 deletions source/texk/web2c/luatexdir/pdf/pdfgen.c
Original file line number Diff line number Diff line change
Expand Up @@ -916,13 +916,24 @@ void pdf_print_toks(PDF pdf, halfword p)
xfree(s);
}

/*
void pdf_add_rect_spec(PDF pdf, halfword r)
{
pdf_add_bp(pdf, pdf_ann_left(r));
pdf_add_bp(pdf, pdf_ann_bottom(r));
pdf_add_bp(pdf, pdf_ann_right(r));
pdf_add_bp(pdf, pdf_ann_top(r));
}
*/

void pdf_add_rect_spec(PDF pdf, halfword r)
{
/* the check is now here */
pdf_add_bp(pdf, pdf_ann_left(r) < pdf_ann_right(r) ? pdf_ann_left(r) : pdf_ann_right(r));
pdf_add_bp(pdf, pdf_ann_bottom(r) < pdf_ann_top(r) ? pdf_ann_bottom(r) : pdf_ann_top(r));
pdf_add_bp(pdf, pdf_ann_left(r) < pdf_ann_right(r) ? pdf_ann_right(r) : pdf_ann_left(r));
pdf_add_bp(pdf, pdf_ann_bottom(r) < pdf_ann_top(r) ? pdf_ann_top(r) : pdf_ann_bottom(r));
}

void pdf_rectangle(PDF pdf, halfword r)
{
Expand Down
10 changes: 10 additions & 0 deletions source/texk/web2c/luatexdir/pdf/pdflink.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,16 @@ with LuaTeX; if not, see <http://www.gnu.org/licenses/>.
*/

void pdf_out_link_state(PDF pdf, halfword p)
{
if (pdf_link_state(p) >= 0 && pdf_link_state(p) <= 1) {
pdf->link_state = pdf_link_state(p);
} else {
/* ignores so one can use them for whatever purpose */
}
}


void push_link_level(PDF pdf, halfword p)
{
if (pdf->link_stack_ptr >= pdf_max_link_level)
Expand Down
1 change: 1 addition & 0 deletions source/texk/web2c/luatexdir/pdf/pdflink.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
extern void push_link_level(PDF pdf, halfword p);
extern void pop_link_level(PDF pdf);
extern void do_link(PDF pdf, halfword p, halfword parent_box, scaledpos cur);
extern void pdf_out_link_state(PDF pdf, halfword p);
extern void end_link(PDF pdf, halfword p);
extern void append_link(PDF pdf, halfword parent_box, scaledpos cur, small_number i);
extern void scan_startlink(PDF pdf);
Expand Down
15 changes: 14 additions & 1 deletion source/texk/web2c/luatexdir/pdf/pdflistout.c
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,7 @@ static void handle_backend_whatsit(PDF pdf, halfword p, halfword parent_box, sca
case pdf_refobj_node:
case pdf_end_link_node:
case pdf_end_thread_node:
case pdf_link_state_node:
backend_out_whatsit[subtype(p)](pdf, p);
break;
case pdf_annot_node:
Expand Down Expand Up @@ -254,8 +255,20 @@ void hlist_out(PDF pdf, halfword this_box, int rule_callback_id)
cur_s++;
backend_out_control[backend_control_push_list](pdf,&saved_pos,&saved_loc);
for (i = 1; i <= pdf->link_stack_ptr; i++) {
if (pdf->link_stack[i].nesting_level == cur_s)
if (pdf->link_state == 1) {
/*
We ignore this link. This is a compatibility-with-pdftex feature needed for latex. It
is suboptimal in the sense that when the whatsit is set, the next box is influenced,
so there there can be side effects when used in the middle of a line, when using
vadjust, etc. But we can assume that tha macro package knows when and where this
mechanism is triggered, so a more sophisticated solution is not needed (and would be
confusing in its own anyway.)
I would not be surprised of we have some leak here but it's harmless.
*/
} else if (pdf->link_stack[i].nesting_level == cur_s) {
append_link(pdf, this_box, cur, (small_number) i);
}
}
if (synctex) {
synctexhlist(this_box);
Expand Down
18 changes: 6 additions & 12 deletions source/texk/web2c/luatexdir/pdf/pdftables.c
Original file line number Diff line number Diff line change
Expand Up @@ -224,8 +224,7 @@ void check_obj_type(PDF pdf, int t, int objnum)
void set_rect_dimens(PDF pdf, halfword p, halfword parent_box, scaledpos cur, scaled_whd alt_rule, scaled margin)
{
/*tex The positions relative to cur: */
scaledpos ll, ur;
scaledpos pos_ll, pos_ur, tmp;
scaledpos ll, ur, pos_ll, pos_ur;
posstructure localpos;
localpos.dir = pdf->posstruct->dir;
/*tex |pdf| contains current point on page: */
Expand All @@ -246,16 +245,11 @@ void set_rect_dimens(PDF pdf, halfword p, halfword parent_box, scaledpos cur, sc
pos_ll = localpos.pos;
synch_pos_with_cur(&localpos, pdf->posstruct, ur);
pos_ur = localpos.pos;
if (pos_ll.h > pos_ur.h) {
tmp.h = pos_ll.h;
pos_ll.h = pos_ur.h;
pos_ur.h = tmp.h;
}
if (pos_ll.v > pos_ur.v) {
tmp.v = pos_ll.v;
pos_ll.v = pos_ur.v;
pos_ur.v = tmp.v;
}
/*
The test for swapping has been moved to the moment we write the rectangle. This has to
do with the fact that we have code dealing with directions and that the |pdf_ann_*|
horizontal edges get recalculated in some places.
*/
if (global_shipping_mode == SHIPPING_PAGE && matrixused()) {
matrixtransformrect(pos_ll.h, pos_ll.v, pos_ur.h, pos_ur.v);
pos_ll.h = getllx();
Expand Down
1 change: 1 addition & 0 deletions source/texk/web2c/luatexdir/pdf/pdftypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,7 @@ typedef struct pdf_output_file_ {
/* the pdf link stack */
pdf_link_stack_record link_stack[(pdf_max_link_level + 1)];
int link_stack_ptr;
int link_state;
/* the thread data */
int last_thread; /* pointer to the last thread */
scaled_whd thread;
Expand Down
1 change: 1 addition & 0 deletions source/texk/web2c/luatexdir/tex/backend.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ static void init_pdf_backend_functions(void)
p->whatsit_fu[pdf_setmatrix_node] = &pdf_out_setmatrix;
p->whatsit_fu[pdf_save_node] = &pdf_out_save;
p->whatsit_fu[pdf_restore_node] = &pdf_out_restore;
p->whatsit_fu[pdf_link_state_node] = &pdf_out_link_state;
p->control_fu[backend_control_push_list] = &pdf_push_list;
p->control_fu[backend_control_pop_list] = &pdf_pop_list;
p->control_fu[backend_control_begin_page] = &pdf_begin_page;
Expand Down
2 changes: 1 addition & 1 deletion source/texk/web2c/luatexdir/tex/dumpdata.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ with LuaTeX; if not, see <http://www.gnu.org/licenses/>.
*/

#define FORMAT_ID (907+53)
#define FORMAT_ID (907+54)
#if ((FORMAT_ID>=0) && (FORMAT_ID<=256))
#error Wrong value for FORMAT_ID.
#endif
Expand Down
9 changes: 5 additions & 4 deletions source/texk/web2c/luatexdir/tex/errors.c
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,8 @@ static int Isspace (char c)
__attribute__ ((noreturn))
static void luatex_calledit (int baseptr, int linenumber)
{
char *temp, *command, *fullcmd;
char *temp, *command;
char *fullcmd = NULL; /* avoid compiler warning */
char c;
int sdone, ddone, i;
char *filename = makecstring(input_stack[base_ptr].name_field);
Expand Down Expand Up @@ -442,7 +443,7 @@ void error(void)
/*tex Get user's advice and |return|. */
while (1) {
CONTINUE:
/*tex
/*tex
Original reports:
https://tex.stackexchange.com/questions/551313/
Expand All @@ -455,7 +456,7 @@ void error(void)
selector from 16 to 15 in term_input, due to the lack of this check in
recursive error() call.
*/
if (interaction !=error_stop_mode)
if (interaction !=error_stop_mode)
return;
clear_for_error_prompt();
prompt_input("? ");
Expand Down Expand Up @@ -986,7 +987,7 @@ void normal_warning(const char *t, const char *p)
new_line_char_par = 10;
report_id = callback_defined(show_lua_error_hook_callback);
if (report_id == 0) {
if (p != NULL)
if (p != NULL)
tprint(p);
help2(
"The lua interpreter ran into a problem, so the",
Expand Down
Loading

0 comments on commit 6cde127

Please sign in to comment.