diff options
Diffstat (limited to 'Build')
89 files changed, 3695 insertions, 2378 deletions
diff --git a/Build/source/libs/lua52/lua-5.2.3-PATCHES/patch-02-lstring b/Build/source/libs/lua52/lua-5.2.3-PATCHES/patch-02-lstring new file mode 100644 index 00000000000..c42fb67edfa --- /dev/null +++ b/Build/source/libs/lua52/lua-5.2.3-PATCHES/patch-02-lstring @@ -0,0 +1,12 @@ +diff -ur lua-5.2.3.orig/src/lstring.c lua-5.2.3/src/lstring.c +--- lua-5.2.3.orig/src/lstring.c2014-03-06 15:04:50.376201110 +0100 ++++ lua-5.2.3/src/lstring.c2014-03-03 16:55:19.978037000 +0100 +@@ -23,7 +23,7 @@ + ** compute its hash + */ + #if !defined(LUAI_HASHLIMIT) +-#define LUAI_HASHLIMIT 5 ++#define LUAI_HASHLIMIT 6 + #endif + + diff --git a/Build/source/libs/lua52/lua-5.2.3/src/lstring.c b/Build/source/libs/lua52/lua-5.2.3/src/lstring.c index af96c89c183..f438915a50d 100644 --- a/Build/source/libs/lua52/lua-5.2.3/src/lstring.c +++ b/Build/source/libs/lua52/lua-5.2.3/src/lstring.c @@ -23,7 +23,7 @@ ** compute its hash */ #if !defined(LUAI_HASHLIMIT) -#define LUAI_HASHLIMIT 5 +#define LUAI_HASHLIMIT 6 #endif diff --git a/Build/source/libs/luajit/LuaJIT-2.0.3-PATCHES/patch-007-lib_package.c b/Build/source/libs/luajit/LuaJIT-2.0.3-PATCHES/patch-007-lib_package.c new file mode 100644 index 00000000000..ffc5b039620 --- /dev/null +++ b/Build/source/libs/luajit/LuaJIT-2.0.3-PATCHES/patch-007-lib_package.c @@ -0,0 +1,65 @@ +diff -u LuaJIT-2.0.3.orig/src/lib_package.c LuaJIT-2.0.3/src/lib_package.c +--- LuaJIT-2.0.3.orig/src/lib_package.c 2014-03-13 12:38:39.407900526 +0100 ++++ LuaJIT-2.0.3/src/lib_package.c 2014-03-13 13:01:11.283956573 +0100 +@@ -68,6 +68,9 @@ + #elif LJ_TARGET_WINDOWS + + #define WIN32_LEAN_AND_MEAN ++#ifndef WINVER ++#define WINVER 0x0500 ++#endif + #include <windows.h> + + #ifndef GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS +@@ -354,6 +357,29 @@ + return 1; /* library loaded successfully */ + } + ++#define LUA_POF "luaopen_" ++#define LUA_OFSEP "_" ++#define POF LUA_POF ++ ++static const char *mkfuncname (lua_State *L, const char *modname) { ++ const char *funcname; ++ const char *mark = strchr(modname, *LUA_IGMARK); ++ if (mark) modname = mark + 1; ++ funcname = luaL_gsub(L, modname, ".", LUA_OFSEP); ++ funcname = lua_pushfstring(L, POF"%s", funcname); ++ lua_remove(L, -2); /* remove 'gsub' result */ ++ return funcname; ++} ++ ++ ++int loader_C_luatex (lua_State *L, const char *name, const char *filename) { ++ const char *funcname; ++ funcname = mkfuncname(L, name); ++ if (ll_loadfunc(L, filename, funcname,0) != 0) ++ loaderror(L, filename); ++ return 1; /* library loaded successfully */ ++} ++ + static int lj_cf_package_loader_croot(lua_State *L) + { + const char *filename; +@@ -373,6 +399,21 @@ + return 1; + } + ++int loader_Call_luatex (lua_State *L, const char *name, const char *filename) { ++ const char *funcname; ++ int stat; ++ if (filename == NULL) return 1; /* root not found */ ++ funcname = mkfuncname(L, name); ++ if ((stat = ll_loadfunc(L, filename, funcname,0)) != 0) { ++ if (stat != PACKAGE_ERR_FUNC) loaderror(L, filename); /* real error */ ++ lua_pushfstring(L, "\n\tno module " LUA_QS " in file " LUA_QS, ++ name, filename); ++ return 1; /* function not found */ ++ } ++ return 1; /* library loaded successfully */ ++} ++ ++ + static int lj_cf_package_loader_preload(lua_State *L) + { + const char *name = luaL_checkstring(L, 1); diff --git a/Build/source/libs/luajit/LuaJIT-2.0.3/src/lib_package.c b/Build/source/libs/luajit/LuaJIT-2.0.3/src/lib_package.c index 0e4a8ed0641..6f3adec85b3 100644 --- a/Build/source/libs/luajit/LuaJIT-2.0.3/src/lib_package.c +++ b/Build/source/libs/luajit/LuaJIT-2.0.3/src/lib_package.c @@ -68,6 +68,9 @@ static const char *ll_bcsym(void *lib, const char *sym) #elif LJ_TARGET_WINDOWS #define WIN32_LEAN_AND_MEAN +#ifndef WINVER +#define WINVER 0x0500 +#endif #include <windows.h> #ifndef GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS diff --git a/Build/source/libs/luajit/native/Makefile.am b/Build/source/libs/luajit/native/Makefile.am index 07fa7771cfe..f89c2fa7629 100644 --- a/Build/source/libs/luajit/native/Makefile.am +++ b/Build/source/libs/luajit/native/Makefile.am @@ -30,7 +30,7 @@ buildvm_arch.h: minilua$(EXEEXT) $(LUAJIT_TREE)/dynasm/dynasm.lua nodist_minilua_SOURCES = \ @LUAJIT_TREE@/src/host/minilua.c -minilua_LDFLAGS = $(MATH_LIB) +minilua_LDADD = $(MATH_LIB) CLEANFILES = buildvm-stamp buildvm_arch.h diff --git a/Build/source/texk/texlive/w32_wrapper/context/mtxrun.dll b/Build/source/texk/texlive/w32_wrapper/context/mtxrun.dll Binary files differindex 5a79e1bad2e..3c4481c319d 100755 --- a/Build/source/texk/texlive/w32_wrapper/context/mtxrun.dll +++ b/Build/source/texk/texlive/w32_wrapper/context/mtxrun.dll diff --git a/Build/source/texk/texlive/w32_wrapper/context/mtxrun.exe b/Build/source/texk/texlive/w32_wrapper/context/mtxrun.exe Binary files differindex faae5caa7c4..0e7882cf926 100755 --- a/Build/source/texk/texlive/w32_wrapper/context/mtxrun.exe +++ b/Build/source/texk/texlive/w32_wrapper/context/mtxrun.exe diff --git a/Build/source/texk/texlive/w32_wrapper/context/mtxrun_dll.c b/Build/source/texk/texlive/w32_wrapper/context/mtxrun_dll.c index 400ed677882..fc2e260f5a2 100644 --- a/Build/source/texk/texlive/w32_wrapper/context/mtxrun_dll.c +++ b/Build/source/texk/texlive/w32_wrapper/context/mtxrun_dll.c @@ -55,7 +55,6 @@ return 1; \ } -char texlua_name[] = "texlua"; // just a bare name, luatex strips the rest anyway static char cmdline[MAX_CMD]; static char dirpath[MAX_PATH]; static char progname[MAX_PATH]; @@ -70,12 +69,12 @@ int main( int argc, char *argv[] ) __declspec(dllexport) int dllrunscript( int argc, char *argv[] ) #endif { - char *s, *luatexfname, *argstr, **lua_argv; + char *binary, *s, *luatexfname, *argstr, **lua_argv; int k, quoted, lua_argc; int passprogname = 0; + unsigned char is_jit=0; // directory of this module/executable - HMODULE module_handle = GetModuleHandle( "mtxrun.dll" ); // if ( module_handle == NULL ) exe path will be used, which is OK too k = (int) GetModuleFileName( module_handle, dirpath, MAX_PATH ); @@ -86,13 +85,20 @@ __declspec(dllexport) int dllrunscript( int argc, char *argv[] ) *(++s) = '\0'; //remove file name, leave trailing backslash // program name - k = strlen(argv[0]); while ( k && (argv[0][k-1] != '/') && (argv[0][k-1] != '\\') ) k--; strcpy(progname, &argv[0][k]); s = progname; if ( s = strrchr(s, '.') ) *s = '\0'; // remove file extension part + /* check "jit" : strlen("jit") = 3 */ + if (strncmp(progname + strlen(progname) - 3, "jit", 3) == 0) { + is_jit = 1; + progname[strlen(progname) - 3]='\0'; + } + else + is_jit = 0; + // script path strcpy( scriptpath, dirpath ); @@ -114,44 +120,110 @@ __declspec(dllexport) int dllrunscript( int argc, char *argv[] ) strcat( scriptpath, "mtxrun.lua" ); passprogname = 1; } - if ( GetFileAttributes(scriptpath) == INVALID_FILE_ATTRIBUTES ) DIE( "file not found: %s\n", scriptpath ); - // find texlua.exe - - if ( !SearchPath( - getenv( "PATH" ), // path to search (optional) - "texlua.exe", // file name to search - NULL, // file extension to add (optional) - MAX_PATH, // output buffer size - luatexpath, // output buffer pointer - &luatexfname ) // pointer to a file part in the output buffer (optional) - ) - if ( !SearchPath( - dirpath, // path to search (optional) - "texlua.exe", // file name to search - NULL, // file extension to add (optional) - MAX_PATH, // output buffer size - luatexpath, // output buffer pointer - &luatexfname ) // pointer to a file part in the output buffer (optional) - ) - DIE( "unable to locate texlua.exe on the search path" ); + // find luatex.exe /luajittex.exe + if ( SearchPath( + dirpath, // was getenv( "PATH" ), // path to search (optional) + (is_jit ? "luajittex.exe":"luatex.exe"), // file name to search + NULL, // file extension to add (optional) + MAX_PATH, // output buffer size + luatexpath, // output buffer pointer + &luatexfname ) // pointer to a file part in the output buffer (optional) + ) { + binary = (is_jit ? "luajittex.exe":"luatex.exe"); + } else if ( SearchPath( + dirpath, // was getenv( "PATH" ), // path to search (optional) + (is_jit ? "texluajit.exe":"texlua.exe"), // file name to search + NULL, // file extension to add (optional) + MAX_PATH, // output buffer size + luatexpath, // output buffer pointer + &luatexfname ) // pointer to a file part in the output buffer (optional) + ) { + binary = (is_jit ? "texluajit.exe":"texlua.exe"); + } else if ( SearchPath( + getenv("PATH"), // was dirpath, // path to search (optional) + (is_jit ? "luajittex.exe":"luatex.exe"), // file name to search + NULL, // file extension to add (optional) + MAX_PATH, // output buffer size + luatexpath, // output buffer pointer + &luatexfname ) // pointer to a file part in the output buffer (optional) + ) { + binary = (is_jit ? "luajittex.exe":"luatex.exe"); + } else if ( SearchPath( + getenv("PATH") , // was dirpath, // path to search (optional) + (is_jit ? "texluajit.exe":"texlua.exe"), // file name to search + NULL, // file extension to add (optional) + MAX_PATH, // output buffer size + luatexpath, // output buffer pointer + &luatexfname ) // pointer to a file part in the output buffer (optional) + ) { + binary = (is_jit ? "texluajit.exe":"texlua.exe"); + }else { + DIE( "unable to locate texlua.exe on the search path" ); + } + + /* if ( SearchPath( */ + /* dirpath, // was getenv( "PATH" ), // path to search (optional) */ + /* (is_jit ? "luajittex.exe":"luatex.exe"), // file name to search */ + /* NULL, // file extension to add (optional) */ + /* MAX_PATH, // output buffer size */ + /* luatexpath, // output buffer pointer */ + /* &luatexfname ) // pointer to a file part in the output buffer (optional) */ + /* ) { */ + /* binary = (is_jit ? "luajittex.exe":"luatex.exe"); */ + /* }else if ( SearchPath( */ + /* getenv("PATH"), // was dirpath, // path to search (optional) */ + /* (is_jit ? "luajittex.exe":"luatex.exe"), // file name to search */ + /* NULL, // file extension to add (optional) */ + /* MAX_PATH, // output buffer size */ + /* luatexpath, // output buffer pointer */ + /* &luatexfname ) // pointer to a file part in the output buffer (optional) */ + /* ) { */ + /* binary = (is_jit ? "luajittex.exe":"luatex.exe"); */ + /* }else if ( SearchPath( */ + /* dirpath, // was getenv( "PATH" ), // path to search (optional) */ + /* (is_jit ? "texluajit.exe":"texlua.exe"), // file name to search */ + /* NULL, // file extension to add (optional) */ + /* MAX_PATH, // output buffer size */ + /* luatexpath, // output buffer pointer */ + /* &luatexfname ) // pointer to a file part in the output buffer (optional) */ + /* ) { */ + /* binary = (is_jit ? "texluajit.exe":"texlua.exe"); */ + /* }else if ( SearchPath( */ + /* getenv("PATH") , // was dirpath, // path to search (optional) */ + /* (is_jit ? "texluajit.exe":"texlua.exe"), // file name to search */ + /* NULL, // file extension to add (optional) */ + /* MAX_PATH, // output buffer size */ + /* luatexpath, // output buffer pointer */ + /* &luatexfname ) // pointer to a file part in the output buffer (optional) */ + /* ) { */ + /* binary = (is_jit ? "texluajit.exe":"texlua.exe"); */ + /* }else { */ + /* DIE( "unable to locate texlua.exe on the search path" ); */ + /* } */ + - // link directly with luatex.dll if available in texlua's dir - strcpy( luatexfname, "luatex.dll" ); + + // link directly with luatex.dll if available in texlua's dir + strcpy( luatexfname, (is_jit ? "luajittex.dll":"luatex.dll") ); if ( dllluatex = LoadLibrary(luatexpath) ) { - mainlikeproc dllluatexmain = (mainlikeproc) GetProcAddress( dllluatex, "dllluatexmain" ); + mainlikeproc dllluatexmain = (mainlikeproc) GetProcAddress( dllluatex, (is_jit ? "dllluajittexmain": "dllluatexmain" )); if ( dllluatexmain == NULL ) - DIE( "unable to locate dllluatexmain procedure in luatex.dll" ); + if (is_jit) + DIE( "unable to locate dllluatexmain procedure in luajittex.dll" ) + else + DIE( "unable to locate dllluatexmain procedure in luatex.dll" ); // set up argument list for texlua script - lua_argv = (char **)malloc( (argc + 4) * sizeof(char *) ); + lua_argv = (char **)malloc( (argc + 5) * sizeof(char *) ); if ( lua_argv == NULL ) DIE( "out of memory\n" ); - lua_argv[lua_argc=0] = texlua_name; + lua_argv[lua_argc=0] = luatexfname; + lua_argv[++lua_argc] = "--luaonly"; lua_argv[++lua_argc] = scriptpath; // script to execute if (passprogname) { lua_argv[++lua_argc] = "--script"; @@ -162,15 +234,15 @@ __declspec(dllexport) int dllrunscript( int argc, char *argv[] ) // call texlua interpreter // dllluatexmain never returns, but we pretend that it does - + k = dllluatexmain( lua_argc, lua_argv ); if (lua_argv) free( lua_argv ); return k; } - // we are still here, so no luatex.dll; spawn texlua.exe instead - strcpy( luatexfname, "texlua.exe" ); + strcpy( luatexfname,binary); + strcpy( cmdline, " --luaonly " ); strcpy( cmdline, "\"" ); strcat( cmdline, luatexpath ); strcat( cmdline, "\" \"" ); @@ -180,7 +252,6 @@ __declspec(dllexport) int dllrunscript( int argc, char *argv[] ) strcat( cmdline, " --script " ); strcat( cmdline, progname ); } - argstr = GetCommandLine(); // get the command line of this process if ( argstr == NULL ) DIE( "unable to retrieve the command line string\n" ); @@ -209,7 +280,6 @@ __declspec(dllexport) int dllrunscript( int argc, char *argv[] ) si.hStdOutput = GetStdHandle( STD_OUTPUT_HANDLE ); si.hStdError = GetStdHandle( STD_ERROR_HANDLE ); ZeroMemory( &pi, sizeof(pi) ); - if( !CreateProcess( NULL, // module name (uses command line if NULL) cmdline, // command line @@ -222,7 +292,6 @@ __declspec(dllexport) int dllrunscript( int argc, char *argv[] ) &si, // STARTUPINFO structure &pi ) // PROCESS_INFORMATION structure ) DIE( "command execution failed: %s\n", cmdline ); - DWORD ret = 0; CloseHandle( pi.hThread ); // thread handle is not needed if ( WaitForSingleObject( pi.hProcess, INFINITE ) == WAIT_OBJECT_0 ) { @@ -232,7 +301,6 @@ __declspec(dllexport) int dllrunscript( int argc, char *argv[] ) CloseHandle( pi.hProcess ); // propagate exit code from the child process - return ret; } diff --git a/Build/source/texk/texlive/w32_wrapper/context/readme.txt b/Build/source/texk/texlive/w32_wrapper/context/readme.txt index 354d85b0920..72892ee2f11 100644 --- a/Build/source/texk/texlive/w32_wrapper/context/readme.txt +++ b/Build/source/texk/texlive/w32_wrapper/context/readme.txt @@ -1,36 +1,40 @@ Copyright: -The originally 'runscript' program was written by in 2009 by -T.M.Trzeciak and is public domain. This derived mtxrun program -is an adapted version by Hans Hagen. +The originally 'runscript' program was written by in 2009 by T.M.Trzeciak and is +public domain. This derived mtxrun program is an adapted version by Hans Hagen and +Luigi Scarso. Comment: -In ConTeXt MkIV we have two core scripts: luatools.lua and -mtxrun.lua where the second one is used to launch other scripts. +In ConTeXt MkIV we have two core scripts: luatools.lua and mtxrun.lua where the +second one is used to launch other scripts. The mtxrun.exe program calls luatex.exe. + Normally a user will use a call like: -mtxrun --script font --reload + mtxrun --script font --reload + +Here mtxrun is a lua script. In order to avoid the usage of a cmd file on windows this +runner will start texlua directly. In TeXlive a runner is added for each cmd file but +we don't want that overhead (and extra files). By using an exe we can call these +scripts in batch files without the need for using call. + +The mtxrun.exe file can be copied to a mtxrunjit.exe file in which case luajittex.exe +is called. -Here mtxrun is a lua script. In order to avoid the usage of a cmd -file on windows this runner will start texlua directly. In TeXlive -a runner is added for each cmd file but we don't want that overhead -(and extra files). By using an exe we can call these scripts in -batch files without the need for using call. + mtxrunjit --script font --reload -We also don't want to use other runners, like those that use kpse -to locate the script as this is exactly what mtxrun itself is doing -already. Therefore the runscript program is adapted to a more direct -approach suitable for mtxrun. +We also don't want to use other runners, like those that use kpse to locate the script +as this is exactly what mtxrun itself is doing already. Therefore the runscript program +is adapted to a more direct approach suitable for mtxrun. Compilation: with gcc (size optimized): -gcc -Os -s -shared -o mtxrun.dll mtxrun_dll.c -gcc -Os -s -o mtxrun.exe mtxrun_exe.c -L./ -lmtxrun + gcc -Os -s -shared -o mtxrun.dll mtxrun_dll.c + gcc -Os -s -o mtxrun.exe mtxrun_exe.c -L./ -lmtxrun with tcc (ver. 0.9.24), extra small size -tcc -shared -o runscript.dll runscript_dll.c -tcc -o runscript.exe runscript_exe.c runscript.def + tcc -shared -o runscript.dll runscript_dll.c + tcc -o runscript.exe runscript_exe.c runscript.def diff --git a/Build/source/texk/web2c/luatexdir/ChangeLog b/Build/source/texk/web2c/luatexdir/ChangeLog index 24fb03932a5..931b0c5f8c9 100644 --- a/Build/source/texk/web2c/luatexdir/ChangeLog +++ b/Build/source/texk/web2c/luatexdir/ChangeLog @@ -1,37 +1,6 @@ -2014-03-14 Peter Breitenlohner <peb@mppmu.mpg.de> +2014-03-15 Taco Hoekwater <taco@luatex.org> - * bitlib/lbitlib.c (removed), lua/luatex-api.h, am/luamisc.am: - Revert change from 2014-02-07, keep lbitlib.c in LuaJIT-2.0.3. - -2014-03-13 Peter Breitenlohner <peb@mppmu.mpg.de> - - * am/luatex.am: Use LUAJIT_LDEXTRA instead of luajittex_extra. - -2014-03-06 Peter Breitenlohner <peb@mppmu.mpg.de> - - * luafilesystem/src/lfs.c: Avoid to redefine _O_TEXT, _O_BINARY. - -2014-02-17 Akira Kakuto <kakuto@fuk.kindai.ac.jp> - - * utils/utils.w: Typo in a comment. Simplify rint() for W32. - Thanks Peter. - -2014-02-12 Akira Kakuto <kakuto@fuk.kindai.ac.jp> - - * tex/mlist.w: Luigi fixes a bug (r4804). - -2014-02-11 Peter Breitenlohner <peb@mppmu.mpg.de> - - * lua/luanode.w, tex/linebreak.w, tex/mlist.w, - tex/texnodes.w, tex/textoken.w: Convert CRLF => NL. - -2014-02-11 Akira Kakuto <kakuto@fuk.kindai.ac.jp> - - * lua/lnodelib.c, lua/ltexlib.c, lua/luanode.w, - luafontloader/fontforge/fontforge/parsettf.c, - luafontloader/src/luafflib.c, luapeg/lpeg.c, luapeg/lpeg.h, - luatex_svnversion.h, tex/linebreak.w, tex/mlist.w, - tex/texnodes.w, tex/textoken.w: Import from r4794. + Import LuaTeX snapshot 0.79.0 from LuaTeX repository (r4903). 2014-02-10 Akira Kakuto <kakuto@fuk.kindai.ac.jp> @@ -39,14 +8,7 @@ 2014-02-07 Peter Breitenlohner <peb@mppmu.mpg.de> - * bitlib/lbitlib.c (new): Copied from - ../../../libs/luajit/LuaJIT-2.0.2/src/lbitlib.c. * lua/luatex-api.h: Declare luaopen_bit32(); - * am/luamisc.am: Add the new file. - -2014-02-06 Akira Kakuto <kakuto@fuk.kindai.ac.jp> - - * luatex.c: Change engine_name for luajittex. 2014-02-06 Peter Breitenlohner <peb@mppmu.mpg.de> diff --git a/Build/source/texk/web2c/luatexdir/font/luafont.w b/Build/source/texk/web2c/luatexdir/font/luafont.w index 5d8e3030859..c64f6544ecb 100644 --- a/Build/source/texk/web2c/luatexdir/font/luafont.w +++ b/Build/source/texk/web2c/luatexdir/font/luafont.w @@ -19,7 +19,7 @@ @ @c static const char _svn_version[] = - "$Id: luafont.w 4679 2013-12-19 15:47:53Z luigi $" + "$Id: luafont.w 4847 2014-03-05 18:13:17Z luigi $" "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/luafont.w $"; #include "ptexlib.h" @@ -584,40 +584,56 @@ static void append_float(eight_bits ** cpp, float a) *cpp = cp; } -#define lua_roundnumber(a,b) (int)floor((double)lua_tonumber(L,-1)+0.5) - -static int numeric_field(lua_State * L, const char *name, int dflt) -{ - int i = dflt; - lua_pushstring(L, name); - lua_rawget(L, -2); - if (lua_isnumber(L, -1)) { - i = lua_roundnumber(L, -1); - } - lua_pop(L, 1); - return i; -} - -static int n_numeric_field(lua_State * L, int name_index, int dflt) -{ - register int i = dflt; - lua_rawgeti(L, LUA_REGISTRYINDEX, name_index); /* fetch the stringptr */ - lua_rawget(L, -2); - if (lua_type(L, -1) == LUA_TNUMBER) { - i = lua_roundnumber(L, -1); - } - lua_pop(L, 1); - return i; -} - - -static int enum_field(lua_State * L, const char *name, int dflt, +//#define lua_roundnumber(a,b) (int)floor((double)lua_tonumber(L,-1)+0.5) + + +/* static int n_numeric_field(lua_State * L, int name_index, int dflt) */ +/* { */ +/* register int i = dflt; */ +/* lua_rawgeti(L, LUA_REGISTRYINDEX, name_index); /\* fetch the stringptr *\/ */ +/* lua_rawget(L, -2); */ +/* if (lua_type(L, -1) == LUA_TNUMBER) { */ +/* i = lua_roundnumber(L, -1); */ +/* } */ +/* lua_pop(L, 1); */ +/* return i; */ +/* } */ + + + + +/* static int enum_field(lua_State * L, const char *name, int dflt, */ +/* const char **values) */ +/* { */ +/* int k; */ +/* const char *s; */ +/* int i = dflt; */ +/* lua_pushstring(L, name); */ +/* lua_rawget(L, -2); */ +/* if (lua_isnumber(L, -1)) { */ +/* i=(int)lua_tonumber(L, -1); */ +/* } else if (lua_isstring(L, -1)) { */ +/* s = lua_tostring(L, -1); */ +/* k = 0; */ +/* while (values[k] != NULL) { */ +/* if (strcmp(values[k], s) == 0) { */ +/* i = k; */ +/* break; */ +/* } */ +/* k++; */ +/* } */ +/* } */ +/* lua_pop(L, 1); */ +/* return i; */ +/* } */ + +static int n_enum_field(lua_State * L, int name_index, int dflt, const char **values) { int k; const char *s; int i = dflt; - lua_pushstring(L, name); + lua_rawgeti(L, LUA_REGISTRYINDEX, name_index); /* fetch the stringptr */ lua_rawget(L, -2); if (lua_isnumber(L, -1)) { i=(int)lua_tonumber(L, -1); @@ -636,17 +652,19 @@ static int enum_field(lua_State * L, const char *name, int dflt, return i; } -static int boolean_field(lua_State * L, const char *name, int dflt) -{ - int i = dflt; - lua_pushstring(L, name); - lua_rawget(L, -2); - if (lua_isboolean(L, -1)) { - i = lua_toboolean(L, -1); - } - lua_pop(L, 1); - return i; -} + + +/* static int boolean_field(lua_State * L, const char *name, int dflt) */ +/* { */ +/* int i = dflt; */ +/* lua_pushstring(L, name); */ +/* lua_rawget(L, -2); */ +/* if (lua_isboolean(L, -1)) { */ +/* i = lua_toboolean(L, -1); */ +/* } */ +/* lua_pop(L, 1); */ +/* return i; */ +/* } */ static int n_boolean_field(lua_State * L, int name_index, int dflt) { @@ -661,23 +679,7 @@ static int n_boolean_field(lua_State * L, int name_index, int dflt) } -static char *string_field(lua_State * L, const char *name, const char *dflt) -{ - char *i; - lua_pushstring(L, name); - lua_rawget(L, -2); - if (lua_isstring(L, -1)) { - i = xstrdup(lua_tostring(L, -1)); - } else if (dflt == NULL) { - i = NULL; - } else { - i = xstrdup(dflt); - } - lua_pop(L, 1); - return i; -} - -static char *n_string_field(lua_State * L, int name_index, char *dflt) +static char *n_string_field_copy(lua_State * L, int name_index, const char *dflt) { char *i; lua_rawgeti(L, LUA_REGISTRYINDEX, name_index); /* fetch the stringptr */ @@ -693,138 +695,13 @@ static char *n_string_field(lua_State * L, int name_index, char *dflt) return i; } -#define init_luaS_index(a) do { \ - lua_pushliteral(L,#a); \ - luaS_##a##_ptr = lua_tostring(L,-1); \ - luaS_##a##_index = luaL_ref (L,LUA_REGISTRYINDEX); \ - } while (0) - -#define make_luaS_index(a) \ - static int luaS_##a##_index = 0; \ - static const char * luaS_##a##_ptr = NULL - -#define luaS_index(a) luaS_##a##_index - -#define luaS_ptr_eq(a,b) (a==luaS_##b##_ptr) - -make_luaS_index(width); -make_luaS_index(height); -make_luaS_index(depth); -make_luaS_index(italic); -make_luaS_index(top_accent); -make_luaS_index(bot_accent); -make_luaS_index(index); -make_luaS_index(left_protruding); -make_luaS_index(right_protruding); -make_luaS_index(expansion_factor); -make_luaS_index(top); -make_luaS_index(bot); -make_luaS_index(rep); -make_luaS_index(mid); -make_luaS_index(next); -make_luaS_index(used); -make_luaS_index(name); -make_luaS_index(tounicode); -make_luaS_index(font); -make_luaS_index(char); -make_luaS_index(slot); -make_luaS_index(comment); -make_luaS_index(nop); -make_luaS_index(push); -make_luaS_index(pop); -make_luaS_index(rule); -make_luaS_index(right); -make_luaS_index(node); -make_luaS_index(down); -make_luaS_index(special); -make_luaS_index(image); -make_luaS_index(slant); -make_luaS_index(space); -make_luaS_index(space_stretch); -make_luaS_index(space_shrink); -make_luaS_index(x_height); -make_luaS_index(quad); -make_luaS_index(extra_space); -make_luaS_index(left_boundary); -make_luaS_index(right_boundary); -make_luaS_index(kerns); -make_luaS_index(ligatures); -make_luaS_index(fonts); -make_luaS_index(extender); -make_luaS_index(start); -make_luaS_index(end); -make_luaS_index(advance); -make_luaS_index(glyph); -make_luaS_index(extensible); -make_luaS_index(horiz_variants); -make_luaS_index(vert_variants); -make_luaS_index(mathkern); -make_luaS_index(commands); -make_luaS_index(scale); -make_luaS_index(lua); - -static void init_font_string_pointers(lua_State * L) +static const char *n_string_field(lua_State * L, int name_index) { - init_luaS_index(width); - init_luaS_index(height); - init_luaS_index(depth); - init_luaS_index(italic); - init_luaS_index(top_accent); - init_luaS_index(bot_accent); - init_luaS_index(index); - init_luaS_index(left_protruding); - init_luaS_index(right_protruding); - init_luaS_index(expansion_factor); - init_luaS_index(top); - init_luaS_index(bot); - init_luaS_index(rep); - init_luaS_index(mid); - init_luaS_index(next); - init_luaS_index(used); - init_luaS_index(name); - init_luaS_index(tounicode); - init_luaS_index(font); - init_luaS_index(char); - init_luaS_index(slot); - init_luaS_index(comment); - init_luaS_index(nop); - init_luaS_index(push); - init_luaS_index(pop); - init_luaS_index(rule); - init_luaS_index(right); - init_luaS_index(node); - init_luaS_index(down); - init_luaS_index(special); - init_luaS_index(image); - - init_luaS_index(slant); - init_luaS_index(space); - init_luaS_index(space_stretch); - init_luaS_index(space_shrink); - init_luaS_index(x_height); - init_luaS_index(quad); - init_luaS_index(extra_space); - - init_luaS_index(left_boundary); - init_luaS_index(right_boundary); - init_luaS_index(kerns); - init_luaS_index(ligatures); - init_luaS_index(fonts); - - init_luaS_index(extender); - init_luaS_index(start); - init_luaS_index(end); - init_luaS_index(advance); - init_luaS_index(glyph); - - init_luaS_index(extensible); - init_luaS_index(horiz_variants); - init_luaS_index(vert_variants); - init_luaS_index(mathkern); - init_luaS_index(commands); - init_luaS_index(scale); - init_luaS_index(lua); + lua_rawgeti(L, LUA_REGISTRYINDEX, name_index); /* fetch the stringptr */ + lua_rawget(L, -2); + return lua_tostring(L,-1); } +/*static void init_font_string_pointers(lua_State * L){}*/ static int count_char_packet_bytes(lua_State * L) { @@ -837,30 +714,30 @@ static int count_char_packet_bytes(lua_State * L) lua_rawgeti(L, -1, 1); if (lua_isstring(L, -1)) { const char *s = lua_tostring(L, -1); - if (luaS_ptr_eq(s, font)) { + if (lua_key_eq(s, font)) { l += 5; ff = 1; - } else if (luaS_ptr_eq(s, char)) { + } else if (lua_key_eq(s, char)) { if (ff == 0) { l += 5; } l += 5; ff = 1; - } else if (luaS_ptr_eq(s, slot)) { + } else if (lua_key_eq(s, slot)) { l += 10; ff = 1; - } else if (luaS_ptr_eq(s, comment) || luaS_ptr_eq(s, nop)) { + } else if (lua_key_eq(s, comment) || lua_key_eq(s, nop)) { ; - } else if (luaS_ptr_eq(s, push) || luaS_ptr_eq(s, pop)) { + } else if (lua_key_eq(s, push) || lua_key_eq(s, pop)) { l++; - } else if (luaS_ptr_eq(s, rule)) { + } else if (lua_key_eq(s, rule)) { l += 9; - } else if (luaS_ptr_eq(s, right) || luaS_ptr_eq(s, node) - || luaS_ptr_eq(s, down) || luaS_ptr_eq(s, image)) { + } else if (lua_key_eq(s, right) || lua_key_eq(s, node) + || lua_key_eq(s, down) || lua_key_eq(s, image)) { l += 5; - } else if (luaS_ptr_eq(s, scale)) { + } else if (lua_key_eq(s, scale)) { l += sizeof(float) + 1; - } else if (luaS_ptr_eq(s, special) || luaS_ptr_eq(s, lua)) { + } else if (lua_key_eq(s, special) || lua_key_eq(s, lua)) { size_t len; lua_rawgeti(L, -2, 2); if (lua_isstring(L, -1)) { @@ -922,16 +799,16 @@ read_char_packets(lua_State * L, int *l_fonts, charinfo * co, int atsize) if (lua_isstring(L, -1)) { s = lua_tostring(L, -1); cmd = 0; - if (luaS_ptr_eq(s, font)) { + if (lua_key_eq(s, font)) { cmd = packet_font_code; - } else if (luaS_ptr_eq(s, char)) { + } else if (lua_key_eq(s, char)) { cmd = packet_char_code; if (ff == 0) { append_packet(packet_font_code); ff = l_fonts[1]; do_store_four(ff); } - } else if (luaS_ptr_eq(s, slot)) { + } else if (lua_key_eq(s, slot)) { cmd = packet_nop_code; lua_rawgeti(L, -2, 2); n = (int) luaL_checkinteger(L, -1); @@ -943,27 +820,27 @@ read_char_packets(lua_State * L, int *l_fonts, charinfo * co, int atsize) do_store_four(ff); append_packet(packet_char_code); do_store_four(n); - } else if (luaS_ptr_eq(s, comment) || luaS_ptr_eq(s, nop)) { + } else if (lua_key_eq(s, comment) || lua_key_eq(s, nop)) { cmd = packet_nop_code; - } else if (luaS_ptr_eq(s, node)) { + } else if (lua_key_eq(s, node)) { cmd = packet_node_code; - } else if (luaS_ptr_eq(s, push)) { + } else if (lua_key_eq(s, push)) { cmd = packet_push_code; - } else if (luaS_ptr_eq(s, pop)) { + } else if (lua_key_eq(s, pop)) { cmd = packet_pop_code; - } else if (luaS_ptr_eq(s, rule)) { + } else if (lua_key_eq(s, rule)) { cmd = packet_rule_code; - } else if (luaS_ptr_eq(s, right)) { + } else if (lua_key_eq(s, right)) { cmd = packet_right_code; - } else if (luaS_ptr_eq(s, down)) { + } else if (lua_key_eq(s, down)) { cmd = packet_down_code; - } else if (luaS_ptr_eq(s, special)) { + } else if (lua_key_eq(s, special)) { cmd = packet_special_code; - } else if (luaS_ptr_eq(s, image)) { + } else if (lua_key_eq(s, image)) { cmd = packet_image_code; - } else if (luaS_ptr_eq(s, scale)) { + } else if (lua_key_eq(s, scale)) { cmd = packet_scale_code; - } else if (luaS_ptr_eq(s, lua)) { + } else if (lua_key_eq(s, lua)) { cmd = packet_lua_code; } @@ -1071,15 +948,16 @@ static void read_lua_cidinfo(lua_State * L, int f) { int i; char *s; - lua_getfield(L, -1, "cidinfo"); + //lua_getfield(L, -1, "cidinfo"); + lua_key_rawgeti(cidinfo); if (lua_istable(L, -1)) { - i = numeric_field(L, "version", 0); + i = lua_numeric_field_by_index(L,lua_key_index(version), 0); set_font_cidversion(f, i); - i = numeric_field(L, "supplement", 0); + i = lua_numeric_field_by_index(L,lua_key_index(supplement), 0); set_font_cidsupplement(f, i); - s = string_field(L, "registry", "Adobe"); /* Adobe-Identity-0 */ + s = n_string_field_copy(L, lua_key_index(registry), "Adobe"); /* Adobe-Identity-0 */ set_font_cidregistry(f, s); - s = string_field(L, "ordering", "Identity"); + s = n_string_field_copy(L, lua_key_index(ordering), "Identity"); set_font_cidordering(f, s); } lua_pop(L, 1); @@ -1091,7 +969,8 @@ static void read_lua_parameters(lua_State * L, int f) { int i, n; const char *s; - lua_getfield(L, -1, "parameters"); + //lua_getfield(L, -1, "parameters"); + lua_key_rawgeti(parameters); if (lua_istable(L, -1)) { /* the number of parameters is the max(IntegerKeys(L)),7) */ n = 7; @@ -1126,19 +1005,19 @@ static void read_lua_parameters(lua_State * L, int f) } else if (lua_isstring(L, -2)) { s = lua_tostring(L, -2); n = (lua_isnumber(L, -1) ? lua_roundnumber(L, -1) : 0); - if (luaS_ptr_eq(s, slant)) { + if (lua_key_eq(s, slant)) { set_font_param(f, slant_code, n); - } else if (luaS_ptr_eq(s, space)) { + } else if (lua_key_eq(s, space)) { set_font_param(f, space_code, n); - } else if (luaS_ptr_eq(s, space_stretch)) { + } else if (lua_key_eq(s, space_stretch)) { set_font_param(f, space_stretch_code, n); - } else if (luaS_ptr_eq(s, space_shrink)) { + } else if (lua_key_eq(s, space_shrink)) { set_font_param(f, space_shrink_code, n); - } else if (luaS_ptr_eq(s, x_height)) { + } else if (lua_key_eq(s, x_height)) { set_font_param(f, x_height_code, n); - } else if (luaS_ptr_eq(s, quad)) { + } else if (lua_key_eq(s, quad)) { set_font_param(f, quad_code, n); - } else if (luaS_ptr_eq(s, extra_space)) { + } else if (lua_key_eq(s, extra_space)) { set_font_param(f, extra_space_code, n); } } @@ -1153,7 +1032,8 @@ static void read_lua_parameters(lua_State * L, int f) static void read_lua_math_parameters(lua_State * L, int f) { int i = 0, n = 0; - lua_getfield(L, -1, "MathConstants"); + //lua_getfield(L, -1, "MathConstants"); + lua_key_rawgeti(MathConstants); if (lua_istable(L, -1)) { lua_pushnil(L); while (lua_next(L, -2) != 0) { @@ -1176,36 +1056,24 @@ static void read_lua_math_parameters(lua_State * L, int f) #define MIN_INF -0x7FFFFFFF -static void store_math_kerns(lua_State * L, charinfo * co, int id) +static void store_math_kerns(lua_State * L, int index, charinfo * co, int id) { - int l, k, i; + int l, k; scaled ht, krn; + lua_rawgeti(L, LUA_REGISTRYINDEX, index);lua_rawget(L, -2); if (lua_istable(L, -1) && ((k = (int) lua_rawlen(L, -1)) > 0)) { for (l = 0; l < k; l++) { lua_rawgeti(L, -1, (l + 1)); if (lua_istable(L, -1)) { - lua_getfield(L, -1, "height"); - if (lua_isnumber(L, -1)) { - i=(int)lua_tonumber(L, -1); - ht = (scaled) i; - } else { - ht = MIN_INF; - } - lua_pop(L, 1); - lua_getfield(L, -1, "kern"); - if (lua_isnumber(L, -1)) { - i=(int)lua_tonumber(L, -1); - krn = (scaled) i; - } else { - krn = MIN_INF; - } - lua_pop(L, 1); + ht = (scaled) lua_numeric_field_by_index(L, lua_key_index(height), MIN_INF); + krn = (scaled) lua_numeric_field_by_index(L, lua_key_index(kern), MIN_INF); if (krn > MIN_INF && ht > MIN_INF) add_charinfo_math_kern(co, id, ht, krn); } lua_pop(L, 1); } } + lua_pop(L, 1); } @ @c @@ -1226,66 +1094,69 @@ font_char_from_lua(lua_State * L, internal_font_number f, int i, if (lua_istable(L, -1)) { co = get_charinfo(f, i); set_charinfo_tag(co, 0); - j = n_numeric_field(L, luaS_width_index, 0); + j = lua_numeric_field_by_index(L, lua_key_index(width), 0); set_charinfo_width(co, j); - j = n_numeric_field(L, luaS_height_index, 0); + j = lua_numeric_field_by_index(L, lua_key_index(height), 0); set_charinfo_height(co, j); - j = n_numeric_field(L, luaS_depth_index, 0); + j = lua_numeric_field_by_index(L, lua_key_index(depth), 0); set_charinfo_depth(co, j); - j = n_numeric_field(L, luaS_italic_index, 0); + j = lua_numeric_field_by_index(L, lua_key_index(italic), 0); set_charinfo_italic(co, j); - j = n_numeric_field(L, luaS_index_index, 0); + j = lua_numeric_field_by_index(L, lua_key_index(index), 0); set_charinfo_index(co, j); - j = n_numeric_field(L, luaS_expansion_factor_index, 0); + j = lua_numeric_field_by_index(L, lua_key_index(expansion_factor), 0); set_charinfo_ef(co, j); - j = n_numeric_field(L, luaS_left_protruding_index, 0); + j = lua_numeric_field_by_index(L, lua_key_index(left_protruding), 0); set_charinfo_lp(co, j); - j = n_numeric_field(L, luaS_right_protruding_index, 0); + j = lua_numeric_field_by_index(L, lua_key_index(right_protruding), 0); set_charinfo_rp(co, j); - k = n_boolean_field(L, luaS_used_index, 0); + k = n_boolean_field(L, lua_key_index(used), 0); set_charinfo_used(co, k); - s = n_string_field(L, luaS_name_index, NULL); + s = n_string_field(L, lua_key_index(name)); if (s != NULL) set_charinfo_name(co, xstrdup(s)); else set_charinfo_name(co, NULL); - s = n_string_field(L, luaS_tounicode_index, NULL); + /* n_string_field leaves a value on stack*/ + lua_pop(L,1); + s = n_string_field(L, lua_key_index(tounicode)); if (s != NULL) set_charinfo_tounicode(co, xstrdup(s)); else set_charinfo_tounicode(co, NULL); - + /* n_string_field leaves a value on stack*/ + lua_pop(L,1); if (has_math) { - j = n_numeric_field(L, luaS_top_accent_index, INT_MIN); + j = lua_numeric_field_by_index(L, lua_key_index(top_accent), INT_MIN); set_charinfo_top_accent(co, j); - j = n_numeric_field(L, luaS_bot_accent_index, INT_MIN); + j = lua_numeric_field_by_index(L, lua_key_index(bot_accent), INT_MIN); set_charinfo_bot_accent(co, j); - k = n_numeric_field(L, luaS_next_index, -1); + k = lua_numeric_field_by_index(L, lua_key_index(next), -1); if (k >= 0) { set_charinfo_tag(co, list_tag); set_charinfo_remainder(co, k); } - lua_rawgeti(L, LUA_REGISTRYINDEX, luaS_extensible_index); + lua_rawgeti(L, LUA_REGISTRYINDEX, lua_key_index(extensible)); lua_rawget(L, -2); if (lua_istable(L, -1)) { int top, bot, mid, rep; - top = n_numeric_field(L, luaS_top_index, 0); - bot = n_numeric_field(L, luaS_bot_index, 0); - mid = n_numeric_field(L, luaS_mid_index, 0); - rep = n_numeric_field(L, luaS_rep_index, 0); + top = lua_numeric_field_by_index(L, lua_key_index(top), 0); + bot = lua_numeric_field_by_index(L, lua_key_index(bot), 0); + mid = lua_numeric_field_by_index(L, lua_key_index(mid), 0); + rep = lua_numeric_field_by_index(L, lua_key_index(rep), 0); if (top != 0 || bot != 0 || mid != 0 || rep != 0) { set_charinfo_tag(co, ext_tag); set_charinfo_extensible(co, top, bot, mid, rep); } else { - pdftex_warn + luatex_warn ("lua-loaded font %s char [U+%X] has an invalid extensible field!", font_name(f), (int) i); } } lua_pop(L, 1); - lua_rawgeti(L, LUA_REGISTRYINDEX, luaS_horiz_variants_index); + lua_rawgeti(L, LUA_REGISTRYINDEX, lua_key_index(horiz_variants)); lua_rawget(L, -2); if (lua_istable(L, -1)) { int glyph, startconnect, endconnect, advance, extender; @@ -1295,11 +1166,11 @@ font_char_from_lua(lua_State * L, internal_font_number f, int i, for (k = 1;; k++) { lua_rawgeti(L, -1, k); if (lua_istable(L, -1)) { - glyph = n_numeric_field(L, luaS_glyph_index, 0); - extender = n_numeric_field(L, luaS_extender_index, 0); - startconnect = n_numeric_field(L, luaS_start_index, 0); - endconnect = n_numeric_field(L, luaS_end_index, 0); - advance = n_numeric_field(L, luaS_advance_index, 0); + glyph = lua_numeric_field_by_index(L, lua_key_index(glyph), 0); + extender = lua_numeric_field_by_index(L, lua_key_index(extender), 0); + startconnect = lua_numeric_field_by_index(L, lua_key_index(start), 0); + endconnect = lua_numeric_field_by_index(L, lua_key_index(end), 0); + advance = lua_numeric_field_by_index(L, lua_key_index(advance), 0); h = new_variant(glyph, startconnect, endconnect, advance, extender); add_charinfo_hor_variant(co, h); @@ -1312,7 +1183,7 @@ font_char_from_lua(lua_State * L, internal_font_number f, int i, } lua_pop(L, 1); - lua_rawgeti(L, LUA_REGISTRYINDEX, luaS_vert_variants_index); + lua_rawgeti(L, LUA_REGISTRYINDEX, lua_key_index(vert_variants)); lua_rawget(L, -2); if (lua_istable(L, -1)) { int glyph, startconnect, endconnect, advance, extender; @@ -1322,11 +1193,11 @@ font_char_from_lua(lua_State * L, internal_font_number f, int i, for (k = 1;; k++) { lua_rawgeti(L, -1, k); if (lua_istable(L, -1)) { - glyph = n_numeric_field(L, luaS_glyph_index, 0); - extender = n_numeric_field(L, luaS_extender_index, 0); - startconnect = n_numeric_field(L, luaS_start_index, 0); - endconnect = n_numeric_field(L, luaS_end_index, 0); - advance = n_numeric_field(L, luaS_advance_index, 0); + glyph = lua_numeric_field_by_index(L, lua_key_index(glyph), 0); + extender = lua_numeric_field_by_index(L, lua_key_index(extender), 0); + startconnect = lua_numeric_field_by_index(L, lua_key_index(start), 0); + endconnect = lua_numeric_field_by_index(L, lua_key_index(end), 0); + advance = lua_numeric_field_by_index(L, lua_key_index(advance), 0); h = new_variant(glyph, startconnect, endconnect, advance, extender); add_charinfo_vert_variant(co, h); @@ -1348,29 +1219,21 @@ font_char_from_lua(lua_State * L, internal_font_number f, int i, |["top_right"] ={ { ["height"]=676, ["kern"]=115 }, { ["height"]=776, ["kern"]=45 } },| |}| */ - lua_rawgeti(L, LUA_REGISTRYINDEX, luaS_mathkern_index); + lua_rawgeti(L, LUA_REGISTRYINDEX, lua_key_index(mathkern)); lua_rawget(L, -2); if (lua_istable(L, -1)) { - lua_getfield(L, -1, "top_left"); - store_math_kerns(L, co, top_left_kern); - lua_pop(L, 1); - lua_getfield(L, -1, "top_right"); - store_math_kerns(L, co, top_right_kern); - lua_pop(L, 1); - lua_getfield(L, -1, "bottom_right"); - store_math_kerns(L, co, bottom_right_kern); - lua_pop(L, 1); - lua_getfield(L, -1, "bottom_left"); - store_math_kerns(L, co, bottom_left_kern); - lua_pop(L, 1); + store_math_kerns(L,lua_key_index(top_left), co, top_left_kern); + store_math_kerns(L,lua_key_index(top_right), co, top_right_kern); + store_math_kerns(L,lua_key_index(bottom_right), co, bottom_right_kern); + store_math_kerns(L,lua_key_index(bottom_left), co, bottom_left_kern); } lua_pop(L, 1); } /* end of |has_math| */ - nk = count_hash_items(L, luaS_index(kerns)); + nk = count_hash_items(L, lua_key_index(kerns)); if (nk > 0) { ckerns = xcalloc((unsigned) (nk + 1), sizeof(kerninfo)); - lua_rawgeti(L, LUA_REGISTRYINDEX, luaS_index(kerns)); + lua_rawgeti(L, LUA_REGISTRYINDEX, lua_key_index(kerns)); lua_rawget(L, -2); if (lua_istable(L, -1)) { /* there are kerns */ ctr = 0; @@ -1383,7 +1246,7 @@ font_char_from_lua(lua_State * L, internal_font_number f, int i, k = non_boundarychar; } else if (lua_isstring(L, -2)) { s = lua_tostring(L, -2); - if (luaS_ptr_eq(s, right_boundary)) { + if (lua_key_eq(s, right_boundary)) { k = right_boundarychar; if (!has_right_boundary(f)) set_right_boundary(f, @@ -1396,7 +1259,7 @@ font_char_from_lua(lua_State * L, internal_font_number f, int i, set_kern_item(ckerns[ctr], k, j); ctr++; } else { - pdftex_warn + luatex_warn ("lua-loaded font %s char [U+%X] has an invalid kern field!", font_name(f), (int) i); } @@ -1407,7 +1270,7 @@ font_char_from_lua(lua_State * L, internal_font_number f, int i, set_kern_item(ckerns[ctr], end_kern, 0); set_charinfo_kerns(co, ckerns); } else { - pdftex_warn + luatex_warn ("lua-loaded font %s char [U+%X] has an invalid kerns field!", font_name(f), (int) i); } @@ -1416,7 +1279,7 @@ font_char_from_lua(lua_State * L, internal_font_number f, int i, } /* packet commands */ - lua_rawgeti(L, LUA_REGISTRYINDEX, luaS_commands_index); + lua_rawgeti(L, LUA_REGISTRYINDEX, lua_key_index(commands)); lua_rawget(L, -2); if (lua_istable(L, -1)) { lua_pushnil(L); /* first key */ @@ -1428,11 +1291,11 @@ font_char_from_lua(lua_State * L, internal_font_number f, int i, lua_pop(L, 1); /* ligatures */ - nl = count_hash_items(L, luaS_index(ligatures)); + nl = count_hash_items(L, lua_key_index(ligatures)); if (nl > 0) { cligs = xcalloc((unsigned) (nl + 1), sizeof(liginfo)); - lua_rawgeti(L, LUA_REGISTRYINDEX, luaS_index(ligatures)); + lua_rawgeti(L, LUA_REGISTRYINDEX, lua_key_index(ligatures)); lua_rawget(L, -2); if (lua_istable(L, -1)) { /* do ligs */ ctr = 0; @@ -1446,7 +1309,7 @@ font_char_from_lua(lua_State * L, internal_font_number f, int i, } } else if (lua_isstring(L, -2)) { s = lua_tostring(L, -2); - if (luaS_ptr_eq(s, right_boundary)) { + if (lua_key_eq(s, right_boundary)) { k = right_boundarychar; if (!has_right_boundary(f)) set_right_boundary(f, @@ -1456,15 +1319,15 @@ font_char_from_lua(lua_State * L, internal_font_number f, int i, } r = -1; if (lua_istable(L, -1)) { - r = n_numeric_field(L, luaS_char_index, -1); /* ligature */ + r = lua_numeric_field_by_index(L, lua_key_index(char), -1); /* ligature */ } if (r != -1 && k != non_boundarychar) { - t = enum_field(L, "type", 0, ligature_type_strings); - set_ligature_item(cligs[ctr], (char) ((t * 2) + 1), k, + t = n_enum_field(L, lua_key_index(type), 0, ligature_type_strings); + set_ligature_item(cligs[ctr], (char) ((t * 2) + 1), k, r); ctr++; } else { - pdftex_warn + luatex_warn ("lua-loaded font %s char [U+%X] has an invalid ligature field!", font_name(f), (int) i); } @@ -1475,7 +1338,7 @@ font_char_from_lua(lua_State * L, internal_font_number f, int i, set_ligature_item(cligs[ctr], 0, end_ligature, 0); set_charinfo_ligatures(co, cligs); } else { - pdftex_warn + luatex_warn ("lua-loaded font %s char [U+%X] has an invalid ligatures field!", font_name(f), (int) i); } @@ -1499,89 +1362,91 @@ int font_from_lua(lua_State * L, int f) char *s; const char *ss; int *l_fonts = NULL; - int save_ref = 1; /* unneeded, really */ + int save_ref ; boolean no_math = false; /* will we save a cache of the luat table? */ - s = string_field(L, "cache", "yes"); - if (strcmp(s, "yes") == 0) - save_ref = 1; - else if (strcmp(s, "no") == 0) + + save_ref = 1; /* we start with ss = "yes" */ + ss = NULL; + ss = n_string_field(L, lua_key_index(cache)); + if (lua_key_eq(ss, no)) save_ref = -1; - else if (strcmp(s, "renew") == 0) + else if (lua_key_eq(ss, renew)) save_ref = 0; - free(s); + /* n_string_field leaves a value on stack*/ + lua_pop(L,1); /* the table is at stack index -1 */ - - if (luaS_width_index == 0) + /*if (luaS_width_index == 0) init_font_string_pointers(L); - - s = string_field(L, "area", ""); + */ + + s = n_string_field_copy(L,lua_key_index(area), ""); set_font_area(f, s); - s = string_field(L, "filename", NULL); + s = n_string_field_copy(L, lua_key_index(filename), NULL); set_font_filename(f, s); - s = string_field(L, "encodingname", NULL); + s = n_string_field_copy(L, lua_key_index(encodingname), NULL); set_font_encodingname(f, s); - s = string_field(L, "name", NULL); + s = n_string_field_copy(L, lua_key_index(name), NULL); set_font_name(f, s); - s = string_field(L, "fullname", font_name(f)); + s = n_string_field_copy(L, lua_key_index(fullname), font_name(f)); set_font_fullname(f, s); if (s == NULL) { - pdftex_fail("lua-loaded font [%d] has no name!", f); + luatex_fail("lua-loaded font [%d] has no name!", f); return false; } - s = string_field(L, "psname", NULL); + s = n_string_field_copy(L, lua_key_index(psname), NULL); set_font_psname(f, s); - i = numeric_field(L, "units_per_em", 0); + i = lua_numeric_field_by_index(L,lua_key_index(units_per_em), 0); set_font_units_per_em(f, i); - i = numeric_field(L, "designsize", 655360); + i = lua_numeric_field_by_index(L,lua_key_index(designsize), 655360); set_font_dsize(f, i); - i = numeric_field(L, "size", font_dsize(f)); + i = lua_numeric_field_by_index(L,lua_key_index(size), font_dsize(f)); set_font_size(f, i); - i = numeric_field(L, "checksum", 0); + i = lua_numeric_field_by_index(L,lua_key_index(checksum), 0); set_font_checksum(f, (unsigned) i); - i = numeric_field(L, "direction", 0); + i = lua_numeric_field_by_index(L,lua_key_index(direction), 0); set_font_natural_dir(f, i); - i = numeric_field(L, "encodingbytes", 0); + i = lua_numeric_field_by_index(L,lua_key_index(encodingbytes), 0); set_font_encodingbytes(f, (char) i); - i = numeric_field(L, "tounicode", 0); + i = lua_numeric_field_by_index(L,lua_key_index(tounicode), 0); set_font_tounicode(f, (char) i); - i = numeric_field(L, "extend", 1000); + i = lua_numeric_field_by_index(L,lua_key_index(extend), 1000); if (i < FONT_EXTEND_MIN) i = FONT_EXTEND_MIN; if (i > FONT_EXTEND_MAX) i = FONT_EXTEND_MAX; set_font_extend(f, i); - i = numeric_field(L, "slant", 0); + i = lua_numeric_field_by_index(L,lua_key_index(slant), 0); if (i < FONT_SLANT_MIN) i = FONT_SLANT_MIN; if (i > FONT_SLANT_MAX) i = FONT_SLANT_MAX; set_font_slant(f, i); - i = numeric_field(L, "hyphenchar", int_par(default_hyphen_char_code)); + i = lua_numeric_field_by_index(L,lua_key_index(hyphenchar), int_par(default_hyphen_char_code)); set_hyphen_char(f, i); - i = numeric_field(L, "skewchar", int_par(default_skew_char_code)); + i = lua_numeric_field_by_index(L,lua_key_index(skewchar), int_par(default_skew_char_code)); set_skew_char(f, i); - i = boolean_field(L, "used", 0); + i = n_boolean_field(L, lua_key_index(used), 0); set_font_used(f, (char) i); - s = string_field(L, "attributes", NULL); + s = n_string_field_copy(L, lua_key_index(attributes), NULL); if (s != NULL && strlen(s) > 0) { i = maketexstring(s); set_pdf_font_attr(f, i); } - i = enum_field(L, "type", unknown_font_type, font_type_strings); + i = n_enum_field(L, lua_key_index(type), unknown_font_type, font_type_strings); set_font_type(f, i); - i = enum_field(L, "format", unknown_format, font_format_strings); + i = n_enum_field(L, lua_key_index(format), unknown_format, font_format_strings); set_font_format(f, i); - i = enum_field(L, "embedding", unknown_embedding, font_embedding_strings); + i = n_enum_field(L, lua_key_index(embedding), unknown_embedding, font_embedding_strings); set_font_embedding(f, i); if (font_encodingbytes(f) == 0 && (font_format(f) == opentype_format @@ -1590,16 +1455,16 @@ int font_from_lua(lua_State * L, int f) } /* now fetch the base fonts, if needed */ - n = count_hash_items(L, luaS_index(fonts)); + n = count_hash_items(L, lua_key_index(fonts)); if (n > 0) { l_fonts = xmalloc((unsigned) ((unsigned) (n + 2) * sizeof(int))); memset(l_fonts, 0, (size_t) ((unsigned) (n + 2) * sizeof(int))); - lua_rawgeti(L, LUA_REGISTRYINDEX, luaS_index(fonts)); + lua_rawgeti(L, LUA_REGISTRYINDEX, lua_key_index(fonts)); lua_rawget(L, -2); for (i = 1; i <= n; i++) { lua_rawgeti(L, -1, i); if (lua_istable(L, -1)) { - lua_getfield(L, -1, "id"); + lua_key_rawgeti(id); if (lua_isnumber(L, -1)) { l_fonts[i]=(int)lua_tonumber(L, -1); lua_pop(L, 2); /* pop id and entry */ @@ -1609,17 +1474,18 @@ int font_from_lua(lua_State * L, int f) }; ss = NULL; if (lua_istable(L, -1)) { - lua_getfield(L, -1, "name"); - if (lua_isstring(L, -1)) { - ss = lua_tostring(L, -1); - } - lua_pop(L, 1); /* pop name */ + /* lua_getfield(L, -1, "name"); */ + /* if (lua_isstring(L, -1)) { */ + /* ss = lua_tostring(L, -1); */ + /* } */ + /* lua_pop(L, 1); /\* pop name *\/ */ + ss = n_string_field(L, lua_key_index(name)); } if (ss != NULL) { - lua_getfield(L, -1, "size"); - t = (lua_isnumber(L, -1) ? lua_roundnumber(L, -1) : -1000); - lua_pop(L, 1); - + /* lua_getfield(L, -1, "size"); */ + /* t = (lua_isnumber(L, -1) ? lua_roundnumber(L, -1) : -1000); */ + /* lua_pop(L, 1); */ + t = lua_numeric_field_by_index(L, lua_key_index(size), -1000); /* TODO: the stack is messed up, otherwise this * explicit resizing would not be needed */ @@ -1630,14 +1496,14 @@ int font_from_lua(lua_State * L, int f) l_fonts[i] = find_font_id(ss, t); lua_settop(L, s_top); } else { - pdftex_fail("Invalid local font in font %s!\n", font_name(f)); + luatex_fail("Invalid local font in font %s!\n", font_name(f)); } lua_pop(L, 1); /* pop list entry */ } lua_pop(L, 1); /* pop list entry */ } else { if (font_type(f) == virtual_font_type) { - pdftex_fail("Invalid local fonts in font %s!\n", font_name(f)); + luatex_fail("Invalid local fonts in font %s!\n", font_name(f)); } else { l_fonts = xmalloc(3 * sizeof(int)); l_fonts[0] = 0; @@ -1647,7 +1513,7 @@ int font_from_lua(lua_State * L, int f) } /* parameters */ - no_math = boolean_field(L, "nomath", 0); + no_math = n_boolean_field(L, lua_key_index(nomath), 0); read_lua_parameters(L, f); if (!no_math) { read_lua_math_parameters(L, f); @@ -1655,8 +1521,9 @@ int font_from_lua(lua_State * L, int f) read_lua_cidinfo(L, f); /* characters */ - - lua_getfield(L, -1, "characters"); + //lua_rawgeti(L, LUA_REGISTRYINDEX, lua_key_index(characters));lua_rawget(L, -2); + lua_key_rawgeti(characters); + /*lua_getfield(L, -1, "characters");*/ if (lua_istable(L, -1)) { /* find the array size values */ int num = 0; /* number of charinfo's to add */ @@ -1696,10 +1563,10 @@ int font_from_lua(lua_State * L, int f) } } else if (lua_isstring(L, -2)) { const char *ss1 = lua_tostring(L, -2); - if (luaS_ptr_eq(ss1, left_boundary)) { + if (lua_key_eq(ss1, left_boundary)) { font_char_from_lua(L, f, left_boundarychar, l_fonts, !no_math); - } else if (luaS_ptr_eq(ss1, right_boundary)) { + } else if (lua_key_eq(ss1, right_boundary)) { font_char_from_lua(L, f, right_boundarychar, l_fonts, !no_math); } @@ -1711,15 +1578,15 @@ int font_from_lua(lua_State * L, int f) /* handle font expansion last: the |copy_font| routine is called eventually, and that needs to know |bc| and |ec|. */ if (font_type(f) != virtual_font_type) { - int fstep = numeric_field(L, "step", 0); + int fstep = lua_numeric_field_by_index(L, lua_key_index(step), 0); if (fstep < 0) fstep = 0; if (fstep > 100) fstep = 100; if (fstep != 0) { - int fshrink = numeric_field(L, "shrink", 0); - int fstretch = numeric_field(L, "stretch", 0); - int fexpand = boolean_field(L, "auto_expand", 0); + int fshrink = lua_numeric_field_by_index(L, lua_key_index(shrink), 0); + int fstretch =lua_numeric_field_by_index(L, lua_key_index(stretch), 0); + int fexpand = n_boolean_field(L, lua_key_index(auto_expand), 0); if (fshrink < 0) fshrink = 0; if (fshrink > 500) @@ -1739,7 +1606,7 @@ int font_from_lua(lua_State * L, int f) } } else { /* jikes, no characters */ - pdftex_warn("lua-loaded font [%d] (%s) has no characters!", f, + luatex_warn("lua-loaded font [%d] (%s) has no characters!", f, font_name(f)); } @@ -1751,7 +1618,7 @@ int font_from_lua(lua_State * L, int f) set_font_cache_id(f, save_ref); } } else { /* jikes, no characters */ - pdftex_warn("lua-loaded font [%d] (%s) has no character table!", f, + luatex_warn("lua-loaded font [%d] (%s) has no character table!", f, font_name(f)); } diff --git a/Build/source/texk/web2c/luatexdir/font/luatexfont.h b/Build/source/texk/web2c/luatexdir/font/luatexfont.h index 0d78199862b..bb4901d5107 100644 --- a/Build/source/texk/web2c/luatexdir/font/luatexfont.h +++ b/Build/source/texk/web2c/luatexdir/font/luatexfont.h @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */ -/* $Id: luatexfont.h 4679 2013-12-19 15:47:53Z luigi $ */ +/* $Id: luatexfont.h 4781 2014-02-10 11:05:24Z taco $ */ #ifndef LUATEXFONT_H # define LUATEXFONT_H diff --git a/Build/source/texk/web2c/luatexdir/font/mapfile.w b/Build/source/texk/web2c/luatexdir/font/mapfile.w index c6d826da9b5..aa076a0a587 100644 --- a/Build/source/texk/web2c/luatexdir/font/mapfile.w +++ b/Build/source/texk/web2c/luatexdir/font/mapfile.w @@ -20,7 +20,7 @@ @ @c static const char _svn_version[] = - "$Id: mapfile.w 4718 2014-01-02 15:35:31Z taco $" + "$Id: mapfile.w 4847 2014-03-05 18:13:17Z luigi $" "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/mapfile.w $"; #include "ptexlib.h" @@ -166,7 +166,7 @@ int avl_do_entry(fm_entry * fm, int mode) if (p != NULL) { switch (mode) { case FM_DUPIGNORE: - pdftex_warn + luatex_warn ("fontmap entry for `%s' already exists, duplicates ignored", fm->tfm_name); delete_new = 1; @@ -174,7 +174,7 @@ int avl_do_entry(fm_entry * fm, int mode) case FM_REPLACE: case FM_DELETE: if (is_inuse(p)) { - pdftex_warn + luatex_warn ("fontmap entry for `%s' has been used, replace/delete not allowed", fm->tfm_name); delete_new = 1; @@ -222,7 +222,7 @@ static int check_fm_entry(fm_entry * fm, boolean warn) if (is_fontfile(fm) && !is_included(fm)) { if (warn) - pdftex_warn + luatex_warn ("ambiguous entry for `%s': font file present but not included, " "will be treated as font file not present", fm->tfm_name); xfree(fm->ff_name); @@ -232,7 +232,7 @@ static int check_fm_entry(fm_entry * fm, boolean warn) /* if both ps_name and font file are missing, drop this entry */ if (fm->ps_name == NULL && !is_fontfile(fm)) { if (warn) - pdftex_warn + luatex_warn ("invalid entry for `%s': both ps_name and font file missing", fm->tfm_name); a += 1; @@ -241,7 +241,7 @@ static int check_fm_entry(fm_entry * fm, boolean warn) /* TrueType fonts cannot be reencoded without subsetting */ if (is_truetype(fm) && is_reencoded(fm) && !is_subsetted(fm)) { if (warn) - pdftex_warn + luatex_warn ("invalid entry for `%s': only subsetted TrueType font can be reencoded", fm->tfm_name); a += 2; @@ -250,14 +250,14 @@ static int check_fm_entry(fm_entry * fm, boolean warn) /* the value of SlantFont and ExtendFont must be reasonable */ if (fm->slant < FONT_SLANT_MIN || fm->slant > FONT_SLANT_MAX) { if (warn) - pdftex_warn + luatex_warn ("invalid entry for `%s': too big value of SlantFont (%g)", fm->tfm_name, fm->slant / 1000.0); a += 8; } if (fm->extend < FONT_EXTEND_MIN || fm->extend > FONT_EXTEND_MAX) { if (warn) - pdftex_warn + luatex_warn ("invalid entry for `%s': too big value of ExtendFont (%g)", fm->tfm_name, fm->extend / 1000.0); a += 16; @@ -267,7 +267,7 @@ static int check_fm_entry(fm_entry * fm, boolean warn) if (fm->pid != -1 && !(is_truetype(fm) && is_subsetted(fm) && !is_reencoded(fm))) { if (warn) - pdftex_warn + luatex_warn ("invalid entry for `%s': PidEid can be used only with subsetted non-reencoded TrueType fonts", fm->tfm_name); a += 32; @@ -406,7 +406,7 @@ static void fm_scan_line(void) for (r = s; *r != ' ' && *r != '"' && *r != '\0'; r++); /* jump over name */ c = *r; /* remember char for temporary end of string */ *r = '\0'; - pdftex_warn + luatex_warn ("invalid entry for `%s': unknown name `%s' ignored", fm->tfm_name, s); *r = (char) c; @@ -418,7 +418,7 @@ static void fm_scan_line(void) if (*r == '"') /* closing quote */ r++; else { - pdftex_warn + luatex_warn ("invalid entry for `%s': closing quote missing", fm->tfm_name); goto bad_line; @@ -528,14 +528,14 @@ static void fm_read_info(void) fm_file = NULL; } } else { - pdftex_warn("cannot open font map file (%s)", cur_file_name); + luatex_warn("cannot open font map file (%s)", cur_file_name); } } else { - pdftex_warn("cannot open font map file (%s)", cur_file_name); + luatex_warn("cannot open font map file (%s)", cur_file_name); } } else { if (!fm_open(cur_file_name)) { - pdftex_warn("cannot open font map file (%s)", cur_file_name); + luatex_warn("cannot open font map file (%s)", cur_file_name); } else { fm_read_file(); tex_printf("{%s", cur_file_name); @@ -552,7 +552,7 @@ static void fm_read_info(void) } break; case MAPLINE: - cur_file_name = NULL; /* makes pdftex_warn() shorter */ + cur_file_name = NULL; /* makes luatex_warn() shorter */ fm_scan_line(); break; default: diff --git a/Build/source/texk/web2c/luatexdir/font/pkin.w b/Build/source/texk/web2c/luatexdir/font/pkin.w index 9be0e3c1b09..d96e69537c7 100644 --- a/Build/source/texk/web2c/luatexdir/font/pkin.w +++ b/Build/source/texk/web2c/luatexdir/font/pkin.w @@ -48,8 +48,8 @@ Modified for use with pdftex by Han The Thanh <thanh@@fi.muni.cz>. @c static const char _svn_version[] = - "$Id: pkin.w 4442 2012-05-25 22:40:34Z hhenkel $" - "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/font/pkin.w $"; + "$Id: pkin.w 4847 2014-03-05 18:13:17Z luigi $" + "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/pkin.w $"; #include "ptexlib.h" @@ -65,7 +65,7 @@ static shalfword pkbyte(void) register shalfword i; i = t3_getchar(); if (t3_eof()) - pdftex_fail("unexpected eof in pk file"); + luatex_fail("unexpected eof in pk file"); return (i); } @@ -202,7 +202,7 @@ static halfword rest(void) return (i); } } else { - pdftex_fail("shouldn't happen"); + luatex_fail("shouldn't happen"); return 0; /*NOTREACHED*/} } @@ -321,7 +321,7 @@ static void unpack(chardesc * cd) turnon = !turnon; } if ((rowsleft != 0) || ((int) hbit != cd->cwidth)) - pdftex_fail("error while unpacking; more bits than required"); + luatex_fail("error while unpacking; more bits than required"); } } @@ -343,9 +343,9 @@ int readchar(boolean check_preamble, chardesc * cd) */ if (check_preamble) { if (pkbyte() != 247) - pdftex_fail("bad pk file, expected pre"); + luatex_fail("bad pk file, expected pre"); if (pkbyte() != 89) - pdftex_fail("bad version of pk file"); + luatex_fail("bad version of pk file"); for (i = pkbyte(); i > 0; i--) /* creator of pkfile */ (void) pkbyte(); (void) pkquad(); /* design size */ @@ -401,7 +401,7 @@ int readchar(boolean check_preamble, chardesc * cd) cd->yoff = pkquad(); } if (length <= 0) - pdftex_fail("packet length (%i) too small", (int) length); + luatex_fail("packet length (%i) too small", (int) length); unpack(cd); return 1; } else { @@ -426,7 +426,7 @@ int readchar(boolean check_preamble, chardesc * cd) case 246: break; default: - pdftex_fail("unexpected command (%i)", (int) flagbyte); + luatex_fail("unexpected command (%i)", (int) flagbyte); } } } diff --git a/Build/source/texk/web2c/luatexdir/font/sfnt.h b/Build/source/texk/web2c/luatexdir/font/sfnt.h index dda13643ff6..74f5701ec0f 100644 --- a/Build/source/texk/web2c/luatexdir/font/sfnt.h +++ b/Build/source/texk/web2c/luatexdir/font/sfnt.h @@ -19,7 +19,7 @@ You should have received a copy of the GNU General Public License along with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */ -/* $Id: sfnt.h 3765 2010-07-29 07:10:21Z taco $ */ +/* $Id: sfnt.h 4847 2014-03-05 18:13:17Z luigi $ */ #ifndef _SFNT_H_ # define _SFNT_H_ @@ -183,7 +183,7 @@ typedef struct { # define RELEASE(a) free(a) # define NEW(a,b) xmalloc((unsigned)((unsigned)(a)*sizeof(b))) # define RENEW(a,b,c) xrealloc(a, (unsigned)((unsigned)(b)*sizeof(c))) -# define TT_ERROR pdftex_fail +# define TT_ERROR luatex_fail # define WARN printf diff --git a/Build/source/texk/web2c/luatexdir/font/subfont.w b/Build/source/texk/web2c/luatexdir/font/subfont.w index 5b436393d98..06678c1e195 100644 --- a/Build/source/texk/web2c/luatexdir/font/subfont.w +++ b/Build/source/texk/web2c/luatexdir/font/subfont.w @@ -20,8 +20,8 @@ @ @c static const char _svn_version[] = - "$Id: subfont.w 4442 2012-05-25 22:40:34Z hhenkel $" - "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/font/subfont.w $"; + "$Id: subfont.w 4847 2014-03-05 18:13:17Z luigi $" + "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/subfont.w $"; #include "ptexlib.h" #include <string.h> @@ -105,7 +105,7 @@ static void sfd_getline(boolean expect_eof) if (expect_eof) return; else - pdftex_fail("unexpected end of file"); + luatex_fail("unexpected end of file"); } p = sfd_line; do { @@ -149,13 +149,13 @@ static sfd_entry *read_sfd(char *sfd_name) if (!(run_callback(callback_id, "S->bSd", cur_file_name, &file_opened, &sfd_buffer, &sfd_size) && file_opened && sfd_size > 0)) { - pdftex_warn("cannot open SFD file for reading (%s)", cur_file_name); + luatex_warn("cannot open SFD file for reading (%s)", cur_file_name); cur_file_name = NULL; return NULL; } } else { if (!sfd_open(cur_file_name)) { - pdftex_warn("cannot open SFD file for reading (%s)", cur_file_name); + luatex_warn("cannot open SFD file for reading (%s)", cur_file_name); cur_file_name = NULL; return NULL; } @@ -187,16 +187,16 @@ static sfd_entry *read_sfd(char *sfd_name) } else if (*p == 0) /* end of subfont */ break; if (sscanf(p, " %li %n", &i, &n) == 0) - pdftex_fail("invalid token:\n%s", p); + luatex_fail("invalid token:\n%s", p); p += n; if (*p == ':') { /* offset */ k = i; p++; } else if (*p == '_') { /* range */ if (sscanf(p + 1, " %li %n", &j, &n) == 0) - pdftex_fail("invalid token:\n%s", p); + luatex_fail("invalid token:\n%s", p); if (i > j || k + (j - i) > 255) - pdftex_fail("invalid range:\n%s", p); + luatex_fail("invalid range:\n%s", p); while (i <= j) sf->charcodes[k++] = i++; p += n + 1; diff --git a/Build/source/texk/web2c/luatexdir/font/texfont.w b/Build/source/texk/web2c/luatexdir/font/texfont.w index 86bdda167d6..6d2358349d3 100644 --- a/Build/source/texk/web2c/luatexdir/font/texfont.w +++ b/Build/source/texk/web2c/luatexdir/font/texfont.w @@ -32,7 +32,7 @@ problematic |if 0 != null|. @c static const char _svn_version[] = - "$Id: texfont.w 4685 2013-12-20 13:39:30Z luigi $" + "$Id: texfont.w 4847 2014-03-05 18:13:17Z luigi $" "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/texfont.w $"; #include "ptexlib.h" @@ -196,7 +196,7 @@ static void set_charinfo(internal_font_number f, int c, charinfo * ci) if (glyph) { font_tables[f]->charinfo[glyph] = *ci; } else { - pdftex_fail("font: %s", "character insertion failed"); + luatex_fail("font: %s", "character insertion failed"); } } else if (c == left_boundarychar) { set_left_boundary(f, ci); diff --git a/Build/source/texk/web2c/luatexdir/font/tounicode.w b/Build/source/texk/web2c/luatexdir/font/tounicode.w index e303e470fa4..b33bef027a0 100644 --- a/Build/source/texk/web2c/luatexdir/font/tounicode.w +++ b/Build/source/texk/web2c/luatexdir/font/tounicode.w @@ -20,8 +20,8 @@ @ @c static const char _svn_version[] = - "$Id: tounicode.w 4643 2013-09-16 20:33:56Z hhenkel $" - "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/font/tounicode.w $"; + "$Id: tounicode.w 4847 2014-03-05 18:13:17Z luigi $" + "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/tounicode.w $"; #include "ptexlib.h" @@ -99,7 +99,7 @@ void def_tounicode(str_number glyph, str_number unistr) } if (l == 0 || valid_unistr == 0 || strlen(buf) == 0 || strcmp(buf, notdef) == 0) { - pdftex_warn("ToUnicode: invalid parameter(s): `%s' => `%s'", buf, p); + luatex_warn("ToUnicode: invalid parameter(s): `%s' => `%s'", buf, p); return; } if (glyph_unicode_tree == NULL) { @@ -311,7 +311,7 @@ int write_tounicode(PDF pdf, char **glyph_names, char *name) assert(strlen(name) + strlen(builtin_suffix) < SMALL_BUF_SIZE); if (glyph_unicode_tree == NULL) { #ifdef DEBUG - pdftex_warn("no GlyphToUnicode entry has been inserted yet!"); + luatex_warn("no GlyphToUnicode entry has been inserted yet!"); #endif pdf->gen_tounicode = 0; return 0; diff --git a/Build/source/texk/web2c/luatexdir/font/vfovf.w b/Build/source/texk/web2c/luatexdir/font/vfovf.w index 1e21b55f630..1ce4165a5df 100644 --- a/Build/source/texk/web2c/luatexdir/font/vfovf.w +++ b/Build/source/texk/web2c/luatexdir/font/vfovf.w @@ -20,7 +20,7 @@ @ @c static const char _svn_version[] = - "$Id: vfovf.w 4679 2013-12-19 15:47:53Z luigi $" + "$Id: vfovf.w 4847 2014-03-05 18:13:17Z luigi $" "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/vfovf.w $"; #include "ptexlib.h" @@ -133,7 +133,7 @@ typedef struct vf_stack_record { { \ eight_bits vf_tmp_b; \ if (vf_cur >= vf_size) { \ - pdftex_fail("unexpected eof on virtual font"); \ + luatex_fail("unexpected eof on virtual font"); \ } \ vf_tmp_b = vf_buffer[vf_cur++]; \ a = vf_tmp_b; \ diff --git a/Build/source/texk/web2c/luatexdir/font/writecff.w b/Build/source/texk/web2c/luatexdir/font/writecff.w index 5ec397b4a23..ed0ec53ce1e 100644 --- a/Build/source/texk/web2c/luatexdir/font/writecff.w +++ b/Build/source/texk/web2c/luatexdir/font/writecff.w @@ -19,7 +19,7 @@ @ @c static const char _svn_version[] = - "$Id: writecff.w 4690 2013-12-21 22:25:27Z luigi $" + "$Id: writecff.w 4847 2014-03-05 18:13:17Z luigi $" "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/writecff.w $"; #include "ptexlib.h" @@ -51,9 +51,9 @@ static unsigned long get_unsigned(cff_font * cff, int n) } @ @c -#define CFF_ERROR pdftex_fail +#define CFF_ERROR luatex_fail #undef WARN -#define WARN pdftex_warn +#define WARN luatex_warn const char *const cff_stdstr[CFF_STDSTR_MAX] = { ".notdef", "space", "exclam", "quotedbl", "numbersign", @@ -863,7 +863,7 @@ cff_dict *cff_dict_unpack(card8 * data, card8 * endptr) } if (status != CFF_PARSE_OK) { - pdftex_fail("Parsing CFF DICT failed. (error=%d)", status); + luatex_fail("Parsing CFF DICT failed. (error=%d)", status); } else if (stack_top != 0) { WARN("Garbage in CFF DICT data."); stack_top = 0; @@ -899,13 +899,13 @@ double cff_dict_get(cff_dict * dict, const char *key, int idx) if ((dict->entries)[i].count > idx) value = (dict->entries)[i].values[idx]; else - pdftex_fail("Invalid index number."); + luatex_fail("Invalid index number."); break; } } if (i == dict->count) - pdftex_fail("DICT entry \"%s\" not found.", key); + luatex_fail("DICT entry \"%s\" not found.", key); return value; } @@ -1122,7 +1122,7 @@ cff_font *read_cff(unsigned char *buf, long buflength, int n) return NULL; } if (cff->header_major > 1) { - pdftex_warn("CFF major version %u not supported.", cff->header_major); + luatex_warn("CFF major version %u not supported.", cff->header_major); cff_close(cff); return NULL; } @@ -1131,7 +1131,7 @@ cff_font *read_cff(unsigned char *buf, long buflength, int n) /* Name INDEX */ idx = cff_get_index(cff); if (n > idx->count - 1) { - pdftex_warn("Invalid CFF fontset index number."); + luatex_warn("Invalid CFF fontset index number."); cff_close(cff); return NULL; } @@ -1540,7 +1540,7 @@ void cff_dict_set(cff_dict * dict, const char *key, int idx, double value) } if (i == dict->count) - pdftex_fail("DICT entry \"%s\" not found.", key); + luatex_fail("DICT entry \"%s\" not found.", key); } @@ -3014,7 +3014,7 @@ static void write_fontfile(PDF pdf, cff_font * cffont, char *fullname) if ((avl_find(fd->gl_tree,glyph) != NULL)) { \ size = (long)(cs_idx->offset[code+1] - cs_idx->offset[code]); \ if (size > CS_STR_LEN_MAX) { \ - pdftex_fail("Charstring too long: gid=%u, %ld bytes", code, size); \ + luatex_fail("Charstring too long: gid=%u, %ld bytes", code, size); \ } \ if (charstring_len + CS_STR_LEN_MAX >= max_len) { \ max_len = (long)(charstring_len + 2 * CS_STR_LEN_MAX); \ @@ -3457,7 +3457,7 @@ void write_cid_cff(PDF pdf, cff_font * cffont, fd_entry * fd) (CIDToGIDMap[2 * cid + 1])); size = (long) (cs_idx->offset[gid_org + 1] - cs_idx->offset[gid_org]); if (size > CS_STR_LEN_MAX) { - pdftex_fail("Charstring too long: gid=%u, %ld bytes", cid, size); + luatex_fail("Charstring too long: gid=%u, %ld bytes", cid, size); } if (charstring_len + CS_STR_LEN_MAX >= max_len) { max_len = charstring_len + 2 * CS_STR_LEN_MAX; diff --git a/Build/source/texk/web2c/luatexdir/font/writefont.w b/Build/source/texk/web2c/luatexdir/font/writefont.w index 6e4808e6b76..ff986bf86fe 100644 --- a/Build/source/texk/web2c/luatexdir/font/writefont.w +++ b/Build/source/texk/web2c/luatexdir/font/writefont.w @@ -20,8 +20,8 @@ @ @c static const char _svn_version[] = - "$Id: writefont.w 4442 2012-05-25 22:40:34Z hhenkel $" - "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/font/writefont.w $"; + "$Id: writefont.w 4847 2014-03-05 18:13:17Z luigi $" + "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/writefont.w $"; #include "ptexlib.h" #include "lua/luatex-api.h" @@ -525,7 +525,7 @@ static void write_fontdescriptor(PDF pdf, fd_entry * fd) fd_flags = is_std_t1font(fd->fm) ? std_flags[check_std_t1font(fd->fm->ps_name)] : FD_FLAGS_DEFAULT_NON_EMBED; - pdftex_warn + luatex_warn ("No flags specified for non-embedded font `%s' (%s) (I'm using %i): " "fix your map entry.", fd->fm->ps_name != NULL ? fd->fm->ps_name : "No name given", @@ -716,7 +716,7 @@ static void create_fontdictionary(PDF pdf, internal_font_number f) create_fontdescriptor(fo, f); write_fontdescriptor(pdf, fo->fd); if (!is_std_t1font(fo->fm)) - pdftex_warn("font `%s' is not a standard font; " + luatex_warn("font `%s' is not a standard font; " "I suppose it is available to your PDF viewer then", fo->fm->ps_name); } @@ -780,7 +780,7 @@ void do_pdf_font(PDF pdf, internal_font_number f) fm->ff_name = s; del_file = 1; } else { - pdftex_fail + luatex_fail ("writefont.c: The file (%s) does not contain font `%s'", fm->ff_name, fm->ps_name); } @@ -808,7 +808,7 @@ void do_pdf_font(PDF pdf, internal_font_number f) set_type1(fm); break; default: - pdftex_fail + luatex_fail ("writefont.c: The file format (%s) for font `%s' is incompatible with wide characters\n", font_format_name(f), font_name(f)); } diff --git a/Build/source/texk/web2c/luatexdir/font/writet1.w b/Build/source/texk/web2c/luatexdir/font/writet1.w index 37af7723320..567d3768936 100644 --- a/Build/source/texk/web2c/luatexdir/font/writet1.w +++ b/Build/source/texk/web2c/luatexdir/font/writet1.w @@ -20,8 +20,8 @@ @ @c static const char _svn_version[] = - "$Id: writet1.w 4442 2012-05-25 22:40:34Z hhenkel $" - "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/font/writet1.w $"; + "$Id: writet1.w 4847 2014-03-05 18:13:17Z luigi $" + "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/writet1.w $"; #include "ptexlib.h" #include <string.h> @@ -257,7 +257,7 @@ static void enc_getline(void) char c; restart: if (enc_eof()) - pdftex_fail("unexpected end of file"); + luatex_fail("unexpected end of file"); p = enc_line; do { c = (char) enc_getchar(); @@ -283,7 +283,7 @@ char **load_enc_file(char *enc_name) cur_file_name = luatex_find_file(enc_name, find_enc_file_callback); if (cur_file_name == NULL) { - pdftex_fail("cannot find encoding file '%s' for reading", enc_name); + luatex_fail("cannot find encoding file '%s' for reading", enc_name); } callback_id = callback_defined(read_enc_file_callback); enc_curbyte = 0; @@ -292,12 +292,12 @@ char **load_enc_file(char *enc_name) if (run_callback(callback_id, "S->bSd", cur_file_name, &file_opened, &enc_buffer, &enc_size)) { if ((!file_opened) || enc_size == 0) { - pdftex_fail("cannot open encoding file '%s' for reading", cur_file_name); + luatex_fail("cannot open encoding file '%s' for reading", cur_file_name); } } } else { if (!enc_open(cur_file_name)) { - pdftex_fail("cannot open encoding file '%s' for reading", cur_file_name); + luatex_fail("cannot open encoding file '%s' for reading", cur_file_name); } enc_read_file(); enc_close(); @@ -311,7 +311,7 @@ char **load_enc_file(char *enc_name) enc_getline(); if (*enc_line != '/' || (r = strchr(enc_line, '[')) == NULL) { remove_eol(r, enc_line); - pdftex_fail + luatex_fail ("invalid encoding vector (a name or `[' missing): `%s'", enc_line); } names_count = 0; @@ -324,7 +324,7 @@ char **load_enc_file(char *enc_name) *p = 0; skip(r, ' '); if (names_count >= 256) - pdftex_fail("encoding vector contains more than 256 names"); + luatex_fail("encoding vector contains more than 256 names"); if (strcmp(buf, notdef) != 0) glyph_names[names_count] = xstrdup(buf); names_count++; @@ -334,7 +334,7 @@ char **load_enc_file(char *enc_name) goto done; else { remove_eol(r, enc_line); - pdftex_fail + luatex_fail ("invalid encoding vector: a name or `] def' expected: `%s'", enc_line); } @@ -376,7 +376,7 @@ static int t1_getbyte(void) return c; if (t1_block_length == 0) { if (c != 128) - pdftex_fail("invalid marker"); + luatex_fail("invalid marker"); c = t1_getchar(); if (c == 3) { while (!t1_eof()) @@ -456,7 +456,7 @@ static float t1_scan_num(char *p, char **r) skip(p, ' '); if (sscanf(p, "%g", &f) != 1) { remove_eol(p, t1_line_array); - pdftex_fail("a number expected: `%s'", t1_line_array); + luatex_fail("a number expected: `%s'", t1_line_array); } if (r != NULL) { for (; isdigit(*p) || *p == '.' || @@ -488,7 +488,7 @@ static void t1_getline(void) static int eexec_len = 17; /* |strlen(eexec_str)| */ restart: if (t1_eof()) - pdftex_fail("unexpected end of file"); + luatex_fail("unexpected end of file"); t1_line_ptr = t1_line_array; alloc_array(t1_line, 1, T1_BUF_SIZE); t1_cslen = 0; @@ -605,7 +605,7 @@ static void t1_check_block_len(boolean decrypt) c = edecrypt((byte) c); l = (int) t1_block_length; if (!(l == 0 && (c == 10 || c == 13))) { - pdftex_fail("%i bytes more than expected were ignored", l + 1); + luatex_fail("%i bytes more than expected were ignored", l + 1); } } @@ -642,7 +642,7 @@ static void t1_stop_eexec(PDF pdf) if (last_hexbyte == 0) t1_puts(pdf, "00"); else - pdftex_fail("unexpected data after eexec"); + luatex_fail("unexpected data after eexec"); } } t1_cs = false; @@ -680,7 +680,7 @@ static void t1_scan_keys(PDF pdf) if (t1_prefix("/FontType")) { p = t1_line_array + strlen("FontType") + 1; if ((i = (int) t1_scan_num(p, 0)) != 1) - pdftex_fail("Type%d fonts unsupported by pdfTeX", i); + luatex_fail("Type%d fonts unsupported by pdfTeX", i); return; } for (key = (const key_entry *) font_key; key - font_key < FONT_KEYS_NUM; @@ -696,7 +696,7 @@ static void t1_scan_keys(PDF pdf) if ((k = (int) (key - font_key)) == FONTNAME_CODE) { if (*p != '/') { remove_eol(p, t1_line_array); - pdftex_fail("a name expected: `%s'", t1_line_array); + luatex_fail("a name expected: `%s'", t1_line_array); } r = ++p; /* skip the slash */ for (q = t1_buf_array; *p != ' ' && *p != 10; *q++ = *p++); @@ -738,7 +738,7 @@ static void t1_scan_param(PDF pdf) if (t1_prefix(lenIV)) { t1_lenIV = (short) t1_scan_num(t1_line_array + strlen(lenIV), 0); if (t1_lenIV < 0) - pdftex_fail("negative value of lenIV is not supported"); + luatex_fail("negative value of lenIV is not supported"); return; } t1_scan_keys(pdf); @@ -776,7 +776,7 @@ static char **t1_builtin_enc(void) } return glyph_names; } else - pdftex_fail + luatex_fail ("cannot subset font (unknown predefined encoding `%s')", t1_buf_array); } @@ -808,7 +808,7 @@ static char **t1_builtin_enc(void) *p = 0; skip(r, ' '); if (counter > 255) - pdftex_fail("encoding vector contains more than 256 names"); + luatex_fail("encoding vector contains more than 256 names"); if (strcmp(t1_buf_array, notdef) != 0) glyph_names[counter] = xstrdup(t1_buf_array); counter++; @@ -818,7 +818,7 @@ static char **t1_builtin_enc(void) break; else { remove_eol(r, t1_line_array); - pdftex_fail + luatex_fail ("a name or `] def' or `] readonly def' expected: `%s'", t1_line_array); } @@ -906,13 +906,13 @@ static boolean t1_open_fontfile(const char *open_name_prefix) t1_size = 0; ff = check_ff_exist(fd_cur->fm->ff_name, is_truetype(fd_cur->fm)); if (ff->ff_path == NULL) { - pdftex_fail("cannot open Type 1 font file for reading (%s)", + luatex_fail("cannot open Type 1 font file for reading (%s)", fd_cur->fm->ff_name); return false; } cur_file_name = luatex_find_file(ff->ff_path, find_type1_file_callback); if (cur_file_name == NULL) { - pdftex_fail("cannot open Type 1 font file for reading (%s)", + luatex_fail("cannot open Type 1 font file for reading (%s)", ff->ff_path); return false; } @@ -921,7 +921,7 @@ static boolean t1_open_fontfile(const char *open_name_prefix) if (!run_callback(callback_id, "S->bSd", cur_file_name, &file_opened, &t1_buffer, &t1_size) && file_opened && t1_size > 0) { - pdftex_warn("cannot open Type 1 font file for reading (%s)", + luatex_warn("cannot open Type 1 font file for reading (%s)", cur_file_name); return false; } @@ -972,7 +972,7 @@ static void t1_include(PDF pdf) @c #define check_subr(subr) \ if (subr >= subr_size || subr < 0) \ - pdftex_fail("Subrs array: entry index out of range (%i)", subr); + luatex_fail("Subrs array: entry index out of range (%i)", subr); static const char **check_cs_token_pair(void) { @@ -998,7 +998,7 @@ static void cs_store(boolean is_subr) } else { ptr = cs_ptr++; if (cs_ptr - cs_tab > cs_size) - pdftex_fail + luatex_fail ("CharStrings dict: more entries than dict size (%i)", cs_size); if (strcmp(t1_buf_array + 1, notdef) == 0) /* skip the slash */ ptr->name = (char *) notdef; @@ -1040,7 +1040,7 @@ static boolean is_cc_init = false; stack_ptr -= N #define stack_error(N) { \ - pdftex_fail("CharString: invalid access (%i) to stack (%i entries)", \ + luatex_fail("CharString: invalid access (%i) to stack (%i entries)", \ (int) N, (int)(stack_ptr - cc_stack)); \ goto cs_error; \ } @@ -1110,9 +1110,9 @@ static void cs_fail(const char *cs_name, int subr, const char *fmt, ...) vsprintf(buf, fmt, args); va_end(args); if (cs_name == NULL) - pdftex_fail("Subr (%i): %s", (int) subr, buf); + luatex_fail("Subr (%i): %s", (int) subr, buf); else - pdftex_fail("CharString (/%s): %s", cs_name, buf); + luatex_fail("CharString (/%s): %s", cs_name, buf); } @ fix a return-less subr by appending |CS_RETURN| @@ -1176,7 +1176,7 @@ static void cs_mark(const char *cs_name, int subr) if (strcmp(ptr->name, cs_name) == 0) break; if (ptr == cs_ptr) { - pdftex_warn("glyph `%s' undefined", cs_name); + luatex_warn("glyph `%s' undefined", cs_name); return; } if (ptr->name == notdef) @@ -1282,7 +1282,7 @@ static void cs_mark(const char *cs_name, int subr) } } if (cs_name == NULL && last_cmd != CS_RETURN) { - pdftex_warn("last command in subr `%i' is not a RETURN; " + luatex_warn("last command in subr `%i' is not a RETURN; " "I will add it now but please consider fixing the font", (int) subr); append_cs_return(ptr); @@ -1670,7 +1670,7 @@ static void t1_subset_charstrings(PDF pdf) t1_mark_glyphs(); if (subr_tab != NULL) { if (cs_token_pair == NULL) - pdftex_fail + luatex_fail ("This Type 1 font uses mismatched subroutine begin/end token pairs."); t1_subr_flush(); } diff --git a/Build/source/texk/web2c/luatexdir/font/writet3.w b/Build/source/texk/web2c/luatexdir/font/writet3.w index 54fb3c1f4f0..c03a6d84374 100644 --- a/Build/source/texk/web2c/luatexdir/font/writet3.w +++ b/Build/source/texk/web2c/luatexdir/font/writet3.w @@ -20,7 +20,7 @@ @ @c static const char _svn_version[] = - "$Id: writet3.w 4718 2014-01-02 15:35:31Z taco $" + "$Id: writet3.w 4847 2014-03-05 18:13:17Z luigi $" "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/writet3.w $"; #include "ptexlib.h" @@ -50,7 +50,7 @@ int t3_curbyte = 0; #define t3_check_eof() \ if (t3_eof()) \ - pdftex_fail("unexpected end of file"); + luatex_fail("unexpected end of file"); @ @c @@ -141,7 +141,7 @@ static boolean writepk(PDF pdf, internal_font_number f) if (name == NULL || !FILESTRCASEEQ(cur_file_name, font_ret.name) || !kpse_bitmap_tolerance((float) font_ret.dpi, (float) dpi)) { - pdftex_fail("Font %s at %i not found", cur_file_name, (int) dpi); + luatex_fail("Font %s at %i not found", cur_file_name, (int) dpi); } } callback_id = callback_defined(read_pk_file_callback); @@ -150,7 +150,7 @@ static boolean writepk(PDF pdf, internal_font_number f) (run_callback (callback_id, "S->bSd", name, &file_opened, &t3_buffer, &t3_size) && file_opened && t3_size > 0)) { - pdftex_warn("Font %s at %i not found", cur_file_name, (int) dpi); + luatex_warn("Font %s at %i not found", cur_file_name, (int) dpi); cur_file_name = NULL; return false; } diff --git a/Build/source/texk/web2c/luatexdir/font/writettf.w b/Build/source/texk/web2c/luatexdir/font/writettf.w index 93be125837b..2cab4b2371c 100644 --- a/Build/source/texk/web2c/luatexdir/font/writettf.w +++ b/Build/source/texk/web2c/luatexdir/font/writettf.w @@ -20,7 +20,7 @@ @ @c static const char _svn_version[] = - "$Id: writettf.w 4718 2014-01-02 15:35:31Z taco $" + "$Id: writettf.w 4847 2014-03-05 18:13:17Z luigi $" "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/writettf.w $"; #include "ptexlib.h" @@ -487,7 +487,7 @@ long ttf_getnum(int s) int c; while (s > 0) { if (ttf_eof()) - pdftex_fail("unexpected EOF"); + luatex_fail("unexpected EOF"); c = ttf_getchar(); i = (i << 8) + c; s--; @@ -517,7 +517,7 @@ dirtab_entry *ttf_name_lookup(const char *s, boolean required) break; if (tab - dir_tab == ntabs) { if (required) - pdftex_fail("can't find table `%s'", s); + luatex_fail("can't find table `%s'", s); else tab = NULL; } @@ -587,7 +587,7 @@ static void ttf_copy_encoding(void) e = ttfenc_tab + *q; e->code = charcodes[*q]; if (e->code == -1) - pdftex_warn + luatex_warn ("character %i in subfont %s is not mapped to any charcode", *q, fd_cur->fm->tfm_name); else { @@ -817,7 +817,7 @@ void ttf_read_post(void) } break; default: - pdftex_warn("unsupported format (%.8X) of `post' table, assuming 3.0", + luatex_warn("unsupported format (%.8X) of `post' table, assuming 3.0", (unsigned int) post_format); case 0x00030000: for (glyph = glyph_tab; glyph - glyph_tab < NMACGLYPHS; glyph++) { @@ -893,13 +893,13 @@ static ttf_cmap_entry *ttf_read_cmap(char *ttf_name, int pid, int eid, goto read_cmap_format_4; else { if (warn) - pdftex_warn("cmap format %i unsupported", format); + luatex_warn("cmap format %i unsupported", format); return NULL; } } } if (warn) - pdftex_warn("cannot find cmap subtable for (pid,eid) = (%i, %i)", + luatex_warn("cannot find cmap subtable for (pid,eid) = (%i, %i)", pid, eid); return NULL; read_cmap_format_4: @@ -950,10 +950,10 @@ static ttf_cmap_entry *ttf_read_cmap(char *ttf_name, int pid, int eid, index = (index + s->idDelta) & 0xFFFF; } if (index >= glyphs_count) - pdftex_fail("cmap: glyph index %li out of range [0..%i)", + luatex_fail("cmap: glyph index %li out of range [0..%i)", index, glyphs_count); if (p->table[i] != -1) - pdftex_warn + luatex_warn ("cmap: multiple glyphs are mapped to unicode %.4lX, " "only %li will be used (glyph %li being ignored)", i, p->table[i], index); @@ -999,7 +999,7 @@ static void ttf_reset_chksm(PDF pdf, dirtab_entry * tab) tmp_ulong = 0; tab->offset = (TTF_ULONG) ttf_offset(); if (tab->offset % 4 != 0) - pdftex_warn("offset of `%4.4s' is not a multiple of 4", tab->tag); + luatex_warn("offset of `%4.4s' is not a multiple of 4", tab->tag); } @@ -1035,7 +1035,7 @@ static void ttf_byte_encoding(PDF pdf) put_byte(e->newindex); } else { if (e->name != notdef) - pdftex_warn + luatex_warn ("glyph `%s' has been mapped to `%s' in `ttf_byte_encoding' cmap table", e->name, notdef); put_byte(0); /* notdef */ @@ -1124,7 +1124,7 @@ static void ttf_write_cmap(PDF pdf) offset += TRIMMED_TABLE_MAP_LENGTH; break; default: - pdftex_fail("invalid format (it should not have happened)"); + luatex_fail("invalid format (it should not have happened)"); } (void) put_ushort(ce->platform_id); (void) put_ushort(ce->encoding_id); @@ -1268,7 +1268,7 @@ static void ttf_write_dirtab(PDF pdf) } } if (i % 4 != 0) { - pdftex_warn("font length is not a multiple of 4 (%li)", i); + luatex_warn("font length is not a multiple of 4 (%li)", i); checksum <<= 8 * (4 - i % 4); } k = 0xB1B0AFBA - checksum; @@ -1365,7 +1365,7 @@ static void ttf_reindex_glyphs(void) t = cmap->table; assert(t != NULL && e->code < 0x10000); if (t[e->code] < 0) { - pdftex_warn + luatex_warn ("subfont %s: wrong mapping: character %li --> 0x%4.4lX --> .notdef", fd_cur->fm->tfm_name, (long) (e - ttfenc_tab), e->code); continue; @@ -1381,7 +1381,7 @@ static void ttf_reindex_glyphs(void) /* scan form `index123' */ if (sscanf(e->name, GLYPH_PREFIX_INDEX "%i", &index) == 1) { if (index >= glyphs_count) { - pdftex_warn("`%s' out of valid range [0..%i)", + luatex_warn("`%s' out of valid range [0..%i)", e->name, glyphs_count); continue; } @@ -1396,7 +1396,7 @@ static void ttf_reindex_glyphs(void) if (cmap == NULL) cmap = ttf_read_cmap(fd_cur->fm->ff_name, 0, 3, false); if (cmap == NULL) { - pdftex_warn + luatex_warn ("no unicode mapping found, all `uniXXXX' names will be ignored"); cmap_not_found = true; /* once only */ } @@ -1407,7 +1407,7 @@ static void ttf_reindex_glyphs(void) assert(t != NULL); if (t[index] != -1) { if (t[index] >= glyphs_count) { - pdftex_warn + luatex_warn ("`%s' is mapped to index %li which is out of valid range [0..%i)", e->name, t[index], glyphs_count); continue; @@ -1415,7 +1415,7 @@ static void ttf_reindex_glyphs(void) glyph = glyph_tab + t[index]; goto append_new_glyph; } else { - pdftex_warn("`unicode %s%.4X' is not mapped to any glyph", + luatex_warn("`unicode %s%.4X' is not mapped to any glyph", GLYPH_PREFIX_UNICODE, index); continue; } @@ -1425,7 +1425,7 @@ static void ttf_reindex_glyphs(void) if (glyph->name != notdef && strcmp(glyph->name, e->name) == 0) break; if (!(glyph - glyph_tab < glyphs_count)) { - pdftex_warn("glyph `%s' not found", e->name); + luatex_warn("glyph `%s' not found", e->name); continue; } append_new_glyph: @@ -1556,7 +1556,7 @@ static void ttf_write_OS2(PDF pdf) ttf_reset_chksm(pdf, tab); version = get_ushort(); if (version > 3) - pdftex_fail("unknown version of OS/2 table (%.4X)", version); + luatex_fail("unknown version of OS/2 table (%.4X)", version); (void) put_ushort(0x0001); /* fix version to 1 */ ttf_ncopy(pdf, 2 * TTF_USHORT_SIZE + 13 * TTF_SHORT_SIZE + 10 * TTF_BYTE_SIZE); @@ -1694,7 +1694,7 @@ void writettf(PDF pdf, fd_entry * fd) if (is_subsetted(fd_cur->fm) && (fd_cur->fe == NULL) && !is_subfont(fd_cur->fm)) { - pdftex_fail("Subset TrueType must be a reencoded or a subfont"); + luatex_fail("Subset TrueType must be a reencoded or a subfont"); } ttf_curbyte = 0; ttf_size = 0; @@ -1702,7 +1702,7 @@ void writettf(PDF pdf, fd_entry * fd) cur_file_name = luatex_find_file(fd_cur->fm->ff_name, find_truetype_file_callback); if (cur_file_name == NULL) { - pdftex_fail("cannot find TrueType font file for reading (%s)", fd_cur->fm->ff_name); + luatex_fail("cannot find TrueType font file for reading (%s)", fd_cur->fm->ff_name); } callback_id = callback_defined(read_truetype_file_callback); if (callback_id > 0) { @@ -1710,11 +1710,11 @@ void writettf(PDF pdf, fd_entry * fd) &file_opened, &ttf_buffer, &ttf_size) && file_opened && ttf_size > 0) { } else { - pdftex_fail("cannot open TrueType font file for reading (%s)", cur_file_name); + luatex_fail("cannot open TrueType font file for reading (%s)", cur_file_name); } } else { if (!ttf_open(cur_file_name)) { - pdftex_fail("cannot open TrueType font file for reading (%s)", cur_file_name); + luatex_fail("cannot open TrueType font file for reading (%s)", cur_file_name); } ttf_read_file(); ttf_close(); @@ -1807,7 +1807,7 @@ void writeotf(PDF pdf, fd_entry * fd) cur_file_name = luatex_find_file(fd_cur->fm->ff_name, find_opentype_file_callback); if (cur_file_name == NULL) { - pdftex_fail("cannot find OpenType font file for reading (%s)", fd_cur->fm->ff_name); + luatex_fail("cannot find OpenType font file for reading (%s)", fd_cur->fm->ff_name); } callback_id = callback_defined(read_opentype_file_callback); if (callback_id > 0) { @@ -1815,11 +1815,11 @@ void writeotf(PDF pdf, fd_entry * fd) &file_opened, &ttf_buffer, &ttf_size) && file_opened && ttf_size > 0) { } else { - pdftex_fail("cannot open OpenType font file for reading (%s)", cur_file_name); + luatex_fail("cannot open OpenType font file for reading (%s)", cur_file_name); } } else { if (!otf_open(cur_file_name)) { - pdftex_fail("cannot open OpenType font file for reading (%s)", cur_file_name); + luatex_fail("cannot open OpenType font file for reading (%s)", cur_file_name); } ttf_read_file(); ttf_close(); diff --git a/Build/source/texk/web2c/luatexdir/font/writetype0.w b/Build/source/texk/web2c/luatexdir/font/writetype0.w index 19bab05906f..1196899ba79 100644 --- a/Build/source/texk/web2c/luatexdir/font/writetype0.w +++ b/Build/source/texk/web2c/luatexdir/font/writetype0.w @@ -19,8 +19,8 @@ @ @c static const char _svn_version[] = - "$Id: writetype0.w 4442 2012-05-25 22:40:34Z hhenkel $" - "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/font/writetype0.w $"; + "$Id: writetype0.w 4847 2014-03-05 18:13:17Z luigi $" + "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/writetype0.w $"; #include "ptexlib.h" #include "font/writettf.h" @@ -48,7 +48,7 @@ void writetype0(PDF pdf, fd_entry * fd) cur_file_name = luatex_find_file(fd_cur->fm->ff_name, find_opentype_file_callback); if (cur_file_name == NULL) { - pdftex_fail("cannot find OpenType font file for reading (%s)", + luatex_fail("cannot find OpenType font file for reading (%s)", fd_cur->fm->ff_name); } callback_id = callback_defined(read_opentype_file_callback); @@ -57,12 +57,12 @@ void writetype0(PDF pdf, fd_entry * fd) &file_opened, &ttf_buffer, &ttf_size) && file_opened && ttf_size > 0) { } else { - pdftex_fail("cannot open OpenType font file for reading (%s)", + luatex_fail("cannot open OpenType font file for reading (%s)", cur_file_name); } } else { if (!otf_open(cur_file_name)) { - pdftex_fail("cannot open OpenType font file for reading (%s)", + luatex_fail("cannot open OpenType font file for reading (%s)", cur_file_name); } ttf_read_file(); diff --git a/Build/source/texk/web2c/luatexdir/font/writetype2.w b/Build/source/texk/web2c/luatexdir/font/writetype2.w index b7c32f0616b..c2bdb97b152 100644 --- a/Build/source/texk/web2c/luatexdir/font/writetype2.w +++ b/Build/source/texk/web2c/luatexdir/font/writetype2.w @@ -19,8 +19,8 @@ @ @c static const char _svn_version[] = - "$Id: writetype2.w 4457 2012-07-13 13:16:19Z taco $" - "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/font/writetype2.w $"; + "$Id: writetype2.w 4847 2014-03-05 18:13:17Z luigi $" + "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/font/writetype2.w $"; #include "ptexlib.h" #include "font/writettf.h" @@ -153,7 +153,7 @@ void writetype2(PDF pdf, fd_entry * fd) cur_file_name = luatex_find_file(fd_cur->fm->ff_name, find_opentype_file_callback); if (cur_file_name == NULL) { - pdftex_fail("cannot find OpenType font file for reading (%s)", fd_cur->fm->ff_name); + luatex_fail("cannot find OpenType font file for reading (%s)", fd_cur->fm->ff_name); } callback_id = callback_defined(read_opentype_file_callback); if (callback_id > 0) { @@ -161,11 +161,11 @@ void writetype2(PDF pdf, fd_entry * fd) &file_opened, &ttf_buffer, &ttf_size) && file_opened && ttf_size > 0) { } else { - pdftex_fail("cannot open OpenType font file for reading (%s)", cur_file_name); + luatex_fail("cannot open OpenType font file for reading (%s)", cur_file_name); } } else { if (!otf_open(cur_file_name)) { - pdftex_fail("cannot open OpenType font file for reading (%s)", cur_file_name); + luatex_fail("cannot open OpenType font file for reading (%s)", cur_file_name); } ttf_read_file(); ttf_close(); diff --git a/Build/source/texk/web2c/luatexdir/image/image.h b/Build/source/texk/web2c/luatexdir/image/image.h index 4e88dbeeaba..0526b84ec57 100644 --- a/Build/source/texk/web2c/luatexdir/image/image.h +++ b/Build/source/texk/web2c/luatexdir/image/image.h @@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License along with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */ -/* $Id: image.h 4406 2012-05-07 21:47:26Z hhenkel $ */ +/* $Id: image.h 4847 2014-03-05 18:13:17Z luigi $ */ #ifndef IMAGE_H # define IMAGE_H @@ -35,8 +35,8 @@ extern scaled one_hundred_bp; /* from pdfgen.w */ # define bp2sp(p) do_zround(p * (one_hundred_bp / 100.0)) # define sp2bp(i) (i * 100.0 / one_hundred_bp) -# define TYPE_IMG "image" -# define TYPE_IMG_DICT "image-dict" +# define TYPE_IMG "image.meta" +# define TYPE_IMG_DICT "image.dict" /**********************************************************************/ diff --git a/Build/source/texk/web2c/luatexdir/image/pdftoepdf.w b/Build/source/texk/web2c/luatexdir/image/pdftoepdf.w index 52838d338b4..492492c5fd3 100644 --- a/Build/source/texk/web2c/luatexdir/image/pdftoepdf.w +++ b/Build/source/texk/web2c/luatexdir/image/pdftoepdf.w @@ -20,7 +20,7 @@ @ @c static const char _svn_version[] = - "$Id: pdftoepdf.w 4749 2014-01-15 08:43:57Z taco $" + "$Id: pdftoepdf.w 4847 2014-03-05 18:13:17Z luigi $" "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/image/pdftoepdf.w $"; // define DEBUG @@ -70,14 +70,14 @@ static char *get_file_checksum(char *a, file_error_mode fe) time_t mtime = finfo.st_mtime; ck = (char *) malloc(PDF_CHECKSUM_SIZE); if (ck == NULL) - pdftex_fail("PDF inclusion: out of memory while processing '%s'", + luatex_fail("PDF inclusion: out of memory while processing '%s'", a); snprintf(ck, PDF_CHECKSUM_SIZE, "%" PRIu64 "_%" PRIu64, (uint64_t) size, (uint64_t) mtime); } else { switch (fe) { case FE_FAIL: - pdftex_fail("PDF inclusion: could not stat() file '%s'", a); + luatex_fail("PDF inclusion: could not stat() file '%s'", a); break; case FE_RETURN_NULL: if (ck != NULL) @@ -127,7 +127,7 @@ PdfDocument *refPdfDocument(char *file_path, file_error_mode fe) #endif assert(pdf_doc->checksum != NULL); if (strncmp(pdf_doc->checksum, checksum, PDF_CHECKSUM_SIZE) != 0) { - pdftex_fail("PDF inclusion: file has changed '%s'", file_path); + luatex_fail("PDF inclusion: file has changed '%s'", file_path); } free(checksum); } @@ -144,7 +144,7 @@ PdfDocument *refPdfDocument(char *file_path, file_error_mode fe) if (!doc->isOk() || !doc->okToPrint()) { switch (fe) { case FE_FAIL: - pdftex_fail("xpdf: reading PDF image failed"); + luatex_fail("xpdf: reading PDF image failed"); break; case FE_RETURN_NULL: delete doc; @@ -242,7 +242,7 @@ static int addInObj(PDF pdf, PdfDocument * pdf_doc, Ref ref) ObjMap *obj_map; InObj *p, *q, *n; if (ref.num == 0) { - pdftex_fail("PDF inclusion: reference to invalid object" + luatex_fail("PDF inclusion: reference to invalid object" " (is the included pdf broken?)"); } if ((obj_map = findObjMap(pdf_doc, ref)) != NULL) @@ -429,7 +429,7 @@ static void copyObject(PDF pdf, PdfDocument * pdf_doc, Object * obj) case objError: case objEOF: case objNone: - pdftex_fail("PDF inclusion: type <%s> cannot be copied", + luatex_fail("PDF inclusion: type <%s> cannot be copied", obj->getTypeName()); break; default: @@ -482,7 +482,7 @@ static PDFRectangle *get_pagebox(Page * page, int pagebox_spec) return page->getArtBox(); break; default: - pdftex_fail("PDF inclusion: unknown value of pagebox spec (%i)", + luatex_fail("PDF inclusion: unknown value of pagebox spec (%i)", (int) pagebox_spec); } return page->getMediaBox(); // to make the compiler happy @@ -530,10 +530,10 @@ read_pdf_info(image_dict * idict, int minor_pdf_version_wanted, const char *msg = "PDF inclusion: found PDF version <%d.%d>, but at most version <1.%d> allowed"; if (pdf_inclusion_errorlevel > 0) { - pdftex_fail(msg, pdf_major_version_found, pdf_minor_version_found, + luatex_fail(msg, pdf_major_version_found, pdf_minor_version_found, minor_pdf_version_wanted); } else { - pdftex_warn(msg, pdf_major_version_found, pdf_minor_version_found, + luatex_warn(msg, pdf_major_version_found, pdf_minor_version_found, minor_pdf_version_wanted); } } @@ -543,19 +543,19 @@ read_pdf_info(image_dict * idict, int minor_pdf_version_wanted, GooString name(img_pagename(idict)); LinkDest *link = doc->findDest(&name); if (link == NULL || !link->isOk()) - pdftex_fail("PDF inclusion: invalid destination <%s>", + luatex_fail("PDF inclusion: invalid destination <%s>", img_pagename(idict)); Ref ref = link->getPageRef(); img_pagenum(idict) = catalog->findPage(ref.num, ref.gen); if (img_pagenum(idict) == 0) - pdftex_fail("PDF inclusion: destination is not a page <%s>", + luatex_fail("PDF inclusion: destination is not a page <%s>", img_pagename(idict)); delete link; } else { // get page by number if (img_pagenum(idict) <= 0 || img_pagenum(idict) > img_totalpages(idict)) - pdftex_fail("PDF inclusion: required page <%i> does not exist", + luatex_fail("PDF inclusion: required page <%i> does not exist", (int) img_pagenum(idict)); } // get the required page @@ -600,7 +600,7 @@ read_pdf_info(image_dict * idict, int minor_pdf_version_wanted, img_rotation(idict) = 1; break; default: - pdftex_warn + luatex_warn ("PDF inclusion: " "/Rotate parameter in PDF file not multiple of 90 degrees."); } @@ -695,7 +695,7 @@ void write_epdf(PDF pdf, image_dict * idict) // Metadata validity check (as a stream it must be indirect) pageDict->lookupNF((char *) "Metadata", &obj1); if (!obj1.isNull() && !obj1.isRef()) - pdftex_warn("PDF inclusion: /Metadata must be indirect object"); + luatex_warn("PDF inclusion: /Metadata must be indirect object"); obj1.free(); // copy selected items in Page dictionary @@ -732,7 +732,7 @@ void write_epdf(PDF pdf, image_dict * idict) op2->free(); }; if (!op1->isDict()) - pdftex_warn("PDF inclusion: Page /Resources missing."); + luatex_warn("PDF inclusion: Page /Resources missing."); op1->free(); } obj1.free(); @@ -751,7 +751,7 @@ void write_epdf(PDF pdf, image_dict * idict) // contents.streamGetDict()->lookup((char *) "F", &obj1); if (!obj1.isNull()) { - pdftex_fail("PDF inclusion: Unsupported external stream"); + luatex_fail("PDF inclusion: Unsupported external stream"); } obj1.free(); contents.streamGetDict()->lookup((char *) "Length", &obj1); diff --git a/Build/source/texk/web2c/luatexdir/image/writeimg.w b/Build/source/texk/web2c/luatexdir/image/writeimg.w index 03b5af45c50..e5c39466ce7 100644 --- a/Build/source/texk/web2c/luatexdir/image/writeimg.w +++ b/Build/source/texk/web2c/luatexdir/image/writeimg.w @@ -22,7 +22,7 @@ @ @c static const char _svn_version[] = - "$Id: writeimg.w 4718 2014-01-02 15:35:31Z taco $" + "$Id: writeimg.w 4847 2014-03-05 18:13:17Z luigi $" "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/image/writeimg.w $"; #include "ptexlib.h" @@ -141,7 +141,7 @@ static void check_type_by_header(image_dict * idict) for (i = 0; (unsigned) i < MAX_HEADER; i++) { header[i] = (char) xgetc(file); if (feof(file)) - pdftex_fail("reading image file failed"); + luatex_fail("reading image file failed"); } xfclose(file, img_filepath(idict)); /* tests */ @@ -292,7 +292,7 @@ void read_img(PDF pdf, int callback_id; assert(idict != NULL); if (img_filename(idict) == NULL) - pdftex_fail("image file name missing"); + luatex_fail("image file name missing"); callback_id = callback_defined(find_image_file_callback); if (img_filepath(idict) == NULL) { if (callback_id > 0 @@ -304,7 +304,7 @@ void read_img(PDF pdf, img_filepath(idict) = kpse_find_file(img_filename(idict), kpse_tex_format, true); if (img_filepath(idict) == NULL) - pdftex_fail("cannot find image file '%s'", img_filename(idict)); + luatex_fail("cannot find image file '%s'", img_filename(idict)); } recorder_record_input(img_filename(idict)); /* type checks */ @@ -328,14 +328,14 @@ void read_img(PDF pdf, break; case IMG_TYPE_JBIG2: if (minor_version < 4) { - pdftex_fail + luatex_fail ("JBIG2 images only possible with at least PDF 1.4; you are generating PDF 1.%i", (int) minor_version); } read_jbig2_info(idict); break; default: - pdftex_fail("internal error: unknown image type (2)"); + luatex_fail("internal error: unknown image type (2)"); } cur_file_name = NULL; if (img_state(idict) < DICT_FILESCANNED) @@ -538,11 +538,11 @@ scaled_whd scale_img(image_dict * idict, scaled_whd alt_rule, int transform) xr = img_xres(idict); yr = img_yres(idict); if (x <= 0 || y <= 0 || xr < 0 || yr < 0) - pdftex_fail("ext1: invalid image dimensions"); + luatex_fail("ext1: invalid image dimensions"); if (xr > 65535 || yr > 65535) { xr = 0; yr = 0; - pdftex_warn("ext1: too large image resolution ignored"); + luatex_warn("ext1: too large image resolution ignored"); } if (((transform - img_rotation(idict)) & 1) == 1) { tmp = x; @@ -601,7 +601,7 @@ void write_img(PDF pdf, image_dict * idict) write_pdfstream(pdf, idict); break; default: - pdftex_fail("internal error: unknown image type (1)"); + luatex_fail("internal error: unknown image type (1)"); } if (tracefilenames) tex_printf(">"); @@ -625,7 +625,7 @@ void pdf_write_image(PDF pdf, int n) void check_pdfstream_dict(image_dict * idict) { if (!img_is_bbox(idict)) - pdftex_fail("image.stream: no bbox given"); + luatex_fail("image.stream: no bbox given"); if (img_state(idict) < DICT_FILESCANNED) img_state(idict) = DICT_FILESCANNED; } @@ -822,14 +822,14 @@ void undumpimagemeta(PDF pdf, int pdfversion, int pdfinclusionerrorlevel) break; case IMG_TYPE_JBIG2: if (pdfversion < 4) { - pdftex_fail + luatex_fail ("JBIG2 images only possible with at least PDF 1.4; you are generating PDF 1.%i", (int) pdfversion); } undumpinteger(img_pagenum(idict)); break; default: - pdftex_fail("unknown type of image"); + luatex_fail("unknown type of image"); } read_img(pdf, idict, pdfversion, pdfinclusionerrorlevel); } diff --git a/Build/source/texk/web2c/luatexdir/image/writejbig2.w b/Build/source/texk/web2c/luatexdir/image/writejbig2.w index 98d824fc782..371e5452776 100644 --- a/Build/source/texk/web2c/luatexdir/image/writejbig2.w +++ b/Build/source/texk/web2c/luatexdir/image/writejbig2.w @@ -81,7 +81,7 @@ object exists, reference it. Else create fresh one. @ @c static const char _svn_version[] = - "$Id: writejbig2.w 4718 2014-01-02 15:35:31Z taco $" + "$Id: writejbig2.w 4847 2014-03-05 18:13:17Z luigi $" "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/image/writejbig2.w $"; #undef DEBUG @@ -209,9 +209,9 @@ static int ygetc(FILE * stream) int c = getc(stream); if (c < 0) { if (c == EOF) - pdftex_fail("getc() failed; premature end of JBIG2 image file"); + luatex_fail("getc() failed; premature end of JBIG2 image file"); else - pdftex_fail("getc() failed (can't happen)"); + luatex_fail("getc() failed (can't happen)"); } return c; } @@ -384,7 +384,7 @@ static void readfilehdr(FILEINFO * fip) xfseek(fip->file, 0, SEEK_SET, fip->filepath); for (i = 0; i < 8; i++) if (ygetc(fip->file) != jbig2_id[i]) - pdftex_fail + luatex_fail ("readfilehdr(): reading JBIG2 image file failed: ID string missing"); /* Annex D.4.2 File header flags */ fip->filehdrflags = (unsigned int) ygetc(fip->file); @@ -441,7 +441,7 @@ static void checkseghdrflags(SEGINFO * sip) case M_Extension: break; default: - pdftex_fail + luatex_fail ("checkseghdrflags(): unknown segment type in JBIG2 image file"); break; } @@ -790,7 +790,7 @@ void read_jbig2_info(image_dict * idict) assert(idict != NULL); img_type(idict) = IMG_TYPE_JBIG2; if (img_pagenum(idict) < 1) - pdftex_fail + luatex_fail ("read_jbig2_info(): page %d not in JBIG2 image file; page must be > 0", (int) img_pagenum(idict)); if (file_tree == NULL) { @@ -816,7 +816,7 @@ void read_jbig2_info(image_dict * idict) } pip = find_pageinfo(&(fip->pages), (unsigned long) img_pagenum(idict)); if (pip == NULL) - pdftex_fail("read_jbig2_info(): page %d not found in JBIG2 image file", + luatex_fail("read_jbig2_info(): page %d not found in JBIG2 image file", (int) img_pagenum(idict)); img_totalpages(idict) = (int) fip->numofpages; img_xsize(idict) = (int) pip->width; diff --git a/Build/source/texk/web2c/luatexdir/image/writejp2.w b/Build/source/texk/web2c/luatexdir/image/writejp2.w index c71a6cea160..61549a67738 100644 --- a/Build/source/texk/web2c/luatexdir/image/writejp2.w +++ b/Build/source/texk/web2c/luatexdir/image/writejp2.w @@ -20,7 +20,7 @@ @ @c static const char _svn_version[] = - "$Id: writejp2.w 4718 2014-01-02 15:35:31Z taco $" + "$Id: writejp2.w 4847 2014-03-05 18:13:17Z luigi $" "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/image/writejp2.w $"; @ Basic JPEG~2000 image support. Section and Table references below: @@ -69,7 +69,7 @@ static hdr_struct read_boxhdr(image_dict * idict) if (hdr.lbox == 1) hdr.lbox = read8bytes(img_file(idict)); if (hdr.lbox == 0 && hdr.tbox != BOX_JP2C) - pdftex_fail("reading JP2 image failed (LBox == 0)"); + luatex_fail("reading JP2 image failed (LBox == 0)"); return hdr; } @@ -125,20 +125,20 @@ static void scan_res(image_dict * idict, uint64_t epos_s) if (img_xres(idict) == 0 && img_yres(idict) == 0) { scan_resc_resd(idict); if (xftell(img_file(idict), img_filepath(idict)) != (long)epos) - pdftex_fail + luatex_fail ("reading JP2 image failed (resc box size inconsistent)"); } break; case (BOX_RESD): scan_resc_resd(idict); if (xftell(img_file(idict), img_filepath(idict)) != (long)epos) - pdftex_fail + luatex_fail ("reading JP2 image failed (resd box size inconsistent)"); break; default:; } if (epos > epos_s) - pdftex_fail("reading JP2 image failed (res box size inconsistent)"); + luatex_fail("reading JP2 image failed (res box size inconsistent)"); if (epos == epos_s) break; xfseek(img_file(idict), (long) epos, SEEK_SET, img_filepath(idict)); @@ -160,7 +160,7 @@ static boolean scan_jp2h(image_dict * idict, uint64_t epos_s) case (BOX_IHDR): scan_ihdr(idict); if (xftell(img_file(idict), img_filepath(idict)) != (long)epos) - pdftex_fail + luatex_fail ("reading JP2 image failed (ihdr box size inconsistent)"); ihdr_found = true; break; @@ -170,7 +170,7 @@ static boolean scan_jp2h(image_dict * idict, uint64_t epos_s) default:; } if (epos > epos_s) - pdftex_fail + luatex_fail ("reading JP2 image failed (jp2h box size inconsistent)"); if (epos == epos_s) break; @@ -221,7 +221,7 @@ void read_jp2_info(image_dict * idict, img_readtype_e readtype) spos = epos; hdr = read_boxhdr(idict); if (hdr.tbox != BOX_FTYP) - pdftex_fail("reading JP2 image failed (missing ftyp box)"); + luatex_fail("reading JP2 image failed (missing ftyp box)"); epos = spos + hdr.lbox; xfseek(img_file(idict), (long) epos, SEEK_SET, img_filepath(idict)); @@ -235,7 +235,7 @@ void read_jp2_info(image_dict * idict, img_readtype_e readtype) break; case BOX_JP2C: if (!ihdr_found) - pdftex_fail("reading JP2 image failed (no ihdr box found)"); + luatex_fail("reading JP2 image failed (no ihdr box found)"); break; default:; } @@ -255,7 +255,7 @@ static void reopen_jp2(image_dict * idict) read_jp2_info(idict, IMG_KEEPOPEN); if (width != img_xsize(idict) || height != img_ysize(idict) || xres != img_xres(idict) || yres != img_yres(idict)) - pdftex_fail("writejp2: image dimensions have changed"); + luatex_fail("writejp2: image dimensions have changed"); } void write_jp2(PDF pdf, image_dict * idict) @@ -281,7 +281,7 @@ void write_jp2(PDF pdf, image_dict * idict) l = (long unsigned int) img_jp2_ptr(idict)->length; xfseek(img_file(idict), 0, SEEK_SET, img_filepath(idict)); if (read_file_to_buf(pdf, img_file(idict), l) != l) - pdftex_fail("writejp2: fread failed"); + luatex_fail("writejp2: fread failed"); pdf_end_stream(pdf); pdf_end_obj(pdf); close_and_cleanup_jp2(idict); diff --git a/Build/source/texk/web2c/luatexdir/image/writejpg.w b/Build/source/texk/web2c/luatexdir/image/writejpg.w index a48b3c73a45..82091660418 100644 --- a/Build/source/texk/web2c/luatexdir/image/writejpg.w +++ b/Build/source/texk/web2c/luatexdir/image/writejpg.w @@ -20,8 +20,8 @@ @ @c static const char _svn_version[] = - "$Id: writejpg.w 4442 2012-05-25 22:40:34Z hhenkel $" - "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/image/writejpg.w $"; + "$Id: writejpg.w 4847 2014-03-05 18:13:17Z luigi $" + "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/image/writejpg.w $"; #include "ptexlib.h" #include <assert.h> @@ -130,7 +130,7 @@ void read_jpg_info(PDF pdf, image_dict * idict, img_readtype_e readtype) img_jpg_ptr(idict)->length = xftell(img_file(idict), img_filepath(idict)); xfseek(img_file(idict), 0, SEEK_SET, img_filepath(idict)); if ((unsigned int) read2bytes(img_file(idict)) != 0xFFD8) - pdftex_fail("reading JPEG image failed (no JPEG header found)"); + luatex_fail("reading JPEG image failed (no JPEG header found)"); /* currently only true JFIF files allow extracting |img_xres| and |img_yres| */ if ((unsigned int) read2bytes(img_file(idict)) == 0xFFE0) { /* check for JFIF */ (void) read2bytes(img_file(idict)); @@ -166,9 +166,9 @@ void read_jpg_info(PDF pdf, image_dict * idict, img_readtype_e readtype) xfseek(img_file(idict), 0, SEEK_SET, img_filepath(idict)); while (1) { if (feof(img_file(idict))) - pdftex_fail("reading JPEG image failed (premature file end)"); + luatex_fail("reading JPEG image failed (premature file end)"); if (fgetc(img_file(idict)) != 0xFF) - pdftex_fail("reading JPEG image failed (no marker found)"); + luatex_fail("reading JPEG image failed (no marker found)"); i = xgetc(img_file(idict)); switch (i) { case M_SOF3: /* lossless */ @@ -181,11 +181,11 @@ void read_jpg_info(PDF pdf, image_dict * idict, img_readtype_e readtype) case M_SOF13: case M_SOF14: case M_SOF15: /* lossless */ - pdftex_fail("unsupported type of compression (SOF_%d)", i - M_SOF0); + luatex_fail("unsupported type of compression (SOF_%d)", i - M_SOF0); break; case M_SOF2: if (pdf->minor_version <= 2) - pdftex_fail("cannot use progressive DCT with PDF-1.2"); + luatex_fail("cannot use progressive DCT with PDF-1.2"); case M_SOF0: case M_SOF1: (void) read2bytes(img_file(idict)); /* read segment length */ @@ -205,7 +205,7 @@ void read_jpg_info(PDF pdf, image_dict * idict, img_readtype_e readtype) img_procset(idict) |= PROCSET_IMAGE_C; break; default: - pdftex_fail("Unsupported color space %i", + luatex_fail("Unsupported color space %i", (int) img_jpg_color(idict)); } if (readtype == IMG_CLOSEINBETWEEN) @@ -243,7 +243,7 @@ static void reopen_jpg(PDF pdf, image_dict * idict) read_jpg_info(pdf, idict, IMG_KEEPOPEN); if (width != img_xsize(idict) || height != img_ysize(idict) || xres != img_xres(idict) || yres != img_yres(idict)) - pdftex_fail("writejpg: image dimensions have changed"); + luatex_fail("writejpg: image dimensions have changed"); } @ @c @@ -290,7 +290,7 @@ void write_jpg(PDF pdf, image_dict * idict) pdf_end_array(pdf); break; default: - pdftex_fail("Unsupported color space %i", + luatex_fail("Unsupported color space %i", (int) img_jpg_color(idict)); } } @@ -301,7 +301,7 @@ void write_jpg(PDF pdf, image_dict * idict) l = (size_t) img_jpg_ptr(idict)->length; xfseek(img_file(idict), 0, SEEK_SET, img_filepath(idict)); if (read_file_to_buf(pdf, img_file(idict), l) != l) - pdftex_fail("writejpg: fread failed"); + luatex_fail("writejpg: fread failed"); pdf_end_stream(pdf); pdf_end_obj(pdf); close_and_cleanup_jpg(idict); diff --git a/Build/source/texk/web2c/luatexdir/image/writepng.w b/Build/source/texk/web2c/luatexdir/image/writepng.w index b5f0cb82323..56c853b26bd 100644 --- a/Build/source/texk/web2c/luatexdir/image/writepng.w +++ b/Build/source/texk/web2c/luatexdir/image/writepng.w @@ -20,7 +20,7 @@ @ @c static const char _svn_version[] = - "$Id: writepng.w 4718 2014-01-02 15:35:31Z taco $" + "$Id: writepng.w 4847 2014-03-05 18:13:17Z luigi $" "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/image/writepng.w $"; #include "ptexlib.h" @@ -60,13 +60,13 @@ void read_png_info(image_dict * idict, img_readtype_e readtype) img_png_ptr(idict) = xtalloc(1, png_img_struct); if ((png_p = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL)) == NULL) - pdftex_fail("libpng: png_create_read_struct() failed"); + luatex_fail("libpng: png_create_read_struct() failed"); img_png_png_ptr(idict) = png_p; if ((info_p = png_create_info_struct(png_p)) == NULL) - pdftex_fail("libpng: png_create_info_struct() failed"); + luatex_fail("libpng: png_create_info_struct() failed"); img_png_info_ptr(idict) = info_p; if (setjmp(png_jmpbuf(png_p))) - pdftex_fail("libpng: internal error"); + luatex_fail("libpng: internal error"); #if PNG_LIBPNG_VER >= 10603 /* ignore possibly incorrect CMF bytes */ png_set_option(png_p, PNG_MAXIMUM_INFLATE_WINDOW, PNG_OPTION_ON); @@ -95,7 +95,7 @@ void read_png_info(image_dict * idict, img_readtype_e readtype) img_procset(idict) |= PROCSET_IMAGE_C; break; default: - pdftex_fail("unsupported type of color_type <%i>", + luatex_fail("unsupported type of color_type <%i>", (int) png_get_color_type(png_p, info_p)); } img_colordepth(idict) = png_get_bit_depth(png_p, info_p); @@ -234,7 +234,7 @@ static void write_png_gray(PDF pdf, image_dict * idict) } else { if (png_get_image_height(png_p, info_p) * png_get_rowbytes(png_p, info_p) >= 10240000L) - pdftex_warn + luatex_warn ("large interlaced PNG might cause out of memory (use non-interlaced PNG to fix this)"); rows = xtalloc(png_get_image_height(png_p, info_p), png_bytep); for (i = 0; i < (int) png_get_image_height(png_p, info_p); i++) @@ -280,7 +280,7 @@ static void write_png_gray_alpha(PDF pdf, image_dict * idict) } else { if (png_get_image_height(png_p, info_p) * png_get_rowbytes(png_p, info_p) >= 10240000L) - pdftex_warn + luatex_warn ("large interlaced PNG might cause out of memory (use non-interlaced PNG to fix this)"); rows = xtalloc(png_get_image_height(png_p, info_p), png_bytep); for (i = 0; i < (int) png_get_image_height(png_p, info_p); i++) @@ -333,7 +333,7 @@ static void write_png_rgb_alpha(PDF pdf, image_dict * idict) } else { if (png_get_image_height(png_p, info_p) * png_get_rowbytes(png_p, info_p) >= 10240000L) - pdftex_warn + luatex_warn ("large interlaced PNG might cause out of memory (use non-interlaced PNG to fix this)"); rows = xtalloc(png_get_image_height(png_p, info_p), png_bytep); for (i = 0; i < (int) png_get_image_height(png_p, info_p); i++) @@ -371,7 +371,7 @@ static int spng_getint(FILE * f) { unsigned char buf[4]; if (fread(buf, 1, 4, f) != 4) - pdftex_fail("writepng: reading chunk type failed"); + luatex_fail("writepng: reading chunk type failed"); return ((((((int) buf[0] << 8) + buf[1]) << 8) + buf[2]) << 8) + buf[3]; } @@ -392,7 +392,7 @@ static void copy_png(PDF pdf, image_dict * idict) f = (FILE *) png_get_io_ptr(png_p); /* 1st pass to find overall stream /Length */ if (fseek(f, 8, SEEK_SET) != 0) - pdftex_fail("writepng: fseek in PNG file failed (1)"); + luatex_fail("writepng: fseek in PNG file failed (1)"); do { len = spng_getint(f); type = spng_getint(f); @@ -404,7 +404,7 @@ static void copy_png(PDF pdf, image_dict * idict) streamlength += len; default: if (fseek(f, len + 4, SEEK_CUR) != 0) - pdftex_fail("writepng: fseek in PNG file failed (2)"); + luatex_fail("writepng: fseek in PNG file failed (2)"); } } while (endflag == false); pdf_dict_add_int(pdf, "Length", streamlength); @@ -424,19 +424,19 @@ static void copy_png(PDF pdf, image_dict * idict) /* 2nd pass to copy data */ endflag = false; if (fseek(f, 8, SEEK_SET) != 0) - pdftex_fail("writepng: fseek in PNG file failed (3)"); + luatex_fail("writepng: fseek in PNG file failed (3)"); do { len = spng_getint(f); type = spng_getint(f); switch (type) { case SPNG_CHUNK_IDAT: /* do copy */ if (idat == 2) - pdftex_fail("writepng: IDAT chunk sequence broken"); + luatex_fail("writepng: IDAT chunk sequence broken"); idat = 1; if (read_file_to_buf(pdf, f, len) != len) - pdftex_fail("writepng: fread failed"); + luatex_fail("writepng: fread failed"); if (fseek(f, 4, SEEK_CUR) != 0) - pdftex_fail("writepng: fseek in PNG file failed (4)"); + luatex_fail("writepng: fseek in PNG file failed (4)"); break; case SPNG_CHUNK_IEND: /* done */ endflag = true; @@ -445,7 +445,7 @@ static void copy_png(PDF pdf, image_dict * idict) if (idat == 1) idat = 2; if (fseek(f, len + 4, SEEK_CUR) != 0) - pdftex_fail("writepng: fseek in PNG file failed (5)"); + luatex_fail("writepng: fseek in PNG file failed (5)"); } } while (endflag == false); pdf_end_stream(pdf); @@ -463,7 +463,7 @@ static void reopen_png(image_dict * idict) read_png_info(idict, IMG_KEEPOPEN); if (width != img_xsize(idict) || height != img_ysize(idict) || xres != img_xres(idict) || yres != img_yres(idict)) - pdftex_fail("writepng: image dimensions have changed"); + luatex_fail("writepng: image dimensions have changed"); } @ @c @@ -559,7 +559,7 @@ void write_png(PDF pdf, image_dict * idict) pdf_dict_add_name(pdf, "ColorSpace", "DeviceRGB"); break; default: - pdftex_fail("unsupported type of color_type <%i>", + luatex_fail("unsupported type of color_type <%i>", png_get_color_type(png_p, info_p)); } } diff --git a/Build/source/texk/web2c/luatexdir/lang/texlang.w b/Build/source/texk/web2c/luatexdir/lang/texlang.w index 8d6a5b1cb2a..9ffe9f546a9 100644 --- a/Build/source/texk/web2c/luatexdir/lang/texlang.w +++ b/Build/source/texk/web2c/luatexdir/lang/texlang.w @@ -19,8 +19,8 @@ @ @c static const char _svn_version[] = - "$Id: texlang.w 4634 2013-04-21 14:45:45Z hhenkel $" - "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/lang/texlang.w $"; + "$Id: texlang.w 4880 2014-03-14 12:01:16Z taco $" + "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lang/texlang.w $"; #include "ptexlib.h" #include <string.h> @@ -724,11 +724,15 @@ static halfword find_next_wordstart(halfword r) } break; case glyph_node: - if (start_ok && - is_simple_character(r) && - (l = get_lc_code(character(r))) > 0 && - (char_uchyph(r) || l == character(r))) - return r; + if (start_ok && + is_simple_character(r) && + (l = get_lc_code(character(r))) > 0) { + if (char_uchyph(r) || l == character(r)) { + return r; + } else { + start_ok = 0; + } + } break; default: start_ok = 0; diff --git a/Build/source/texk/web2c/luatexdir/lua/lauxlib_bridge.h b/Build/source/texk/web2c/luatexdir/lua/lauxlib_bridge.h index 057b5ee9605..eec88e976c9 100644 --- a/Build/source/texk/web2c/luatexdir/lua/lauxlib_bridge.h +++ b/Build/source/texk/web2c/luatexdir/lua/lauxlib_bridge.h @@ -44,5 +44,18 @@ LUA_API int lua_compare (lua_State *L, int index1, int index2, int op); #define luaL_newlib(L,l) (luaL_newlibtable(L,l), luaL_setfuncs(L,l,0)) - +/* Is this ok as replacement for lua_copy of lua 5.2.3 ? */ +/* +#if defined(LUAJIT) +LUA_API void lua_copy (lua_State *L, int fromidx, int toidx) { + TValue *fr, *to; + lua_lock(L); + fr = index2adr(L, fromidx); + to = index2adr(L, toidx); + api_checkvalidindex(L, to); + copyTV(L,to,fr); + lua_unlock(L); +} +#endif +*/ #endif diff --git a/Build/source/texk/web2c/luatexdir/lua/lcallbacklib.c b/Build/source/texk/web2c/luatexdir/lua/lcallbacklib.c index 68c35420350..54a7b7602ff 100644 --- a/Build/source/texk/web2c/luatexdir/lua/lcallbacklib.c +++ b/Build/source/texk/web2c/luatexdir/lua/lcallbacklib.c @@ -21,7 +21,7 @@ #include "lua/luatex-api.h" static const char _svn_version[] = - "$Id: lcallbacklib.c 4703 2013-12-31 15:53:26Z taco $ $URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/lcallbacklib.c $"; + "$Id: lcallbacklib.c 4877 2014-03-14 01:26:05Z luigi $ $URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/lcallbacklib.c $"; int callback_count = 0; int saved_callback_count = 0; @@ -65,6 +65,7 @@ static const char *const callbacknames[] = { "post_linebreak_filter", "mlist_to_hlist", "finish_pdffile", + "finish_pdfpage", "pre_dump", NULL }; diff --git a/Build/source/texk/web2c/luatexdir/lua/lepdflib.cc b/Build/source/texk/web2c/luatexdir/lua/lepdflib.cc index d60feb09160..f83a2acf00b 100644 --- a/Build/source/texk/web2c/luatexdir/lua/lepdflib.cc +++ b/Build/source/texk/web2c/luatexdir/lua/lepdflib.cc @@ -19,7 +19,7 @@ with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */ static const char _svn_version[] = - "$Id: lepdflib.cc 4718 2014-01-02 15:35:31Z taco $ " + "$Id: lepdflib.cc 4847 2014-03-05 18:13:17Z luigi $ " "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/lepdflib.cc $"; #include "image/epdf.h" @@ -48,26 +48,26 @@ static const char *ErrorCodeNames[] = { "None", "OpenFile", "BadCatalog", //********************************************************************** -#define M_Annot "Annot" -#define M_Annots "Annots" -#define M_Array "Array" -#define M_Catalog "Catalog" -#define M_Dict "Dict" -#define M_EmbFile "EmbFile" -#define M_FileSpec "FileSpec" -#define M_GooString "GooString" -#define M_LinkDest "LinkDest" -#define M_Link "Link" -#define M_Links "Links" -#define M_Object "Object" -#define M_Page "Page" -#define M_PDFDoc "PDFDoc" -#define M_PDFRectangle "PDFRectangle" -#define M_Ref "Ref" -#define M_Stream "Stream" -#define M_StructTreeRoot "StructTreeRoot" -#define M_XRefEntry "XRefEntry" -#define M_XRef "XRef" +#define M_Annot "epdf.Annot" /* ls-hh: epdf.* gives better protection in registry */ +#define M_Annots "epdf.Annots" +#define M_Array "epdf.Array" +#define M_Catalog "epdf.Catalog" +#define M_Dict "epdf.Dict" +#define M_EmbFile "epdf.EmbFile" +#define M_FileSpec "epdf.FileSpec" +#define M_GooString "epdf.GooString" +#define M_LinkDest "epdf.LinkDest" +#define M_Link "epdf.Link" +#define M_Links "epdf.Links" +#define M_Object "epdf.Object" +#define M_Page "epdf.Page" +#define M_PDFDoc "epdf.PDFDoc" +#define M_PDFRectangle "epdf.PDFRectangle" +#define M_Ref "epdf.Ref" +#define M_Stream "epdf.Stream" +#define M_StructTreeRoot "epdf.StructTreeRoot" +#define M_XRefEntry "epdf.XRefEntry" +#define M_XRef "epdf.XRef" //********************************************************************** diff --git a/Build/source/texk/web2c/luatexdir/lua/lfontlib.c b/Build/source/texk/web2c/luatexdir/lua/lfontlib.c index a3454015b67..611cce83fbb 100644 --- a/Build/source/texk/web2c/luatexdir/lua/lfontlib.c +++ b/Build/source/texk/web2c/luatexdir/lua/lfontlib.c @@ -18,7 +18,7 @@ with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */ static const char _svn_version[] = - "$Id: lfontlib.c 4728 2014-01-03 13:32:52Z oneiros $ " + "$Id: lfontlib.c 4847 2014-03-05 18:13:17Z luigi $ " "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/lfontlib.c $"; #include "ptexlib.h" @@ -283,7 +283,7 @@ static const struct luaL_Reg fontlib[] = { int luaopen_font(lua_State * L) { luaL_register(L, "font", fontlib); - make_table(L, "fonts", "getfont", "setfont"); + make_table(L, "fonts", "tex.fonts", "getfont", "setfont"); return 1; } diff --git a/Build/source/texk/web2c/luatexdir/lua/limglib.c b/Build/source/texk/web2c/luatexdir/lua/limglib.c index 0fe471ca520..aedccf45298 100644 --- a/Build/source/texk/web2c/luatexdir/lua/limglib.c +++ b/Build/source/texk/web2c/luatexdir/lua/limglib.c @@ -18,7 +18,7 @@ with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */ static const char _svn_version[] = - "$Id: limglib.c 4718 2014-01-02 15:35:31Z taco $ " + "$Id: limglib.c 4847 2014-03-05 18:13:17Z luigi $ " "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/limglib.c $"; #include "ptexlib.h" @@ -29,7 +29,7 @@ static const char _svn_version[] = #include "lua.h" #include "lauxlib.h" -#define IMG_ENV "img_env" +#define IMG_ENV "image.env" /**********************************************************************/ diff --git a/Build/source/texk/web2c/luatexdir/lua/liolibext.c b/Build/source/texk/web2c/luatexdir/lua/liolibext.c index 6b9a602d541..bdcbc7ce2e0 100644 --- a/Build/source/texk/web2c/luatexdir/lua/liolibext.c +++ b/Build/source/texk/web2c/luatexdir/lua/liolibext.c @@ -34,7 +34,7 @@ #endif static const char _svn_version[] = - "$Id: liolibext.c 4730 2014-01-03 14:44:14Z taco $ $URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/liolibext.c $"; + "$Id: liolibext.c 4781 2014-02-10 11:05:24Z taco $ $URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/liolibext.c $"; /* diff --git a/Build/source/texk/web2c/luatexdir/lua/lkpselib.c b/Build/source/texk/web2c/luatexdir/lua/lkpselib.c index d00a07e8fb4..4822a60a38f 100644 --- a/Build/source/texk/web2c/luatexdir/lua/lkpselib.c +++ b/Build/source/texk/web2c/luatexdir/lua/lkpselib.c @@ -29,7 +29,7 @@ #include <kpathsea/paths.h> static const char _svn_version[] = - "$Id: lkpselib.c 4634 2013-04-21 14:45:45Z hhenkel $ $URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/lua/lkpselib.c $"; + "$Id: lkpselib.c 4847 2014-03-05 18:13:17Z luigi $ $URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/lkpselib.c $"; static const unsigned filetypes[] = { kpse_gf_format, @@ -153,7 +153,7 @@ static const char *const filetypenames[] = { }; -#define KPATHSEA_METATABLE "luatex_kpathsea" +#define KPATHSEA_METATABLE "luatex.kpathsea" /* set to 1 by the |program_name| function */ diff --git a/Build/source/texk/web2c/luatexdir/lua/llualib.c b/Build/source/texk/web2c/luatexdir/lua/llualib.c index f27afcd916c..bc85196e551 100644 --- a/Build/source/texk/web2c/luatexdir/lua/llualib.c +++ b/Build/source/texk/web2c/luatexdir/lua/llualib.c @@ -21,7 +21,7 @@ #include "lua/luatex-api.h" static const char _svn_version[] = - "$Id: llualib.c 4524 2012-12-20 15:38:02Z taco $ $URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/lua/llualib.c $"; + "$Id: llualib.c 4878 2014-03-14 10:48:03Z taco $ $URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/llualib.c $"; #define LOAD_BUF_SIZE 256 #define UINT_MAX32 0xFFFFFFFF @@ -128,7 +128,7 @@ void undump_luac_registers(void) static void bytecode_register_shadow_set(lua_State * L, int k) { /* the stack holds the value to be set */ - lua_pushstring(L, "bytecode_shadow"); /* lua.bytecode_shadow */ + lua_pushstring(L, "lua.bytecode_shadow"); /* lua.bytecode_shadow */ lua_rawget(L, LUA_REGISTRYINDEX); if (lua_istable(L, -1)) { lua_pushvalue(L, -2); @@ -143,7 +143,7 @@ static int bytecode_register_shadow_get(lua_State * L, int k) { /* the stack holds the value to be set */ int ret = 0; - lua_pushstring(L, "bytecode_shadow"); + lua_pushstring(L, "lua.bytecode_shadow"); lua_rawget(L, LUA_REGISTRYINDEX); if (lua_istable(L, -1)) { lua_rawgeti(L, -1, k); @@ -306,6 +306,12 @@ static int get_luaname(lua_State * L) return 1; } +static int lua_functions_get_table(lua_State * L) /* hh */ +{ + lua_rawgeti(L, LUA_REGISTRYINDEX, lua_key_index(lua_functions)); + lua_gettable(L, LUA_REGISTRYINDEX); + return 1; +} static const struct luaL_Reg lualib[] = { @@ -314,6 +320,7 @@ static const struct luaL_Reg lualib[] = { {"setluaname", set_luaname}, {"getbytecode", get_bytecode}, {"setbytecode", set_bytecode}, + {"get_functions_table",lua_functions_get_table}, /* *INDENT-ON* */ {NULL, NULL} /* sentinel */ }; @@ -321,10 +328,10 @@ static const struct luaL_Reg lualib[] = { int luaopen_lua(lua_State * L, char *fname) { luaL_register(L, "lua", lualib); - make_table(L, "bytecode", "getbytecode", "setbytecode"); - make_table(L, "name", "getluaname", "setluaname"); + make_table(L, "bytecode", "tex.bytecode", "getbytecode", "setbytecode"); + make_table(L, "name", "tex.name", "getluaname", "setluaname"); lua_newtable(L); - lua_setfield(L, LUA_REGISTRYINDEX, "bytecode_shadow"); + lua_setfield(L, LUA_REGISTRYINDEX, "lua.bytecode_shadow"); lua_pushstring(L, LUA_VERSION); lua_setfield(L, -2, "version"); if (fname == NULL) { diff --git a/Build/source/texk/web2c/luatexdir/lua/lnodelib.c b/Build/source/texk/web2c/luatexdir/lua/lnodelib.c index 0a62151427d..ba623572641 100644 --- a/Build/source/texk/web2c/luatexdir/lua/lnodelib.c +++ b/Build/source/texk/web2c/luatexdir/lua/lnodelib.c @@ -96,11 +96,12 @@ */ static const char _svn_version[] = - "$Id: lnodelib.c 4775 2014-02-07 12:36:34Z luigi $ " + "$Id: lnodelib.c 4847 2014-03-05 18:13:17Z luigi $ " "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/lnodelib.c $"; #include "ptexlib.h" #include "lua/luatex-api.h" +#include "lua/lauxlib_bridge.h" /* @@ -109,25 +110,6 @@ static const char _svn_version[] = */ -#define init_luaS_index(a) do { \ - lua_pushliteral(L,#a); \ - luaS_##a##_ptr = lua_tostring(L,-1); \ - luaS_##a##_index = luaL_ref (L,LUA_REGISTRYINDEX); \ -} while (0) - -#define init_luaS_index_s(a,b) do { \ - lua_pushliteral(L,b); \ - luaS_##a##_ptr = lua_tostring(L,-1); \ - luaS_##a##_index = luaL_ref (L,LUA_REGISTRYINDEX); \ -} while (0) - -#define make_luaS_index(a) \ - static int luaS_##a##_index = 0; \ - static const char * luaS_##a##_ptr = NULL - -#define luaS_index(a) luaS_##a##_index - -#define luaS_ptr_eq(a,b) (a==luaS_##b##_ptr) /* @@ -275,273 +257,11 @@ while (vlink(t)!=current && t != null) { \ luaL_error(L, "incorrect index value %d for tex.%s()", (int)j, s); \ } -#define NODE_METATABLE "luatex_node" +#define NODE_METATABLE "luatex.node" #define DEBUG 0 #define DEBUG_OUT stdout -make_luaS_index(luatex_node); - -make_luaS_index(accent); -make_luaS_index(action); -make_luaS_index(action_id); -make_luaS_index(action_type); -make_luaS_index(area); -make_luaS_index(attr); -make_luaS_index(best_ins_ptr); -make_luaS_index(bot_accent); -make_luaS_index(box_left); -make_luaS_index(box_left_width); -make_luaS_index(box_right); -make_luaS_index(box_right_width); -make_luaS_index(broken_ins); -make_luaS_index(broken_ptr); -make_luaS_index(char); -make_luaS_index(class); -make_luaS_index(command); -make_luaS_index(components); -make_luaS_index(cost); -make_luaS_index(count); -make_luaS_index(data); -make_luaS_index(degree); -make_luaS_index(delim); -make_luaS_index(denom); -make_luaS_index(depth); -make_luaS_index(dest_id); -make_luaS_index(dest_type); -make_luaS_index(dir); -make_luaS_index(dir_h); -make_luaS_index(display); -make_luaS_index(dvi_ptr); -make_luaS_index(expansion_factor); -make_luaS_index(ext); -make_luaS_index(fam); -make_luaS_index(fast); -make_luaS_index(file); -make_luaS_index(font); -make_luaS_index(global); -make_luaS_index(glue_order); -make_luaS_index(glue_set); -make_luaS_index(glue_sign); -make_luaS_index(glyph); -make_luaS_index(head); -make_luaS_index(height); -make_luaS_index(id); -make_luaS_index(index); -make_luaS_index(kern); -make_luaS_index(lang); -make_luaS_index(large_char); -make_luaS_index(large_fam); -make_luaS_index(last_ins_ptr); -make_luaS_index(leader); -make_luaS_index(left); -make_luaS_index(level); -make_luaS_index(link_attr); -make_luaS_index(list); -make_luaS_index(mark); -make_luaS_index(mode); -make_luaS_index(name); -make_luaS_index(named_id); -make_luaS_index(new_window); -make_luaS_index(next); -make_luaS_index(nucleus); -make_luaS_index(num); -make_luaS_index(number); -make_luaS_index(objnum); -make_luaS_index(pen_broken); -make_luaS_index(pen_inter); -make_luaS_index(penalty); -make_luaS_index(post); -make_luaS_index(pre); -make_luaS_index(prev); -make_luaS_index(ref_count); -make_luaS_index(reg); -make_luaS_index(replace); -make_luaS_index(right); -make_luaS_index(script); -make_luaS_index(scriptscript); -make_luaS_index(shift); -make_luaS_index(shrink); -make_luaS_index(shrink_order); -make_luaS_index(small_char); -make_luaS_index(small_fam); -make_luaS_index(spec); -make_luaS_index(stack); -make_luaS_index(stream); -make_luaS_index(stretch); -make_luaS_index(stretch_order); -make_luaS_index(string); -make_luaS_index(style); -make_luaS_index(sub); -make_luaS_index(subtype); -make_luaS_index(sup); -make_luaS_index(surround); -make_luaS_index(text); -make_luaS_index(thread_attr); -make_luaS_index(thread_id); -make_luaS_index(transform); -make_luaS_index(type); -make_luaS_index(uchyph); -make_luaS_index(user_id); -make_luaS_index(value); -make_luaS_index(width); -make_luaS_index(writable); -make_luaS_index(xoffset); -make_luaS_index(xyz_zoom); -make_luaS_index(yoffset); - -make_luaS_index(additional); -make_luaS_index(cal_expand_ratio); -make_luaS_index(exactly); -make_luaS_index(subst_ex_font); - -make_luaS_index(TLT); -make_luaS_index(TRT); -make_luaS_index(LTL); -make_luaS_index(RTT); - -make_luaS_index(pTLT); -make_luaS_index(pTRT); -make_luaS_index(pLTL); -make_luaS_index(pRTT); - -make_luaS_index(mTLT); -make_luaS_index(mTRT); -make_luaS_index(mLTL); -make_luaS_index(mRTT); - -static void initialize_luaS_indexes(lua_State * L) -{ - init_luaS_index(luatex_node); - - init_luaS_index(accent); - init_luaS_index(action_id); - init_luaS_index(action); - init_luaS_index(action_type); - init_luaS_index(area); - init_luaS_index(attr); - init_luaS_index(best_ins_ptr); - init_luaS_index(bot_accent); - init_luaS_index(box_left); - init_luaS_index(box_left_width); - init_luaS_index(box_right); - init_luaS_index(box_right_width); - init_luaS_index(broken_ins); - init_luaS_index(broken_ptr); - init_luaS_index(char); - init_luaS_index(class); - init_luaS_index(command); - init_luaS_index(components); - init_luaS_index(cost); - init_luaS_index(count); - init_luaS_index(data); - init_luaS_index(degree); - init_luaS_index(delim); - init_luaS_index(denom); - init_luaS_index(depth); - init_luaS_index(dest_id); - init_luaS_index(dest_type); - init_luaS_index(dir); - init_luaS_index(dir_h); - init_luaS_index(display); - init_luaS_index(dvi_ptr); - init_luaS_index(expansion_factor); - init_luaS_index(ext); - init_luaS_index(fam); - init_luaS_index(fast); - init_luaS_index(file); - init_luaS_index(font); - init_luaS_index(global); - init_luaS_index(glue_order); - init_luaS_index(glue_set); - init_luaS_index(glue_sign); - init_luaS_index(glyph); - init_luaS_index(head); - init_luaS_index(height); - init_luaS_index(id); - init_luaS_index(index); - init_luaS_index(kern); - init_luaS_index(lang); - init_luaS_index(large_char); - init_luaS_index(large_fam); - init_luaS_index(last_ins_ptr); - init_luaS_index(leader); - init_luaS_index(left); - init_luaS_index(level); - init_luaS_index(link_attr); - init_luaS_index(list); - init_luaS_index(mark); - init_luaS_index(mode); - init_luaS_index(name); - init_luaS_index(named_id); - init_luaS_index(new_window); - init_luaS_index(next); - init_luaS_index(nucleus); - init_luaS_index(num); - init_luaS_index(number); - init_luaS_index(objnum); - init_luaS_index(pen_broken); - init_luaS_index(pen_inter); - init_luaS_index(penalty); - init_luaS_index(post); - init_luaS_index(pre); - init_luaS_index(prev); - init_luaS_index(ref_count); - init_luaS_index(reg); - init_luaS_index(replace); - init_luaS_index(right); - init_luaS_index(script); - init_luaS_index(scriptscript); - init_luaS_index(shift); - init_luaS_index(shrink); - init_luaS_index(shrink_order); - init_luaS_index(small_char); - init_luaS_index(small_fam); - init_luaS_index(spec); - init_luaS_index(stack); - init_luaS_index(stream); - init_luaS_index(stretch); - init_luaS_index(stretch_order); - init_luaS_index(string); - init_luaS_index(style); - init_luaS_index(sub); - init_luaS_index(subtype); - init_luaS_index(sup); - init_luaS_index(surround); - init_luaS_index(text); - init_luaS_index(thread_attr); - init_luaS_index(thread_id); - init_luaS_index(transform); - init_luaS_index(type); - init_luaS_index(uchyph); - init_luaS_index(user_id); - init_luaS_index(value); - init_luaS_index(width); - init_luaS_index(writable); - init_luaS_index(xoffset); - init_luaS_index(xyz_zoom); - init_luaS_index(yoffset); - - init_luaS_index(additional); - init_luaS_index(cal_expand_ratio); - init_luaS_index(exactly); - init_luaS_index(subst_ex_font); - - init_luaS_index(TLT); - init_luaS_index(TRT); - init_luaS_index(LTL); - init_luaS_index(RTT); - init_luaS_index_s(pTLT,"+TLT"); - init_luaS_index_s(pTRT,"+TRT"); - init_luaS_index_s(pLTL,"+LTL"); - init_luaS_index_s(pRTT,"+RTT"); - init_luaS_index_s(mTLT,"-TLT"); - init_luaS_index_s(mTRT,"-TRT"); - init_luaS_index_s(mLTL,"-LTL"); - init_luaS_index_s(mRTT,"-RTT"); - -} - /* maybe these qualify as macros, not functions */ static halfword *maybe_isnode(lua_State * L, int ud) @@ -566,7 +286,7 @@ halfword *check_isnode(lua_State * L, int ud) halfword *p = maybe_isnode(L, ud); if (p != NULL) return p; - pdftex_fail("There should have been a lua <node> here, not an object with type %s!", luaL_typename(L, ud)); + luatex_fail("There should have been a lua <node> here, not an object with type %s!", luaL_typename(L, ud)); return NULL; } @@ -1349,7 +1069,7 @@ static int lua_nodelib_remove(lua_State * L) current = *(check_isnode(L, 2)); if (head == current) { if (alink(current)){ - vlink(alink(current)) = vlink(current); // vlink(prev) = next + vlink(alink(current)) = vlink(current); // vlink(prev) = next } if (vlink(current)){ alink( vlink(current)) = alink(current); // alink(next) = prev @@ -1401,7 +1121,7 @@ static int lua_nodelib_direct_remove(lua_State * L) } if (head == current) { if (alink(current)){ - vlink( alink(current) ) = vlink(current); // vlink(prev) = next + vlink( alink(current) ) = vlink(current); // vlink(prev) = next } if (vlink(current)){ alink( vlink(current) ) = alink(current); // alink(next) = prev @@ -1597,7 +1317,9 @@ static int lua_nodelib_direct_insert_after(lua_State * L) } /* node.copy_list */ - +/* hh-ls: we need to use an intermediate variable as otherwise target is used in the loop +and subfields get overwritten (or something like that) which results in crashes and +unexpected side effects */ static int lua_nodelib_copy_list(lua_State * L) { halfword n, s = null; @@ -1608,11 +1330,14 @@ static int lua_nodelib_copy_list(lua_State * L) if ((lua_gettop(L) > 1) && (!lua_isnil(L,2))) s = *check_isnode(L, 2); m = do_copy_node_list(n, s); - lua_pushnumber(L, m); - lua_nodelib_push(L); +// lua_pushnumber(L, m); +// lua_nodelib_push(L); + lua_nodelib_push_fast(L,m); return 1; + } + /* node.direct.copy_list */ static int lua_nodelib_direct_copy_list(lua_State * L) @@ -1742,13 +1467,13 @@ static int lua_nodelib_hpack(lua_State * L) if (lua_gettop(L) > 2) { if (lua_type(L, 3) == LUA_TSTRING) { s = lua_tostring(L, 3); - if (luaS_ptr_eq(s, additional)) { + if (lua_key_eq(s, additional)) { m = 1; - } else if (luaS_ptr_eq(s, exactly)) { + } else if (lua_key_eq(s, exactly)) { m = 0; - } else if (luaS_ptr_eq(s, cal_expand_ratio)) { + } else if (lua_key_eq(s, cal_expand_ratio)) { m = 2; - } else if (luaS_ptr_eq(s, subst_ex_font)) { + } else if (lua_key_eq(s, subst_ex_font)) { m = 3; } else { luaL_error(L, "3rd argument should be either additional or exactly"); @@ -1789,13 +1514,13 @@ static int lua_nodelib_direct_hpack(lua_State * L) if (lua_gettop(L) > 2) { if (lua_type(L, 3) == LUA_TSTRING) { s = lua_tostring(L, 3); - if (luaS_ptr_eq(s, additional)) { + if (lua_key_eq(s, additional)) { m = 1; - } else if (luaS_ptr_eq(s, exactly)) { + } else if (lua_key_eq(s, exactly)) { m = 0; - } else if (luaS_ptr_eq(s, cal_expand_ratio)) { + } else if (lua_key_eq(s, cal_expand_ratio)) { m = 2; - } else if (luaS_ptr_eq(s, subst_ex_font)) { + } else if (lua_key_eq(s, subst_ex_font)) { m = 3; } else { luaL_error(L, "3rd argument should be either additional or exactly"); @@ -1836,9 +1561,9 @@ static int lua_nodelib_vpack(lua_State * L) if (lua_gettop(L) > 2) { if (lua_type(L, 3) == LUA_TSTRING) { s = lua_tostring(L, 3); - if (luaS_ptr_eq(s, additional)) { + if (lua_key_eq(s, additional)) { m = 1; - } else if (luaS_ptr_eq(s, exactly)) { + } else if (lua_key_eq(s, exactly)) { m = 0; } else { luaL_error(L, "3rd argument should be either additional or exactly"); @@ -1881,9 +1606,9 @@ static int lua_nodelib_direct_vpack(lua_State * L) if (lua_gettop(L) > 2) { if (lua_type(L, 3) == LUA_TSTRING) { s = lua_tostring(L, 3); - if (luaS_ptr_eq(s, additional)) { + if (lua_key_eq(s, additional)) { m = 1; - } else if (luaS_ptr_eq(s, exactly)) { + } else if (lua_key_eq(s, exactly)) { m = 0; } else { luaL_error(L, "3rd argument should be either additional or exactly"); @@ -2048,19 +1773,19 @@ static int get_node_field_id(lua_State * L, int n, int node) if (s == NULL) return -2; - if (luaS_ptr_eq(s, next)) { + if (lua_key_eq(s, next)) { return 0; - } else if (luaS_ptr_eq(s, id)) { + } else if (lua_key_eq(s, id)) { return 1; - } else if (luaS_ptr_eq(s, subtype)) { + } else if (lua_key_eq(s, subtype)) { if (nodetype_has_subtype(t)) { return 2; } - } else if (luaS_ptr_eq(s, attr)) { + } else if (lua_key_eq(s, attr)) { if (nodetype_has_attributes(t)) { return 3; } - } else if (luaS_ptr_eq(s, prev)) { + } else if (lua_key_eq(s, prev)) { if (nodetype_has_prev(t)) { return -1; } @@ -2070,7 +1795,7 @@ static int get_node_field_id(lua_State * L, int n, int node) if (t == whatsit_node) { fields = whatsit_node_data[subtype(node)].fields; } - if (luaS_ptr_eq(s, list)) { + if (lua_key_eq(s, list)) { /* head and list are equivalent; we don't catch extra virtual fields */ s = luaS_head_ptr; } @@ -2732,33 +2457,31 @@ static void lua_nodelib_getfield_whatsit(lua_State * L, int n, const char *s) t = subtype(n); if (t == dir_node) { - if (luaS_ptr_eq(s, dir)) { + if (lua_key_eq(s, dir)) { nodelib_pushdir(L, dir_dir(n), true); - } else if (luaS_ptr_eq(s, level)) { + } else if (lua_key_eq(s, level)) { lua_pushnumber(L, dir_level(n)); - } else if (luaS_ptr_eq(s, dvi_ptr)) { + } else if (lua_key_eq(s, dvi_ptr)) { lua_pushnumber(L, dir_dvi_ptr(n)); - } else if (luaS_ptr_eq(s, dir_h)) { + } else if (lua_key_eq(s, dir_h)) { lua_pushnumber(L, dir_dvi_h(n)); } else { lua_pushnil(L); } } else if (t == user_defined_node) { - if (luaS_ptr_eq(s, user_id)) { + if (lua_key_eq(s, user_id)) { lua_pushnumber(L, user_node_id(n)); - } else if (luaS_ptr_eq(s, type)) { + } else if (lua_key_eq(s, type)) { lua_pushnumber(L, user_node_type(n)); - } else if (luaS_ptr_eq(s, value)) { + } else if (lua_key_eq(s, value)) { switch (user_node_type(n)) { case 'a': - /* fast_metatable(n) */ nodelib_pushlist(L, user_node_value(n)); break; case 'd': lua_pushnumber(L, user_node_value(n)); break; case 'n': - /* fast_metatable(n) */ nodelib_pushlist(L, user_node_value(n)); break; case 's': @@ -2775,29 +2498,29 @@ static void lua_nodelib_getfield_whatsit(lua_State * L, int n, const char *s) lua_pushnil(L); } } else if (t == local_par_node) { - if (luaS_ptr_eq(s, pen_inter)) { + if (lua_key_eq(s, pen_inter)) { lua_pushnumber(L, local_pen_inter(n)); - } else if (luaS_ptr_eq(s, pen_broken)) { + } else if (lua_key_eq(s, pen_broken)) { lua_pushnumber(L, local_pen_broken(n)); - } else if (luaS_ptr_eq(s, dir)) { + } else if (lua_key_eq(s, dir)) { nodelib_pushdir(L, local_par_dir(n), false); - } else if (luaS_ptr_eq(s, box_left)) { + } else if (lua_key_eq(s, box_left)) { /* can be: fast_metatable_or_nil(local_box_left(n)) */ nodelib_pushlist(L, local_box_left(n)); - } else if (luaS_ptr_eq(s, box_left_width)) { + } else if (lua_key_eq(s, box_left_width)) { lua_pushnumber(L, local_box_left_width(n)); - } else if (luaS_ptr_eq(s, box_right)) { + } else if (lua_key_eq(s, box_right)) { /* can be: fast_metatable_or_nil(local_box_right(n)) */ nodelib_pushlist(L, local_box_right(n)); - } else if (luaS_ptr_eq(s, box_right_width)) { + } else if (lua_key_eq(s, box_right_width)) { lua_pushnumber(L, local_box_right_width(n)); } else { lua_pushnil(L); } } else if (t == pdf_literal_node) { - if (luaS_ptr_eq(s, mode)) { + if (lua_key_eq(s, mode)) { lua_pushnumber(L, pdf_literal_mode(n)); - } else if (luaS_ptr_eq(s, data)) { + } else if (lua_key_eq(s, data)) { if (pdf_literal_type(n) == lua_refid_literal) { lua_rawgeti(Luas, LUA_REGISTRYINDEX, pdf_literal_data(n)); } else { @@ -2807,9 +2530,9 @@ static void lua_nodelib_getfield_whatsit(lua_State * L, int n, const char *s) lua_pushnil(L); } } else if (t == late_lua_node) { - if (luaS_ptr_eq(s, name)) { + if (lua_key_eq(s, name)) { tokenlist_to_luastring(L, late_lua_name(n)); - } else if (luaS_ptr_eq(s, data) || luaS_ptr_eq(s, string)) { + } else if (lua_key_eq(s, data) || lua_key_eq(s, string)) { if (late_lua_type(n) == lua_refid_literal) { lua_rawgeti(Luas, LUA_REGISTRYINDEX, late_lua_data(n)); } else { @@ -2819,154 +2542,154 @@ static void lua_nodelib_getfield_whatsit(lua_State * L, int n, const char *s) lua_pushnil(L); } } else if (t == pdf_annot_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { lua_pushnumber(L, depth(n)); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { lua_pushnumber(L, height(n)); - } else if (luaS_ptr_eq(s, objnum)) { + } else if (lua_key_eq(s, objnum)) { lua_pushnumber(L, pdf_annot_objnum(n)); - } else if (luaS_ptr_eq(s, data)) { + } else if (lua_key_eq(s, data)) { tokenlist_to_luastring(L, pdf_annot_data(n)); } else { lua_pushnil(L); } } else if (t == pdf_dest_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { lua_pushnumber(L, depth(n)); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { lua_pushnumber(L, height(n)); - } else if (luaS_ptr_eq(s, named_id)) { + } else if (lua_key_eq(s, named_id)) { lua_pushnumber(L, pdf_dest_named_id(n)); - } else if (luaS_ptr_eq(s, dest_id)) { + } else if (lua_key_eq(s, dest_id)) { if (pdf_dest_named_id(n) == 1) tokenlist_to_luastring(L, pdf_dest_id(n)); else lua_pushnumber(L, pdf_dest_id(n)); - } else if (luaS_ptr_eq(s, dest_type)) { + } else if (lua_key_eq(s, dest_type)) { lua_pushnumber(L, pdf_dest_type(n)); - } else if (luaS_ptr_eq(s, xyz_zoom)) { + } else if (lua_key_eq(s, xyz_zoom)) { lua_pushnumber(L, pdf_dest_xyz_zoom(n)); - } else if (luaS_ptr_eq(s, objnum)) { + } else if (lua_key_eq(s, objnum)) { lua_pushnumber(L, pdf_dest_objnum(n)); } else { lua_pushnil(L); } } else if (t == pdf_setmatrix_node) { - if (luaS_ptr_eq(s, data)) { + if (lua_key_eq(s, data)) { tokenlist_to_luastring(L, pdf_setmatrix_data(n)); } else { lua_pushnil(L); } } else if (t == pdf_colorstack_node) { - if (luaS_ptr_eq(s, stack)) { + if (lua_key_eq(s, stack)) { lua_pushnumber(L, pdf_colorstack_stack(n)); - } else if (luaS_ptr_eq(s, command)) { + } else if (lua_key_eq(s, command)) { lua_pushnumber(L, pdf_colorstack_cmd(n)); - } else if (luaS_ptr_eq(s, data)) { + } else if (lua_key_eq(s, data)) { tokenlist_to_luastring(L, pdf_colorstack_data(n)); } else { lua_pushnil(L); } } else if (t == pdf_refobj_node) { - if (luaS_ptr_eq(s, objnum)) { + if (lua_key_eq(s, objnum)) { lua_pushnumber(L, pdf_obj_objnum(n)); } else { lua_pushnil(L); } } else if (t == pdf_refxform_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { lua_pushnumber(L, depth(n)); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { lua_pushnumber(L, height(n)); - } else if (luaS_ptr_eq(s, objnum)) { + } else if (lua_key_eq(s, objnum)) { lua_pushnumber(L, pdf_xform_objnum(n)); } else { lua_pushnil(L); } } else if (t == pdf_refximage_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { lua_pushnumber(L, depth(n)); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { lua_pushnumber(L, height(n)); - } else if (luaS_ptr_eq(s, transform)) { + } else if (lua_key_eq(s, transform)) { lua_pushnumber(L, pdf_ximage_transform(n)); - } else if (luaS_ptr_eq(s, index)) { + } else if (lua_key_eq(s, index)) { lua_pushnumber(L, pdf_ximage_index(n)); } else { lua_pushnil(L); } } else if (t == write_node) { - if (luaS_ptr_eq(s, stream)) { + if (lua_key_eq(s, stream)) { lua_pushnumber(L, write_stream(n)); - } else if (luaS_ptr_eq(s, data)) { + } else if (lua_key_eq(s, data)) { tokenlist_to_lua(L, write_tokens(n)); } else { lua_pushnil(L); } } else if (t == special_node) { - if (luaS_ptr_eq(s, data)) { + if (lua_key_eq(s, data)) { tokenlist_to_luastring(L, write_tokens(n)); } else { lua_pushnil(L); } } else if (t == pdf_start_link_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { lua_pushnumber(L, depth(n)); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { lua_pushnumber(L, height(n)); - } else if (luaS_ptr_eq(s, objnum)) { + } else if (lua_key_eq(s, objnum)) { lua_pushnumber(L, pdf_link_objnum(n)); - } else if (luaS_ptr_eq(s, link_attr)) { + } else if (lua_key_eq(s, link_attr)) { tokenlist_to_luastring(L, pdf_link_attr(n)); - } else if (luaS_ptr_eq(s, action)) { + } else if (lua_key_eq(s, action)) { nodelib_pushaction(L, pdf_link_action(n)); } else { lua_pushnil(L); } } else if ((t == pdf_thread_node) || (t == pdf_start_thread_node)) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { lua_pushnumber(L, depth(n)); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { lua_pushnumber(L, height(n)); - } else if (luaS_ptr_eq(s, named_id)) { + } else if (lua_key_eq(s, named_id)) { lua_pushnumber(L, pdf_thread_named_id(n)); - } else if (luaS_ptr_eq(s, thread_id)) { + } else if (lua_key_eq(s, thread_id)) { if (pdf_thread_named_id(n) == 1) { tokenlist_to_luastring(L, pdf_thread_id(n)); } else { lua_pushnumber(L, pdf_thread_id(n)); } - } else if (luaS_ptr_eq(s, thread_attr)) { + } else if (lua_key_eq(s, thread_attr)) { tokenlist_to_luastring(L, pdf_thread_attr(n)); } else { lua_pushnil(L); } } else if (t == open_node) { - if (luaS_ptr_eq(s, stream)) { + if (lua_key_eq(s, stream)) { lua_pushnumber(L, write_stream(n)); - } else if (luaS_ptr_eq(s, name)) { + } else if (lua_key_eq(s, name)) { nodelib_pushstring(L, open_name(n)); - } else if (luaS_ptr_eq(s, area)) { + } else if (lua_key_eq(s, area)) { nodelib_pushstring(L, open_area(n)); - } else if (luaS_ptr_eq(s, ext)) { + } else if (lua_key_eq(s, ext)) { nodelib_pushstring(L, open_ext(n)); } else { lua_pushnil(L); } } else if (t == close_node) { - if (luaS_ptr_eq(s, stream)) { + if (lua_key_eq(s, stream)) { lua_pushnumber(L, write_stream(n)); } else { lua_pushnil(L); @@ -3033,13 +2756,13 @@ static int lua_nodelib_fast_getfield(lua_State * L) s = lua_tostring(L, 2); - if (luaS_ptr_eq(s, id)) { + if (lua_key_eq(s, id)) { lua_pushnumber(L, t); - } else if (luaS_ptr_eq(s, next)) { + } else if (lua_key_eq(s, next)) { fast_metatable_or_nil(vlink(n)); - } else if (luaS_ptr_eq(s, prev)) { + } else if (lua_key_eq(s, prev)) { fast_metatable_or_nil(alink(n)); - } else if (luaS_ptr_eq(s, attr)) { + } else if (lua_key_eq(s, attr)) { if (! nodetype_has_attributes(t)) { lua_pushnil(L); } else { @@ -3047,404 +2770,404 @@ static int lua_nodelib_fast_getfield(lua_State * L) } } else if (t == glyph_node) { /* candidates: fontchar (font,char) whd (width,height,depth) */ - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, font)) { + } else if (lua_key_eq(s, font)) { lua_pushnumber(L, font(n)); - } else if (luaS_ptr_eq(s, char)) { + } else if (lua_key_eq(s, char)) { lua_pushnumber(L, character(n)); - } else if (luaS_ptr_eq(s, xoffset)) { + } else if (lua_key_eq(s, xoffset)) { lua_pushnumber(L, x_displace(n)); - } else if (luaS_ptr_eq(s, yoffset)) { + } else if (lua_key_eq(s, yoffset)) { lua_pushnumber(L, y_displace(n)); - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { lua_pushnumber(L, char_width(font(n),character(n))); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { lua_pushnumber(L, char_height(font(n),character(n))); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { lua_pushnumber(L, char_depth(font(n),character(n))); - } else if (luaS_ptr_eq(s, expansion_factor)) { + } else if (lua_key_eq(s, expansion_factor)) { lua_pushnumber(L, ex_glyph(n)); - } else if (luaS_ptr_eq(s, components)) { + } else if (lua_key_eq(s, components)) { fast_metatable_or_nil(lig_ptr(n)); - } else if (luaS_ptr_eq(s, lang)) { + } else if (lua_key_eq(s, lang)) { lua_pushnumber(L, char_lang(n)); - } else if (luaS_ptr_eq(s, left)) { + } else if (lua_key_eq(s, left)) { lua_pushnumber(L, char_lhmin(n)); - } else if (luaS_ptr_eq(s, right)) { + } else if (lua_key_eq(s, right)) { lua_pushnumber(L, char_rhmin(n)); - } else if (luaS_ptr_eq(s, uchyph)) { + } else if (lua_key_eq(s, uchyph)) { lua_pushnumber(L, char_uchyph(n)); } else { lua_pushnil(L); } } else if ((t == hlist_node) || (t == vlist_node)) { /* candidates: whd (width,height,depth) */ - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, list) || luaS_ptr_eq(s, head)) { + } else if (lua_key_eq(s, list) || lua_key_eq(s, head)) { fast_metatable_or_nil_alink(list_ptr(n)); - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { lua_pushnumber(L, height(n)); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { lua_pushnumber(L, depth(n)); - } else if (luaS_ptr_eq(s, dir)) { + } else if (lua_key_eq(s, dir)) { nodelib_pushdir(L, box_dir(n), false); - } else if (luaS_ptr_eq(s, shift)) { + } else if (lua_key_eq(s, shift)) { lua_pushnumber(L, shift_amount(n)); - } else if (luaS_ptr_eq(s, glue_order)) { + } else if (lua_key_eq(s, glue_order)) { lua_pushnumber(L, glue_order(n)); - } else if (luaS_ptr_eq(s, glue_sign)) { + } else if (lua_key_eq(s, glue_sign)) { lua_pushnumber(L, glue_sign(n)); - } else if (luaS_ptr_eq(s, glue_set)) { + } else if (lua_key_eq(s, glue_set)) { lua_pushnumber(L, (double) glue_set(n)); } else { lua_pushnil(L); } } else if (t == disc_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, pre)) { + } else if (lua_key_eq(s, pre)) { fast_metatable_or_nil(vlink(pre_break(n))); - } else if (luaS_ptr_eq(s, post)) { + } else if (lua_key_eq(s, post)) { fast_metatable_or_nil(vlink(post_break(n))); - } else if (luaS_ptr_eq(s, replace)) { + } else if (lua_key_eq(s, replace)) { fast_metatable_or_nil(vlink(no_break(n))); } else { lua_pushnil(L); } } else if (t == glue_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, spec)) { + } else if (lua_key_eq(s, spec)) { nodelib_pushspec(L, glue_ptr(n)); - } else if (luaS_ptr_eq(s, leader)) { + } else if (lua_key_eq(s, leader)) { fast_metatable_or_nil(leader_ptr(n)); } else { lua_pushnil(L); } } else if (t == glue_spec_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, 0); /* dummy, the only one that prevents move up */ - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, stretch)) { + } else if (lua_key_eq(s, stretch)) { lua_pushnumber(L, stretch(n)); - } else if (luaS_ptr_eq(s, shrink)) { + } else if (lua_key_eq(s, shrink)) { lua_pushnumber(L, shrink(n)); - } else if (luaS_ptr_eq(s, stretch_order)) { + } else if (lua_key_eq(s, stretch_order)) { lua_pushnumber(L, stretch_order(n)); - } else if (luaS_ptr_eq(s, shrink_order)) { + } else if (lua_key_eq(s, shrink_order)) { lua_pushnumber(L, shrink_order(n)); - } else if (luaS_ptr_eq(s, ref_count)) { + } else if (lua_key_eq(s, ref_count)) { lua_pushnumber(L, glue_ref_count(n)); - } else if (luaS_ptr_eq(s, writable)) { + } else if (lua_key_eq(s, writable)) { lua_pushboolean(L, valid_node(n)); } else { lua_pushnil(L); } } else if (t == kern_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, kern)) { + } else if (lua_key_eq(s, kern)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, expansion_factor)) { + } else if (lua_key_eq(s, expansion_factor)) { lua_pushnumber(L, ex_kern(n)); } else { lua_pushnil(L); } } else if (t == penalty_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, penalty)) { + } else if (lua_key_eq(s, penalty)) { lua_pushnumber(L, penalty(n)); } else { lua_pushnil(L); } } else if (t == rule_node) { /* candidates: whd (width,height,depth) */ - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { lua_pushnumber(L, height(n)); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { lua_pushnumber(L, depth(n)); - } else if (luaS_ptr_eq(s, dir)) { + } else if (lua_key_eq(s, dir)) { nodelib_pushdir(L, rule_dir(n), false); } else { lua_pushnil(L); } } else if (t == whatsit_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); } else { lua_nodelib_getfield_whatsit(L, n, s); } } else if (t == simple_noad) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, nucleus)) { + } else if (lua_key_eq(s, nucleus)) { fast_metatable_or_nil(nucleus(n)); - } else if (luaS_ptr_eq(s, sub)) { + } else if (lua_key_eq(s, sub)) { fast_metatable_or_nil(subscr(n)); - } else if (luaS_ptr_eq(s, sup)) { + } else if (lua_key_eq(s, sup)) { fast_metatable_or_nil(supscr(n)); } else { lua_pushnil(L); } } else if ((t == math_char_node) || (t == math_text_char_node)) { /* candidates: famchar (fam,char) */ - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, fam)) { + } else if (lua_key_eq(s, fam)) { lua_pushnumber(L, math_fam(n)); - } else if (luaS_ptr_eq(s, char)) { + } else if (lua_key_eq(s, char)) { lua_pushnumber(L, math_character(n)); } else { lua_pushnil(L); } } else if (t == mark_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, class)) { + } else if (lua_key_eq(s, class)) { lua_pushnumber(L, mark_class(n)); - } else if (luaS_ptr_eq(s, mark)) { + } else if (lua_key_eq(s, mark)) { tokenlist_to_lua(L, mark_ptr(n)); } else { lua_pushnil(L); } } else if (t == ins_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, cost)) { + } else if (lua_key_eq(s, cost)) { lua_pushnumber(L, float_cost(n)); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { lua_pushnumber(L, depth(n)); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { lua_pushnumber(L, height(n)); - } else if (luaS_ptr_eq(s, spec)) { + } else if (lua_key_eq(s, spec)) { nodelib_pushspec(L, split_top_ptr(n)); - } else if ((luaS_ptr_eq(s, list)) || (luaS_ptr_eq(s, head))) { + } else if ((lua_key_eq(s, list)) || (lua_key_eq(s, head))) { fast_metatable_or_nil_alink(ins_ptr(n)); } else { lua_pushnil(L); } } else if (t == math_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, surround)) { + } else if (lua_key_eq(s, surround)) { lua_pushnumber(L, surround(n)); } else { lua_pushnil(L); } } else if (t == fraction_noad) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { lua_pushnumber(L, thickness(n)); - } else if (luaS_ptr_eq(s, num)) { + } else if (lua_key_eq(s, num)) { fast_metatable_or_nil(numerator(n)); - } else if (luaS_ptr_eq(s, denom)) { + } else if (lua_key_eq(s, denom)) { fast_metatable_or_nil(denominator(n)); - } else if (luaS_ptr_eq(s, left)) { + } else if (lua_key_eq(s, left)) { fast_metatable_or_nil(left_delimiter(n)); - } else if (luaS_ptr_eq(s, right)) { + } else if (lua_key_eq(s, right)) { fast_metatable_or_nil(right_delimiter(n)); } else { lua_pushnil(L); } } else if (t == style_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, style)) { + } else if (lua_key_eq(s, style)) { lua_pushstring(L, math_style_names[subtype(n)]); } else { lua_pushnil(L); } } else if (t == accent_noad) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, nucleus)) { + } else if (lua_key_eq(s, nucleus)) { fast_metatable_or_nil(nucleus(n)); - } else if (luaS_ptr_eq(s, sub)) { + } else if (lua_key_eq(s, sub)) { fast_metatable_or_nil(subscr(n)); - } else if (luaS_ptr_eq(s, sup)) { + } else if (lua_key_eq(s, sup)) { fast_metatable_or_nil(supscr(n)); - } else if (luaS_ptr_eq(s, accent)) { + } else if (lua_key_eq(s, accent)) { fast_metatable_or_nil(accent_chr(n)); - } else if (luaS_ptr_eq(s, bot_accent)) { + } else if (lua_key_eq(s, bot_accent)) { fast_metatable_or_nil(bot_accent_chr(n)); } else { lua_pushnil(L); } } else if (t == fence_noad) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, delim)) { + } else if (lua_key_eq(s, delim)) { fast_metatable_or_nil(delimiter(n)); } else { lua_pushnil(L); } } else if (t == delim_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, small_fam)) { + } else if (lua_key_eq(s, small_fam)) { lua_pushnumber(L, small_fam(n)); - } else if (luaS_ptr_eq(s, small_char)) { + } else if (lua_key_eq(s, small_char)) { lua_pushnumber(L, small_char(n)); - } else if (luaS_ptr_eq(s, large_fam)) { + } else if (lua_key_eq(s, large_fam)) { lua_pushnumber(L, large_fam(n)); - } else if (luaS_ptr_eq(s, large_char)) { + } else if (lua_key_eq(s, large_char)) { lua_pushnumber(L, large_char(n)); } else { lua_pushnil(L); } } else if ((t == sub_box_node) || (t == sub_mlist_node)) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if ((luaS_ptr_eq(s, list)) || (luaS_ptr_eq(s, head))){ + } else if ((lua_key_eq(s, list)) || (lua_key_eq(s, head))){ fast_metatable_or_nil_alink(math_list(n)); } else { lua_pushnil(L); } } else if (t == radical_noad) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, nucleus)) { + } else if (lua_key_eq(s, nucleus)) { fast_metatable_or_nil(nucleus(n)); - } else if (luaS_ptr_eq(s, sub)) { + } else if (lua_key_eq(s, sub)) { fast_metatable_or_nil(subscr(n)); - } else if (luaS_ptr_eq(s, sup)) { + } else if (lua_key_eq(s, sup)) { fast_metatable_or_nil(supscr(n)); - } else if (luaS_ptr_eq(s, left)) { + } else if (lua_key_eq(s, left)) { fast_metatable_or_nil(left_delimiter(n)); - } else if (luaS_ptr_eq(s, degree)) { + } else if (lua_key_eq(s, degree)) { fast_metatable_or_nil(degree(n)); } else { lua_pushnil(L); } } else if (t == margin_kern_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, glyph)) { + } else if (lua_key_eq(s, glyph)) { fast_metatable_or_nil(margin_char(n)); } else { lua_pushnil(L); } } else if (t == split_up_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, last_ins_ptr)) { + } else if (lua_key_eq(s, last_ins_ptr)) { fast_metatable_or_nil(last_ins_ptr(n)); - } else if (luaS_ptr_eq(s, best_ins_ptr)) { + } else if (lua_key_eq(s, best_ins_ptr)) { fast_metatable_or_nil(best_ins_ptr(n)); - } else if (luaS_ptr_eq(s, broken_ptr)) { + } else if (lua_key_eq(s, broken_ptr)) { fast_metatable_or_nil(broken_ptr(n)); - } else if (luaS_ptr_eq(s, broken_ins)) { + } else if (lua_key_eq(s, broken_ins)) { fast_metatable_or_nil(broken_ins(n)); } else { lua_pushnil(L); } } else if (t == choice_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, display)) { + } else if (lua_key_eq(s, display)) { fast_metatable_or_nil(display_mlist(n)); - } else if (luaS_ptr_eq(s, text)) { + } else if (lua_key_eq(s, text)) { fast_metatable_or_nil(text_mlist(n)); - } else if (luaS_ptr_eq(s, script)) { + } else if (lua_key_eq(s, script)) { fast_metatable_or_nil(script_mlist(n)); - } else if (luaS_ptr_eq(s, scriptscript)) { + } else if (lua_key_eq(s, scriptscript)) { fast_metatable_or_nil(script_script_mlist(n)); } else { lua_pushnil(L); } } else if (t == inserting_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, last_ins_ptr)) { + } else if (lua_key_eq(s, last_ins_ptr)) { fast_metatable_or_nil(last_ins_ptr(n)); - } else if (luaS_ptr_eq(s, best_ins_ptr)) { + } else if (lua_key_eq(s, best_ins_ptr)) { fast_metatable_or_nil(best_ins_ptr(n)); } else { lua_pushnil(L); } } else if (t == attribute_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, number)) { + } else if (lua_key_eq(s, number)) { lua_pushnumber(L, attribute_id(n)); - } else if (luaS_ptr_eq(s, value)) { + } else if (lua_key_eq(s, value)) { lua_pushnumber(L, attribute_value(n)); } else { lua_pushnil(L); } } else if (t == adjust_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if ((luaS_ptr_eq(s, list)) || (luaS_ptr_eq(s, head))) { + } else if ((lua_key_eq(s, list)) || (lua_key_eq(s, head))) { fast_metatable_or_nil_alink(adjust_ptr(n)); } else { lua_pushnil(L); } } else if (t == action_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n));/* dummy subtype */ - } else if (luaS_ptr_eq(s, action_type)) { + } else if (lua_key_eq(s, action_type)) { lua_pushnumber(L, pdf_action_type(n)); - } else if (luaS_ptr_eq(s, named_id)) { + } else if (lua_key_eq(s, named_id)) { lua_pushnumber(L, pdf_action_named_id(n)); - } else if (luaS_ptr_eq(s, action_id)) { + } else if (lua_key_eq(s, action_id)) { if (pdf_action_named_id(n) == 1) { tokenlist_to_luastring(L, pdf_action_id(n)); } else { lua_pushnumber(L, pdf_action_id(n)); } - } else if (luaS_ptr_eq(s, file)) { + } else if (lua_key_eq(s, file)) { tokenlist_to_luastring(L, pdf_action_file(n)); - } else if (luaS_ptr_eq(s, new_window)) { + } else if (lua_key_eq(s, new_window)) { lua_pushnumber(L, pdf_action_new_window(n)); - } else if (luaS_ptr_eq(s, data)) { + } else if (lua_key_eq(s, data)) { tokenlist_to_luastring(L, pdf_action_tokens(n)); - } else if (luaS_ptr_eq(s, ref_count)) { + } else if (lua_key_eq(s, ref_count)) { lua_pushnumber(L, pdf_action_refcount(n)); } else { lua_pushnil(L); } } else if (t == unset_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { lua_pushnumber(L, height(n)); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { lua_pushnumber(L, depth(n)); - } else if (luaS_ptr_eq(s, dir)) { + } else if (lua_key_eq(s, dir)) { nodelib_pushdir(L, box_dir(n), false); - } else if (luaS_ptr_eq(s, shrink)) { + } else if (lua_key_eq(s, shrink)) { lua_pushnumber(L, glue_shrink(n)); - } else if (luaS_ptr_eq(s, glue_order)) { + } else if (lua_key_eq(s, glue_order)) { lua_pushnumber(L, glue_order(n)); - } else if (luaS_ptr_eq(s, glue_sign)) { + } else if (lua_key_eq(s, glue_sign)) { lua_pushnumber(L, glue_sign(n)); - } else if (luaS_ptr_eq(s, stretch)) { + } else if (lua_key_eq(s, stretch)) { lua_pushnumber(L, glue_stretch(n)); - } else if (luaS_ptr_eq(s, count)) { + } else if (lua_key_eq(s, count)) { lua_pushnumber(L, span_count(n)); - } else if ((luaS_ptr_eq(s, list)) || (luaS_ptr_eq(s, head))){ + } else if ((lua_key_eq(s, list)) || (lua_key_eq(s, head))){ fast_metatable_or_nil_alink(list_ptr(n)); } else { lua_pushnil(L); } } else if (t == attribute_list_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { lua_pushnumber(L, subtype(n)); } else { lua_pushnil(L); @@ -3484,23 +3207,23 @@ static void lua_nodelib_direct_getfield_whatsit(lua_State * L, int n, const char t = subtype(n); if (t == dir_node) { - if (luaS_ptr_eq(s, dir)) { + if (lua_key_eq(s, dir)) { nodelib_pushdir(L, dir_dir(n), true); - } else if (luaS_ptr_eq(s, level)) { + } else if (lua_key_eq(s, level)) { lua_pushnumber(L, dir_level(n)); - } else if (luaS_ptr_eq(s, dvi_ptr)) { + } else if (lua_key_eq(s, dvi_ptr)) { lua_pushnumber(L, dir_dvi_ptr(n)); - } else if (luaS_ptr_eq(s, dir_h)) { + } else if (lua_key_eq(s, dir_h)) { lua_pushnumber(L, dir_dvi_h(n)); } else { lua_pushnil(L); } } else if (t == user_defined_node) { - if (luaS_ptr_eq(s, user_id)) { + if (lua_key_eq(s, user_id)) { lua_pushnumber(L, user_node_id(n)); - } else if (luaS_ptr_eq(s, type)) { + } else if (lua_key_eq(s, type)) { lua_pushnumber(L, user_node_type(n)); - } else if (luaS_ptr_eq(s, value)) { + } else if (lua_key_eq(s, value)) { switch (user_node_type(n)) { case 'a': nodelib_pushdirect(user_node_value(n)); @@ -3525,27 +3248,27 @@ static void lua_nodelib_direct_getfield_whatsit(lua_State * L, int n, const char lua_pushnil(L); } } else if (t == local_par_node) { - if (luaS_ptr_eq(s, pen_inter)) { + if (lua_key_eq(s, pen_inter)) { lua_pushnumber(L, local_pen_inter(n)); - } else if (luaS_ptr_eq(s, pen_broken)) { + } else if (lua_key_eq(s, pen_broken)) { lua_pushnumber(L, local_pen_broken(n)); - } else if (luaS_ptr_eq(s, dir)) { + } else if (lua_key_eq(s, dir)) { nodelib_pushdir(L, local_par_dir(n), false); - } else if (luaS_ptr_eq(s, box_left)) { + } else if (lua_key_eq(s, box_left)) { nodelib_pushdirect_or_nil(local_box_left(n)); - } else if (luaS_ptr_eq(s, box_left_width)) { + } else if (lua_key_eq(s, box_left_width)) { lua_pushnumber(L, local_box_left_width(n)); - } else if (luaS_ptr_eq(s, box_right)) { + } else if (lua_key_eq(s, box_right)) { nodelib_pushdirect_or_nil(local_box_right(n)); - } else if (luaS_ptr_eq(s, box_right_width)) { + } else if (lua_key_eq(s, box_right_width)) { lua_pushnumber(L, local_box_right_width(n)); } else { lua_pushnil(L); } } else if (t == pdf_literal_node) { - if (luaS_ptr_eq(s, mode)) { + if (lua_key_eq(s, mode)) { lua_pushnumber(L, pdf_literal_mode(n)); - } else if (luaS_ptr_eq(s, data)) { + } else if (lua_key_eq(s, data)) { if (pdf_literal_type(n) == lua_refid_literal) { lua_rawgeti(Luas, LUA_REGISTRYINDEX, pdf_literal_data(n)); } else { @@ -3555,9 +3278,9 @@ static void lua_nodelib_direct_getfield_whatsit(lua_State * L, int n, const char lua_pushnil(L); } } else if (t == late_lua_node) { - if (luaS_ptr_eq(s, name)) { + if (lua_key_eq(s, name)) { tokenlist_to_luastring(L, late_lua_name(n)); - } else if (luaS_ptr_eq(s, data) || luaS_ptr_eq(s, string)) { + } else if (lua_key_eq(s, data) || lua_key_eq(s, string)) { if (late_lua_type(n) == lua_refid_literal) { lua_rawgeti(Luas, LUA_REGISTRYINDEX, late_lua_data(n)); } else { @@ -3567,154 +3290,154 @@ static void lua_nodelib_direct_getfield_whatsit(lua_State * L, int n, const char lua_pushnil(L); } } else if (t == pdf_annot_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { lua_pushnumber(L, depth(n)); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { lua_pushnumber(L, height(n)); - } else if (luaS_ptr_eq(s, objnum)) { + } else if (lua_key_eq(s, objnum)) { lua_pushnumber(L, pdf_annot_objnum(n)); - } else if (luaS_ptr_eq(s, data)) { + } else if (lua_key_eq(s, data)) { tokenlist_to_luastring(L, pdf_annot_data(n)); } else { lua_pushnil(L); } } else if (t == pdf_dest_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { lua_pushnumber(L, depth(n)); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { lua_pushnumber(L, height(n)); - } else if (luaS_ptr_eq(s, named_id)) { + } else if (lua_key_eq(s, named_id)) { lua_pushnumber(L, pdf_dest_named_id(n)); - } else if (luaS_ptr_eq(s, dest_id)) { + } else if (lua_key_eq(s, dest_id)) { if (pdf_dest_named_id(n) == 1) tokenlist_to_luastring(L, pdf_dest_id(n)); else lua_pushnumber(L, pdf_dest_id(n)); - } else if (luaS_ptr_eq(s, dest_type)) { + } else if (lua_key_eq(s, dest_type)) { lua_pushnumber(L, pdf_dest_type(n)); - } else if (luaS_ptr_eq(s, xyz_zoom)) { + } else if (lua_key_eq(s, xyz_zoom)) { lua_pushnumber(L, pdf_dest_xyz_zoom(n)); - } else if (luaS_ptr_eq(s, objnum)) { + } else if (lua_key_eq(s, objnum)) { lua_pushnumber(L, pdf_dest_objnum(n)); } else { lua_pushnil(L); } } else if (t == pdf_setmatrix_node) { - if (luaS_ptr_eq(s, data)) { + if (lua_key_eq(s, data)) { tokenlist_to_luastring(L, pdf_setmatrix_data(n)); } else { lua_pushnil(L); } } else if (t == pdf_colorstack_node) { - if (luaS_ptr_eq(s, stack)) { + if (lua_key_eq(s, stack)) { lua_pushnumber(L, pdf_colorstack_stack(n)); - } else if (luaS_ptr_eq(s, command)) { + } else if (lua_key_eq(s, command)) { lua_pushnumber(L, pdf_colorstack_cmd(n)); - } else if (luaS_ptr_eq(s, data)) { + } else if (lua_key_eq(s, data)) { tokenlist_to_luastring(L, pdf_colorstack_data(n)); } else { lua_pushnil(L); } } else if (t == pdf_refobj_node) { - if (luaS_ptr_eq(s, objnum)) { + if (lua_key_eq(s, objnum)) { lua_pushnumber(L, pdf_obj_objnum(n)); } else { lua_pushnil(L); } } else if (t == pdf_refxform_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { lua_pushnumber(L, depth(n)); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { lua_pushnumber(L, height(n)); - } else if (luaS_ptr_eq(s, objnum)) { + } else if (lua_key_eq(s, objnum)) { lua_pushnumber(L, pdf_xform_objnum(n)); } else { lua_pushnil(L); } } else if (t == pdf_refximage_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { lua_pushnumber(L, depth(n)); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { lua_pushnumber(L, height(n)); - } else if (luaS_ptr_eq(s, transform)) { + } else if (lua_key_eq(s, transform)) { lua_pushnumber(L, pdf_ximage_transform(n)); - } else if (luaS_ptr_eq(s, index)) { + } else if (lua_key_eq(s, index)) { lua_pushnumber(L, pdf_ximage_index(n)); } else { lua_pushnil(L); } } else if (t == write_node) { - if (luaS_ptr_eq(s, stream)) { + if (lua_key_eq(s, stream)) { lua_pushnumber(L, write_stream(n)); - } else if (luaS_ptr_eq(s, data)) { + } else if (lua_key_eq(s, data)) { tokenlist_to_lua(L, write_tokens(n)); } else { lua_pushnil(L); } } else if (t == special_node) { - if (luaS_ptr_eq(s, data)) { + if (lua_key_eq(s, data)) { tokenlist_to_luastring(L, write_tokens(n)); } else { lua_pushnil(L); } } else if (t == pdf_start_link_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { lua_pushnumber(L, depth(n)); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { lua_pushnumber(L, height(n)); - } else if (luaS_ptr_eq(s, objnum)) { + } else if (lua_key_eq(s, objnum)) { lua_pushnumber(L, pdf_link_objnum(n)); - } else if (luaS_ptr_eq(s, link_attr)) { + } else if (lua_key_eq(s, link_attr)) { tokenlist_to_luastring(L, pdf_link_attr(n)); - } else if (luaS_ptr_eq(s, action)) { + } else if (lua_key_eq(s, action)) { nodelib_pushaction(L, pdf_link_action(n)); } else { lua_pushnil(L); } } else if ((t == pdf_thread_node) || (t == pdf_start_thread_node)) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { lua_pushnumber(L, depth(n)); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { lua_pushnumber(L, height(n)); - } else if (luaS_ptr_eq(s, named_id)) { + } else if (lua_key_eq(s, named_id)) { lua_pushnumber(L, pdf_thread_named_id(n)); - } else if (luaS_ptr_eq(s, thread_id)) { + } else if (lua_key_eq(s, thread_id)) { if (pdf_thread_named_id(n) == 1) { tokenlist_to_luastring(L, pdf_thread_id(n)); } else { lua_pushnumber(L, pdf_thread_id(n)); } - } else if (luaS_ptr_eq(s, thread_attr)) { + } else if (lua_key_eq(s, thread_attr)) { tokenlist_to_luastring(L, pdf_thread_attr(n)); } else { lua_pushnil(L); } } else if (t == open_node) { - if (luaS_ptr_eq(s, stream)) { + if (lua_key_eq(s, stream)) { lua_pushnumber(L, write_stream(n)); - } else if (luaS_ptr_eq(s, name)) { + } else if (lua_key_eq(s, name)) { nodelib_pushstring(L, open_name(n)); - } else if (luaS_ptr_eq(s, area)) { + } else if (lua_key_eq(s, area)) { nodelib_pushstring(L, open_area(n)); - } else if (luaS_ptr_eq(s, ext)) { + } else if (lua_key_eq(s, ext)) { nodelib_pushstring(L, open_ext(n)); } else { lua_pushnil(L); } } else if (t == close_node) { - if (luaS_ptr_eq(s, stream)) { + if (lua_key_eq(s, stream)) { lua_pushnumber(L, write_stream(n)); } else { lua_pushnil(L); @@ -3768,136 +3491,136 @@ static int lua_nodelib_direct_getfield(lua_State * L) s = lua_tostring(L, 2); - if (luaS_ptr_eq(s, id)) { + if (lua_key_eq(s, id)) { lua_pushnumber(L, t); - } else if (luaS_ptr_eq(s, next)) { + } else if (lua_key_eq(s, next)) { nodelib_pushdirect_or_nil(vlink(n)); - } else if (luaS_ptr_eq(s, prev)) { + } else if (lua_key_eq(s, prev)) { nodelib_pushdirect_or_nil(alink(n)); - } else if (luaS_ptr_eq(s, attr)) { + } else if (lua_key_eq(s, attr)) { if (! nodetype_has_attributes(t)) { lua_pushnil(L); } else { nodelib_pushattr(L, node_attr(n)); } - } else if (luaS_ptr_eq(s, subtype)) { + } else if (lua_key_eq(s, subtype)) { if (t == glue_spec_node) { lua_pushnumber(L, 0); /* dummy, the only one */ } else { lua_pushnumber(L, subtype(n)); } } else if (t == glyph_node) { - if (luaS_ptr_eq(s, font)) { + if (lua_key_eq(s, font)) { lua_pushnumber(L, font(n)); - } else if (luaS_ptr_eq(s, char)) { + } else if (lua_key_eq(s, char)) { lua_pushnumber(L, character(n)); - } else if (luaS_ptr_eq(s, xoffset)) { + } else if (lua_key_eq(s, xoffset)) { lua_pushnumber(L, x_displace(n)); - } else if (luaS_ptr_eq(s, yoffset)) { + } else if (lua_key_eq(s, yoffset)) { lua_pushnumber(L, y_displace(n)); - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { lua_pushnumber(L, char_width(font(n),character(n))); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { lua_pushnumber(L, char_height(font(n),character(n))); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { lua_pushnumber(L, char_depth(font(n),character(n))); - } else if (luaS_ptr_eq(s, expansion_factor)) { + } else if (lua_key_eq(s, expansion_factor)) { lua_pushnumber(L, ex_glyph(n)); - } else if (luaS_ptr_eq(s, components)) { + } else if (lua_key_eq(s, components)) { nodelib_pushdirect_or_nil(lig_ptr(n)); - } else if (luaS_ptr_eq(s, lang)) { + } else if (lua_key_eq(s, lang)) { lua_pushnumber(L, char_lang(n)); - } else if (luaS_ptr_eq(s, left)) { + } else if (lua_key_eq(s, left)) { lua_pushnumber(L, char_lhmin(n)); - } else if (luaS_ptr_eq(s, right)) { + } else if (lua_key_eq(s, right)) { lua_pushnumber(L, char_rhmin(n)); - } else if (luaS_ptr_eq(s, uchyph)) { + } else if (lua_key_eq(s, uchyph)) { lua_pushnumber(L, char_uchyph(n)); } else { lua_pushnil(L); } } else if ((t == hlist_node) || (t == vlist_node)) { /* candidates: whd (width,height,depth) */ - if (luaS_ptr_eq(s, list) || luaS_ptr_eq(s, head)) { + if (lua_key_eq(s, list) || lua_key_eq(s, head)) { nodelib_pushdirect_or_nil_alink(list_ptr(n)); - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { lua_pushnumber(L, height(n)); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { lua_pushnumber(L, depth(n)); - } else if (luaS_ptr_eq(s, dir)) { + } else if (lua_key_eq(s, dir)) { nodelib_pushdir(L, box_dir(n), false); - } else if (luaS_ptr_eq(s, shift)) { + } else if (lua_key_eq(s, shift)) { lua_pushnumber(L, shift_amount(n)); - } else if (luaS_ptr_eq(s, glue_order)) { + } else if (lua_key_eq(s, glue_order)) { lua_pushnumber(L, glue_order(n)); - } else if (luaS_ptr_eq(s, glue_sign)) { + } else if (lua_key_eq(s, glue_sign)) { lua_pushnumber(L, glue_sign(n)); - } else if (luaS_ptr_eq(s, glue_set)) { + } else if (lua_key_eq(s, glue_set)) { lua_pushnumber(L, (double) glue_set(n)); } else { lua_pushnil(L); } } else if (t == disc_node) { - if (luaS_ptr_eq(s, pre)) { + if (lua_key_eq(s, pre)) { nodelib_pushdirect_or_nil(vlink(pre_break(n))); - } else if (luaS_ptr_eq(s, post)) { + } else if (lua_key_eq(s, post)) { nodelib_pushdirect_or_nil(vlink(post_break(n))); - } else if (luaS_ptr_eq(s, replace)) { + } else if (lua_key_eq(s, replace)) { nodelib_pushdirect_or_nil(vlink(no_break(n))); } else { lua_pushnil(L); } } else if (t == glue_node) { - if (luaS_ptr_eq(s, spec)) { + if (lua_key_eq(s, spec)) { nodelib_pushdirect(glue_ptr(n)); - } else if (luaS_ptr_eq(s, leader)) { + } else if (lua_key_eq(s, leader)) { nodelib_pushdirect_or_nil(leader_ptr(n)); } else { lua_pushnil(L); } } else if (t == glue_spec_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, stretch)) { + } else if (lua_key_eq(s, stretch)) { lua_pushnumber(L, stretch(n)); - } else if (luaS_ptr_eq(s, shrink)) { + } else if (lua_key_eq(s, shrink)) { lua_pushnumber(L, shrink(n)); - } else if (luaS_ptr_eq(s, stretch_order)) { + } else if (lua_key_eq(s, stretch_order)) { lua_pushnumber(L, stretch_order(n)); - } else if (luaS_ptr_eq(s, shrink_order)) { + } else if (lua_key_eq(s, shrink_order)) { lua_pushnumber(L, shrink_order(n)); - } else if (luaS_ptr_eq(s, ref_count)) { + } else if (lua_key_eq(s, ref_count)) { lua_pushnumber(L, glue_ref_count(n)); - } else if (luaS_ptr_eq(s, writable)) { + } else if (lua_key_eq(s, writable)) { lua_pushboolean(L, valid_node(n)); } else { lua_pushnil(L); } } else if (t == kern_node) { - if (luaS_ptr_eq(s, kern)) { + if (lua_key_eq(s, kern)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, expansion_factor)) { + } else if (lua_key_eq(s, expansion_factor)) { lua_pushnumber(L, ex_kern(n)); } else { lua_pushnil(L); } } else if (t == penalty_node) { - if (luaS_ptr_eq(s, penalty)) { + if (lua_key_eq(s, penalty)) { lua_pushnumber(L, penalty(n)); } else { lua_pushnil(L); } } else if (t == rule_node) { /* candidates: whd (width,height,depth) */ - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { lua_pushnumber(L, height(n)); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { lua_pushnumber(L, depth(n)); - } else if (luaS_ptr_eq(s, dir)) { + } else if (lua_key_eq(s, dir)) { nodelib_pushdir(L, rule_dir(n), false); } else { lua_pushnil(L); @@ -3905,219 +3628,219 @@ static int lua_nodelib_direct_getfield(lua_State * L) } else if (t == whatsit_node) { lua_nodelib_direct_getfield_whatsit(L, n, s); } else if (t == simple_noad) { - if (luaS_ptr_eq(s, nucleus)) { + if (lua_key_eq(s, nucleus)) { nodelib_pushdirect_or_nil(nucleus(n)); - } else if (luaS_ptr_eq(s, sub)) { + } else if (lua_key_eq(s, sub)) { nodelib_pushdirect_or_nil(subscr(n)); - } else if (luaS_ptr_eq(s, sup)) { + } else if (lua_key_eq(s, sup)) { nodelib_pushdirect_or_nil(supscr(n)); } else { lua_pushnil(L); } } else if ((t == math_char_node) || (t == math_text_char_node)) { - if (luaS_ptr_eq(s, fam)) { + if (lua_key_eq(s, fam)) { lua_pushnumber(L, math_fam(n)); - } else if (luaS_ptr_eq(s, char)) { + } else if (lua_key_eq(s, char)) { lua_pushnumber(L, math_character(n)); } else { lua_pushnil(L); } } else if (t == mark_node) { - if (luaS_ptr_eq(s, class)) { + if (lua_key_eq(s, class)) { lua_pushnumber(L, mark_class(n)); - } else if (luaS_ptr_eq(s, mark)) { + } else if (lua_key_eq(s, mark)) { tokenlist_to_lua(L, mark_ptr(n)); } else { lua_pushnil(L); } } else if (t == ins_node) { - if (luaS_ptr_eq(s, cost)) { + if (lua_key_eq(s, cost)) { lua_pushnumber(L, float_cost(n)); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { lua_pushnumber(L, depth(n)); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { lua_pushnumber(L, height(n)); - } else if (luaS_ptr_eq(s, spec)) { + } else if (lua_key_eq(s, spec)) { nodelib_pushdirect_or_nil(split_top_ptr(n)); - } else if ((luaS_ptr_eq(s, list)) || (luaS_ptr_eq(s, head))) { + } else if ((lua_key_eq(s, list)) || (lua_key_eq(s, head))) { nodelib_pushdirect_or_nil_alink(ins_ptr(n)); } else { lua_pushnil(L); } } else if (t == math_node) { - if (luaS_ptr_eq(s, surround)) { + if (lua_key_eq(s, surround)) { lua_pushnumber(L, surround(n)); } else { lua_pushnil(L); } } else if (t == fraction_noad) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { lua_pushnumber(L, thickness(n)); - } else if (luaS_ptr_eq(s, num)) { + } else if (lua_key_eq(s, num)) { nodelib_pushdirect_or_nil(numerator(n)); - } else if (luaS_ptr_eq(s, denom)) { + } else if (lua_key_eq(s, denom)) { nodelib_pushdirect_or_nil(denominator(n)); - } else if (luaS_ptr_eq(s, left)) { + } else if (lua_key_eq(s, left)) { nodelib_pushdirect_or_nil(left_delimiter(n)); - } else if (luaS_ptr_eq(s, right)) { + } else if (lua_key_eq(s, right)) { nodelib_pushdirect_or_nil(right_delimiter(n)); } else { lua_pushnil(L); } } else if (t == style_node) { - if (luaS_ptr_eq(s, style)) { + if (lua_key_eq(s, style)) { lua_pushstring(L, math_style_names[subtype(n)]); } else { lua_pushnil(L); } } else if (t == accent_noad) { - if (luaS_ptr_eq(s, nucleus)) { + if (lua_key_eq(s, nucleus)) { nodelib_pushdirect_or_nil(nucleus(n)); - } else if (luaS_ptr_eq(s, sub)) { + } else if (lua_key_eq(s, sub)) { nodelib_pushdirect_or_nil(subscr(n)); - } else if (luaS_ptr_eq(s, sup)) { + } else if (lua_key_eq(s, sup)) { nodelib_pushdirect_or_nil(supscr(n)); - } else if (luaS_ptr_eq(s, accent)) { + } else if (lua_key_eq(s, accent)) { nodelib_pushdirect_or_nil(accent_chr(n)); - } else if (luaS_ptr_eq(s, bot_accent)) { + } else if (lua_key_eq(s, bot_accent)) { nodelib_pushdirect_or_nil(bot_accent_chr(n)); } else { lua_pushnil(L); } } else if (t == fence_noad) { - if (luaS_ptr_eq(s, delim)) { + if (lua_key_eq(s, delim)) { nodelib_pushdirect_or_nil(delimiter(n)); } else { lua_pushnil(L); } } else if (t == delim_node) { - if (luaS_ptr_eq(s, small_fam)) { + if (lua_key_eq(s, small_fam)) { lua_pushnumber(L, small_fam(n)); - } else if (luaS_ptr_eq(s, small_char)) { + } else if (lua_key_eq(s, small_char)) { lua_pushnumber(L, small_char(n)); - } else if (luaS_ptr_eq(s, large_fam)) { + } else if (lua_key_eq(s, large_fam)) { lua_pushnumber(L, large_fam(n)); - } else if (luaS_ptr_eq(s, large_char)) { + } else if (lua_key_eq(s, large_char)) { lua_pushnumber(L, large_char(n)); } else { lua_pushnil(L); } } else if ((t == sub_box_node) || (t == sub_mlist_node)) { - if ((luaS_ptr_eq(s, list)) || (luaS_ptr_eq(s, head))){ + if ((lua_key_eq(s, list)) || (lua_key_eq(s, head))){ nodelib_pushdirect_or_nil_alink(math_list(n)); } else { lua_pushnil(L); } } else if (t == radical_noad) { - if (luaS_ptr_eq(s, nucleus)) { + if (lua_key_eq(s, nucleus)) { nodelib_pushdirect_or_nil(nucleus(n)); - } else if (luaS_ptr_eq(s, sub)) { + } else if (lua_key_eq(s, sub)) { nodelib_pushdirect_or_nil(subscr(n)); - } else if (luaS_ptr_eq(s, sup)) { + } else if (lua_key_eq(s, sup)) { nodelib_pushdirect_or_nil(supscr(n)); - } else if (luaS_ptr_eq(s, left)) { + } else if (lua_key_eq(s, left)) { nodelib_pushdirect_or_nil(left_delimiter(n)); - } else if (luaS_ptr_eq(s, degree)) { + } else if (lua_key_eq(s, degree)) { nodelib_pushdirect_or_nil(degree(n)); } else { lua_pushnil(L); } } else if (t == margin_kern_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, glyph)) { + } else if (lua_key_eq(s, glyph)) { nodelib_pushdirect_or_nil(margin_char(n)); } else { lua_pushnil(L); } } else if (t == split_up_node) { - if (luaS_ptr_eq(s, last_ins_ptr)) { + if (lua_key_eq(s, last_ins_ptr)) { nodelib_pushdirect_or_nil(last_ins_ptr(n)); - } else if (luaS_ptr_eq(s, best_ins_ptr)) { + } else if (lua_key_eq(s, best_ins_ptr)) { nodelib_pushdirect_or_nil(best_ins_ptr(n)); - } else if (luaS_ptr_eq(s, broken_ptr)) { + } else if (lua_key_eq(s, broken_ptr)) { nodelib_pushdirect_or_nil(broken_ptr(n)); - } else if (luaS_ptr_eq(s, broken_ins)) { + } else if (lua_key_eq(s, broken_ins)) { nodelib_pushdirect_or_nil(broken_ins(n)); } else { lua_pushnil(L); } } else if (t == choice_node) { - if (luaS_ptr_eq(s, display)) { + if (lua_key_eq(s, display)) { nodelib_pushdirect_or_nil(display_mlist(n)); - } else if (luaS_ptr_eq(s, text)) { + } else if (lua_key_eq(s, text)) { nodelib_pushdirect_or_nil(text_mlist(n)); - } else if (luaS_ptr_eq(s, script)) { + } else if (lua_key_eq(s, script)) { nodelib_pushdirect_or_nil(script_mlist(n)); - } else if (luaS_ptr_eq(s, scriptscript)) { + } else if (lua_key_eq(s, scriptscript)) { nodelib_pushdirect_or_nil(script_script_mlist(n)); } else { lua_pushnil(L); } } else if (t == inserting_node) { - if (luaS_ptr_eq(s, last_ins_ptr)) { + if (lua_key_eq(s, last_ins_ptr)) { nodelib_pushdirect_or_nil(last_ins_ptr(n)); - } else if (luaS_ptr_eq(s, best_ins_ptr)) { + } else if (lua_key_eq(s, best_ins_ptr)) { nodelib_pushdirect_or_nil(best_ins_ptr(n)); } else { lua_pushnil(L); } } else if (t == attribute_node) { - if (luaS_ptr_eq(s, number)) { + if (lua_key_eq(s, number)) { lua_pushnumber(L, attribute_id(n)); - } else if (luaS_ptr_eq(s, value)) { + } else if (lua_key_eq(s, value)) { lua_pushnumber(L, attribute_value(n)); } else { lua_pushnil(L); } } else if (t == adjust_node) { - if ((luaS_ptr_eq(s, list)) || (luaS_ptr_eq(s, head))) { + if ((lua_key_eq(s, list)) || (lua_key_eq(s, head))) { nodelib_pushdirect_or_nil_alink(adjust_ptr(n)); } else { lua_pushnil(L); } } else if (t == action_node) { - if (luaS_ptr_eq(s, action_type)) { + if (lua_key_eq(s, action_type)) { lua_pushnumber(L, pdf_action_type(n)); - } else if (luaS_ptr_eq(s, named_id)) { + } else if (lua_key_eq(s, named_id)) { lua_pushnumber(L, pdf_action_named_id(n)); - } else if (luaS_ptr_eq(s, action_id)) { + } else if (lua_key_eq(s, action_id)) { if (pdf_action_named_id(n) == 1) { tokenlist_to_luastring(L, pdf_action_id(n)); } else { lua_pushnumber(L, pdf_action_id(n)); } - } else if (luaS_ptr_eq(s, file)) { + } else if (lua_key_eq(s, file)) { tokenlist_to_luastring(L, pdf_action_file(n)); - } else if (luaS_ptr_eq(s, new_window)) { + } else if (lua_key_eq(s, new_window)) { lua_pushnumber(L, pdf_action_new_window(n)); - } else if (luaS_ptr_eq(s, data)) { + } else if (lua_key_eq(s, data)) { tokenlist_to_luastring(L, pdf_action_tokens(n)); - } else if (luaS_ptr_eq(s, ref_count)) { + } else if (lua_key_eq(s, ref_count)) { lua_pushnumber(L, pdf_action_refcount(n)); } else { lua_pushnil(L); } } else if (t == unset_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { lua_pushnumber(L, width(n)); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { lua_pushnumber(L, height(n)); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { lua_pushnumber(L, depth(n)); - } else if (luaS_ptr_eq(s, dir)) { + } else if (lua_key_eq(s, dir)) { nodelib_pushdir(L, box_dir(n), false); - } else if (luaS_ptr_eq(s, shrink)) { + } else if (lua_key_eq(s, shrink)) { lua_pushnumber(L, glue_shrink(n)); - } else if (luaS_ptr_eq(s, glue_order)) { + } else if (lua_key_eq(s, glue_order)) { lua_pushnumber(L, glue_order(n)); - } else if (luaS_ptr_eq(s, glue_sign)) { + } else if (lua_key_eq(s, glue_sign)) { lua_pushnumber(L, glue_sign(n)); - } else if (luaS_ptr_eq(s, stretch)) { + } else if (lua_key_eq(s, stretch)) { lua_pushnumber(L, glue_stretch(n)); - } else if (luaS_ptr_eq(s, count)) { + } else if (lua_key_eq(s, count)) { lua_pushnumber(L, span_count(n)); - } else if ((luaS_ptr_eq(s, list)) || (luaS_ptr_eq(s, head))){ + } else if ((lua_key_eq(s, list)) || (lua_key_eq(s, head))){ nodelib_pushdirect_or_nil_alink(list_ptr(n)); } else { lua_pushnil(L); @@ -4444,7 +4167,7 @@ static int lua_nodelib_direct_has_glyph(lua_State * L) static int lua_nodelib_first_character(lua_State * L) { - pdftex_warn("node.first_character() is deprecated, please update to node.first_glyph()"); + luatex_warn("node.first_character() is deprecated, please update to node.first_glyph()"); return lua_nodelib_first_glyph(L); } @@ -4569,7 +4292,7 @@ static int lua_nodelib_currentattr(lua_State * L) return 1; } else { /* assign */ - pdftex_warn("Assignment via node.current_attr(<list>) is not supported (yet)"); + luatex_warn("Assignment via node.current_attr(<list>) is not supported (yet)"); return 0; } } @@ -4600,7 +4323,7 @@ static int lua_nodelib_direct_todirect(lua_State * L) { if (lua_type(L,1) != LUA_TNUMBER) { /* assume node, no further testing, used in known situations */ - void *n ; + void *n ; n = lua_touserdata(L, 1); if (n == null) { lua_pushnil(L); @@ -4636,21 +4359,21 @@ static int lua_nodelib_setfield_whatsit(lua_State * L, int n, const char *s) t = subtype(n); if (t == dir_node) { - if (luaS_ptr_eq(s, dir)) { + if (lua_key_eq(s, dir)) { dir_dir(n) = nodelib_getdir(L, 3, 0); - } else if (luaS_ptr_eq(s, level)) { + } else if (lua_key_eq(s, level)) { dir_level(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, dvi_ptr)) { + } else if (lua_key_eq(s, dvi_ptr)) { dir_dvi_ptr(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, dir_h)) { + } else if (lua_key_eq(s, dir_h)) { dir_dvi_h(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == pdf_literal_node) { - if (luaS_ptr_eq(s, mode)) { + if (lua_key_eq(s, mode)) { pdf_literal_mode(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, data)) { + } else if (lua_key_eq(s, data)) { if (ini_version) { pdf_literal_data(n) = nodelib_gettoks(L, 3); } else { @@ -4662,12 +4385,12 @@ static int lua_nodelib_setfield_whatsit(lua_State * L, int n, const char *s) return nodelib_cantset(L, n, s); } } else if (t == late_lua_node) { - if (luaS_ptr_eq(s, data)) { + if (lua_key_eq(s, data)) { late_lua_data(n) = nodelib_gettoks(L, 3); late_lua_type(n) = normal; - } else if (luaS_ptr_eq(s, name)) { + } else if (lua_key_eq(s, name)) { late_lua_name(n) = nodelib_gettoks(L, 3); - } else if (luaS_ptr_eq(s, string)) { + } else if (lua_key_eq(s, string)) { if (ini_version) { late_lua_data(n) = nodelib_gettoks(L, 3); late_lua_type(n) = normal; @@ -4680,11 +4403,11 @@ static int lua_nodelib_setfield_whatsit(lua_State * L, int n, const char *s) return nodelib_cantset(L, n, s); } } else if (t == user_defined_node) { - if (luaS_ptr_eq(s, user_id)) { + if (lua_key_eq(s, user_id)) { user_node_id(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, type)) { + } else if (lua_key_eq(s, type)) { user_node_type(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, value)) { + } else if (lua_key_eq(s, value)) { switch (user_node_type(n)) { case 'a': user_node_value(n) = nodelib_getlist(L, 3); @@ -4709,173 +4432,173 @@ static int lua_nodelib_setfield_whatsit(lua_State * L, int n, const char *s) return nodelib_cantset(L, n, s); } } else if (t == pdf_annot_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { depth(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { height(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, objnum)) { + } else if (lua_key_eq(s, objnum)) { pdf_annot_objnum(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, data)) { + } else if (lua_key_eq(s, data)) { pdf_annot_data(n) = nodelib_gettoks(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == pdf_dest_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { depth(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { height(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, named_id)) { + } else if (lua_key_eq(s, named_id)) { pdf_dest_named_id(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, dest_id)) { + } else if (lua_key_eq(s, dest_id)) { if (pdf_dest_named_id(n) == 1) { pdf_dest_id(n) = nodelib_gettoks(L, 3); } else { pdf_dest_id(n) = (halfword) lua_tointeger(L, 3); } - } else if (luaS_ptr_eq(s, dest_type)) { + } else if (lua_key_eq(s, dest_type)) { pdf_dest_type(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, xyz_zoom)) { + } else if (lua_key_eq(s, xyz_zoom)) { pdf_dest_xyz_zoom(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, objnum)) { + } else if (lua_key_eq(s, objnum)) { pdf_dest_objnum(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == pdf_setmatrix_node) { - if (luaS_ptr_eq(s, data)) { + if (lua_key_eq(s, data)) { pdf_setmatrix_data(n) = nodelib_gettoks(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == pdf_refobj_node) { - if (luaS_ptr_eq(s, objnum)) { + if (lua_key_eq(s, objnum)) { pdf_obj_objnum(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == pdf_refxform_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { depth(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { height(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, objnum)) { + } else if (lua_key_eq(s, objnum)) { pdf_xform_objnum(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == pdf_refximage_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { depth(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { height(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, transform)) { + } else if (lua_key_eq(s, transform)) { pdf_ximage_transform(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, index)) { + } else if (lua_key_eq(s, index)) { pdf_ximage_index(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == local_par_node) { - if (luaS_ptr_eq(s, pen_inter)) { + if (lua_key_eq(s, pen_inter)) { local_pen_inter(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, pen_broken)) { + } else if (lua_key_eq(s, pen_broken)) { local_pen_broken(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, dir)) { + } else if (lua_key_eq(s, dir)) { local_par_dir(n) = nodelib_getdir(L, 3, 1); - } else if (luaS_ptr_eq(s, box_left)) { + } else if (lua_key_eq(s, box_left)) { local_box_left(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, box_left_width)) { + } else if (lua_key_eq(s, box_left_width)) { local_box_left_width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, box_right)) { + } else if (lua_key_eq(s, box_right)) { local_box_right(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, box_right_width)) { + } else if (lua_key_eq(s, box_right_width)) { local_box_right_width(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == pdf_start_link_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { depth(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { height(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, objnum)) { + } else if (lua_key_eq(s, objnum)) { pdf_link_objnum(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, link_attr)) { + } else if (lua_key_eq(s, link_attr)) { pdf_link_attr(n) = nodelib_gettoks(L, 3); - } else if (luaS_ptr_eq(s, action)) { + } else if (lua_key_eq(s, action)) { pdf_link_action(n) = nodelib_getaction(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == write_node) { - if (luaS_ptr_eq(s, stream)) { + if (lua_key_eq(s, stream)) { write_stream(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, data)) { + } else if (lua_key_eq(s, data)) { write_tokens(n) = nodelib_gettoks(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == pdf_colorstack_node) { - if (luaS_ptr_eq(s, stack)) { + if (lua_key_eq(s, stack)) { pdf_colorstack_stack(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, command)) { + } else if (lua_key_eq(s, command)) { pdf_colorstack_cmd(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, data)) { + } else if (lua_key_eq(s, data)) { pdf_colorstack_data(n) = nodelib_gettoks(L, 3); } else { return nodelib_cantset(L, n, s); } } else if ((t == pdf_thread_node) || (t == pdf_start_thread_node)) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { depth(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { height(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, named_id)) { + } else if (lua_key_eq(s, named_id)) { pdf_thread_named_id(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, thread_id)) { + } else if (lua_key_eq(s, thread_id)) { if (pdf_thread_named_id(n) == 1) { pdf_thread_id(n) = nodelib_gettoks(L, 3); } else { pdf_thread_id(n) = (halfword) lua_tointeger(L, 3); } - } else if (luaS_ptr_eq(s, thread_attr)) { + } else if (lua_key_eq(s, thread_attr)) { pdf_thread_attr(n) = nodelib_gettoks(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == special_node) { - if (luaS_ptr_eq(s, data)) { + if (lua_key_eq(s, data)) { write_tokens(n) = nodelib_gettoks(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == open_node) { - if (luaS_ptr_eq(s, stream)) { + if (lua_key_eq(s, stream)) { write_stream(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, name)) { + } else if (lua_key_eq(s, name)) { open_name(n) = nodelib_getstring(L, 3); - } else if (luaS_ptr_eq(s, area)) { + } else if (lua_key_eq(s, area)) { open_area(n) = nodelib_getstring(L, 3); - } else if (luaS_ptr_eq(s, ext)) { + } else if (lua_key_eq(s, ext)) { open_ext(n) = nodelib_getstring(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == close_node) { - if (luaS_ptr_eq(s, stream)) { + if (lua_key_eq(s, stream)) { write_stream(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); @@ -4918,422 +4641,422 @@ static int lua_nodelib_fast_setfield(lua_State * L) s = lua_tostring(L, 2); - if (luaS_ptr_eq(s, id)) { + if (lua_key_eq(s, id)) { lua_pushnumber(L, t); - } else if (luaS_ptr_eq(s, next)) { + } else if (lua_key_eq(s, next)) { halfword x = nodelib_getlist(L, 3); if (x>0 && type(x) == glue_spec_node) { return luaL_error(L, "You can't assign a %s node to a next field\n", node_data[type(x)].name); } vlink(n) = x; - } else if (luaS_ptr_eq(s, prev)) { + } else if (lua_key_eq(s, prev)) { halfword x = nodelib_getlist(L, 3); if (x>0 && type(x) == glue_spec_node) { return luaL_error(L, "You can't assign a %s node to a prev field\n", node_data[type(x)].name); } alink(n) = x; - } else if (luaS_ptr_eq(s, attr)) { + } else if (lua_key_eq(s, attr)) { if (nodetype_has_attributes(type(n))) { nodelib_setattr(L, 3, n); } } else if (t == glyph_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, font)) { + } else if (lua_key_eq(s, font)) { font(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, char)) { + } else if (lua_key_eq(s, char)) { character(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, xoffset)) { + } else if (lua_key_eq(s, xoffset)) { x_displace(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, yoffset)) { + } else if (lua_key_eq(s, yoffset)) { y_displace(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { /* not yet */ - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { /* not yet */ - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { /* not yet */ - } else if (luaS_ptr_eq(s, expansion_factor)) { + } else if (lua_key_eq(s, expansion_factor)) { ex_glyph(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, components)) { + } else if (lua_key_eq(s, components)) { lig_ptr(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, lang)) { + } else if (lua_key_eq(s, lang)) { set_char_lang(n, (halfword) lua_tointeger(L, 3)); - } else if (luaS_ptr_eq(s, left)) { + } else if (lua_key_eq(s, left)) { set_char_lhmin(n, (halfword) lua_tointeger(L, 3)); - } else if (luaS_ptr_eq(s, right)) { + } else if (lua_key_eq(s, right)) { set_char_rhmin(n, (halfword) lua_tointeger(L, 3)); - } else if (luaS_ptr_eq(s, uchyph)) { + } else if (lua_key_eq(s, uchyph)) { set_char_uchyph(n, (halfword) lua_tointeger(L, 3)); } else { return nodelib_cantset(L, n, s); } } else if ((t == hlist_node) || (t == vlist_node)) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, list) || luaS_ptr_eq(s, head)) { + } else if (lua_key_eq(s, list) || lua_key_eq(s, head)) { list_ptr(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { height(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { depth(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, dir)) { + } else if (lua_key_eq(s, dir)) { box_dir(n) = nodelib_getdir(L, 3, 1); - } else if (luaS_ptr_eq(s, shift)) { + } else if (lua_key_eq(s, shift)) { shift_amount(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, glue_order)) { + } else if (lua_key_eq(s, glue_order)) { glue_order(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, glue_sign)) { + } else if (lua_key_eq(s, glue_sign)) { glue_sign(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, glue_set)) { + } else if (lua_key_eq(s, glue_set)) { glue_set(n) = (glue_ratio) lua_tonumber(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == disc_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, pre)) { + } else if (lua_key_eq(s, pre)) { set_disc_field(pre_break(n), nodelib_getlist(L, 3)); - } else if (luaS_ptr_eq(s, post)) { + } else if (lua_key_eq(s, post)) { set_disc_field(post_break(n), nodelib_getlist(L, 3)); - } else if (luaS_ptr_eq(s, replace)) { + } else if (lua_key_eq(s, replace)) { set_disc_field(no_break(n), nodelib_getlist(L, 3)); } else { return nodelib_cantset(L, n, s); } } else if (t == glue_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, spec)) { + } else if (lua_key_eq(s, spec)) { glue_ptr(n) = nodelib_getspec(L, 3); - } else if (luaS_ptr_eq(s, leader)) { + } else if (lua_key_eq(s, leader)) { leader_ptr(n) = nodelib_getlist(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == glue_spec_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); /* dummy, the only one that prevents move up */ - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, stretch)) { + } else if (lua_key_eq(s, stretch)) { stretch(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, shrink)) { + } else if (lua_key_eq(s, shrink)) { shrink(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, stretch_order)) { + } else if (lua_key_eq(s, stretch_order)) { stretch_order(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, shrink_order)) { + } else if (lua_key_eq(s, shrink_order)) { lua_pushnumber(L, shrink_order(n)); - /* } else if (luaS_ptr_eq(s, ref_count)) { + /* } else if (lua_key_eq(s, ref_count)) { glue_ref_count(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, writable)) { + } else if (lua_key_eq(s, writable)) { */ /* can't be set */ } else { return nodelib_cantset(L, n, s); } } else if (t == kern_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, kern)) { + } else if (lua_key_eq(s, kern)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, expansion_factor)) { + } else if (lua_key_eq(s, expansion_factor)) { ex_kern(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == penalty_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { /* dummy subtype */ - } else if (luaS_ptr_eq(s, penalty)) { + } else if (lua_key_eq(s, penalty)) { penalty(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == rule_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { height(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { depth(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, dir)) { + } else if (lua_key_eq(s, dir)) { rule_dir(n) = nodelib_getdir(L, 3, 1); } else { return nodelib_cantset(L, n, s); } } else if (t == whatsit_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); } else { lua_nodelib_setfield_whatsit(L, n, s); } } else if (t == simple_noad) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, nucleus)) { + } else if (lua_key_eq(s, nucleus)) { nucleus(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, sub)) { + } else if (lua_key_eq(s, sub)) { subscr(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, sup)) { + } else if (lua_key_eq(s, sup)) { supscr(n) = nodelib_getlist(L, 3); } else { return nodelib_cantset(L, n, s); } } else if ((t == math_char_node) || (t == math_text_char_node)) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, fam)) { + } else if (lua_key_eq(s, fam)) { math_fam(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, char)) { + } else if (lua_key_eq(s, char)) { math_character(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == mark_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, class)) { + } else if (lua_key_eq(s, class)) { mark_class(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, mark)) { + } else if (lua_key_eq(s, mark)) { mark_ptr(n) = nodelib_gettoks(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == ins_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, cost)) { + } else if (lua_key_eq(s, cost)) { float_cost(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { depth(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { height(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, spec)) { + } else if (lua_key_eq(s, spec)) { split_top_ptr(n) = nodelib_getspec(L, 3); - } else if ((luaS_ptr_eq(s, list)) || (luaS_ptr_eq(s, head))) { + } else if ((lua_key_eq(s, list)) || (lua_key_eq(s, head))) { ins_ptr(n) = nodelib_getlist(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == math_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, surround)) { + } else if (lua_key_eq(s, surround)) { surround(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == fraction_noad) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { thickness(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, num)) { + } else if (lua_key_eq(s, num)) { numerator(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, denom)) { + } else if (lua_key_eq(s, denom)) { denominator(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, left)) { + } else if (lua_key_eq(s, left)) { left_delimiter(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, right)) { + } else if (lua_key_eq(s, right)) { right_delimiter(n) = nodelib_getlist(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == style_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { /* dummy subtype */ - } else if (luaS_ptr_eq(s, style)) { + } else if (lua_key_eq(s, style)) { lua_pushstring(L, math_style_names[subtype(n)]); } else { /* return nodelib_cantset(L, n, s); */ subtype(n) = (quarterword) luaL_checkoption(L, 3, "text", math_style_names); /* not 2? */ } } else if (t == accent_noad) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, nucleus)) { + } else if (lua_key_eq(s, nucleus)) { nucleus(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, sub)) { + } else if (lua_key_eq(s, sub)) { subscr(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, sup)) { + } else if (lua_key_eq(s, sup)) { supscr(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, accent)) { + } else if (lua_key_eq(s, accent)) { accent_chr(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, bot_accent)) { + } else if (lua_key_eq(s, bot_accent)) { bot_accent_chr(n) = nodelib_getlist(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == fence_noad) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, delim)) { + } else if (lua_key_eq(s, delim)) { delimiter(n) = nodelib_getlist(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == delim_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, small_fam)) { + } else if (lua_key_eq(s, small_fam)) { small_fam(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, small_char)) { + } else if (lua_key_eq(s, small_char)) { small_char(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, large_fam)) { + } else if (lua_key_eq(s, large_fam)) { large_fam(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, large_char)) { + } else if (lua_key_eq(s, large_char)) { large_char(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if ((t == sub_box_node) || (t == sub_mlist_node)) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if ((luaS_ptr_eq(s, list)) || (luaS_ptr_eq(s, head))){ + } else if ((lua_key_eq(s, list)) || (lua_key_eq(s, head))){ math_list(n) = nodelib_getlist(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == radical_noad) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, nucleus)) { + } else if (lua_key_eq(s, nucleus)) { nucleus(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, sub)) { + } else if (lua_key_eq(s, sub)) { subscr(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, sup)) { + } else if (lua_key_eq(s, sup)) { supscr(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, left)) { + } else if (lua_key_eq(s, left)) { left_delimiter(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, degree)) { + } else if (lua_key_eq(s, degree)) { degree(n) = nodelib_getlist(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == margin_kern_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, glyph)) { + } else if (lua_key_eq(s, glyph)) { margin_char(n) = nodelib_getlist(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == split_up_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, last_ins_ptr)) { + } else if (lua_key_eq(s, last_ins_ptr)) { last_ins_ptr(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, best_ins_ptr)) { + } else if (lua_key_eq(s, best_ins_ptr)) { best_ins_ptr(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, broken_ptr)) { + } else if (lua_key_eq(s, broken_ptr)) { broken_ptr(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, broken_ins)) { + } else if (lua_key_eq(s, broken_ins)) { broken_ins(n) = nodelib_getlist(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == choice_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, display)) { + } else if (lua_key_eq(s, display)) { display_mlist(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, text)) { + } else if (lua_key_eq(s, text)) { text_mlist(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, script)) { + } else if (lua_key_eq(s, script)) { script_mlist(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, scriptscript)) { + } else if (lua_key_eq(s, scriptscript)) { script_script_mlist(n) = nodelib_getlist(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == inserting_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, last_ins_ptr)) { + } else if (lua_key_eq(s, last_ins_ptr)) { last_ins_ptr(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, best_ins_ptr)) { + } else if (lua_key_eq(s, best_ins_ptr)) { best_ins_ptr(n) = nodelib_getlist(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == attribute_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { /* dummy subtype */ - } else if (luaS_ptr_eq(s, number)) { + } else if (lua_key_eq(s, number)) { attribute_id(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, value)) { + } else if (lua_key_eq(s, value)) { attribute_value(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == adjust_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if ((luaS_ptr_eq(s, list)) || (luaS_ptr_eq(s, head))) { + } else if ((lua_key_eq(s, list)) || (lua_key_eq(s, head))) { adjust_ptr(n) = nodelib_getlist(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == action_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { /* dummy subtype */ - } else if (luaS_ptr_eq(s, action_type)) { + } else if (lua_key_eq(s, action_type)) { pdf_action_type(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, named_id)) { + } else if (lua_key_eq(s, named_id)) { pdf_action_named_id(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, action_id)) { + } else if (lua_key_eq(s, action_id)) { if (pdf_action_named_id(n) == 1) { pdf_action_id(n) = nodelib_gettoks(L, 3); } else { pdf_action_id(n) = (halfword) lua_tointeger(L, 3); } - } else if (luaS_ptr_eq(s, file)) { + } else if (lua_key_eq(s, file)) { pdf_action_file(n) = nodelib_gettoks(L, 3); - } else if (luaS_ptr_eq(s, new_window)) { + } else if (lua_key_eq(s, new_window)) { pdf_action_new_window(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, data)) { + } else if (lua_key_eq(s, data)) { pdf_action_tokens(n) = nodelib_gettoks(L, 3); - /* } else if (luaS_ptr_eq(s, ref_count)) { + /* } else if (lua_key_eq(s, ref_count)) { pdf_action_refcount(n) = (halfword) lua_tointeger(L, 3); */ } else { return nodelib_cantset(L, n, s); } } else if (t == unset_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { /* dummy subtype */ - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { height(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { depth(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, dir)) { + } else if (lua_key_eq(s, dir)) { box_dir(n) = nodelib_getdir(L, 3, 1); - } else if (luaS_ptr_eq(s, shrink)) { + } else if (lua_key_eq(s, shrink)) { glue_shrink(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, glue_order)) { + } else if (lua_key_eq(s, glue_order)) { glue_order(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, glue_sign)) { + } else if (lua_key_eq(s, glue_sign)) { glue_sign(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, stretch)) { + } else if (lua_key_eq(s, stretch)) { glue_stretch(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, count)) { + } else if (lua_key_eq(s, count)) { span_count(n) = (quarterword) lua_tointeger(L, 3); - } else if ((luaS_ptr_eq(s, list)) || (luaS_ptr_eq(s, head))){ + } else if ((lua_key_eq(s, list)) || (lua_key_eq(s, head))){ list_ptr(n) = nodelib_getlist(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == attribute_list_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { /* dummy subtype */ } else { return nodelib_cantset(L, n, s); @@ -5371,21 +5094,21 @@ static int lua_nodelib_direct_setfield_whatsit(lua_State * L, int n, const char t = subtype(n); if (t == dir_node) { - if (luaS_ptr_eq(s, dir)) { + if (lua_key_eq(s, dir)) { dir_dir(n) = nodelib_getdir(L, 3, 0); - } else if (luaS_ptr_eq(s, level)) { + } else if (lua_key_eq(s, level)) { dir_level(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, dvi_ptr)) { + } else if (lua_key_eq(s, dvi_ptr)) { dir_dvi_ptr(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, dir_h)) { + } else if (lua_key_eq(s, dir_h)) { dir_dvi_h(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == pdf_literal_node) { - if (luaS_ptr_eq(s, mode)) { + if (lua_key_eq(s, mode)) { pdf_literal_mode(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, data)) { + } else if (lua_key_eq(s, data)) { if (ini_version) { pdf_literal_data(n) = nodelib_gettoks(L, 3); } else { @@ -5397,12 +5120,12 @@ static int lua_nodelib_direct_setfield_whatsit(lua_State * L, int n, const char return nodelib_cantset(L, n, s); } } else if (t == late_lua_node) { - if (luaS_ptr_eq(s, data)) { + if (lua_key_eq(s, data)) { late_lua_data(n) = nodelib_gettoks(L, 3); late_lua_type(n) = normal; - } else if (luaS_ptr_eq(s, name)) { + } else if (lua_key_eq(s, name)) { late_lua_name(n) = nodelib_gettoks(L, 3); - } else if (luaS_ptr_eq(s, string)) { + } else if (lua_key_eq(s, string)) { if (ini_version) { late_lua_data(n) = nodelib_gettoks(L, 3); late_lua_type(n) = normal; @@ -5415,11 +5138,11 @@ static int lua_nodelib_direct_setfield_whatsit(lua_State * L, int n, const char return nodelib_cantset(L, n, s); } } else if (t == user_defined_node) { - if (luaS_ptr_eq(s, user_id)) { + if (lua_key_eq(s, user_id)) { user_node_id(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, type)) { + } else if (lua_key_eq(s, type)) { user_node_type(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, value)) { + } else if (lua_key_eq(s, value)) { switch (user_node_type(n)) { case 'a': user_node_value(n) = nodelib_getlist(L, 3); @@ -5444,173 +5167,173 @@ static int lua_nodelib_direct_setfield_whatsit(lua_State * L, int n, const char return nodelib_cantset(L, n, s); } } else if (t == pdf_annot_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { depth(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { height(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, objnum)) { + } else if (lua_key_eq(s, objnum)) { pdf_annot_objnum(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, data)) { + } else if (lua_key_eq(s, data)) { pdf_annot_data(n) = nodelib_gettoks(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == pdf_dest_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { depth(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { height(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, named_id)) { + } else if (lua_key_eq(s, named_id)) { pdf_dest_named_id(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, dest_id)) { + } else if (lua_key_eq(s, dest_id)) { if (pdf_dest_named_id(n) == 1) { pdf_dest_id(n) = nodelib_gettoks(L, 3); } else { pdf_dest_id(n) = (halfword) lua_tointeger(L, 3); } - } else if (luaS_ptr_eq(s, dest_type)) { + } else if (lua_key_eq(s, dest_type)) { pdf_dest_type(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, xyz_zoom)) { + } else if (lua_key_eq(s, xyz_zoom)) { pdf_dest_xyz_zoom(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, objnum)) { + } else if (lua_key_eq(s, objnum)) { pdf_dest_objnum(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == pdf_setmatrix_node) { - if (luaS_ptr_eq(s, data)) { + if (lua_key_eq(s, data)) { pdf_setmatrix_data(n) = nodelib_gettoks(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == pdf_refobj_node) { - if (luaS_ptr_eq(s, objnum)) { + if (lua_key_eq(s, objnum)) { pdf_obj_objnum(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == pdf_refxform_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { depth(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { height(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, objnum)) { + } else if (lua_key_eq(s, objnum)) { pdf_xform_objnum(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == pdf_refximage_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { depth(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { height(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, transform)) { + } else if (lua_key_eq(s, transform)) { pdf_ximage_transform(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, index)) { + } else if (lua_key_eq(s, index)) { pdf_ximage_index(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == local_par_node) { - if (luaS_ptr_eq(s, pen_inter)) { + if (lua_key_eq(s, pen_inter)) { local_pen_inter(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, pen_broken)) { + } else if (lua_key_eq(s, pen_broken)) { local_pen_broken(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, dir)) { + } else if (lua_key_eq(s, dir)) { local_par_dir(n) = nodelib_getdir(L, 3, 1); - } else if (luaS_ptr_eq(s, box_left)) { + } else if (lua_key_eq(s, box_left)) { local_box_left(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, box_left_width)) { + } else if (lua_key_eq(s, box_left_width)) { local_box_left_width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, box_right)) { + } else if (lua_key_eq(s, box_right)) { local_box_right(n) = nodelib_getlist(L, 3); - } else if (luaS_ptr_eq(s, box_right_width)) { + } else if (lua_key_eq(s, box_right_width)) { local_box_right_width(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == pdf_start_link_node) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { depth(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { height(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, objnum)) { + } else if (lua_key_eq(s, objnum)) { pdf_link_objnum(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, link_attr)) { + } else if (lua_key_eq(s, link_attr)) { pdf_link_attr(n) = nodelib_gettoks(L, 3); - } else if (luaS_ptr_eq(s, action)) { + } else if (lua_key_eq(s, action)) { pdf_link_action(n) = nodelib_popdirect(n); /*nodelib_getaction(L, 3);*/ } else { return nodelib_cantset(L, n, s); } } else if (t == write_node) { - if (luaS_ptr_eq(s, stream)) { + if (lua_key_eq(s, stream)) { write_stream(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, data)) { + } else if (lua_key_eq(s, data)) { write_tokens(n) = nodelib_gettoks(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == pdf_colorstack_node) { - if (luaS_ptr_eq(s, stack)) { + if (lua_key_eq(s, stack)) { pdf_colorstack_stack(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, command)) { + } else if (lua_key_eq(s, command)) { pdf_colorstack_cmd(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, data)) { + } else if (lua_key_eq(s, data)) { pdf_colorstack_data(n) = nodelib_gettoks(L, 3); } else { return nodelib_cantset(L, n, s); } } else if ((t == pdf_thread_node) || (t == pdf_start_thread_node)) { - if (luaS_ptr_eq(s, width)) { + if (lua_key_eq(s, width)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { depth(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { height(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, named_id)) { + } else if (lua_key_eq(s, named_id)) { pdf_thread_named_id(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, thread_id)) { + } else if (lua_key_eq(s, thread_id)) { if (pdf_thread_named_id(n) == 1) { pdf_thread_id(n) = nodelib_gettoks(L, 3); } else { pdf_thread_id(n) = (halfword) lua_tointeger(L, 3); } - } else if (luaS_ptr_eq(s, thread_attr)) { + } else if (lua_key_eq(s, thread_attr)) { pdf_thread_attr(n) = nodelib_gettoks(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == special_node) { - if (luaS_ptr_eq(s, data)) { + if (lua_key_eq(s, data)) { write_tokens(n) = nodelib_gettoks(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == open_node) { - if (luaS_ptr_eq(s, stream)) { + if (lua_key_eq(s, stream)) { write_stream(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, name)) { + } else if (lua_key_eq(s, name)) { open_name(n) = nodelib_getstring(L, 3); - } else if (luaS_ptr_eq(s, area)) { + } else if (lua_key_eq(s, area)) { open_area(n) = nodelib_getstring(L, 3); - } else if (luaS_ptr_eq(s, ext)) { + } else if (lua_key_eq(s, ext)) { open_ext(n) = nodelib_getstring(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == close_node) { - if (luaS_ptr_eq(s, stream)) { + if (lua_key_eq(s, stream)) { write_stream(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); @@ -5653,421 +5376,421 @@ static int lua_nodelib_direct_setfield(lua_State * L) s = lua_tostring(L, 2); - if (luaS_ptr_eq(s, id)) { + if (lua_key_eq(s, id)) { lua_pushnumber(L, t); - } else if (luaS_ptr_eq(s, next)) { + } else if (lua_key_eq(s, next)) { halfword x = nodelib_popdirect(3); if (x>0 && type(x) == glue_spec_node) { return luaL_error(L, "You can't assign a %s node to a next field\n", node_data[type(x)].name); } vlink(n) = x; - } else if (luaS_ptr_eq(s, prev)) { + } else if (lua_key_eq(s, prev)) { halfword x = nodelib_popdirect(3); if (x>0 && type(x) == glue_spec_node) { return luaL_error(L, "You can't assign a %s node to a prev field\n", node_data[type(x)].name); } alink(n) = x; - } else if (luaS_ptr_eq(s, attr)) { + } else if (lua_key_eq(s, attr)) { if (nodetype_has_attributes(type(n))) { nodelib_setattr(L, 3, n); } } else if (t == glyph_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, font)) { + } else if (lua_key_eq(s, font)) { font(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, char)) { + } else if (lua_key_eq(s, char)) { character(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, xoffset)) { + } else if (lua_key_eq(s, xoffset)) { x_displace(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, yoffset)) { + } else if (lua_key_eq(s, yoffset)) { y_displace(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { /* not yet */ - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { /* not yet */ - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { /* not yet */ - } else if (luaS_ptr_eq(s, expansion_factor)) { + } else if (lua_key_eq(s, expansion_factor)) { ex_glyph(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, components)) { + } else if (lua_key_eq(s, components)) { lig_ptr(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, lang)) { + } else if (lua_key_eq(s, lang)) { set_char_lang(n, (halfword) lua_tointeger(L, 3)); - } else if (luaS_ptr_eq(s, left)) { + } else if (lua_key_eq(s, left)) { set_char_lhmin(n, (halfword) lua_tointeger(L, 3)); - } else if (luaS_ptr_eq(s, right)) { + } else if (lua_key_eq(s, right)) { set_char_rhmin(n, (halfword) lua_tointeger(L, 3)); - } else if (luaS_ptr_eq(s, uchyph)) { + } else if (lua_key_eq(s, uchyph)) { set_char_uchyph(n, (halfword) lua_tointeger(L, 3)); } else { return nodelib_cantset(L, n, s); } } else if ((t == hlist_node) || (t == vlist_node)) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, list) || luaS_ptr_eq(s, head)) { + } else if (lua_key_eq(s, list) || lua_key_eq(s, head)) { list_ptr(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { height(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { depth(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, dir)) { + } else if (lua_key_eq(s, dir)) { box_dir(n) = nodelib_getdir(L, 3, 1); - } else if (luaS_ptr_eq(s, shift)) { + } else if (lua_key_eq(s, shift)) { shift_amount(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, glue_order)) { + } else if (lua_key_eq(s, glue_order)) { glue_order(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, glue_sign)) { + } else if (lua_key_eq(s, glue_sign)) { glue_sign(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, glue_set)) { + } else if (lua_key_eq(s, glue_set)) { glue_set(n) = (glue_ratio) lua_tonumber(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == disc_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, pre)) { + } else if (lua_key_eq(s, pre)) { set_disc_field(pre_break(n), nodelib_popdirect(3)); - } else if (luaS_ptr_eq(s, post)) { + } else if (lua_key_eq(s, post)) { set_disc_field(post_break(n), nodelib_popdirect(3)); - } else if (luaS_ptr_eq(s, replace)) { + } else if (lua_key_eq(s, replace)) { set_disc_field(no_break(n), nodelib_popdirect(3)); } else { return nodelib_cantset(L, n, s); } } else if (t == glue_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, spec)) { + } else if (lua_key_eq(s, spec)) { glue_ptr(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, leader)) { + } else if (lua_key_eq(s, leader)) { leader_ptr(n) = nodelib_popdirect(3); } else { return nodelib_cantset(L, n, s); } } else if (t == glue_spec_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); /* dummy, the only one that prevents move up */ - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, stretch)) { + } else if (lua_key_eq(s, stretch)) { stretch(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, shrink)) { + } else if (lua_key_eq(s, shrink)) { shrink(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, stretch_order)) { + } else if (lua_key_eq(s, stretch_order)) { stretch_order(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, shrink_order)) { + } else if (lua_key_eq(s, shrink_order)) { lua_pushnumber(L, shrink_order(n)); - /* } else if (luaS_ptr_eq(s, ref_count)) { + /* } else if (lua_key_eq(s, ref_count)) { glue_ref_count(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, writable)) { + } else if (lua_key_eq(s, writable)) { */ } else { return nodelib_cantset(L, n, s); } } else if (t == kern_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, kern)) { + } else if (lua_key_eq(s, kern)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, expansion_factor)) { + } else if (lua_key_eq(s, expansion_factor)) { ex_kern(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == penalty_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { /* dummy subtype */ - } else if (luaS_ptr_eq(s, penalty)) { + } else if (lua_key_eq(s, penalty)) { penalty(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == rule_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { height(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { depth(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, dir)) { + } else if (lua_key_eq(s, dir)) { rule_dir(n) = nodelib_getdir(L, 3, 1); } else { return nodelib_cantset(L, n, s); } } else if (t == whatsit_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); } else { lua_nodelib_direct_setfield_whatsit(L, n, s); } } else if (t == simple_noad) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, nucleus)) { + } else if (lua_key_eq(s, nucleus)) { nucleus(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, sub)) { + } else if (lua_key_eq(s, sub)) { subscr(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, sup)) { + } else if (lua_key_eq(s, sup)) { supscr(n) = nodelib_popdirect(3); } else { return nodelib_cantset(L, n, s); } } else if ((t == math_char_node) || (t == math_text_char_node)) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, fam)) { + } else if (lua_key_eq(s, fam)) { math_fam(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, char)) { + } else if (lua_key_eq(s, char)) { math_character(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == mark_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, class)) { + } else if (lua_key_eq(s, class)) { mark_class(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, mark)) { + } else if (lua_key_eq(s, mark)) { mark_ptr(n) = nodelib_gettoks(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == ins_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, cost)) { + } else if (lua_key_eq(s, cost)) { float_cost(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { depth(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { height(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, spec)) { + } else if (lua_key_eq(s, spec)) { split_top_ptr(n) = nodelib_popdirect(3); - } else if ((luaS_ptr_eq(s, list)) || (luaS_ptr_eq(s, head))) { + } else if ((lua_key_eq(s, list)) || (lua_key_eq(s, head))) { ins_ptr(n) = nodelib_popdirect(3); } else { return nodelib_cantset(L, n, s); } } else if (t == math_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, surround)) { + } else if (lua_key_eq(s, surround)) { surround(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == fraction_noad) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { thickness(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, num)) { + } else if (lua_key_eq(s, num)) { numerator(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, denom)) { + } else if (lua_key_eq(s, denom)) { denominator(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, left)) { + } else if (lua_key_eq(s, left)) { left_delimiter(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, right)) { + } else if (lua_key_eq(s, right)) { right_delimiter(n) = nodelib_popdirect(3); } else { return nodelib_cantset(L, n, s); } } else if (t == style_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { /* dummy subtype */ - } else if (luaS_ptr_eq(s, style)) { + } else if (lua_key_eq(s, style)) { lua_pushstring(L, math_style_names[subtype(n)]); } else { /* return nodelib_cantset(L, n, s); */ subtype(n) = (quarterword) luaL_checkoption(L, 2, "text", math_style_names); /* was 3 */ } } else if (t == accent_noad) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, nucleus)) { + } else if (lua_key_eq(s, nucleus)) { nucleus(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, sub)) { + } else if (lua_key_eq(s, sub)) { subscr(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, sup)) { + } else if (lua_key_eq(s, sup)) { supscr(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, accent)) { + } else if (lua_key_eq(s, accent)) { accent_chr(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, bot_accent)) { + } else if (lua_key_eq(s, bot_accent)) { bot_accent_chr(n) = nodelib_popdirect(3); } else { return nodelib_cantset(L, n, s); } } else if (t == fence_noad) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, delim)) { + } else if (lua_key_eq(s, delim)) { delimiter(n) = nodelib_popdirect(3); } else { return nodelib_cantset(L, n, s); } } else if (t == delim_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, small_fam)) { + } else if (lua_key_eq(s, small_fam)) { small_fam(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, small_char)) { + } else if (lua_key_eq(s, small_char)) { small_char(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, large_fam)) { + } else if (lua_key_eq(s, large_fam)) { large_fam(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, large_char)) { + } else if (lua_key_eq(s, large_char)) { large_char(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if ((t == sub_box_node) || (t == sub_mlist_node)) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if ((luaS_ptr_eq(s, list)) || (luaS_ptr_eq(s, head))){ + } else if ((lua_key_eq(s, list)) || (lua_key_eq(s, head))){ math_list(n) = nodelib_popdirect(3); } else { return nodelib_cantset(L, n, s); } } else if (t == radical_noad) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, nucleus)) { + } else if (lua_key_eq(s, nucleus)) { nucleus(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, sub)) { + } else if (lua_key_eq(s, sub)) { subscr(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, sup)) { + } else if (lua_key_eq(s, sup)) { supscr(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, left)) { + } else if (lua_key_eq(s, left)) { left_delimiter(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, degree)) { + } else if (lua_key_eq(s, degree)) { degree(n) = nodelib_popdirect(3); } else { return nodelib_cantset(L, n, s); } } else if (t == margin_kern_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, glyph)) { + } else if (lua_key_eq(s, glyph)) { margin_char(n) = nodelib_popdirect(3); } else { return nodelib_cantset(L, n, s); } } else if (t == split_up_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, last_ins_ptr)) { + } else if (lua_key_eq(s, last_ins_ptr)) { last_ins_ptr(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, best_ins_ptr)) { + } else if (lua_key_eq(s, best_ins_ptr)) { best_ins_ptr(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, broken_ptr)) { + } else if (lua_key_eq(s, broken_ptr)) { broken_ptr(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, broken_ins)) { + } else if (lua_key_eq(s, broken_ins)) { broken_ins(n) = nodelib_popdirect(3); } else { return nodelib_cantset(L, n, s); } } else if (t == choice_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, display)) { + } else if (lua_key_eq(s, display)) { display_mlist(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, text)) { + } else if (lua_key_eq(s, text)) { text_mlist(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, script)) { + } else if (lua_key_eq(s, script)) { script_mlist(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, scriptscript)) { + } else if (lua_key_eq(s, scriptscript)) { script_script_mlist(n) = nodelib_popdirect(3); } else { return nodelib_cantset(L, n, s); } } else if (t == inserting_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, last_ins_ptr)) { + } else if (lua_key_eq(s, last_ins_ptr)) { last_ins_ptr(n) = nodelib_popdirect(3); - } else if (luaS_ptr_eq(s, best_ins_ptr)) { + } else if (lua_key_eq(s, best_ins_ptr)) { best_ins_ptr(n) = nodelib_popdirect(3); } else { return nodelib_cantset(L, n, s); } } else if (t == attribute_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { /* dummy subtype */ - } else if (luaS_ptr_eq(s, number)) { + } else if (lua_key_eq(s, number)) { attribute_id(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, value)) { + } else if (lua_key_eq(s, value)) { attribute_value(n) = (halfword) lua_tointeger(L, 3); } else { return nodelib_cantset(L, n, s); } } else if (t == adjust_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { subtype(n) = (quarterword) lua_tointeger(L, 3); - } else if ((luaS_ptr_eq(s, list)) || (luaS_ptr_eq(s, head))) { + } else if ((lua_key_eq(s, list)) || (lua_key_eq(s, head))) { adjust_ptr(n) = nodelib_popdirect(3); } else { return nodelib_cantset(L, n, s); } } else if (t == action_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { /* dummy subtype */ - } else if (luaS_ptr_eq(s, action_type)) { + } else if (lua_key_eq(s, action_type)) { pdf_action_type(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, named_id)) { + } else if (lua_key_eq(s, named_id)) { pdf_action_named_id(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, action_id)) { + } else if (lua_key_eq(s, action_id)) { if (pdf_action_named_id(n) == 1) { pdf_action_id(n) = nodelib_gettoks(L, 3); } else { pdf_action_id(n) = (halfword) lua_tointeger(L, 3); } - } else if (luaS_ptr_eq(s, file)) { + } else if (lua_key_eq(s, file)) { pdf_action_file(n) = nodelib_gettoks(L, 3); - } else if (luaS_ptr_eq(s, new_window)) { + } else if (lua_key_eq(s, new_window)) { pdf_action_new_window(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, data)) { + } else if (lua_key_eq(s, data)) { pdf_action_tokens(n) = nodelib_gettoks(L, 3); - /* } else if (luaS_ptr_eq(s, ref_count)) { + /* } else if (lua_key_eq(s, ref_count)) { pdf_action_refcount(n) = (halfword) lua_tointeger(L, 3); */ } else { return nodelib_cantset(L, n, s); } } else if (t == unset_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { /* dummy subtype */ - } else if (luaS_ptr_eq(s, width)) { + } else if (lua_key_eq(s, width)) { width(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, height)) { + } else if (lua_key_eq(s, height)) { height(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, depth)) { + } else if (lua_key_eq(s, depth)) { depth(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, dir)) { + } else if (lua_key_eq(s, dir)) { box_dir(n) = nodelib_getdir(L, 3, 1); - } else if (luaS_ptr_eq(s, shrink)) { + } else if (lua_key_eq(s, shrink)) { glue_shrink(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, glue_order)) { + } else if (lua_key_eq(s, glue_order)) { glue_order(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, glue_sign)) { + } else if (lua_key_eq(s, glue_sign)) { glue_sign(n) = (quarterword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, stretch)) { + } else if (lua_key_eq(s, stretch)) { glue_stretch(n) = (halfword) lua_tointeger(L, 3); - } else if (luaS_ptr_eq(s, count)) { + } else if (lua_key_eq(s, count)) { span_count(n) = (quarterword) lua_tointeger(L, 3); - } else if ((luaS_ptr_eq(s, list)) || (luaS_ptr_eq(s, head))){ + } else if ((lua_key_eq(s, list)) || (lua_key_eq(s, head))){ list_ptr(n) = nodelib_popdirect(3); } else { return nodelib_cantset(L, n, s); } } else if (t == attribute_list_node) { - if (luaS_ptr_eq(s, subtype)) { + if (lua_key_eq(s, subtype)) { /* dummy subtype */ } else { return nodelib_cantset(L, n, s); @@ -6159,7 +5882,7 @@ static int lua_nodelib_direct_setbox(lua_State * L) int n = lua_gettop(L); if (n == 3 && lua_isstring(L, 1)) { const char *s = lua_tostring(L, 1); - if (luaS_ptr_eq(s, global)) + if (lua_key_eq(s, global)) isglobal = 1; } return direct_vsetbox(L, isglobal); @@ -6232,6 +5955,238 @@ static int lua_nodelib_direct_is_node(lua_State * L) */ +/* if really needed we can provide this: + +static int lua_nodelib_attributes_to_table(lua_State * L) // hh +{ // <node|direct> + halfword n; + register halfword attribute; + if (lua_isnumber(L,1)) { + n = lua_tonumber(L,1); + } else { + n = *((halfword *) lua_touserdata(L, 1)); + } + if ((n == null) || (! nodetype_has_attributes(type(n)))) { + lua_pushnil(L); + } else { + attribute = node_attr(n); + if (attribute == null || (attribute == cache_disabled)) { + lua_pushnil(L); + } else { + if (! lua_istable(L,2)) { + lua_newtable(L); + } + while (attribute != null) { + lua_pushnumber(L,(int)attribute_id(attribute)); + lua_pushnumber(L,(int)attribute_value(attribute)); + lua_rawset(L,-3); + attribute = vlink(attribute) ; + } + } + } + return 1 ; +} + +*/ + +/* There is no gain here but let's keep it around: + +static int lua_nodelib_attributes_to_properties(lua_State * L) +{ // <node|direct> + halfword n; + register halfword attribute; + if (lua_isnumber(L,1)) { + n = lua_tonumber(L,1); + } else { + n = *((halfword *) lua_touserdata(L, 1)); + } + if (n == null) { + lua_pushnil(L); + return 1; + } + lua_rawgeti(L, LUA_REGISTRYINDEX, luaS_index(node_properties)); + lua_gettable(L, LUA_REGISTRYINDEX); + while (n != null) { + lua_rawseti(L, -1, luaS_index(attributes)); + lua_newtable(L); + if (! nodetype_has_attributes(type(n))) { + lua_pushnil(L); + } else { + attribute = node_attr(n); + if (attribute == null || (attribute == cache_disabled)) { + lua_pushnil(L); + } else { + while (attribute != null) { + lua_pushnumber(L,(int)attribute_id(attribute)); + lua_pushnumber(L,(int)attribute_value(attribute)); + lua_rawset(L,-3); + attribute = vlink(attribute) ; + } + } + } + lua_rawset(Luas,-3); + n = vlink(n); + } + return 1 ; +} + +*/ + +/* Beware, enabling and disabling can result in an inconsistent properties table +but it might make sense sometimes. Of course by default we have disabled this +mechanism. And, one can always sweep the table empty. */ + +static int lua_nodelib_properties_set_mode(lua_State * L) /* hh */ +{ /* <boolean> */ + if (lua_isboolean(L,1)) { + lua_properties_enabled = lua_toboolean(L,1); + } + if (lua_isboolean(L,2)) { + lua_properties_use_metatable = lua_toboolean(L,2); + } + return 0; +} + +/* We used to have variants in assigned defaults but they made no sense. */ + +static int lua_nodelib_properties_flush_table(lua_State * L) /* hh */ +{ /* <node|direct> <number> */ + lua_rawgeti(L, LUA_REGISTRYINDEX, lua_key_index(node_properties)); + lua_gettable(L, LUA_REGISTRYINDEX); + lua_pushnil(L); /* initializes lua_next */ + while (lua_next(L,-2) != 0) { + lua_pushvalue(L,-2); + lua_pushnil(L); + lua_settable(L,-5); + lua_pop(L,1); + } + return 1; +} + +/* maybe we should allocate a proper index 0..var_mem_max but not now */ + +static int lua_nodelib_get_property(lua_State * L) /* hh */ +{ /* <node> */ + halfword n; + n = *((halfword *) lua_touserdata(L, 1)); + if (n == null) { + lua_pushnil(L); + } else { + lua_rawgeti(L, LUA_REGISTRYINDEX, lua_key_index(node_properties)); + lua_gettable(L, LUA_REGISTRYINDEX); + lua_rawgeti(L,-1,n); + } + return 1; +} + +static int lua_nodelib_direct_get_property(lua_State * L) /* hh */ +{ /* <direct> */ + halfword n = lua_tonumber(L, 1); + if (n == null) { + lua_pushnil(L); + } else { + lua_rawgeti(L, LUA_REGISTRYINDEX, lua_key_index(node_properties)); + lua_gettable(L, LUA_REGISTRYINDEX); + lua_rawgeti(L,-1,n); + } + return 1; +} + +static int lua_nodelib_set_property(lua_State * L) /* hh */ +{ + /* <node> <value> */ + halfword n; + n = *((halfword *) lua_touserdata(L, 1)); + if (n != null) { + lua_settop(L,2); + lua_rawgeti(L, LUA_REGISTRYINDEX, lua_key_index(node_properties)); + lua_gettable(L, LUA_REGISTRYINDEX); + /* <node> <value> <propertytable> */ + lua_replace(L,-3); + /* <propertytable> <value> */ + lua_rawseti(L,-2,n); + } + return 0; +} + +static int lua_nodelib_direct_set_property(lua_State * L) /* hh */ +{ + /* <direct> <value> */ + halfword n = lua_tonumber(L, 1); + if (n != null) { // we could store in node instead */ + lua_settop(L,2); + lua_rawgeti(L, LUA_REGISTRYINDEX, lua_key_index(node_properties)); + lua_gettable(L, LUA_REGISTRYINDEX); + /* <node> <value> <propertytable> */ + lua_replace(L,1); + /* <propertytable> <value> */ + lua_rawseti(L,1,n); + } + return 0; +} + +static int lua_nodelib_direct_properties_get_table(lua_State * L) /* hh */ +{ /* <node|direct> */ + lua_rawgeti(L, LUA_REGISTRYINDEX, lua_key_index(node_properties)); + lua_gettable(L, LUA_REGISTRYINDEX); + return 1; +} + +static int lua_nodelib_properties_get_table(lua_State * L) /* hh */ +{ /* <node|direct> */ + lua_rawgeti(L, LUA_REGISTRYINDEX, lua_key_index(node_properties_indirect)); + lua_gettable(L, LUA_REGISTRYINDEX); + return 1; +} + +/* bonus */ + +static int lua_nodelib_get_property_t(lua_State * L) /* hh */ +{ /* <table> <node> */ + halfword n; + n = *((halfword *) lua_touserdata(L, 2)); + if (n == null) { + lua_pushnil(L); + } else { + lua_rawgeti(L,1,n); + } + return 1; +} + +static int lua_nodelib_set_property_t(lua_State * L) /* hh */ +{ + /* <table> <node> <value> */ + halfword n; + n = *((halfword *) lua_touserdata(L, 2)); + if (n != null) { + lua_settop(L,3); + lua_rawseti(L,1,n); + } + return 0; +} + +static const struct luaL_Reg nodelib_p[] = { + {"__index", lua_nodelib_get_property_t}, + {"__newindex", lua_nodelib_set_property_t}, + {NULL, NULL} /* sentinel */ +}; + +static void lua_new_properties_table(lua_State * L) /* hh */ +{ + lua_pushstring(L,"node.properties"); + lua_newtable(L); + lua_settable(L,LUA_REGISTRYINDEX); + + lua_pushstring(L,"node.properties.indirect"); + lua_newtable(L); + luaL_newmetatable(L,"node.properties.indirect.meta"); + luaL_register(L, NULL, nodelib_p); + lua_setmetatable(L,-2); + lua_settable(L,LUA_REGISTRYINDEX); +} + +/* end of properties experiment */ + /* node.direct.* */ static const struct luaL_Reg direct_nodelib_f[] = { @@ -6272,7 +6227,7 @@ static const struct luaL_Reg direct_nodelib_f[] = { {"last_node", lua_nodelib_direct_last_node}, {"length", lua_nodelib_direct_length}, /* {"ligaturing", font_tex_ligaturing}, */ /* maybe direct too (rather basic callback exposure) */ - /* {"mlist_to_hlist", lua_nodelib_mlist_to_hlist}, */ /* maybe direct too (rather basic callback exposure) */ + /* {"mlist_to_hlist", lua_nodelib_mlist_to_hset_properties_modelist}, */ /* maybe direct too (rather basic callback exposure) */ {"new", lua_nodelib_direct_new}, /* {"next", lua_nodelib_next}, */ /* replaced by getnext */ /* {"prev", lua_nodelib_prev}, */ /* replaced by getprev */ @@ -6298,6 +6253,15 @@ static const struct luaL_Reg direct_nodelib_f[] = { {"vpack", lua_nodelib_direct_vpack}, /* {"whatsits", lua_nodelib_whatsits}, */ /* no node argument */ {"write", lua_nodelib_direct_append}, + /* an experiment */ + /* {"attributes_to_table",lua_nodelib_attributes_to_table}, */ /* hh experiment */ + /* an experiment */ + {"set_properties_mode",lua_nodelib_properties_set_mode}, /* hh experiment */ + {"flush_properties_table",lua_nodelib_properties_flush_table}, /* hh experiment */ + {"get_properties_table",lua_nodelib_direct_properties_get_table}, /* hh experiment */ + {"getproperty", lua_nodelib_direct_get_property}, /* bonus */ /* hh experiment */ + {"setproperty", lua_nodelib_direct_set_property}, /* bonus */ /* hh experiment */ + /* done */ {NULL, NULL} /* sentinel */ }; @@ -6364,6 +6328,15 @@ static const struct luaL_Reg nodelib_f[] = { {"vpack", lua_nodelib_vpack}, {"whatsits", lua_nodelib_whatsits}, {"write", lua_nodelib_append}, + /* experiment */ + /* {"attributes_to_table",lua_nodelib_attributes_to_table}, */ /* hh experiment */ + /* experiment */ + {"set_properties_mode",lua_nodelib_properties_set_mode}, /* hh experiment */ + {"flush_properties_table",lua_nodelib_properties_flush_table}, /* hh experiment */ + {"get_properties_table",lua_nodelib_properties_get_table}, /* bonus */ /* hh experiment */ + {"getproperty", lua_nodelib_get_property}, /* hh experiment */ + {"setproperty", lua_nodelib_set_property}, /* hh experiment */ + /* done */ {NULL, NULL} /* sentinel */ }; @@ -6377,6 +6350,9 @@ static const struct luaL_Reg nodelib_m[] = { int luaopen_node(lua_State * L) { + + lua_new_properties_table(L); + /* the main metatable of node userdata */ luaL_newmetatable(L, NODE_METATABLE); /* node.* */ @@ -6394,7 +6370,7 @@ int luaopen_node(lua_State * L) luaL_register(L, NULL, direct_nodelib_f); lua_rawset(L,-3); /* initialization of keywords */ - initialize_luaS_indexes(L); + /*initialize_luaS_indexes(L);*/ return 1; } diff --git a/Build/source/texk/web2c/luatexdir/lua/lpdflib.c b/Build/source/texk/web2c/luatexdir/lua/lpdflib.c index 6f7c0842637..00cffd398d7 100644 --- a/Build/source/texk/web2c/luatexdir/lua/lpdflib.c +++ b/Build/source/texk/web2c/luatexdir/lua/lpdflib.c @@ -18,20 +18,21 @@ with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */ static const char _svn_version[] = - "$Id: lpdflib.c 4524 2012-12-20 15:38:02Z taco $ " - "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/lua/lpdflib.c $"; + "$Id: lpdflib.c 4877 2014-03-14 01:26:05Z luigi $ " + "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/lpdflib.c $"; #include "ptexlib.h" #include "lua/luatex-api.h" -#define PDF_ENV "pdf_env" +#define PDF_ENV "pdf.env" static int luapdfprint(lua_State * L) { int n; - const_lstring st, modestr; + const_lstring st; + const char *modestr_s; ctm_transform_modes literal_mode; - st.s = modestr.s = NULL; + st.s = modestr_s = NULL; n = lua_gettop(L); if (!lua_isstring(L, -1)) { luaL_error(L, "no string to print"); @@ -41,10 +42,10 @@ static int luapdfprint(lua_State * L) if (!lua_isstring(L, -2)) { luaL_error(L, "invalid argument for print literal mode"); } else { - modestr.s = lua_tolstring(L, -2, &modestr.l); - if (modestr.l == 6 && strncmp(modestr.s, "direct", 6) == 0) - literal_mode = direct_always; - else if (modestr.l == 4 && strncmp(modestr.s, "page", 4) == 0) + modestr_s = lua_tostring(L, -2); + if (lua_key_eq(modestr_s,direct)) + literal_mode = direct_always; + else if (lua_key_eq(modestr_s,page)) literal_mode = direct_page; else { luaL_error(L, "invalid argument for print literal mode"); @@ -97,7 +98,8 @@ static int l_immediateobj(lua_State * L) int n, first_arg = 1; int k; lstring buf; - const_lstring st1, st2, st3; + const_lstring st1,st2, st3; + const char *st1_s = NULL; st1.s = st2.s = st3.s = NULL; check_o_mode(static_pdf, "immediateobj()", 1 << OMODE_PDF, true); if (global_shipping_mode != NOT_SHIPPING) @@ -124,8 +126,10 @@ static int l_immediateobj(lua_State * L) pdf_begin_obj(static_pdf, k, OBJSTM_ALWAYS); st1.s = lua_tolstring(L, first_arg, &st1.l); pdf_out_block(static_pdf, st1.s, st1.l); - if (st1.s[st1.l - 1] != '\n') - pdf_out(static_pdf, '\n'); + /* already in pdf_end_obj: + if (st1.s[st1.l - 1] != '\n') + pdf_out(static_pdf, '\n'); + */ pdf_end_obj(static_pdf); break; case 2: @@ -134,17 +138,18 @@ static int l_immediateobj(lua_State * L) luaL_error(L, "pdf.immediateobj() 1st argument must be string"); if (!lua_isstring(L, first_arg + 1)) luaL_error(L, "pdf.immediateobj() 2nd argument must be string"); - st1.s = lua_tolstring(L, first_arg, &st1.l); + st1_s = lua_tostring(L, first_arg); st2.s = lua_tolstring(L, first_arg + 1, &st2.l); - if (st1.l == 4 && strncmp((const char *) st1.s, "file", 4) == 0) { + if (lua_key_eq(st1_s, file)) { if (n == first_arg + 2) - luaL_error(L, - "pdf.immediateobj() 3rd argument forbidden in file mode"); + luaL_error(L, "pdf.immediateobj() 3rd argument forbidden in file mode"); pdf_begin_obj(static_pdf, k, OBJSTM_ALWAYS); buf.s = fread_to_buf(L, st2.s, &buf.l); pdf_out_block(static_pdf, (const char *) buf.s, buf.l); - if (buf.s[buf.l - 1] != '\n') - pdf_out(static_pdf, '\n'); + /* already in pdf_end_obj: + if (buf.s[buf.l - 1] != '\n') + pdf_out(static_pdf, '\n'); + */ xfree(buf.s); pdf_end_obj(static_pdf); } else { @@ -152,8 +157,7 @@ static int l_immediateobj(lua_State * L) pdf_begin_dict(static_pdf); if (n == first_arg + 2) { /* write attr text */ if (!lua_isstring(L, first_arg + 2)) - luaL_error(L, - "pdf.immediateobj() 3rd argument must be string"); + luaL_error(L, "pdf.immediateobj() 3rd argument must be string"); st3.s = lua_tolstring(L, first_arg + 2, &st3.l); pdf_out_block(static_pdf, st3.s, st3.l); if (st3.s[st3.l - 1] != '\n') @@ -162,11 +166,9 @@ static int l_immediateobj(lua_State * L) pdf_dict_add_streaminfo(static_pdf); pdf_end_dict(static_pdf); pdf_begin_stream(static_pdf); - if (st1.l == 6 && strncmp((const char *) st1.s, "stream", 6) == 0) { + if (lua_key_eq(st1_s, stream)) { pdf_out_block(static_pdf, st2.s, st2.l); - } else if (st1.l == 10 - && strncmp((const char *) st1.s, "streamfile", - 10) == 0) { + } else if (lua_key_eq(st1_s, streamfile)) { buf.s = fread_to_buf(L, st2.s, &buf.l); pdf_out_block(static_pdf, (const char *) buf.s, buf.l); xfree(buf.s); @@ -236,8 +238,9 @@ static int table_obj(lua_State * L) /* get object "type" */ - lua_pushstring(L, "type"); /* ks t */ - lua_gettable(L, -2); /* vs? t */ + /* lua_pushstring(L, "type"); /\* ks t *\/ */ + /* lua_gettable(L, -2); /\* vs? t *\/ */ + lua_key_rawgeti(type); if (lua_isnil(L, -1)) /* !vs t */ luaL_error(L, "pdf.obj(): object \"type\" missing"); if (!lua_isstring(L, -1)) /* !vs t */ @@ -247,8 +250,7 @@ static int table_obj(lua_State * L) lua_pushvalue(L, -2); /* vs t vs t */ lua_gettable(L, -2); /* i? t vs t */ if (!lua_isnumber(L, -1)) /* !i t vs t */ - luaL_error(L, "pdf.obj(): \"%s\" is not a valid object type", - lua_tostring(L, -3)); + luaL_error(L, "pdf.obj(): \"%s\" is not a valid object type", lua_tostring(L, -3)); type = (int) lua_tointeger(L, -1); /* i t vs t */ switch (type) { case P_RAW: @@ -261,8 +263,9 @@ static int table_obj(lua_State * L) /* get optional "immediate" */ - lua_pushstring(L, "immediate"); /* ks t */ - lua_gettable(L, -2); /* b? t */ + /* lua_pushstring(L, "immediate"); /\* ks t *\/ */ + /* lua_gettable(L, -2); /\* b? t *\/ */ + lua_key_rawgeti(immediate); if (!lua_isnil(L, -1)) { /* b? t */ if (!lua_isboolean(L, -1)) /* !b t */ luaL_error(L, "pdf.obj(): \"immediate\" must be boolean"); @@ -272,8 +275,9 @@ static int table_obj(lua_State * L) /* is a reserved object referenced by "objnum"? */ - lua_pushstring(L, "objnum"); /* ks t */ - lua_gettable(L, -2); /* vi? t */ + /* lua_pushstring(L, "objnum"); /\* ks t *\/ */ + /* lua_gettable(L, -2); /\* vi? t *\/ */ + lua_key_rawgeti(objnum); if (!lua_isnil(L, -1)) { /* vi? t */ if (!lua_isnumber(L, -1)) /* !vi t */ luaL_error(L, "pdf.obj(): \"objnum\" must be integer"); @@ -294,12 +298,12 @@ static int table_obj(lua_State * L) /* get optional "attr" (allowed only for stream case) */ - lua_pushstring(L, "attr"); /* ks t */ - lua_gettable(L, -2); /* attr-s? t */ + /* lua_pushstring(L, "attr"); /\* ks t *\/ */ + /* lua_gettable(L, -2); /\* attr-s? t *\/ */ + lua_key_rawgeti(attr); if (!lua_isnil(L, -1)) { /* attr-s? t */ if (type != P_STREAM) - luaL_error(L, - "pdf.obj(): \"attr\" key not allowed for non-stream object"); + luaL_error(L, "pdf.obj(): \"attr\" key not allowed for non-stream object"); if (!lua_isstring(L, -1)) /* !attr-s t */ luaL_error(L, "pdf.obj(): object \"attr\" must be string"); if (immediate == 1) { @@ -312,12 +316,12 @@ static int table_obj(lua_State * L) /* get optional "compresslevel" (allowed only for stream case) */ - lua_pushstring(L, "compresslevel"); /* ks t */ - lua_gettable(L, -2); /* vi? t */ + /* lua_pushstring(L, "compresslevel"); /\* ks t *\/ */ + /* lua_gettable(L, -2); /\* vi? t *\/ */ + lua_key_rawgeti(compresslevel); if (!lua_isnil(L, -1)) { /* vi? t */ if (type == P_RAW) - luaL_error(L, - "pdf.obj(): \"compresslevel\" key not allowed for raw object"); + luaL_error(L, "pdf.obj(): \"compresslevel\" key not allowed for raw object"); if (!lua_isnumber(L, -1)) /* !vi t */ luaL_error(L, "pdf.obj(): \"compresslevel\" must be integer"); compress_level = (int) lua_tointeger(L, -1); /* vi t */ @@ -332,12 +336,12 @@ static int table_obj(lua_State * L) /* get optional "objcompression" (allowed only for non-stream case) */ - lua_pushstring(L, "objcompression"); /* ks t */ - lua_gettable(L, -2); /* b? t */ + /* lua_pushstring(L, "objcompression"); /\* ks t *\/ */ + /* lua_gettable(L, -2); /\* b? t *\/ */ + lua_key_rawgeti(objcompression); if (!lua_isnil(L, -1)) { /* b? t */ if (type == P_STREAM) - luaL_error(L, - "pdf.obj(): \"objcompression\" key not allowed for stream object"); + luaL_error(L, "pdf.obj(): \"objcompression\" key not allowed for stream object"); if (!lua_isboolean(L, -1)) /* !b t */ luaL_error(L, "pdf.obj(): \"objcompression\" must be boolean"); obj_compression = lua_toboolean(L, -1); /* 0 or 1 */ @@ -353,13 +357,16 @@ static int table_obj(lua_State * L) /* now the object contents for all cases are handled */ - lua_pushstring(L, "string"); /* ks t */ - lua_gettable(L, -2); /* string-s? t */ - lua_pushstring(L, "file"); /* ks string-s? t */ - lua_gettable(L, -3); /* file-s? string-s? t */ + /* lua_pushstring(L, "string"); /\* ks t *\/ */ + /* lua_gettable(L, -2); /\* string-s? t *\/ */ + lua_key_rawgeti(string); + /* lua_pushstring(L, "file"); /\* ks string-s? t *\/ */ + /* lua_gettable(L, -3); /\* file-s? string-s? t *\/ */ + lua_rawgeti(L, LUA_REGISTRYINDEX, lua_key_index(file)); + lua_gettable(L, -3); + if (!lua_isnil(L, -1) && !lua_isnil(L, -2)) /* file-s? string-s? t */ - luaL_error(L, - "pdf.obj(): \"string\" and \"file\" must not be given together"); + luaL_error(L, "pdf.obj(): \"string\" and \"file\" must not be given together"); if (lua_isnil(L, -1) && lua_isnil(L, -2)) /* nil nil t */ luaL_error(L, "pdf.obj(): no \"string\" or \"file\" given"); @@ -371,26 +378,28 @@ static int table_obj(lua_State * L) /* from string */ lua_pop(L, 1); /* string-s? t */ if (!lua_isstring(L, -1)) /* !string-s t */ - luaL_error(L, - "pdf.obj(): \"string\" must be string for raw object"); + luaL_error(L, "pdf.obj(): \"string\" must be string for raw object"); if (immediate == 1) { st.s = lua_tolstring(L, -1, &st.l); pdf_out_block(static_pdf, st.s, st.l); - if (st.s[st.l - 1] != '\n') - pdf_out(static_pdf, '\n'); + /* already in pdf_end_obj: + if (st.s[st.l - 1] != '\n') + pdf_out(static_pdf, '\n'); + */ } else obj_obj_data(static_pdf, k) = luaL_ref(L, LUA_REGISTRYINDEX); /* t */ } else { /* from file */ if (!lua_isstring(L, -1)) /* !file-s nil t */ - luaL_error(L, - "pdf.obj(): \"file\" name must be string for raw object"); + luaL_error(L, "pdf.obj(): \"file\" name must be string for raw object"); if (immediate == 1) { st.s = lua_tolstring(L, -1, &st.l); /* file-s nil t */ buf.s = fread_to_buf(L, st.s, &buf.l); pdf_out_block(static_pdf, (const char *) buf.s, buf.l); - if (buf.s[buf.l - 1] != '\n') - pdf_out(static_pdf, '\n'); + /* already in pdf_end_obj: + if (buf.s[buf.l - 1] != '\n') + pdf_out(static_pdf, '\n'); + */ xfree(buf.s); } else { set_obj_obj_is_file(static_pdf, k); @@ -423,8 +432,7 @@ static int table_obj(lua_State * L) /* from string */ lua_pop(L, 1); /* string-s? t */ if (!lua_isstring(L, -1)) /* !string-s t */ - luaL_error(L, - "pdf.obj(): \"string\" must be string for stream object"); + luaL_error(L, "pdf.obj(): \"string\" must be string for stream object"); if (immediate == 1) { st.s = lua_tolstring(L, -1, &st.l); /* string-s t */ pdf_out_block(static_pdf, st.s, st.l); @@ -433,8 +441,7 @@ static int table_obj(lua_State * L) } else { /* from file */ if (!lua_isstring(L, -1)) /* !file-s nil t */ - luaL_error(L, - "pdf.obj(): \"file\" name must be string for stream object"); + luaL_error(L, "pdf.obj(): \"file\" name must be string for stream object"); if (immediate == 1) { st.s = lua_tolstring(L, -1, &st.l); /* file-s nil t */ buf.s = fread_to_buf(L, st.s, &buf.l); @@ -461,8 +468,7 @@ static int orig_obj(lua_State * L) { int n, first_arg = 1; int k; - const_lstring st; - st.s = NULL; + const char *st_s = NULL ; n = lua_gettop(L); if (n > 0 && lua_type(L, 1) == LUA_TNUMBER) { first_arg++; @@ -491,8 +497,8 @@ static int orig_obj(lua_State * L) luaL_error(L, "pdf.obj() 1st argument must be string"); if (!lua_isstring(L, first_arg + 1)) luaL_error(L, "pdf.obj() 2nd argument must be string"); - st.s = lua_tolstring(L, first_arg, &st.l); - if (st.l == 4 && strncmp((const char *) st.s, "file", 4) == 0) { + st_s = lua_tostring(L, first_arg); + if (lua_key_eq(st_s, file)) { if (n == first_arg + 2) luaL_error(L, "pdf.obj() 3rd argument forbidden in file mode"); set_obj_obj_is_file(static_pdf, k); @@ -503,10 +509,9 @@ static int orig_obj(lua_State * L) obj_obj_stream_attr(static_pdf, k) = luaL_ref(Luas, LUA_REGISTRYINDEX); } - if (st.l == 6 && strncmp((const char *) st.s, "stream", 6) == 0) { + if (lua_key_eq(st_s, stream)) { set_obj_obj_is_stream(static_pdf, k); - } else if (st.l == 10 - && strncmp((const char *) st.s, "streamfile", 10) == 0) { + } else if (lua_key_eq(st_s, streamfile)) { set_obj_obj_is_stream(static_pdf, k); set_obj_obj_is_file(static_pdf, k); } else @@ -550,8 +555,7 @@ static int l_refobj(lua_State * L) static int l_reserveobj(lua_State * L) { int n; - const_lstring st; - st.s = 0; + const char *st_s = NULL; n = lua_gettop(L); switch (n) { case 0: @@ -562,8 +566,7 @@ static int l_reserveobj(lua_State * L) case 1: if (!lua_isstring(L, -1)) luaL_error(L, "pdf.reserveobj() optional argument must be string"); - st.s = lua_tolstring(L, 1, &st.l); - if (st.l == 5 && strncmp((const char *) st.s, "annot", 5) == 0) { + if (lua_key_eq(st_s, annot)) { pdf_last_annot = pdf_create_obj(static_pdf, obj_type_annot, 0); } else { luaL_error(L, "pdf.reserveobj() optional string must be \"annot\""); @@ -587,8 +590,7 @@ static int l_registerannot(lua_State * L) luaL_error(L, "pdf.registerannot() can only be used in late lua"); i = (int) luaL_checkinteger(L, 1); if (i <= 0) - luaL_error(L, - "pdf.registerannot() can only register positive object numbers"); + luaL_error(L, "pdf.registerannot() can only register positive object numbers"); addto_page_resources(static_pdf, obj_type_annot, i); break; default: @@ -764,6 +766,53 @@ static int l_pageref(lua_State * L) return 1; } +static int l_getpos(lua_State * L) +{ + lua_pushnumber(L, static_pdf->posstruct->pos.h); + lua_pushnumber(L, static_pdf->posstruct->pos.v); + return 2; +} + +static int l_gethpos(lua_State * L) +{ + lua_pushnumber(L, static_pdf->posstruct->pos.h); + return 1; +} + +static int l_getvpos(lua_State * L) +{ + lua_pushnumber(L, static_pdf->posstruct->pos.v); + return 1; +} + +static int l_getmatrix(lua_State * L) +{ + if (matrix_stack_used > 0) { + matrix_entry *m = &matrix_stack[matrix_stack_used - 1]; + lua_pushnumber(L, m->a); + lua_pushnumber(L, m->b); + lua_pushnumber(L, m->c); + lua_pushnumber(L, m->d); + lua_pushnumber(L, m->e); + lua_pushnumber(L, m->f); + } else { + lua_pushnumber(L, 1); + lua_pushnumber(L, 0); + lua_pushnumber(L, 0); + lua_pushnumber(L, 1); + lua_pushnumber(L, 0); + lua_pushnumber(L, 0); + } + return 6 ; +} + +static int l_hasmatrix(lua_State * L) +{ + lua_pushboolean(L, (matrix_stack_used > 0)); + return 1 ; +} + + static const struct luaL_Reg pdflib[] = { {"immediateobj", l_immediateobj}, {"mapfile", l_mapfile}, @@ -778,6 +827,11 @@ static const struct luaL_Reg pdflib[] = { {"refobj", l_refobj}, {"registerannot", l_registerannot}, {"reserveobj", l_reserveobj}, + {"getpos", l_getpos}, + {"gethpos", l_gethpos}, + {"getvpos", l_getvpos}, + {"getmatrix", l_getmatrix}, + {"hasmatrix", l_hasmatrix}, {NULL, NULL} /* sentinel */ }; @@ -788,7 +842,7 @@ int luaopen_pdf(lua_State * L) preset_environment(L, pdf_parms, PDF_ENV); luaL_register(L, "pdf", pdflib); /* build meta table */ - luaL_newmetatable(L, "pdf_meta"); + luaL_newmetatable(L, "pdf.meta"); lua_pushstring(L, "__index"); lua_pushcfunction(L, getpdf); /* do these later, NYI */ diff --git a/Build/source/texk/web2c/luatexdir/lua/lstatslib.c b/Build/source/texk/web2c/luatexdir/lua/lstatslib.c index 59ab92cbde6..6c2413137c7 100644 --- a/Build/source/texk/web2c/luatexdir/lua/lstatslib.c +++ b/Build/source/texk/web2c/luatexdir/lua/lstatslib.c @@ -18,8 +18,8 @@ with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */ static const char _svn_version[] = - "$Id: lstatslib.c 4524 2012-12-20 15:38:02Z taco $ " - "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/lua/lstatslib.c $"; + "$Id: lstatslib.c 4857 2014-03-07 00:01:41Z luigi $ " + "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/lstatslib.c $"; #include "ptexlib.h" #include "lua/luatex-api.h" @@ -78,6 +78,25 @@ static const char *luatexrevision(void) return (const char *) (strrchr(luatex_version_string, '.') + 1); } +static lua_Number get_luatexhashchars(void) +{ +#ifdef LuajitTeX + return (lua_Number) LUAJITTEX_HASHCHARS; +#else + return (lua_Number) LUATEX_HASHCHARS; +#endif +} + +static const char *get_luatexhashtype(void) +{ +#ifdef LuajitTeX + return (const char *)jithash_hashname; +#else + return "lua"; +#endif +} + + static lua_Number get_pdf_gone(void) { if (static_pdf != NULL) @@ -172,6 +191,10 @@ static struct statistic stats[] = { {"luatex_svn", 'G', &get_luatexsvn}, {"luatex_version", 'G', &get_luatexversion}, {"luatex_revision", 'S', (void *) &luatexrevision}, + {"luatex_hashtype", 'S', (void *) &get_luatexhashtype}, + {"luatex_hashchars", 'N', &get_luatexhashchars}, + + {"ini_version", 'b', &ini_version}, /* * mem stat @@ -344,7 +367,7 @@ static const struct luaL_Reg statslib[] = { int luaopen_stats(lua_State * L) { luaL_register(L, "status", statslib); - luaL_newmetatable(L, "stats_meta"); + luaL_newmetatable(L, "tex.stats"); lua_pushstring(L, "__index"); lua_pushcfunction(L, getstats); lua_settable(L, -3); diff --git a/Build/source/texk/web2c/luatexdir/lua/ltexiolib.c b/Build/source/texk/web2c/luatexdir/lua/ltexiolib.c index 46f8956f87f..630ed333d51 100644 --- a/Build/source/texk/web2c/luatexdir/lua/ltexiolib.c +++ b/Build/source/texk/web2c/luatexdir/lua/ltexiolib.c @@ -21,24 +21,25 @@ #include "lua/luatex-api.h" static const char _svn_version[] = - "$Id: ltexiolib.c 4524 2012-12-20 15:38:02Z taco $ $URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/lua/ltexiolib.c $"; + "$Id: ltexiolib.c 4847 2014-03-05 18:13:17Z luigi $ $URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/ltexiolib.c $"; typedef void (*texio_printer) (const char *); static char *loggable_info = NULL; + static boolean get_selector_value(lua_State * L, int i, int *l) { boolean r = false; if (lua_isstring(L, i)) { const char *s = lua_tostring(L, i); - if (strcmp(s, "log") == 0) { + if (lua_key_eq(s,log)) { *l = log_only; r = true; - } else if (strcmp(s, "term") == 0) { + } else if (lua_key_eq(s,term)) { *l = term_only; r = true; - } else if (strcmp(s, "term and log") == 0) { + } else if (lua_key_eq(s,term_and_log)) { *l = term_and_log; r = true; } diff --git a/Build/source/texk/web2c/luatexdir/lua/ltexlib.c b/Build/source/texk/web2c/luatexdir/lua/ltexlib.c index cbc01ed4763..905b1694164 100644 --- a/Build/source/texk/web2c/luatexdir/lua/ltexlib.c +++ b/Build/source/texk/web2c/luatexdir/lua/ltexlib.c @@ -27,7 +27,7 @@ setter no prev link is created so we can presume that it's not used later on. */ static const char _svn_version[] = - "$Id: ltexlib.c 4775 2014-02-07 12:36:34Z luigi $ $URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/ltexlib.c $"; + "$Id: ltexlib.c 4878 2014-03-14 10:48:03Z taco $ $URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/ltexlib.c $"; #define attribute(A) eqtb[attribute_base+(A)].hh.rh #define dimen(A) eqtb[scaled_base+(A)].hh.rh @@ -37,6 +37,11 @@ static const char _svn_version[] = #define count(A) eqtb[count_base+(A)].hh.rh #define box(A) equiv(box_base+(A)) +/* tex random generators */ +extern int unif_rand(int ); +extern int norm_rand(void ); +extern void init_randoms(int ); + typedef struct { char *text; @@ -62,6 +67,8 @@ static int spindle_size = 0; static spindle *spindles = NULL; static int spindle_index = 0; + + static void luac_store(lua_State * L, int i, int partial, int cattable) { char *st; @@ -102,8 +109,8 @@ static int do_luacprint(lua_State * L, int partial, int deftable) cattable=(int)lua_tonumber(L, 1); startstrings = 2; if (cattable != -1 && cattable != -2 && !valid_catcode_table(cattable)) { - cattable = DEFAULT_CAT_TABLE; - } + cattable = DEFAULT_CAT_TABLE; + } } } if (lua_type(L, startstrings) == LUA_TTABLE) { @@ -123,10 +130,24 @@ static int do_luacprint(lua_State * L, int partial, int deftable) } luac_store(L, i, partial, cattable); } + /* hh: We could use this but it makes not much different, apart from allocating more ropes so less + memory. To be looked into: lua 5.2 buffer mechanism as now we still hash the concatination. This + test was part of the why-eis-luajit-so-slow on crited experiments. */ + /* + if (startstrings == n) { + luac_store(L, n, partial, cattable); + } else { + lua_concat(L,n-startstrings+1); + luac_store(L, startstrings, partial, cattable); + } + */ } return 0; } + + + static int luacwrite(lua_State * L) { return do_luacprint(L, FULL_LINE, NO_CAT_TABLE); @@ -686,7 +707,7 @@ static int setdimen(lua_State * L) int n = lua_gettop(L); if (n == 3 && lua_isstring(L, 1)) { const char *s = lua_tostring(L, 1); - if (strcmp(s, "global") == 0) + if (lua_key_eq(s,global)) isglobal = 1; } return vsetdimen(L, isglobal); @@ -729,7 +750,7 @@ static int setskip(lua_State * L) int n = lua_gettop(L); if (n == 3 && lua_isstring(L, 1)) { const char *s = lua_tostring(L, 1); - if (strcmp(s, "global") == 0) + if (lua_key_eq(s,global)) isglobal = 1; } return vsetskip(L, isglobal); @@ -773,7 +794,7 @@ static int setcount(lua_State * L) int n = lua_gettop(L); if (n == 3 && lua_isstring(L, 1)) { const char *s = lua_tostring(L, 1); - if (strcmp(s, "global") == 0) + if (lua_key_eq(s,global)) isglobal = 1; } return vsetcount(L, isglobal); @@ -816,7 +837,7 @@ static int setattribute(lua_State * L) int n = lua_gettop(L); if (n == 3 && lua_isstring(L, 1)) { const char *s = lua_tostring(L, 1); - if (strcmp(s, "global") == 0) + if (lua_key_eq(s,global)) isglobal = 1; } return vsetattribute(L, isglobal); @@ -868,7 +889,7 @@ static int settoks(lua_State * L) int n = lua_gettop(L); if (n == 3 && lua_isstring(L, 1)) { const char *s = lua_tostring(L, 1); - if (strcmp(s, "global") == 0) + if (lua_key_eq(s,global)) isglobal = 1; } return vsettoks(L, isglobal); @@ -962,7 +983,7 @@ static int setbox(lua_State * L) int n = lua_gettop(L); if (n == 3 && lua_isstring(L, 1)) { const char *s = lua_tostring(L, 1); - if (strcmp(s, "global") == 0) + if (lua_key_eq(s,global)) isglobal = 1; } return vsetbox(L, isglobal); @@ -985,7 +1006,7 @@ static int setcode (lua_State *L, void (*setone)(int,halfword,quarterword), f++; if (n>2 && lua_isstring(L, f)) { const char *s = lua_tostring(L, f); - if (strcmp(s, "global") == 0) { + if (lua_key_eq(s,global)) { level = level_one; f++; } @@ -1054,7 +1075,7 @@ static int setcatcode(lua_State * L) f++; if (n>2 && lua_isstring(L, f)) { const char *s = lua_tostring(L, f); - if (strcmp(s, "global") == 0) { + if (lua_key_eq(s,global)) { level = level_one; f++; } @@ -1094,7 +1115,7 @@ static int setmathcode(lua_State * L) f++; if (n>2 && lua_isstring(L, f)) { const char *s = lua_tostring(L, f); - if (strcmp(s, "global") == 0) { + if (lua_key_eq(s,global)) { level = level_one; f++; } @@ -1149,7 +1170,7 @@ static int setdelcode(lua_State * L) f++; if (n>2 && lua_isstring(L, f)) { const char *s = lua_tostring(L, f); - if (strcmp(s, "global") == 0) { + if (lua_key_eq(s,global)) { level = level_one; f++; } @@ -1215,7 +1236,7 @@ static int settex(lua_State * L) if (is_primitive(texstr)) { if (i == 3 && lua_isstring(L, 1)) { const char *s = lua_tostring(L, 1); - if (strcmp(s, "global") == 0) + if (lua_key_eq(s,global)) isglobal = 1; } cur_cs1 = string_lookup(st, k); @@ -1439,7 +1460,7 @@ static int tex_setmathparm(lua_State * L) if ((n == 3) || (n == 4)) { if (n == 4 && lua_isstring(L, 1)) { const char *s = lua_tostring(L, 1); - if (strcmp(s, "global") == 0) + if (lua_key_eq(s,global)) l = 1; } i = luaL_checkoption(L, (n - 2), NULL, math_param_names); @@ -1600,44 +1621,44 @@ static int getlist(lua_State * L) const char *str; if (lua_isstring(L, 2)) { str = lua_tostring(L, 2); - if (strcmp(str, "page_ins_head") == 0) { + if (lua_key_eq(str,page_ins_head)) { if (vlink(page_ins_head) == page_ins_head) lua_pushnumber(L, null); else lua_pushnumber(L, vlink(page_ins_head)); lua_nodelib_push(L); - } else if (strcmp(str, "contrib_head") == 0) { + } else if (lua_key_eq(str,contrib_head)) { alink(vlink(contrib_head)) = null ; lua_pushnumber(L, vlink(contrib_head)); lua_nodelib_push(L); - } else if (strcmp(str, "page_head") == 0) { + } else if (lua_key_eq(str,page_head)) { alink(vlink(page_head)) = null ;/*hh-ls */ lua_pushnumber(L, vlink(page_head)); lua_nodelib_push(L); - } else if (strcmp(str, "temp_head") == 0) { + } else if (lua_key_eq(str,temp_head)) { alink(vlink(temp_head)) = null ;/*hh-ls */ lua_pushnumber(L, vlink(temp_head)); lua_nodelib_push(L); - } else if (strcmp(str, "hold_head") == 0) { + } else if (lua_key_eq(str,hold_head)) { alink(vlink(hold_head)) = null ;/*hh-ls */ lua_pushnumber(L, vlink(hold_head)); lua_nodelib_push(L); - } else if (strcmp(str, "adjust_head") == 0) { + } else if (lua_key_eq(str,adjust_head)) { alink(vlink(adjust_head)) = null ;/*hh-ls */ lua_pushnumber(L, vlink(adjust_head)); lua_nodelib_push(L); - } else if (strcmp(str, "best_page_break") == 0) { + } else if (lua_key_eq(str,best_page_break)) { lua_pushnumber(L, best_page_break); lua_nodelib_push(L); - } else if (strcmp(str, "least_page_cost") == 0) { + } else if (lua_key_eq(str,least_page_cost)) { lua_pushnumber(L, least_page_cost); - } else if (strcmp(str, "best_size") == 0) { + } else if (lua_key_eq(str,best_size)) { lua_pushnumber(L, best_size); - } else if (strcmp(str, "pre_adjust_head") == 0) { + } else if (lua_key_eq(str,pre_adjust_head)) { alink(vlink(pre_adjust_head)) = null ;/*hh-ls */ lua_pushnumber(L, vlink(pre_adjust_head)); lua_nodelib_push(L); - } else if (strcmp(str, "align_head") == 0) { + } else if (lua_key_eq(str,align_head)) { alink(vlink(align_head)) = null ;/*hh-ls */ lua_pushnumber(L, vlink(align_head)); lua_nodelib_push(L); @@ -1657,16 +1678,16 @@ static int setlist(lua_State * L) halfword n = 0; if (lua_isstring(L, 2)) { str = lua_tostring(L, 2); - if (strcmp(str, "best_size") == 0) { + if (lua_key_eq(str,best_size)) { best_size = (int) lua_tointeger(L, 3); - } else if (strcmp(str, "least_page_cost") == 0) { + } else if (lua_key_eq(str,least_page_cost)) { least_page_cost = (int) lua_tointeger(L, 3); } else { if (!lua_isnil(L, 3)) { n_ptr = check_isnode(L, 3); n = *n_ptr; } - if (strcmp(str, "page_ins_head") == 0) { + if (lua_key_eq(str,page_ins_head)) { if (n == 0) { vlink(page_ins_head) = page_ins_head; } else { @@ -1675,27 +1696,27 @@ static int setlist(lua_State * L) m = tail_of_list(n); vlink(m) = page_ins_head; } - } else if (strcmp(str, "contrib_head") == 0) { + } else if (lua_key_eq(str,contrib_head)) { vlink(contrib_head) = n; if (n == 0) { contrib_tail = contrib_head; } - } else if (strcmp(str, "best_page_break") == 0) { + } else if (lua_key_eq(str,best_page_break)) { best_page_break = n; - } else if (strcmp(str, "page_head") == 0) { + } else if (lua_key_eq(str,page_head)) { vlink(page_head) = n; page_tail = (n == 0 ? page_head : tail_of_list(n)); - } else if (strcmp(str, "temp_head") == 0) { + } else if (lua_key_eq(str,temp_head)) { vlink(temp_head) = n; - } else if (strcmp(str, "hold_head") == 0) { + } else if (lua_key_eq(str,hold_head)) { vlink(hold_head) = n; - } else if (strcmp(str, "adjust_head") == 0) { + } else if (lua_key_eq(str,adjust_head)) { vlink(adjust_head) = n; adjust_tail = (n == 0 ? adjust_head : tail_of_list(n)); - } else if (strcmp(str, "pre_adjust_head") == 0) { + } else if (lua_key_eq(str,pre_adjust_head)) { vlink(pre_adjust_head) = n; pre_adjust_tail = (n == 0 ? pre_adjust_head : tail_of_list(n)); - } else if (strcmp(str, "align_head") == 0) { + } else if (lua_key_eq(str,align_head)) { vlink(align_head) = n; } } @@ -1710,32 +1731,32 @@ static int lua_nest_getfield(lua_State * L) list_state_record *r, **rv = lua_touserdata(L, -2); const char *field = lua_tostring(L, -1); r = *rv; - if (strcmp(field, "mode") == 0) { + if (lua_key_eq(field,mode)) { lua_pushnumber(L, r->mode_field); - } else if (strcmp(field, "head") == 0) { + } else if (lua_key_eq(field,head)) { lua_nodelib_push_fast(L, r->head_field); - } else if (strcmp(field, "tail") == 0) { + } else if (lua_key_eq(field,tail)) { lua_nodelib_push_fast(L, r->tail_field); - } else if (strcmp(field, "delimptr") == 0) { + } else if (lua_key_eq(field,delimptr)) { lua_pushnumber(L, r->eTeX_aux_field); lua_nodelib_push(L); - } else if (strcmp(field, "prevgraf") == 0) { + } else if (lua_key_eq(field,prevgraf)) { lua_pushnumber(L, r->pg_field); - } else if (strcmp(field, "modeline") == 0) { + } else if (lua_key_eq(field,modeline)) { lua_pushnumber(L, r->ml_field); - } else if (strcmp(field, "prevdepth") == 0) { + } else if (lua_key_eq(field,prevdepth)) { lua_pushnumber(L, r->prev_depth_field); - } else if (strcmp(field, "spacefactor") == 0) { + } else if (lua_key_eq(field,spacefactor)) { lua_pushnumber(L, r->space_factor_field); - } else if (strcmp(field, "noad") == 0) { + } else if (lua_key_eq(field,noad)) { lua_pushnumber(L, r->incompleat_noad_field); lua_nodelib_push(L); - } else if (strcmp(field, "dirs") == 0) { + } else if (lua_key_eq(field,dirs)) { lua_pushnumber(L, r->dirs_field); lua_nodelib_push(L); - } else if (strcmp(field, "mathdir") == 0) { + } else if (lua_key_eq(field,mathdir)) { lua_pushboolean(L, r->math_field); - } else if (strcmp(field, "mathstyle") == 0) { + } else if (lua_key_eq(field,mathstyle)) { lua_pushnumber(L, r->math_style_field); } else { lua_pushnil(L); @@ -1750,39 +1771,39 @@ static int lua_nest_setfield(lua_State * L) list_state_record *r, **rv = lua_touserdata(L, -3); const char *field = lua_tostring(L, -2); r = *rv; - if (strcmp(field, "mode") == 0) { + if (lua_key_eq(field,mode)) { i=(int)lua_tonumber(L, -1); r->mode_field = i; - } else if (strcmp(field, "head") == 0) { + } else if (lua_key_eq(field,head)) { n = check_isnode(L, -1); r->head_field = *n; - } else if (strcmp(field, "tail") == 0) { + } else if (lua_key_eq(field,tail)) { n = check_isnode(L, -1); r->tail_field = *n; - } else if (strcmp(field, "delimptr") == 0) { + } else if (lua_key_eq(field,delimptr)) { n = check_isnode(L, -1); r->eTeX_aux_field = *n; - } else if (strcmp(field, "prevgraf") == 0) { + } else if (lua_key_eq(field,prevgraf)) { i=(int)lua_tonumber(L, -1); r->pg_field = i; - } else if (strcmp(field, "modeline") == 0) { + } else if (lua_key_eq(field,modeline)) { i=(int)lua_tonumber(L, -1); r->ml_field = i; - } else if (strcmp(field, "prevdepth") == 0) { + } else if (lua_key_eq(field,prevdepth)) { i=(int)lua_tonumber(L, -1); r->prev_depth_field = i; - } else if (strcmp(field, "spacefactor") == 0) { + } else if (lua_key_eq(field,spacefactor)) { i=(int)lua_tonumber(L, -1); r->space_factor_field = i; - } else if (strcmp(field, "noad") == 0) { + } else if (lua_key_eq(field,noad)) { n = check_isnode(L, -1); r->incompleat_noad_field = *n; - } else if (strcmp(field, "dirs") == 0) { + } else if (lua_key_eq(field,dirs)) { n = check_isnode(L, -1); r->dirs_field = *n; - } else if (strcmp(field, "mathdir") == 0) { + } else if (lua_key_eq(field,mathdir)) { r->math_field = lua_toboolean(L, -1); - } else if (strcmp(field, "mathstyle") == 0) { + } else if (lua_key_eq(field,mathstyle)) { i=(int)lua_tonumber(L, -1); r->math_style_field = i; } @@ -1818,7 +1839,7 @@ static int getnest(lua_State * L) } } else if (lua_isstring(L, 2)) { const char *s = lua_tostring(L, 2); - if (strcmp(s, "ptr") == 0) { + if (lua_key_eq(s,ptr)) { lua_pushnumber(L, nest_ptr); } else { lua_pushnil(L); @@ -1981,21 +2002,21 @@ static int tex_extraprimitives(lua_State * L) for (i = 1; i <= n; i++) { if (lua_isstring(L, i)) { const char *s = lua_tostring(L, i); - if (strcmp(s, "etex") == 0) { + if (lua_key_eq(s,etex)) { mask |= etex_command; - } else if (strcmp(s, "tex") == 0) { + } else if (lua_key_eq(s,tex)) { mask |= tex_command; - } else if (strcmp(s, "core") == 0) { + } else if (lua_key_eq(s,core)) { mask |= core_command; - } else if (strcmp(s, "pdftex") == 0) { + } else if (lua_key_eq(s,pdftex)) { mask |= pdftex_command; - } else if (strcmp(s, "aleph") == 0) { + } else if (lua_key_eq(s,aleph)) { mask |= aleph_command; - } else if (strcmp(s, "omega") == 0) { + } else if (lua_key_eq(s,omega)) { mask |= omega_command; - } else if (strcmp(s, "luatex") == 0) { + } else if (lua_key_eq(s,luatex)) { mask |= luatex_command | umath_command; - } else if (strcmp(s, "umath") == 0) { + } else if (lua_key_eq(s,umath)) { mask |= umath_command; } } @@ -2420,6 +2441,69 @@ static int tex_run_boot(lua_State * L) } +/* tex random generators */ +static int tex_init_rand(lua_State * L) +{ + int sp; + if (!lua_isnumber(L, 1)) { + luaL_error(L, "argument must be a number"); + return 0; + } + sp=(int)lua_tonumber(L, 1); + init_randoms(sp); + return 0; +} + +static int tex_unif_rand(lua_State * L) +{ + int sp; + if (!lua_isnumber(L, 1)) { + luaL_error(L, "argument must be a number"); + return 0; + } + sp=(int)lua_tonumber(L, 1); + lua_pushnumber(L, unif_rand(sp)); + return 1; +} + +static int tex_norm_rand(lua_State * L) +{ + lua_pushnumber(L, norm_rand()); + return 1; +} + +/* Same as lua but with tex rng */ +static int lua_math_random (lua_State *L) +{ + lua_Number rand_max = 0x7fffffff ; + lua_Number r = unif_rand(rand_max) ; + r = (r>=0 ? 0+r : 0-r) ; + r = r / rand_max; + switch (lua_gettop(L)) { /* check number of arguments */ + case 0: { /* no arguments */ + lua_pushnumber(L, r); /* Number between 0 and 1 */ + break; + } + case 1: { /* only upper limit */ + lua_Number u = luaL_checknumber(L, 1); + luaL_argcheck(L, (lua_Number)1.0 <= u, 1, "interval is empty"); + lua_pushnumber(L, floor(r*u) + (lua_Number)(1.0)); /* [1, u] */ + break; + } + case 2: { /* lower and upper limits */ + lua_Number l = luaL_checknumber(L, 1); + lua_Number u = luaL_checknumber(L, 2); + luaL_argcheck(L, l <= u, 2, "interval is empty"); + lua_pushnumber(L, floor(r*(u-l+1)) + l); /* [l, u] */ + break; + } + default: return luaL_error(L, "wrong number of arguments"); + } + return 1; +} + + + static int tex_run_main(lua_State * L) { (void) L; @@ -2436,6 +2520,8 @@ static int tex_run_end(lua_State * L) return 0; } + + void init_tex_table(lua_State * L) { lua_createtable(L, 0, 3); @@ -2455,7 +2541,6 @@ static const struct luaL_Reg texlib[] = { {"run", tex_run_main}, /* may be needed */ {"finish", tex_run_end}, /* may be needed */ {"write", luacwrite}, - {"write", luacwrite}, {"print", luacprint}, {"tprint", luactprint}, {"error", texerror}, @@ -2513,6 +2598,12 @@ static const struct luaL_Reg texlib[] = { {"setmath", tex_setmathparm}, {"getmath", tex_getmathparm}, {"linebreak", tex_run_linebreak}, + /* tex random generators */ + {"init_rand", tex_init_rand}, + {"uniform_rand",tex_unif_rand}, + {"normal_rand", tex_norm_rand}, + {"lua_math_randomseed", tex_init_rand}, /* syntactic sugar */ + {"lua_math_random", lua_math_random}, {NULL, NULL} /* sentinel */ }; @@ -2520,25 +2611,25 @@ int luaopen_tex(lua_State * L) { luaL_register(L, "tex", texlib); /* *INDENT-OFF* */ - make_table(L, "attribute", "getattribute", "setattribute"); - make_table(L, "skip", "getskip", "setskip"); - make_table(L, "dimen", "getdimen", "setdimen"); - make_table(L, "count", "getcount", "setcount"); - make_table(L, "toks", "gettoks", "settoks"); - make_table(L, "box", "getbox", "setbox"); - make_table(L, "sfcode", "getsfcode", "setsfcode"); - make_table(L, "lccode", "getlccode", "setlccode"); - make_table(L, "uccode", "getuccode", "setuccode"); - make_table(L, "catcode", "getcatcode", "setcatcode"); - make_table(L, "mathcode", "getmathcode", "setmathcode"); - make_table(L, "delcode", "getdelcode", "setdelcode"); - make_table(L, "lists", "getlist", "setlist"); - make_table(L, "nest", "getnest", "setnest"); + make_table(L, "attribute", "tex.attribute" ,"getattribute", "setattribute"); + make_table(L, "skip", "tex.skip" ,"getskip", "setskip"); + make_table(L, "dimen", "tex.dimen" ,"getdimen", "setdimen"); + make_table(L, "count", "tex.count" ,"getcount", "setcount"); + make_table(L, "toks", "tex.toks" ,"gettoks", "settoks"); + make_table(L, "box", "tex.box" ,"getbox", "setbox"); + make_table(L, "sfcode", "tex.sfcode" ,"getsfcode", "setsfcode"); + make_table(L, "lccode", "tex.lccode" ,"getlccode", "setlccode"); + make_table(L, "uccode", "tex.uccode" ,"getuccode", "setuccode"); + make_table(L, "catcode", "tex.catcode" ,"getcatcode", "setcatcode"); + make_table(L, "mathcode", "tex.mathcode" ,"getmathcode", "setmathcode"); + make_table(L, "delcode", "tex.delcode" ,"getdelcode", "setdelcode"); + make_table(L, "lists", "tex.lists" ,"getlist", "setlist"); + make_table(L, "nest", "tex.nest" ,"getnest", "setnest"); /* *INDENT-ON* */ init_nest_lib(L); /* make the meta entries */ /* fetch it back */ - luaL_newmetatable(L, "tex_meta"); + luaL_newmetatable(L, "tex.meta"); lua_pushstring(L, "__index"); lua_pushcfunction(L, gettex); lua_settable(L, -3); diff --git a/Build/source/texk/web2c/luatexdir/lua/ltokenlib.c b/Build/source/texk/web2c/luatexdir/lua/ltokenlib.c index b3188bd3f35..c575614c537 100644 --- a/Build/source/texk/web2c/luatexdir/lua/ltokenlib.c +++ b/Build/source/texk/web2c/luatexdir/lua/ltokenlib.c @@ -21,7 +21,7 @@ #include "lua/luatex-api.h" static const char _svn_version[] = - "$Id: ltokenlib.c 4524 2012-12-20 15:38:02Z taco $ $URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/lua/ltokenlib.c $"; + "$Id: ltokenlib.c 4524 2012-12-20 15:38:02Z taco $ $URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/ltokenlib.c $"; #define is_valid_token(L,i) (lua_istable(L,i) && lua_rawlen(L,i)==3) #define get_token_cmd(L,i) lua_rawgeti(L,i,1) diff --git a/Build/source/texk/web2c/luatexdir/lua/luainit.w b/Build/source/texk/web2c/luatexdir/lua/luainit.w index a65ae045f14..66312164133 100644 --- a/Build/source/texk/web2c/luatexdir/lua/luainit.w +++ b/Build/source/texk/web2c/luatexdir/lua/luainit.w @@ -19,7 +19,7 @@ @ @c static const char _svn_version[] = - "$Id: luainit.w 4736 2014-01-08 09:50:31Z luigi $" + "$Id: luainit.w 4881 2014-03-14 12:51:16Z taco $" "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/luainit.w $"; #include "ptexlib.h" @@ -28,6 +28,253 @@ static const char _svn_version[] = #include "lua/luatex-api.h" +/* internalized strings: see luatex-api.h */ +make_lua_key(LTL); +make_lua_key(MathConstants); +make_lua_key(RTT); +make_lua_key(TLT); +make_lua_key(TRT); +make_lua_key(accent); +make_lua_key(action); +make_lua_key(action_id); +make_lua_key(action_type); +make_lua_key(additional); +make_lua_key(adjust_head); +make_lua_key(advance); +make_lua_key(aleph); +make_lua_key(align_head); +make_lua_key(area); +make_lua_key(attr); +make_lua_key(attributes); +make_lua_key(auto_expand); +make_lua_key(best_ins_ptr); +make_lua_key(best_page_break); +make_lua_key(best_size); +make_lua_key(bot); +make_lua_key(bot_accent); +make_lua_key(bottom_left); +make_lua_key(bottom_right); +make_lua_key(box_left); +make_lua_key(box_left_width); +make_lua_key(box_right); +make_lua_key(box_right_width); +make_lua_key(broken_ins); +make_lua_key(broken_ptr); +make_lua_key(cache); +make_lua_key(cal_expand_ratio); +make_lua_key(char); +make_lua_key(characters); +make_lua_key(checksum); +make_lua_key(cidinfo); +make_lua_key(class); +make_lua_key(command); +make_lua_key(commands); +make_lua_key(comment); +make_lua_key(components); +make_lua_key(contrib_head); +make_lua_key(core); +make_lua_key(cost); +make_lua_key(count); +make_lua_key(data); +make_lua_key(degree); +make_lua_key(delim); +make_lua_key(delimptr); +make_lua_key(denom); +make_lua_key(depth); +make_lua_key(designsize); +make_lua_key(dest_id); +make_lua_key(dest_type); +make_lua_key(dir); +make_lua_key(dir_h); +make_lua_key(direction); +make_lua_key(dirs); +make_lua_key(display); +make_lua_key(down); +make_lua_key(dvi_ptr); +make_lua_key(embedding); +make_lua_key(encodingbytes); +make_lua_key(encodingname); +make_lua_key(end); +make_lua_key(etex); +make_lua_key(exactly); +make_lua_key(expansion_factor); +make_lua_key(ext); +make_lua_key(extend); +make_lua_key(extender); +make_lua_key(extensible); +make_lua_key(extra_space); +make_lua_key(fam); +make_lua_key(fast); +make_lua_key(file); +make_lua_key(filename); +make_lua_key(font); +make_lua_key(fonts); +make_lua_key(format); +make_lua_key(fullname); +make_lua_key(global); +make_lua_key(glue_order); +make_lua_key(glue_set); +make_lua_key(glue_sign); +make_lua_key(glyph); +make_lua_key(head); +make_lua_key(height); +make_lua_key(hold_head); +make_lua_key(horiz_variants); +make_lua_key(hyphenchar); +make_lua_key(id); +make_lua_key(image); +make_lua_key(index); +make_lua_key(italic); +make_lua_key(kern); +make_lua_key(kerns); +make_lua_key(lang); +make_lua_key(large_char); +make_lua_key(large_fam); +make_lua_key(last_ins_ptr); +make_lua_key(leader); +make_lua_key(least_page_cost); +make_lua_key(left); +make_lua_key(left_boundary); +make_lua_key(left_protruding); +make_lua_key(level); +make_lua_key(ligatures); +make_lua_key(link_attr); +make_lua_key(list); +make_lua_key(log); +make_lua_key(lua); +make_lua_key(luatex); +make_lua_key(luatex_node); +make_lua_key(mLTL); +make_lua_key(mRTT); +make_lua_key(mTLT); +make_lua_key(mTRT); +make_lua_key(mark); +make_lua_key(mathdir); +make_lua_key(mathkern); +make_lua_key(mathstyle); +make_lua_key(mid); +make_lua_key(mode); +make_lua_key(modeline); +make_lua_key(name); +make_lua_key(named_id); +make_lua_key(new_window); +make_lua_key(next); +make_lua_key(no); +make_lua_key(noad); +make_lua_key(node); +make_lua_key(node_properties); +make_lua_key(node_properties_indirect); +make_lua_key(nomath); +make_lua_key(nop); +make_lua_key(nucleus); +make_lua_key(num); +make_lua_key(number); +make_lua_key(objnum); +make_lua_key(omega); +make_lua_key(ordering); +make_lua_key(pLTL); +make_lua_key(pRTT); +make_lua_key(pTLT); +make_lua_key(pTRT); +make_lua_key(page_head); +make_lua_key(page_ins_head); +make_lua_key(parameters); +make_lua_key(pdftex); +make_lua_key(pen_broken); +make_lua_key(pen_inter); +make_lua_key(penalty); +make_lua_key(pop); +make_lua_key(post); +make_lua_key(pre); +make_lua_key(pre_adjust_head); +make_lua_key(prev); +make_lua_key(prevdepth); +make_lua_key(prevgraf); +make_lua_key(psname); +make_lua_key(ptr); +make_lua_key(push); +make_lua_key(quad); +make_lua_key(ref_count); +make_lua_key(reg); +make_lua_key(registry); +make_lua_key(renew); +make_lua_key(rep); +make_lua_key(replace); +make_lua_key(right); +make_lua_key(right_boundary); +make_lua_key(right_protruding); +make_lua_key(rule); +make_lua_key(scale); +make_lua_key(script); +make_lua_key(scriptscript); +make_lua_key(shift); +make_lua_key(shrink); +make_lua_key(shrink_order); +make_lua_key(size); +make_lua_key(skewchar); +make_lua_key(slant); +make_lua_key(slot); +make_lua_key(small_char); +make_lua_key(small_fam); +make_lua_key(space); +make_lua_key(space_shrink); +make_lua_key(space_stretch); +make_lua_key(spacefactor); +make_lua_key(spec); +make_lua_key(special); +make_lua_key(stack); +make_lua_key(start); +make_lua_key(step); +make_lua_key(stream); +make_lua_key(stretch); +make_lua_key(stretch_order); +make_lua_key(string); +make_lua_key(style); +make_lua_key(sub); +make_lua_key(subst_ex_font); +make_lua_key(subtype); +make_lua_key(sup); +make_lua_key(supplement); +make_lua_key(surround); +make_lua_key(tail); +make_lua_key(temp_head); +make_lua_key(term); +make_lua_key(term_and_log); +make_lua_key(tex); +make_lua_key(text); +make_lua_key(thread_attr); +make_lua_key(thread_id); +make_lua_key(top); +make_lua_key(top_accent); +make_lua_key(top_left); +make_lua_key(top_right); +make_lua_key(tounicode); +make_lua_key(transform); +make_lua_key(type); +make_lua_key(uchyph); +make_lua_key(umath); +make_lua_key(units_per_em); +make_lua_key(used); +make_lua_key(user_id); +make_lua_key(value); +make_lua_key(version); +make_lua_key(vert_variants); +make_lua_key(width); +make_lua_key(writable); +make_lua_key(x_height); +make_lua_key(xoffset); +make_lua_key(xyz_zoom); +make_lua_key(yoffset); + +make_lua_key(immediate); +make_lua_key(compresslevel); +make_lua_key(objcompression); +make_lua_key(direct); +make_lua_key(page); +make_lua_key(streamfile); +make_lua_key(annot); +make_lua_key(lua_functions); + @ TH: TODO @@ -118,8 +365,10 @@ const_string LUATEX_IHELP[] = { "", " --luaonly run a lua file, then exit", " --luaconly byte-compile a lua file, then exit", + " --luahashchars the bits used by current Lua interpreter for strings hashing", #ifdef LuajitTeX " --jiton turns the JIT compiler on (default off)", + " --jithash=STRING choose the hash function for the lua strings (lua51|luajit20: default lua51)", #endif "", "See the reference manual for more information about the startup process.", @@ -158,6 +407,9 @@ static char *ex_selfdir(char *argv0) #endif } + + + @ @c static void prepare_cmdline(lua_State * L, char **av, int ac, int zero_offset) @@ -187,8 +439,11 @@ static string user_progname = NULL; char *startup_filename = NULL; int lua_only = 0; int lua_offset = 0; +unsigned char show_luahashchars = 0; + #ifdef LuajitTeX int luajiton = 0; +char *jithash_hashname = NULL; #endif int safer_option = 0; @@ -208,8 +463,10 @@ static struct option long_options[] = { {"fmt", 1, 0, 0}, {"lua", 1, 0, 0}, {"luaonly", 0, 0, 0}, +{"luahashchars", 0, 0, 0}, #ifdef LuajitTeX {"jiton", 0, 0, 0}, +{"jithash", 1, 0, 0}, #endif {"safer", 0, &safer_option, 1}, {"nosocket", 0, &nosocket_option, 1}, @@ -252,6 +509,20 @@ static struct option long_options[] }; @ @c +int lua_numeric_field_by_index(lua_State * L, int name_index, int dflt) +{ + register int i = dflt; + lua_rawgeti(L, LUA_REGISTRYINDEX, name_index); /* fetch the stringptr */ + lua_rawget(L, -2); + if (lua_type(L, -1) == LUA_TNUMBER) { + i = lua_roundnumber(L, -1); + } + lua_pop(L, 1); + return i; +} + + +@ @c static void parse_options(int ac, char **av) { #ifdef WIN32 @@ -278,8 +549,11 @@ static void parse_options(int ac, char **av) if (g == -1) /* End of arguments, exit the loop. */ break; - if (g == '?') /* Unknown option. */ - continue; + if (g == '?') { /* Unknown option. */ + if (!luainit) + fprintf(stderr,"%s: unrecognized option '%s'\n", argv[0], argv[optind-1]); + continue; + } assert(g == 0); /* We have no short option names. */ @@ -294,7 +568,21 @@ static void parse_options(int ac, char **av) #ifdef LuajitTeX } else if (ARGUMENT_IS("jiton")) { luajiton = 1; -#endif + } else if (ARGUMENT_IS("jithash")) { + size_t len = strlen(optarg); + if (len<16) + jithash_hashname = optarg; + else{ + WARNING2("hash name truncated to 15 characters from %d. (%s)", + (int) len, optarg); + jithash_hashname = (string) xmalloc(16); + strncpy(jithash_hashname, optarg, 15); + jithash_hashname[15] = 0; + } +#endif + + } else if (ARGUMENT_IS("luahashchars")) { + show_luahashchars = 1; } else if (ARGUMENT_IS("kpathsea-debug")) { kpathsea_debug |= atoi(optarg); @@ -908,6 +1196,257 @@ void lua_initialize(int ac, char **av) luainterpreter(); + /* init internalized strings */ + init_lua_key(LTL); + init_lua_key(MathConstants); + init_lua_key(RTT); + init_lua_key(TLT); + init_lua_key(TRT); + init_lua_key(accent); + init_lua_key(action); + init_lua_key(action_id); + init_lua_key(action_type); + init_lua_key(additional); + init_lua_key(adjust_head); + init_lua_key(advance); + init_lua_key(aleph); + init_lua_key(align_head); + init_lua_key(area); + init_lua_key(attr); + init_lua_key(attributes); + init_lua_key(auto_expand); + init_lua_key(best_ins_ptr); + init_lua_key(best_page_break); + init_lua_key(best_size); + init_lua_key(bot); + init_lua_key(bot_accent); + init_lua_key(bottom_left); + init_lua_key(bottom_right); + init_lua_key(box_left); + init_lua_key(box_left_width); + init_lua_key(box_right); + init_lua_key(box_right_width); + init_lua_key(broken_ins); + init_lua_key(broken_ptr); + init_lua_key(cache); + init_lua_key(cal_expand_ratio); + init_lua_key(char); + init_lua_key(characters); + init_lua_key(checksum); + init_lua_key(cidinfo); + init_lua_key(class); + init_lua_key(command); + init_lua_key(commands); + init_lua_key(comment); + init_lua_key(components); + init_lua_key(contrib_head); + init_lua_key(core); + init_lua_key(cost); + init_lua_key(count); + init_lua_key(data); + init_lua_key(degree); + init_lua_key(delim); + init_lua_key(delimptr); + init_lua_key(denom); + init_lua_key(depth); + init_lua_key(designsize); + init_lua_key(dest_id); + init_lua_key(dest_type); + init_lua_key(dir); + init_lua_key(dir_h); + init_lua_key(direction); + init_lua_key(dirs); + init_lua_key(display); + init_lua_key(down); + init_lua_key(dvi_ptr); + init_lua_key(embedding); + init_lua_key(encodingbytes); + init_lua_key(encodingname); + init_lua_key(end); + init_lua_key(etex); + init_lua_key(exactly); + init_lua_key(expansion_factor); + init_lua_key(ext); + init_lua_key(extend); + init_lua_key(extender); + init_lua_key(extensible); + init_lua_key(extra_space); + init_lua_key(fam); + init_lua_key(fast); + init_lua_key(file); + init_lua_key(filename); + init_lua_key(font); + init_lua_key(fonts); + init_lua_key(format); + init_lua_key(fullname); + init_lua_key(global); + init_lua_key(glue_order); + init_lua_key(glue_set); + init_lua_key(glue_sign); + init_lua_key(glyph); + init_lua_key(head); + init_lua_key(height); + init_lua_key(hold_head); + init_lua_key(horiz_variants); + init_lua_key(hyphenchar); + init_lua_key(id); + init_lua_key(image); + init_lua_key(index); + init_lua_key(italic); + init_lua_key(kern); + init_lua_key(kerns); + init_lua_key(lang); + init_lua_key(large_char); + init_lua_key(large_fam); + init_lua_key(last_ins_ptr); + init_lua_key(leader); + init_lua_key(least_page_cost); + init_lua_key(left); + init_lua_key(left_boundary); + init_lua_key(left_protruding); + init_lua_key(level); + init_lua_key(ligatures); + init_lua_key(link_attr); + init_lua_key(list); + init_lua_key(log); + init_lua_key(lua); + init_lua_key(luatex); + init_lua_key(mark); + init_lua_key(mathdir); + init_lua_key(mathkern); + init_lua_key(mathstyle); + init_lua_key(mid); + init_lua_key(mode); + init_lua_key(modeline); + init_lua_key(name); + init_lua_key(named_id); + init_lua_key(new_window); + init_lua_key(next); + init_lua_key(no); + init_lua_key(noad); + init_lua_key(node); + init_lua_key(nomath); + init_lua_key(nop); + init_lua_key(nucleus); + init_lua_key(num); + init_lua_key(number); + init_lua_key(objnum); + init_lua_key(omega); + init_lua_key(ordering); + init_lua_key(page_head); + init_lua_key(page_ins_head); + init_lua_key(parameters); + init_lua_key(pdftex); + init_lua_key(pen_broken); + init_lua_key(pen_inter); + init_lua_key(penalty); + init_lua_key(pop); + init_lua_key(post); + init_lua_key(pre); + init_lua_key(pre_adjust_head); + init_lua_key(prev); + init_lua_key(prevdepth); + init_lua_key(prevgraf); + init_lua_key(psname); + init_lua_key(ptr); + init_lua_key(push); + init_lua_key(quad); + init_lua_key(ref_count); + init_lua_key(reg); + init_lua_key(registry); + init_lua_key(renew); + init_lua_key(rep); + init_lua_key(replace); + init_lua_key(right); + init_lua_key(right_boundary); + init_lua_key(right_protruding); + init_lua_key(rule); + init_lua_key(scale); + init_lua_key(script); + init_lua_key(scriptscript); + init_lua_key(shift); + init_lua_key(shrink); + init_lua_key(shrink_order); + init_lua_key(size); + init_lua_key(skewchar); + init_lua_key(slant); + init_lua_key(slot); + init_lua_key(small_char); + init_lua_key(small_fam); + init_lua_key(space); + init_lua_key(space_shrink); + init_lua_key(space_stretch); + init_lua_key(spacefactor); + init_lua_key(spec); + init_lua_key(special); + init_lua_key(stack); + init_lua_key(start); + init_lua_key(step); + init_lua_key(stream); + init_lua_key(stretch); + init_lua_key(stretch_order); + init_lua_key(string); + init_lua_key(style); + init_lua_key(sub); + init_lua_key(subst_ex_font); + init_lua_key(subtype); + init_lua_key(sup); + init_lua_key(supplement); + init_lua_key(surround); + init_lua_key(tail); + init_lua_key(temp_head); + init_lua_key(term); + init_lua_key(tex); + init_lua_key(text); + init_lua_key(thread_attr); + init_lua_key(thread_id); + init_lua_key(top); + init_lua_key(top_accent); + init_lua_key(top_left); + init_lua_key(top_right); + init_lua_key(tounicode); + init_lua_key(transform); + init_lua_key(type); + init_lua_key(uchyph); + init_lua_key(umath); + init_lua_key(units_per_em); + init_lua_key(used); + init_lua_key(user_id); + init_lua_key(value); + init_lua_key(version); + init_lua_key(vert_variants); + init_lua_key(width); + init_lua_key(writable); + init_lua_key(x_height); + init_lua_key(xoffset); + init_lua_key(xyz_zoom); + init_lua_key(yoffset); + init_lua_key_alias(luatex_node, "luatex.node"); + init_lua_key_alias(mLTL,"-LTL"); + init_lua_key_alias(mRTT,"-RTT"); + init_lua_key_alias(mTLT,"-TLT"); + init_lua_key_alias(mTRT,"-TRT"); + init_lua_key_alias(node_properties,"node.properties"); + init_lua_key_alias(node_properties_indirect,"node.properties.indirect"); + init_lua_key_alias(pLTL,"+LTL"); + init_lua_key_alias(pRTT,"+RTT"); + init_lua_key_alias(pTLT,"+TLT"); + init_lua_key_alias(pTRT,"+TRT"); + init_lua_key_alias(term_and_log,"term and log"); + init_lua_key_alias(lua_functions,"lua.functions"); + + init_lua_key(immediate); + init_lua_key(compresslevel); + init_lua_key(objcompression); + init_lua_key(direct); + init_lua_key(page); + init_lua_key(streamfile); + init_lua_key(annot); + + lua_pushstring(Luas,"lua.functions"); + lua_newtable(Luas); + lua_settable(Luas,LUA_REGISTRYINDEX); + prepare_cmdline(Luas, argv, argc, lua_offset); /* collect arguments */ setup_lua_path(Luas); diff --git a/Build/source/texk/web2c/luatexdir/lua/luajitstuff.w b/Build/source/texk/web2c/luatexdir/lua/luajitstuff.w index 0ae3f3f0754..6c20e9d10fb 100644 --- a/Build/source/texk/web2c/luatexdir/lua/luajitstuff.w +++ b/Build/source/texk/web2c/luatexdir/lua/luajitstuff.w @@ -34,7 +34,7 @@ int luastate_bytes = 0; int lua_active = 0; @ @c -void make_table(lua_State * L, const char *tab, const char *getfunc, +void make_table(lua_State * L, const char *tab, const char *mttab, const char *getfunc, const char *setfunc) { /* make the table *//* |[{<tex>}]| */ @@ -45,7 +45,7 @@ void make_table(lua_State * L, const char *tab, const char *getfunc, lua_pushstring(L, tab); /* |[{<tex>},"dimen"]| */ lua_gettable(L, -2); /* |[{<tex>},{<dimen>}]| */ /* make the meta entries */ - luaL_newmetatable(L, tab); /* |[{<tex>},{<dimen>},{<dimen_m>}]| */ + luaL_newmetatable(L, mttab); /* |[{<tex>},{<dimen>},{<dimen_m>}]| */ lua_pushstring(L, "__index"); /* |[{<tex>},{<dimen>},{<dimen_m>},"__index"]| */ lua_pushstring(L, getfunc); /* |[{<tex>},{<dimen>},{<dimen_m>},"__index","getdimen"]| */ lua_gettable(L, -5); /* |[{<tex>},{<dimen>},{<dimen_m>},"__index",<tex.getdimen>]| */ @@ -95,6 +95,32 @@ static int my_luapanic(lua_State * L) return 0; } + +@ @c +void luafunctioncall(int slot) +{ + int i ; + int stacktop = lua_gettop(Luas); + lua_active++; + lua_rawgeti(Luas, LUA_REGISTRYINDEX, lua_key_index(lua_functions)); + lua_gettable(Luas, LUA_REGISTRYINDEX); + lua_rawgeti(Luas, -1,slot); + if (lua_isfunction(Luas,-1)) { + lua_pushcfunction(Luas, lua_traceback); /* push traceback function */ + lua_insert(Luas, -2); /* put it under chunk */ + lua_pushnumber(Luas, slot); + i = lua_pcall(Luas, 1, 0, -2); + if (i != 0) { + lua_gc(Luas, LUA_GCCOLLECT, 0); + Luas = luatex_error(Luas, (i == LUA_ERRRUN ? 0 : 1)); + } + } + lua_settop(Luas,stacktop); + lua_active--; +} + + + @ @c static const luaL_Reg lualibs[] = { {"", luaopen_base}, @@ -199,6 +225,25 @@ static int luatex_dofile (lua_State *L) { void luainterpreter(void) { lua_State *L; + + if (jithash_hashname==NULL){ + /* default lua51 */ + luajittex_choose_hash_function = 0; + jithash_hashname = (char *) xmalloc(strlen("lua51")+1); + jithash_hashname = strcpy ( jithash_hashname, "lua51"); + } else { + if (strcmp((const char*)jithash_hashname,"lua51")==0){ + luajittex_choose_hash_function = 0; + }else if (strcmp((const char*)jithash_hashname,"luajit20")==0){ + luajittex_choose_hash_function = 1; + } else { + /* default lua51 */ + luajittex_choose_hash_function = 0; + jithash_hashname = strcpy ( jithash_hashname, "lua51"); + } + } + + L = luaL_newstate() ; /*L = lua_newstate(my_luaalloc, NULL);*/ if (L == NULL) { @@ -217,7 +262,6 @@ void luainterpreter(void) } - lua_pushcfunction(L,luatex_dofile); lua_setglobal(L, "dofile"); lua_pushcfunction(L,luatex_loadfile); @@ -322,6 +366,8 @@ void luainterpreter(void) (void) hide_lua_value(L, "lfs", "rmdir"); (void) hide_lua_value(L, "lfs", "mkdir"); } + /* fprintf(stdout, "\nLuajitTeX default hash function type:%s\n", */ + /* jithash_hashname); */ Luas = L; } @@ -392,7 +438,7 @@ int lua_traceback(lua_State * L) } @ @c -static void luacall(int p, int nameptr, boolean is_string) +static void luacall(int p, int nameptr, boolean is_string) /* hh-ls: optimized lua_id resolving */ { LoadS ls; int i; @@ -422,18 +468,19 @@ static void luacall(int p, int nameptr, boolean is_string) if (nameptr > 0) { int l = 0; /* not used */ lua_id = tokenlist_to_cstring(nameptr, 1, &l); + i = lua_load(Luas, getS, &ls, lua_id); + xfree(lua_id); } else if (nameptr < 0) { - char *tmp = get_lua_name((nameptr + 65536)); - if (tmp != NULL) - lua_id = xstrdup(tmp); - else - lua_id = xstrdup("\\latelua "); + lua_id = get_lua_name((nameptr + 65536)); + if (lua_id != NULL) { + i = lua_load(Luas, getS, &ls, lua_id); + xfree(lua_id); + } else { + i = lua_load(Luas, getS, &ls, "\\latelua "); + } } else { - lua_id = xmalloc(20); - snprintf((char *) lua_id, 20, "\\latelua "); + i = lua_load(Luas, getS, &ls, "\\latelua "); } - - i = lua_load(Luas, getS, &ls, lua_id); if (i != 0) { Luas = luatex_error(Luas, (i == LUA_ERRSYNTAX ? 0 : 1)); } else { @@ -448,7 +495,6 @@ static void luacall(int p, int nameptr, boolean is_string) Luas = luatex_error(Luas, (i == LUA_ERRRUN ? 0 : 1)); } } - xfree(lua_id); xfree(ls.s); } lua_active--; @@ -468,7 +514,7 @@ void late_lua(PDF pdf, halfword p) } @ @c -void luatokencall(int p, int nameptr) +void luatokencall(int p, int nameptr) /* hh-ls: optimized lua_id resolving */ { LoadS ls; int i, l; @@ -483,16 +529,19 @@ void luatokencall(int p, int nameptr) if (ls.size > 0) { if (nameptr > 0) { lua_id = tokenlist_to_cstring(nameptr, 1, &l); + i = lua_load(Luas, getS, &ls, lua_id); + xfree(lua_id); } else if (nameptr < 0) { - char *tmp = get_lua_name((nameptr + 65536)); - if (tmp != NULL) - lua_id = xstrdup(tmp); - else - lua_id = xstrdup("\\directlua "); + lua_id = get_lua_name((nameptr + 65536)); + if (lua_id != NULL) { + i = lua_load(Luas, getS, &ls, lua_id); + xfree(lua_id); + } else { + i = lua_load(Luas, getS, &ls, "\\directlua "); + } } else { - lua_id = xstrdup("\\directlua "); + i = lua_load(Luas, getS, &ls, "\\directlua "); } - i = lua_load(Luas, getS, &ls, lua_id); xfree(s); if (i != 0) { Luas = luatex_error(Luas, (i == LUA_ERRSYNTAX ? 0 : 1)); @@ -508,7 +557,6 @@ void luatokencall(int p, int nameptr) Luas = luatex_error(Luas, (i == LUA_ERRRUN ? 0 : 1)); } } - xfree(lua_id); } lua_active--; } diff --git a/Build/source/texk/web2c/luatexdir/lua/luanode.w b/Build/source/texk/web2c/luatexdir/lua/luanode.w index 5e50acc8e02..879b0b3d27e 100644 --- a/Build/source/texk/web2c/luatexdir/lua/luanode.w +++ b/Build/source/texk/web2c/luatexdir/lua/luanode.w @@ -22,8 +22,8 @@ nodes are removedor inserted, temp nodes don't interfere */ @ @c static const char _svn_version[] = - "$Id: luanode.w 4775 2014-02-07 12:36:34Z luigi $" - "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/luanode.w $"; + "$Id: luanode.w 4442 2012-05-25 22:40:34Z hhenkel $" + "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/lua/luanode.w $"; #include "ptexlib.h" #include "lua/luatex-api.h" diff --git a/Build/source/texk/web2c/luatexdir/lua/luastuff.w b/Build/source/texk/web2c/luatexdir/lua/luastuff.w index 17789d04d3c..e9942881baf 100644 --- a/Build/source/texk/web2c/luatexdir/lua/luastuff.w +++ b/Build/source/texk/web2c/luatexdir/lua/luastuff.w @@ -19,7 +19,7 @@ @ @c static const char _svn_version[] = - "$Id: luastuff.w 4730 2014-01-03 14:44:14Z taco $" + "$Id: luastuff.w 4877 2014-03-14 01:26:05Z luigi $" "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/luastuff.w $"; #include "ptexlib.h" @@ -33,7 +33,7 @@ int luastate_bytes = 0; int lua_active = 0; @ @c -void make_table(lua_State * L, const char *tab, const char *getfunc, +void make_table(lua_State * L, const char *tab, const char *mttab, const char *getfunc, const char *setfunc) { /* make the table *//* |[{<tex>}]| */ @@ -44,7 +44,7 @@ void make_table(lua_State * L, const char *tab, const char *getfunc, lua_pushstring(L, tab); /* |[{<tex>},"dimen"]| */ lua_gettable(L, -2); /* |[{<tex>},{<dimen>}]| */ /* make the meta entries */ - luaL_newmetatable(L, tab); /* |[{<tex>},{<dimen>},{<dimen_m>}]| */ + luaL_newmetatable(L, mttab); /* |[{<tex>},{<dimen>},{<dimen_m>}]| */ lua_pushstring(L, "__index"); /* |[{<tex>},{<dimen>},{<dimen_m>},"__index"]| */ lua_pushstring(L, getfunc); /* |[{<tex>},{<dimen>},{<dimen_m>},"__index","getdimen"]| */ lua_gettable(L, -5); /* |[{<tex>},{<dimen>},{<dimen_m>},"__index",<tex.getdimen>]| */ @@ -92,6 +92,31 @@ static int my_luapanic(lua_State * L) return 0; } + +@ @c +void luafunctioncall(int slot) +{ + int i ; + int stacktop = lua_gettop(Luas); + lua_active++; + lua_rawgeti(Luas, LUA_REGISTRYINDEX, lua_key_index(lua_functions)); + lua_gettable(Luas, LUA_REGISTRYINDEX); + lua_rawgeti(Luas, -1,slot); + if (lua_isfunction(Luas,-1)) { + lua_pushcfunction(Luas, lua_traceback); /* push traceback function */ + lua_insert(Luas, -2); /* put it under chunk */ + lua_pushnumber(Luas, slot); + i = lua_pcall(Luas, 1, 0, -2); + if (i != 0) { + lua_gc(Luas, LUA_GCCOLLECT, 0); + Luas = luatex_error(Luas, (i == LUA_ERRRUN ? 0 : 1)); + } + } + lua_settop(Luas,stacktop); + lua_active--; +} + + @ @c static const luaL_Reg lualibs[] = { {"", luaopen_base}, @@ -360,7 +385,7 @@ int lua_traceback(lua_State * L) } @ @c -static void luacall(int p, int nameptr, boolean is_string) +static void luacall(int p, int nameptr, boolean is_string) /* hh-ls: optimized lua_id resolving */ { LoadS ls; int i; @@ -390,18 +415,19 @@ static void luacall(int p, int nameptr, boolean is_string) if (nameptr > 0) { int l = 0; /* not used */ lua_id = tokenlist_to_cstring(nameptr, 1, &l); + i = lua_load(Luas, getS, &ls, lua_id, NULL); + xfree(lua_id); } else if (nameptr < 0) { - char *tmp = get_lua_name((nameptr + 65536)); - if (tmp != NULL) - lua_id = xstrdup(tmp); - else - lua_id = xstrdup("\\latelua "); + lua_id = get_lua_name((nameptr + 65536)); + if (lua_id != NULL) { + i = lua_load(Luas, getS, &ls, lua_id, NULL); + xfree(lua_id); + } else { + i = lua_load(Luas, getS, &ls, "\\latelua ", NULL); + } } else { - lua_id = xmalloc(20); - snprintf((char *) lua_id, 20, "\\latelua "); + i = lua_load(Luas, getS, &ls, "\\latelua ", NULL); } - - i = lua_load(Luas, getS, &ls, lua_id, NULL); if (i != 0) { Luas = luatex_error(Luas, (i == LUA_ERRSYNTAX ? 0 : 1)); } else { @@ -416,7 +442,6 @@ static void luacall(int p, int nameptr, boolean is_string) Luas = luatex_error(Luas, (i == LUA_ERRRUN ? 0 : 1)); } } - xfree(lua_id); xfree(ls.s); } lua_active--; @@ -436,7 +461,7 @@ void late_lua(PDF pdf, halfword p) } @ @c -void luatokencall(int p, int nameptr) +void luatokencall(int p, int nameptr) /* hh-ls: optimized lua_id resolving */ { LoadS ls; int i, l; @@ -451,16 +476,19 @@ void luatokencall(int p, int nameptr) if (ls.size > 0) { if (nameptr > 0) { lua_id = tokenlist_to_cstring(nameptr, 1, &l); + i = lua_load(Luas, getS, &ls, lua_id, NULL); + xfree(lua_id); } else if (nameptr < 0) { - char *tmp = get_lua_name((nameptr + 65536)); - if (tmp != NULL) - lua_id = xstrdup(tmp); - else - lua_id = xstrdup("\\directlua "); + lua_id = get_lua_name((nameptr + 65536)); + if (lua_id != NULL) { + i = lua_load(Luas, getS, &ls, lua_id, NULL); + xfree(lua_id); + } else { + i = lua_load(Luas, getS, &ls, "\\directlua ", NULL); + } } else { - lua_id = xstrdup("\\directlua "); + i = lua_load(Luas, getS, &ls, "\\directlua ", NULL); } - i = lua_load(Luas, getS, &ls, lua_id, NULL); xfree(s); if (i != 0) { Luas = luatex_error(Luas, (i == LUA_ERRSYNTAX ? 0 : 1)); @@ -476,7 +504,6 @@ void luatokencall(int p, int nameptr) Luas = luatex_error(Luas, (i == LUA_ERRRUN ? 0 : 1)); } } - xfree(lua_id); } lua_active--; } diff --git a/Build/source/texk/web2c/luatexdir/lua/luatex-api.h b/Build/source/texk/web2c/luatexdir/lua/luatex-api.h index 075c2882e90..3a88eaf54d7 100644 --- a/Build/source/texk/web2c/luatexdir/lua/luatex-api.h +++ b/Build/source/texk/web2c/luatexdir/lua/luatex-api.h @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */ -/* $Id: luatex-api.h 4718 2014-01-02 15:35:31Z taco $ */ +/* $Id: luatex-api.h 4877 2014-03-14 01:26:05Z luigi $ */ #ifndef LUATEX_API_H # define LUATEX_API_H 1 @@ -43,7 +43,7 @@ typedef struct LoadS { extern lua_State *Luas; -extern void make_table(lua_State * L, const char *tab, const char *getfunc, +extern void make_table(lua_State * L, const char *tab, const char *mttab, const char *getfunc, const char *setfunc); extern int luac_main(int argc, char *argv[]); @@ -71,6 +71,7 @@ extern int luaopen_zlib(lua_State * L); extern int luaopen_gzip(lua_State * L); extern int luaopen_ff(lua_State * L); extern int luaopen_profiler(lua_State * L); +extern int luaopen_bit32(lua_State * L); extern int luaopen_socket_core(lua_State * L); extern int luaopen_mime_core(lua_State * L); @@ -131,8 +132,18 @@ extern void undump_luac_registers(void); extern int lua_only; #ifdef LuajitTeX extern int luajiton; +extern char *jithash_hashname ; +LUA_API int luajittex_choose_hash_function ; #endif + +#ifdef LuajitTeX +#define LUAJITTEX_HASHCHARS 6 /* todo: It must be like that one on lj_str.c */ +#else +#define LUATEX_HASHCHARS 6 /* todo: It must be LUAI_HASHLIMIT! */ +#endif +extern unsigned char show_luahashchars ; + extern void unhide_lua_table(lua_State * lua, const char *name, int r); extern int hide_lua_table(lua_State * lua, const char *name); @@ -217,4 +228,309 @@ extern char **environ; #ifdef __cplusplus } #endif + +/* + Same as in lnodelib.c, but with prefix G_ for now. + These macros create and access pointers (indices) to keys which is faster. The + shortcuts are created as part of the initialization. + +*/ + +/*#define init_luaS_index(a) do { */ +#define init_lua_key(a) do { \ + lua_pushliteral(Luas,#a); \ + luaS_##a##_ptr = lua_tostring(Luas,-1); \ + luaS_##a##_index = luaL_ref (Luas,LUA_REGISTRYINDEX); \ +} while (0) + + /*#define init_luaS_index_s(a,b) do { */ +#define init_lua_key_alias(a,b) do { \ + lua_pushliteral(Luas,b); \ + luaS_##a##_ptr = lua_tostring(Luas,-1); \ + luaS_##a##_index = luaL_ref (Luas,LUA_REGISTRYINDEX); \ +} while (0) + + /*#define make_luaS_index(a) */ +#define make_lua_key(a) \ + int luaS_##a##_index = 0; \ + const char * luaS_##a##_ptr = NULL + + +/*#define luaS_ptr_eq(a,b) (a==luaS_##b##_ptr)*/ +#define lua_key_eq(a,b) (a==luaS_##b##_ptr) + +#define luaS_index(a) luaS_##a##_index +#define lua_key_index(a) luaS_##a##_index +#define lua_key(a) luaS_##a##_ptr +#define use_lua_key(a) \ + extern int luaS_##a##_index ; \ + extern const char * luaS_##a##_ptr + + +#define lua_key_rawgeti(a) \ + lua_rawgeti(L, LUA_REGISTRYINDEX, luaS_##a##_index);\ + lua_rawget(L, -2) + + +#define lua_roundnumber(a,b) (int)floor((double)lua_tonumber(L,-1)+0.5) +extern int lua_numeric_field_by_index(lua_State *, int , int); + + #endif /* LUATEX_API_H */ + + + + +/* */ +/* These keys have to available to different files */ +/* */ + + +use_lua_key(LTL); +use_lua_key(MathConstants); +use_lua_key(RTT); +use_lua_key(TLT); +use_lua_key(TRT); +use_lua_key(accent); +use_lua_key(action); +use_lua_key(action_id); +use_lua_key(action_type); +use_lua_key(additional); +use_lua_key(adjust_head); +use_lua_key(advance); +use_lua_key(aleph); +use_lua_key(align_head); +use_lua_key(area); +use_lua_key(attr); +use_lua_key(attributes); +use_lua_key(auto_expand); +use_lua_key(best_ins_ptr); +use_lua_key(best_page_break); +use_lua_key(best_size); +use_lua_key(bot); +use_lua_key(bot_accent); +use_lua_key(bottom_left); +use_lua_key(bottom_right); +use_lua_key(box_left); +use_lua_key(box_left_width); +use_lua_key(box_right); +use_lua_key(box_right_width); +use_lua_key(broken_ins); +use_lua_key(broken_ptr); +use_lua_key(cache); +use_lua_key(cal_expand_ratio); +use_lua_key(char); +use_lua_key(characters); +use_lua_key(checksum); +use_lua_key(cidinfo); +use_lua_key(class); +use_lua_key(command); +use_lua_key(commands); +use_lua_key(comment); +use_lua_key(components); +use_lua_key(contrib_head); +use_lua_key(core); +use_lua_key(cost); +use_lua_key(count); +use_lua_key(data); +use_lua_key(degree); +use_lua_key(delim); +use_lua_key(delimptr); +use_lua_key(denom); +use_lua_key(depth); +use_lua_key(designsize); +use_lua_key(dest_id); +use_lua_key(dest_type); +use_lua_key(dir); +use_lua_key(dir_h); +use_lua_key(direction); +use_lua_key(dirs); +use_lua_key(display); +use_lua_key(down); +use_lua_key(dvi_ptr); +use_lua_key(embedding); +use_lua_key(encodingbytes); +use_lua_key(encodingname); +use_lua_key(end); +use_lua_key(etex); +use_lua_key(exactly); +use_lua_key(expansion_factor); +use_lua_key(ext); +use_lua_key(extend); +use_lua_key(extender); +use_lua_key(extensible); +use_lua_key(extra_space); +use_lua_key(fam); +use_lua_key(fast); +use_lua_key(file); +use_lua_key(filename); +use_lua_key(font); +use_lua_key(fonts); +use_lua_key(format); +use_lua_key(fullname); +use_lua_key(global); +use_lua_key(glue_order); +use_lua_key(glue_set); +use_lua_key(glue_sign); +use_lua_key(glyph); +use_lua_key(head); +use_lua_key(height); +use_lua_key(hold_head); +use_lua_key(horiz_variants); +use_lua_key(hyphenchar); +use_lua_key(id); +use_lua_key(image); +use_lua_key(index); +use_lua_key(italic); +use_lua_key(kern); +use_lua_key(kerns); +use_lua_key(lang); +use_lua_key(large_char); +use_lua_key(large_fam); +use_lua_key(last_ins_ptr); +use_lua_key(leader); +use_lua_key(least_page_cost); +use_lua_key(left); +use_lua_key(left_boundary); +use_lua_key(left_protruding); +use_lua_key(level); +use_lua_key(ligatures); +use_lua_key(link_attr); +use_lua_key(list); +use_lua_key(log); +use_lua_key(lua); +use_lua_key(luatex); +use_lua_key(luatex_node); +use_lua_key(mLTL); +use_lua_key(mRTT); +use_lua_key(mTLT); +use_lua_key(mTRT); +use_lua_key(mark); +use_lua_key(mathdir); +use_lua_key(mathkern); +use_lua_key(mathstyle); +use_lua_key(mid); +use_lua_key(mode); +use_lua_key(modeline); +use_lua_key(name); +use_lua_key(named_id); +use_lua_key(new_window); +use_lua_key(next); +use_lua_key(no); +use_lua_key(noad); +use_lua_key(node); +use_lua_key(node_properties); +use_lua_key(node_properties_indirect); +use_lua_key(nomath); +use_lua_key(nop); +use_lua_key(nucleus); +use_lua_key(num); +use_lua_key(number); +use_lua_key(objnum); +use_lua_key(omega); +use_lua_key(ordering); +use_lua_key(pLTL); +use_lua_key(pRTT); +use_lua_key(pTLT); +use_lua_key(pTRT); +use_lua_key(page_head); +use_lua_key(page_ins_head); +use_lua_key(parameters); +use_lua_key(pdftex); +use_lua_key(pen_broken); +use_lua_key(pen_inter); +use_lua_key(penalty); +use_lua_key(pop); +use_lua_key(post); +use_lua_key(pre); +use_lua_key(pre_adjust_head); +use_lua_key(prev); +use_lua_key(prevdepth); +use_lua_key(prevgraf); +use_lua_key(psname); +use_lua_key(ptr); +use_lua_key(push); +use_lua_key(quad); +use_lua_key(ref_count); +use_lua_key(reg); +use_lua_key(registry); +use_lua_key(renew); +use_lua_key(rep); +use_lua_key(replace); +use_lua_key(right); +use_lua_key(right_boundary); +use_lua_key(right_protruding); +use_lua_key(rule); +use_lua_key(scale); +use_lua_key(script); +use_lua_key(scriptscript); +use_lua_key(shift); +use_lua_key(shrink); +use_lua_key(shrink_order); +use_lua_key(size); +use_lua_key(skewchar); +use_lua_key(slant); +use_lua_key(slot); +use_lua_key(small_char); +use_lua_key(small_fam); +use_lua_key(space); +use_lua_key(space_shrink); +use_lua_key(space_stretch); +use_lua_key(spacefactor); +use_lua_key(spec); +use_lua_key(special); +use_lua_key(stack); +use_lua_key(start); +use_lua_key(step); +use_lua_key(stream); +use_lua_key(stretch); +use_lua_key(stretch_order); +use_lua_key(string); +use_lua_key(style); +use_lua_key(sub); +use_lua_key(subst_ex_font); +use_lua_key(subtype); +use_lua_key(sup); +use_lua_key(supplement); +use_lua_key(surround); +use_lua_key(tail); +use_lua_key(temp_head); +use_lua_key(term); +use_lua_key(term_and_log); +use_lua_key(tex); +use_lua_key(text); +use_lua_key(thread_attr); +use_lua_key(thread_id); +use_lua_key(top); +use_lua_key(top_accent); +use_lua_key(top_left); +use_lua_key(top_right); +use_lua_key(tounicode); +use_lua_key(transform); +use_lua_key(type); +use_lua_key(uchyph); +use_lua_key(umath); +use_lua_key(units_per_em); +use_lua_key(used); +use_lua_key(user_id); +use_lua_key(value); +use_lua_key(version); +use_lua_key(vert_variants); +use_lua_key(width); +use_lua_key(writable); +use_lua_key(x_height); +use_lua_key(xoffset); +use_lua_key(xyz_zoom); +use_lua_key(yoffset); + +use_lua_key(immediate); +use_lua_key(compresslevel); +use_lua_key(objcompression); +use_lua_key(direct); +use_lua_key(page); +use_lua_key(streamfile); +use_lua_key(annot); +use_lua_key(lua_functions); + + + diff --git a/Build/source/texk/web2c/luatexdir/lua/luatoken.w b/Build/source/texk/web2c/luatexdir/lua/luatoken.w index edfecc8ee4d..a88d9e25923 100644 --- a/Build/source/texk/web2c/luatexdir/lua/luatoken.w +++ b/Build/source/texk/web2c/luatexdir/lua/luatoken.w @@ -20,7 +20,7 @@ @ @c static const char _svn_version[] = "$Id: luatoken.w 4562 2013-01-21 02:58:59Z khaled $" - "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/lua/luatoken.w $"; + "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/lua/luatoken.w $"; #include "ptexlib.h" #include "lua/luatex-api.h" diff --git a/Build/source/texk/web2c/luatexdir/luafilesystem/src/lfs.c b/Build/source/texk/web2c/luatexdir/luafilesystem/src/lfs.c index fe0d432a459..a0b967df193 100644 --- a/Build/source/texk/web2c/luatexdir/luafilesystem/src/lfs.c +++ b/Build/source/texk/web2c/luatexdir/luafilesystem/src/lfs.c @@ -74,7 +74,7 @@ #define getcwd_error strerror(errno) #endif -#define DIR_METATABLE "directory metatable" +#define DIR_METATABLE "lfs.directory" #define MAX_DIR_LENGTH 1023 typedef struct dir_data { int closed; @@ -86,7 +86,7 @@ typedef struct dir_data { #endif } dir_data; -#define LOCK_METATABLE "lock metatable" +#define LOCK_METATABLE "lfs.lock" #ifdef _WIN32 #ifdef __BORLANDC__ diff --git a/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/parsettf.c b/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/parsettf.c index 339f99ffc29..92efbc7800f 100644 --- a/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/parsettf.c +++ b/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/parsettf.c @@ -4001,14 +4001,7 @@ static void readttfvwidths(FILE *ttf,struct ttfinfo *info) { tsb = getushort(ttf); if ( info->chars[i]!=NULL ) { /* can happen in ttc files */ info->chars[i]->vwidth = lastvwidth; -#if 0 /* this used to mean something once */ - /* At one point I stored the ymax of loading the glyph in lsidebearing*/ - /* I've removed that as it now seems pointless */ - if ( info->cff_start==0 ) { - voff += tsb + info->chars[i]->lsidebearing /* actually maxy */; - ++cnt; - } -#endif + info->chars[i]->tsb = tsb; } } if ( i==0 ) { @@ -5657,6 +5650,17 @@ static void PsuedoEncodeUnencoded(EncMap *map,struct ttfinfo *info) { if ( info->chars[i]!=NULL && !info->chars[i]->ticked ) ++extras; if ( extras!=0 ) { + /* UnicodeBmp has its own Private Use Areas */ + /* if (strcmp(map->enc_name","UnicodeBmp")==0) { */ + /* if ( (info->glyph_cnt < 0x18FF) && (map->enccount<0xE000)) */ + /* base = 0xE000 */ + /* else if ( map->enccount<0xF0000 ) */ + /* base = 0xF0000; */ + /* else if ( map->enccount<0x100000 ) */ + /* base = 0x100000; */ + /* else */ + /* base = map->enccount; */ + /* } else { */ if ( map->enccount<=256 ) base = 256; else if ( map->enccount<=65536 ) @@ -6050,6 +6054,11 @@ static SplineFont *SFFillFromTTFInfo(struct ttfinfo *info) { sf->units_per_em = info->emsize ; sf->pfminfo = info->pfminfo ; + free(info->savetab); + if ( sf->copyright==NULL ) + sf->copyright = info->copyright; + else + free( info->copyright ); return( sf ); } diff --git a/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/splinefont.h b/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/splinefont.h index 6dc6cec2b8a..edb726e0657 100644 --- a/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/splinefont.h +++ b/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/fontforge/splinefont.h @@ -1130,9 +1130,9 @@ typedef struct splinechar { char *name; int unicodeenc; int orig_pos; /* Original position in the glyph list */ - int16 width, vwidth; + int16 width, vwidth, tsb; int16 xmin, ymin, xmax, ymax; - int16 lsidebearing; /* only used when reading in a type1 font */ + int16 lsidebearing; /* only used when reading in a type1 font */ /* Or an otf font where it is the subr number of a refered character */ /* or a ttf font without bit 1 of head.flags set */ /* or (once upon a time, but no longer) a ttf font with vert metrics where it is the ymax value when we had a font-wide vertical offset */ diff --git a/Build/source/texk/web2c/luatexdir/luafontloader/src/luafflib.c b/Build/source/texk/web2c/luatexdir/luafontloader/src/luafflib.c index 7163fb2f026..f8efad26e56 100644 --- a/Build/source/texk/web2c/luatexdir/luafontloader/src/luafflib.c +++ b/Build/source/texk/web2c/luatexdir/luafontloader/src/luafflib.c @@ -33,7 +33,7 @@ #include <locale.h> static const char _svn_version[] = - "$Id: luafflib.c 4768 2014-01-28 15:38:54Z luigi $ " + "$Id: luafflib.c 4884 2014-03-14 13:21:17Z taco $ " "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/luafontloader/src/luafflib.c $"; extern char **gww_errors; @@ -1001,8 +1001,11 @@ void handle_splinechar(lua_State * L, struct splinechar *glyph, int hasvmetrics) lua_rawset(L, -3); lua_setfield(L, -2, "boundingbox"); /*dump_intfield(L,"orig_pos", glyph->orig_pos); */ - if (hasvmetrics) + if (hasvmetrics) { dump_intfield(L, "vwidth", glyph->vwidth); + if (glyph->tsb != 0) + dump_intfield(L, "tsidebearing", glyph->tsb); + } dump_intfield(L, "width", glyph->width); if (glyph->lsidebearing != glyph->xmin) { @@ -3226,7 +3229,12 @@ static int ff_info(lua_State * L) fontname); return 2; } + + gww_error_count = 0; sf = ReadSplineFontInfo((char *) fontname, openflags); + if (gww_error_count > 0) + gwwv_errors_free(); + if (sf == NULL) { lua_pushnil(L); lua_pushfstring(L, "font loading failed for %s\n", fontname); diff --git a/Build/source/texk/web2c/luatexdir/luapeg/lpeg.h b/Build/source/texk/web2c/luatexdir/luapeg/lpeg.h index 456e8277c7d..fe61485993a 100644 --- a/Build/source/texk/web2c/luatexdir/luapeg/lpeg.h +++ b/Build/source/texk/web2c/luatexdir/luapeg/lpeg.h @@ -28,8 +28,8 @@ #define VERSION "0.12" -#define PATTERN_T "lpeg-pattern" -#define MAXSTACKIDX "lpeg-maxstack" +#define PATTERN_T "lpeg.pattern" +#define MAXSTACKIDX "lpeg.maxstack" /* diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/tcp.c b/Build/source/texk/web2c/luatexdir/luasocket/src/tcp.c index 6734dc0b497..e7334031478 100644 --- a/Build/source/texk/web2c/luatexdir/luasocket/src/tcp.c +++ b/Build/source/texk/web2c/luatexdir/luasocket/src/tcp.c @@ -99,13 +99,13 @@ static luaL_Reg func[] = { int tcp_open(lua_State *L) { /* create classes */ - auxiliar_newclass(L, "tcp{master}", tcp_methods); - auxiliar_newclass(L, "tcp{client}", tcp_methods); - auxiliar_newclass(L, "tcp{server}", tcp_methods); + auxiliar_newclass(L, "tcp.master", tcp_methods); + auxiliar_newclass(L, "tcp.client", tcp_methods); + auxiliar_newclass(L, "tcp.server", tcp_methods); /* create class groups */ - auxiliar_add2group(L, "tcp{master}", "tcp{any}"); - auxiliar_add2group(L, "tcp{client}", "tcp{any}"); - auxiliar_add2group(L, "tcp{server}", "tcp{any}"); + auxiliar_add2group(L, "tcp.master", "tcp{any}"); + auxiliar_add2group(L, "tcp.client", "tcp{any}"); + auxiliar_add2group(L, "tcp.server", "tcp{any}"); /* define library functions */ luaL_openlib(L, NULL, func, 0); return 0; @@ -118,22 +118,22 @@ int tcp_open(lua_State *L) * Just call buffered IO methods \*-------------------------------------------------------------------------*/ static int meth_send(lua_State *L) { - p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp{client}", 1); + p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp.client", 1); return buffer_meth_send(L, &tcp->buf); } static int meth_receive(lua_State *L) { - p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp{client}", 1); + p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp.client", 1); return buffer_meth_receive(L, &tcp->buf); } static int meth_getstats(lua_State *L) { - p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp{client}", 1); + p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp.client", 1); return buffer_meth_getstats(L, &tcp->buf); } static int meth_setstats(lua_State *L) { - p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp{client}", 1); + p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp.client", 1); return buffer_meth_setstats(L, &tcp->buf); } @@ -183,14 +183,14 @@ static int meth_dirty(lua_State *L) \*-------------------------------------------------------------------------*/ static int meth_accept(lua_State *L) { - p_tcp server = (p_tcp) auxiliar_checkclass(L, "tcp{server}", 1); + p_tcp server = (p_tcp) auxiliar_checkclass(L, "tcp.server", 1); p_timeout tm = timeout_markstart(&server->tm); t_socket sock; const char *err = inet_tryaccept(&server->sock, server->family, &sock, tm); /* if successful, push client socket */ if (err == NULL) { p_tcp clnt = (p_tcp) lua_newuserdata(L, sizeof(t_tcp)); - auxiliar_setclass(L, "tcp{client}", -1); + auxiliar_setclass(L, "tcp.client", -1); /* initialize structure fields */ memset(clnt, 0, sizeof(t_tcp)); socket_setnonblocking(&sock); @@ -213,7 +213,7 @@ static int meth_accept(lua_State *L) \*-------------------------------------------------------------------------*/ static int meth_bind(lua_State *L) { - p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp{master}", 1); + p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp.master", 1); const char *address = luaL_checkstring(L, 2); const char *port = luaL_checkstring(L, 3); const char *err; @@ -250,7 +250,7 @@ static int meth_connect(lua_State *L) timeout_markstart(&tcp->tm); err = inet_tryconnect(&tcp->sock, address, port, &tcp->tm, &connecthints); /* have to set the class even if it failed due to non-blocking connects */ - auxiliar_setclass(L, "tcp{client}", 1); + auxiliar_setclass(L, "tcp.client", 1); if (err) { lua_pushnil(L); lua_pushstring(L, err); @@ -291,7 +291,7 @@ static int meth_getfamily(lua_State *L) \*-------------------------------------------------------------------------*/ static int meth_listen(lua_State *L) { - p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp{master}", 1); + p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp.master", 1); int backlog = (int) luaL_optnumber(L, 2, 32); int err = socket_listen(&tcp->sock, backlog); if (err != IO_DONE) { @@ -300,7 +300,7 @@ static int meth_listen(lua_State *L) return 2; } /* turn master object into a server object */ - auxiliar_setclass(L, "tcp{server}", 1); + auxiliar_setclass(L, "tcp.server", 1); lua_pushnumber(L, 1); return 1; } @@ -312,7 +312,7 @@ static int meth_shutdown(lua_State *L) { /* SHUT_RD, SHUT_WR, SHUT_RDWR have the value 0, 1, 2, so we can use method index directly */ static const char* methods[] = { "receive", "send", "both", NULL }; - p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp{client}", 1); + p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp.client", 1); int how = luaL_checkoption(L, 2, "both", methods); socket_shutdown(&tcp->sock, how); lua_pushnumber(L, 1); @@ -358,7 +358,7 @@ static int tcp_create(lua_State *L, int family) { p_tcp tcp = (p_tcp) lua_newuserdata(L, sizeof(t_tcp)); memset(tcp, 0, sizeof(t_tcp)); /* set its type as master object */ - auxiliar_setclass(L, "tcp{master}", -1); + auxiliar_setclass(L, "tcp.master", -1); /* initialize remaining structure fields */ socket_setnonblocking(&sock); if (family == PF_INET6) { @@ -470,6 +470,6 @@ static int global_connect(lua_State *L) { lua_pushstring(L, err); return 2; } - auxiliar_setclass(L, "tcp{client}", -1); + auxiliar_setclass(L, "tcp.client", -1); return 1; } diff --git a/Build/source/texk/web2c/luatexdir/luasocket/src/udp.c b/Build/source/texk/web2c/luatexdir/luasocket/src/udp.c index 8e14fac290f..8e88b1784a2 100644 --- a/Build/source/texk/web2c/luatexdir/luasocket/src/udp.c +++ b/Build/source/texk/web2c/luatexdir/luasocket/src/udp.c @@ -101,13 +101,13 @@ static luaL_Reg func[] = { int udp_open(lua_State *L) { /* create classes */ - auxiliar_newclass(L, "udp{connected}", udp_methods); - auxiliar_newclass(L, "udp{unconnected}", udp_methods); + auxiliar_newclass(L, "udp.connected", udp_methods); + auxiliar_newclass(L, "udp.unconnected", udp_methods); /* create class groups */ - auxiliar_add2group(L, "udp{connected}", "udp{any}"); - auxiliar_add2group(L, "udp{unconnected}", "udp{any}"); - auxiliar_add2group(L, "udp{connected}", "select{able}"); - auxiliar_add2group(L, "udp{unconnected}", "select{able}"); + auxiliar_add2group(L, "udp.connected", "udp{any}"); + auxiliar_add2group(L, "udp.unconnected", "udp{any}"); + auxiliar_add2group(L, "udp.connected", "select{able}"); + auxiliar_add2group(L, "udp.unconnected", "select{able}"); /* define library functions */ luaL_openlib(L, NULL, func, 0); return 0; @@ -127,7 +127,7 @@ const char *udp_strerror(int err) { * Send data through connected udp socket \*-------------------------------------------------------------------------*/ static int meth_send(lua_State *L) { - p_udp udp = (p_udp) auxiliar_checkclass(L, "udp{connected}", 1); + p_udp udp = (p_udp) auxiliar_checkclass(L, "udp.connected", 1); p_timeout tm = &udp->tm; size_t count, sent = 0; int err; @@ -147,7 +147,7 @@ static int meth_send(lua_State *L) { * Send data through unconnected udp socket \*-------------------------------------------------------------------------*/ static int meth_sendto(lua_State *L) { - p_udp udp = (p_udp) auxiliar_checkclass(L, "udp{unconnected}", 1); + p_udp udp = (p_udp) auxiliar_checkclass(L, "udp.unconnected", 1); size_t count, sent = 0; const char *data = luaL_checklstring(L, 2, &count); const char *ip = luaL_checkstring(L, 3); @@ -221,7 +221,7 @@ static int meth_receive(lua_State *L) { * Receives data and sender from a UDP socket \*-------------------------------------------------------------------------*/ static int meth_receivefrom(lua_State *L) { - p_udp udp = (p_udp) auxiliar_checkclass(L, "udp{unconnected}", 1); + p_udp udp = (p_udp) auxiliar_checkclass(L, "udp.unconnected", 1); char buffer[UDP_DATAGRAMSIZE]; size_t got, count = (size_t) luaL_optnumber(L, 2, sizeof(buffer)); int err; @@ -327,7 +327,7 @@ static int meth_dirty(lua_State *L) { * Just call inet methods \*-------------------------------------------------------------------------*/ static int meth_getpeername(lua_State *L) { - p_udp udp = (p_udp) auxiliar_checkclass(L, "udp{connected}", 1); + p_udp udp = (p_udp) auxiliar_checkclass(L, "udp.connected", 1); return inet_meth_getpeername(L, &udp->sock, udp->family); } @@ -382,12 +382,12 @@ static int meth_setpeername(lua_State *L) { lua_pushstring(L, err); return 2; } - auxiliar_setclass(L, "udp{connected}", 1); + auxiliar_setclass(L, "udp.connected", 1); } else { /* we ignore possible errors because Mac OS X always * returns EAFNOSUPPORT */ inet_trydisconnect(&udp->sock, udp->family, tm); - auxiliar_setclass(L, "udp{unconnected}", 1); + auxiliar_setclass(L, "udp.unconnected", 1); } /* change class to connected or unconnected depending on address */ lua_pushnumber(L, 1); @@ -408,7 +408,7 @@ static int meth_close(lua_State *L) { * Turns a master object into a server object \*-------------------------------------------------------------------------*/ static int meth_setsockname(lua_State *L) { - p_udp udp = (p_udp) auxiliar_checkclass(L, "udp{unconnected}", 1); + p_udp udp = (p_udp) auxiliar_checkclass(L, "udp.unconnected", 1); const char *address = luaL_checkstring(L, 2); const char *port = luaL_checkstring(L, 3); const char *err; @@ -440,7 +440,7 @@ static int udp_create(lua_State *L, int family) { if (!err) { /* allocate udp object */ p_udp udp = (p_udp) lua_newuserdata(L, sizeof(t_udp)); - auxiliar_setclass(L, "udp{unconnected}", -1); + auxiliar_setclass(L, "udp.unconnected", -1); /* initialize remaining structure fields */ socket_setnonblocking(&sock); if (family == PF_INET6) { diff --git a/Build/source/texk/web2c/luatexdir/luatex-common.h b/Build/source/texk/web2c/luatexdir/luatex-common.h index a0b34b00476..12ea10be642 100644 --- a/Build/source/texk/web2c/luatexdir/luatex-common.h +++ b/Build/source/texk/web2c/luatexdir/luatex-common.h @@ -27,8 +27,8 @@ /* utils.c */ __attribute__ ((format(printf, 1, 2))) -extern void pdftex_warn(const char *fmt, ...); +extern void luatex_warn(const char *fmt, ...); __attribute__ ((noreturn, format(printf, 1, 2))) -extern void pdftex_fail(const char *fmt, ...); +extern void luatex_fail(const char *fmt, ...); #endif /* LUATEX_COMMON_H */ diff --git a/Build/source/texk/web2c/luatexdir/luatex.c b/Build/source/texk/web2c/luatexdir/luatex.c index d7f3bbfe13f..fccdd4a386e 100644 --- a/Build/source/texk/web2c/luatexdir/luatex.c +++ b/Build/source/texk/web2c/luatexdir/luatex.c @@ -16,16 +16,16 @@ #include "luatex_svnversion.h" static const char _svn_version[] = - "$Id: luatex.c 4746 2014-01-13 08:47:45Z taco $ " + "$Id: luatex.c 4890 2014-03-14 14:58:36Z taco $ " "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/luatex.c $"; #define TeX int luatex_svn = luatex_svn_revision; -int luatex_version = 78; /* \.{\\luatexversion} */ -int luatex_revision = '3'; /* \.{\\luatexrevision} */ +int luatex_version = 79; /* \.{\\luatexversion} */ +int luatex_revision = '0'; /* \.{\\luatexrevision} */ int luatex_date_info = -extra_version_info; /* the compile date is negated */ -const char *luatex_version_string = "beta-0.78.3"; +const char *luatex_version_string = "beta-0.79.0"; #ifdef LuajitTeX const char *engine_name = "luajittex"; /* the name of this engine */ #else diff --git a/Build/source/texk/web2c/luatexdir/luatex_svnversion.h b/Build/source/texk/web2c/luatexdir/luatex_svnversion.h index 833c82b42ed..78ec29e3b34 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 4804 +#define luatex_svn_revision 4903 diff --git a/Build/source/texk/web2c/luatexdir/luatexcallbackids.h b/Build/source/texk/web2c/luatexdir/luatexcallbackids.h index 91841b6d89f..8a8b3baa253 100644 --- a/Build/source/texk/web2c/luatexdir/luatexcallbackids.h +++ b/Build/source/texk/web2c/luatexdir/luatexcallbackids.h @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */ -/* $Id: luatexcallbackids.h 4544 2012-12-25 14:07:44Z oneiros $ */ +/* $Id: luatexcallbackids.h 4877 2014-03-14 01:26:05Z luigi $ */ #ifndef LUATEXCALLBACKIDS_H #define LUATEXCALLBACKIDS_H @@ -58,6 +58,7 @@ typedef enum { post_linebreak_filter_callback, mlist_to_hlist_callback, finish_pdffile_callback, + finish_pdfpage_callback, pre_dump_callback, total_callbacks } callback_callback_types; diff --git a/Build/source/texk/web2c/luatexdir/luazip/src/luazip.c b/Build/source/texk/web2c/luatexdir/luazip/src/luazip.c index a7124498e20..eb731349f0d 100644 --- a/Build/source/texk/web2c/luatexdir/luazip/src/luazip.c +++ b/Build/source/texk/web2c/luatexdir/luazip/src/luazip.c @@ -14,8 +14,8 @@ #include "luazip.h" #include "lauxlib.h" -#define ZIPFILEHANDLE "lzipFile" -#define ZIPINTERNALFILEHANDLE "lzipInternalFile" +#define ZIPFILEHANDLE "lzip.File" +#define ZIPINTERNALFILEHANDLE "lzip.InternalFile" #define LUAZIP_MAX_EXTENSIONS 32 static int pushresult (lua_State *L, int i, const char *filename) { diff --git a/Build/source/texk/web2c/luatexdir/luazlib/lgzip.c b/Build/source/texk/web2c/luatexdir/luazlib/lgzip.c index db9ede71940..9a10e9242b6 100644 --- a/Build/source/texk/web2c/luatexdir/luazlib/lgzip.c +++ b/Build/source/texk/web2c/luatexdir/luazlib/lgzip.c @@ -45,7 +45,7 @@ Changes: */ -#define FILEHANDLE "zlib:gzFile" +#define FILEHANDLE "zlib.gzFile" static int pushresult (lua_State *L, int i, const char *filename) { diff --git a/Build/source/texk/web2c/luatexdir/luazlib/lzlib.c b/Build/source/texk/web2c/luatexdir/luazlib/lzlib.c index 263c6ba611d..a76f54ee0f6 100644 --- a/Build/source/texk/web2c/luatexdir/luazlib/lzlib.c +++ b/Build/source/texk/web2c/luatexdir/luazlib/lzlib.c @@ -47,7 +47,7 @@ Changes: ** zlib stream metamethods ** ========================================================================= */ -#define ZSTREAMMETA "zlib:zstream" +#define ZSTREAMMETA "zlib.zstream" #define LZANY (void*)-1 #define LZNONE (void*)0 diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfcolorstack.w b/Build/source/texk/web2c/luatexdir/pdf/pdfcolorstack.w index 5b1c736e7dd..483db2a4c80 100644 --- a/Build/source/texk/web2c/luatexdir/pdf/pdfcolorstack.w +++ b/Build/source/texk/web2c/luatexdir/pdf/pdfcolorstack.w @@ -19,8 +19,8 @@ @ @c static const char _svn_version[] = - "$Id: pdfcolorstack.w 4442 2012-05-25 22:40:34Z hhenkel $" - "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/pdf/pdfcolorstack.w $"; + "$Id: pdfcolorstack.w 4847 2014-03-05 18:13:17Z luigi $" + "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/pdf/pdfcolorstack.w $"; #include "ptexlib.h" @@ -239,7 +239,7 @@ int colorstackpop(int colstack_no) if (global_shipping_mode == SHIPPING_PAGE) { if (colstack->page_used == 0) { - pdftex_warn("pop empty color page stack %u", + luatex_warn("pop empty color page stack %u", (unsigned int) colstack_no); return colstack->literal_mode; } @@ -248,7 +248,7 @@ int colorstackpop(int colstack_no) put_cstring_on_str_pool(colstack->page_current); } else { if (colstack->form_used == 0) { - pdftex_warn("pop empty color form stack %u", + luatex_warn("pop empty color form stack %u", (unsigned int) colstack_no); return colstack->literal_mode; } diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfgen.w b/Build/source/texk/web2c/luatexdir/pdf/pdfgen.w index 83e5a27e4c8..bfda9102e7b 100644 --- a/Build/source/texk/web2c/luatexdir/pdf/pdfgen.w +++ b/Build/source/texk/web2c/luatexdir/pdf/pdfgen.w @@ -19,7 +19,7 @@ @ @c static const char _svn_version[] = - "$Id: pdfgen.w 4718 2014-01-02 15:35:31Z taco $" + "$Id: pdfgen.w 4877 2014-03-14 01:26:05Z luigi $" "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/pdf/pdfgen.w $"; #include "ptexlib.h" @@ -34,7 +34,7 @@ static const char _svn_version[] = #define check_nprintf(size_get, size_want) \ if ((unsigned)(size_get) >= (unsigned)(size_want)) \ - pdftex_fail ("snprintf failed: file %s, line %d", __FILE__, __LINE__); + luatex_fail ("snprintf failed: file %s, line %d", __FILE__, __LINE__); PDF static_pdf = NULL; @@ -254,8 +254,7 @@ void fix_o_mode(PDF pdf) if (pdf->o_mode == OMODE_NONE) pdf->o_mode = o_mode; else if (pdf->o_mode != o_mode) - pdf_error("setup", - "\\pdfoutput can only be changed before anything is written to the output"); + pdf_error("setup", "\\pdfoutput can only be changed before anything is written to the output"); } @ This ensures that |pdfminorversion| is set only before any bytes have @@ -268,14 +267,9 @@ void fix_pdf_minorversion(PDF pdf) { if (pdf->minor_version < 0) { /* unset */ if ((pdf_minor_version < 0) || (pdf_minor_version > 9)) { - const char *hlp[] = - { "The pdfminorversion must be between 0 and 9.", - "I changed this to 4.", NULL - }; + const char *hlp[] = { "The pdfminorversion must be between 0 and 9.", "I changed this to 4.", NULL }; char msg[256]; - (void) snprintf(msg, 255, - "LuaTeX error (illegal pdfminorversion %d)", - (int) pdf_minor_version); + (void) snprintf(msg, 255, "LuaTeX error (illegal pdfminorversion %d)", (int) pdf_minor_version); tex_error(msg, hlp); pdf_minor_version = 4; } @@ -283,11 +277,9 @@ void fix_pdf_minorversion(PDF pdf) } else { /* Check that variables for \.{PDF} output are unchanged */ if (pdf->minor_version != pdf_minor_version) - pdf_error("setup", - "\\pdfminorversion cannot be changed after data is written to the PDF file"); + pdf_error("setup", "\\pdfminorversion cannot be changed after data is written to the PDF file"); if (pdf->draftmode != pdf_draftmode) - pdf_error("setup", - "\\pdfdraftmode cannot be changed after data is written to the PDF file"); + pdf_error("setup", "\\pdfdraftmode cannot be changed after data is written to the PDF file"); } if (pdf->draftmode != 0) { pdf->compress_level = 0; /* re-fix it, might have been changed inbetween */ @@ -300,7 +292,7 @@ void fix_pdf_minorversion(PDF pdf) #define check_err(f, fn) \ if (f != Z_OK) \ - pdftex_fail("zlib: %s() failed (error code %d)", fn, f) + luatex_fail("zlib: %s() failed (error code %d)", fn, f) @ @c static void write_zip(PDF pdf) @@ -311,7 +303,7 @@ static void write_zip(PDF pdf) z_stream *s = pdf->c_stream; boolean finish = pdf->zip_write_state == ZIP_FINISH; assert(pdf->compress_level > 0); - /* This was just to suppress the filename report in |pdftex_fail| + /* This was just to suppress the filename report in |luatex_fail| but zlib errors are rare enough (especially now that the compress level is fixed) that I don't care about the slightly ugly error message that could result. @@ -361,7 +353,7 @@ static void write_zip(PDF pdf) } err = deflate(s, flush); if (err != Z_OK && err != Z_STREAM_END) - pdftex_fail("zlib: deflate() failed (error code %d)", err); + luatex_fail("zlib: deflate() failed (error code %d)", err); } pdf->stream_length = (off_t) s->total_out; } @@ -418,8 +410,7 @@ void pdf_flush(PDF pdf) pdf->zip_write_state = NO_ZIP; strbuf_seek(pdf->buf, 0); if (saved_pdf_gone > pdf->gone) - pdf_error("file size", - "File size exceeds architectural limits (pdf_gone wraps around)"); + pdf_error("file size", "File size exceeds architectural limits (pdf_gone wraps around)"); break; case LUASTM_BUF: luaL_addsize(&(os->b), strbuf_offset(pdf->buf)); @@ -852,7 +843,7 @@ void addto_page_resources(PDF pdf, pdf_obj_type t, int k) re->resources_tree = avl_create(comp_page_resources, NULL, &avl_xallocator); if (re->resources_tree == NULL) - pdftex_fail + luatex_fail ("addto_page_resources(): avl_create() page_resource_tree failed"); } tmp.obj_type = t; @@ -863,7 +854,7 @@ void addto_page_resources(PDF pdf, pdf_obj_type t, int k) pr->list = NULL; pp = avl_probe(re->resources_tree, pr); if (pp == NULL) - pdftex_fail + luatex_fail ("addto_page_resources(): avl_probe() out of memory in insertion"); } if (pr->list == NULL) { @@ -1420,8 +1411,7 @@ char *convertStringToPDFString(const char *in, int len) check_buf((unsigned) j + sizeof(buf), MAX_PSTRING_LEN); if (((unsigned char) in[i] < '!') || ((unsigned char) in[i] > '~')) { /* convert control characters into oct */ - k = snprintf(buf, sizeof(buf), - "\\%03o", (unsigned int) (unsigned char) in[i]); + k = snprintf(buf, sizeof(buf), "\\%03o", (unsigned int) (unsigned char) in[i]); check_nprintf(k, sizeof(buf)); out[j++] = buf[0]; out[j++] = buf[1]; @@ -1455,8 +1445,7 @@ static void convertStringToHexString(const char *in, char *out, int lin) char buf[3]; j = 0; for (i = 0; i < lin; i++) { - k = snprintf(buf, sizeof(buf), - "%02X", (unsigned int) (unsigned char) in[i]); + k = snprintf(buf, sizeof(buf), "%02X", (unsigned int) (unsigned char) in[i]); check_nprintf(k, sizeof(buf)); out[j++] = buf[0]; out[j++] = buf[1]; @@ -1515,7 +1504,7 @@ static void print_ID(PDF pdf) md5_append(&state, (const md5_byte_t *) time_str, (int) size); /* get the file name */ if (getcwd(pwd, sizeof(pwd)) == NULL) - pdftex_fail("getcwd() failed (%s), (path too long?)", strerror(errno)); + luatex_fail("getcwd() failed (%s), (path too long?)", strerror(errno)); #ifdef WIN32 { char *p; @@ -1917,7 +1906,7 @@ void print_pdf_table_string(PDF pdf, const char *s) void pdf_end_page(PDF pdf) { char s[64], *p; - int j, annots = 0, beads = 0; + int j, annots = 0, beads = 0, callback_id; pdf_resource_struct *res_p = pdf->page_resources; pdf_resource_struct local_page_resources; pdf_object_list *annot_list, *bead_list, *link_list, *ol, *ol1; @@ -1928,7 +1917,7 @@ void pdf_end_page(PDF pdf) /* Finish stream of page/form contents */ pdf_goto_pagemode(pdf); if (pos_stack_used > 0) { - pdftex_fail("%u unmatched \\pdfsave after %s shipout", + luatex_fail("%u unmatched \\pdfsave after %s shipout", (unsigned int) pos_stack_used, ((global_shipping_mode == SHIPPING_PAGE) ? "page" : "form")); @@ -1936,7 +1925,13 @@ void pdf_end_page(PDF pdf) pdf_end_stream(pdf); pdf_end_obj(pdf); + /* hh-ls : new call back finish_pdfpage_callback */ + callback_id = callback_defined(finish_pdfpage_callback); + if (callback_id > 0) + run_callback(callback_id, "b->",(global_shipping_mode == SHIPPING_PAGE)); + if (global_shipping_mode == SHIPPING_PAGE) { + pdf->last_pages = pdf_do_page_divert(pdf, pdf->last_page, 0); /* Write out /Page object */ diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfluaapi.w b/Build/source/texk/web2c/luatexdir/pdf/pdfluaapi.w index dab5bc741ae..a32d20490fd 100644 --- a/Build/source/texk/web2c/luatexdir/pdf/pdfluaapi.w +++ b/Build/source/texk/web2c/luatexdir/pdf/pdfluaapi.w @@ -19,8 +19,8 @@ @ @c static const char _svn_version[] = - "$Id: pdfluaapi.w 4524 2012-12-20 15:38:02Z taco $" - "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/pdf/pdfluaapi.w $"; + "$Id: pdfluaapi.w 4847 2014-03-05 18:13:17Z luigi $" + "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/pdf/pdfluaapi.w $"; #include "ptexlib.h" @@ -32,14 +32,14 @@ int new_pdflua(void) const zlib_struct *zp = pdflua_zlib_struct_ptr; uLong uncomprLen = zp->uncomprLen; if ((uncompr = xtalloc(zp->uncomprLen, Byte)) == NULL) - pdftex_fail("new_pdflua(): xtalloc()"); + luatex_fail("new_pdflua(): xtalloc()"); err = uncompress(uncompr, &uncomprLen, zp->compr, zp->comprLen); if (err != Z_OK) - pdftex_fail("new_pdflua(): uncompress()"); + luatex_fail("new_pdflua(): uncompress()"); assert(uncomprLen == zp->uncomprLen); if (luaL_loadbuffer(Luas, (const char *) uncompr, uncomprLen, "pdflua") || lua_pcall(Luas, 0, 1, 0)) - pdftex_fail("new_pdflua(): lua_pcall()"); + luatex_fail("new_pdflua(): lua_pcall()"); luaL_checktype(Luas, -1, LUA_TTABLE); /* t */ i = luaL_ref(Luas, LUA_REGISTRYINDEX); /* - */ xfree(uncompr); @@ -64,7 +64,7 @@ void pdflua_begin_page(PDF pdf) lua_setfield(Luas, -2, "resources_objnum"); /* t f t ... */ err = lua_pcall(Luas, 1, 0, 0); /* (e) t ... */ if (err != 0) - pdftex_fail("pdflua.lua: beginpage()"); + luatex_fail("pdflua.lua: beginpage()"); /* t ... */ lua_pop(Luas, 1); /* ... */ } @@ -97,7 +97,7 @@ void pdflua_end_page(PDF pdf, int annots, int beads) } err = lua_pcall(Luas, 1, 0, 0); /* (e) t ... */ if (err != 0) - pdftex_fail("pdflua.lua: endpage()"); + luatex_fail("pdflua.lua: endpage()"); /* t ... */ lua_pop(Luas, 1); /* ... */ } @@ -111,5 +111,5 @@ void pdflua_output_pages_tree(PDF pdf) lua_gettable(Luas, -2); /* f */ err = lua_pcall(Luas, 0, 0, 0); /* - */ if (err != 0) - pdftex_fail("pdflua.lua: outputpagestree()"); + luatex_fail("pdflua.lua: outputpagestree()"); } diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfobj.w b/Build/source/texk/web2c/luatexdir/pdf/pdfobj.w index f2d0647c00c..af7bc1d584f 100644 --- a/Build/source/texk/web2c/luatexdir/pdf/pdfobj.w +++ b/Build/source/texk/web2c/luatexdir/pdf/pdfobj.w @@ -19,15 +19,15 @@ @ @c static const char _svn_version[] = - "$Id: pdfobj.w 4442 2012-05-25 22:40:34Z hhenkel $" - "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/pdf/pdfobj.w $"; + "$Id: pdfobj.w 4877 2014-03-14 01:26:05Z luigi $" + "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/pdf/pdfobj.w $"; #include "ptexlib.h" #include "lua/luatex-api.h" int pdf_last_obj; -@ write a raw PDF object +@ write a raw PDF object @c void pdf_write_obj(PDF pdf, int k) @@ -79,8 +79,7 @@ void pdf_write_obj(PDF pdf, int k) callback_id = callback_defined(read_data_file_callback); if (fnam && callback_id > 0) { boolean file_opened = false; - res = run_callback(callback_id, "S->bSd", fnam, - &file_opened, &data.s, &ll); + res = run_callback(callback_id, "S->bSd", fnam, &file_opened, &data.s, &ll); data.l = (size_t) ll; if (!file_opened) pdf_error("ext5", "cannot open file for embedding"); @@ -88,8 +87,7 @@ void pdf_write_obj(PDF pdf, int k) byte_file f; /* the data file's FILE* */ if (!fnam) fnam = st.s; - if (!luatex_open_input - (&f, fnam, kpse_tex_format, FOPEN_RBIN_MODE, true)) + if (!luatex_open_input(&f, fnam, kpse_tex_format, FOPEN_RBIN_MODE, true)) pdf_error("ext5", "cannot open file for embedding"); res = read_data_file(f, &data.s, &ll); data.l = (size_t) ll; @@ -102,19 +100,23 @@ void pdf_write_obj(PDF pdf, int k) tprint("<<"); tprint(st.s); pdf_out_block(pdf, (const char *) data.s, data.l); - if (!obj_obj_is_stream(pdf, k) && data.s[data.l - 1] != '\n') - pdf_out(pdf, '\n'); + /* already happens in pdf_end_obj: + if (!obj_obj_is_stream(pdf, k) && data.s[data.l - 1] != '\n') + pdf_out(pdf, '\n'); + */ xfree(data.s); tprint(">>"); } else { pdf_out_block(pdf, st.s, st.l); - if (!obj_obj_is_stream(pdf, k) && st.s[st.l - 1] != '\n') - pdf_out(pdf, '\n'); + /* already happens in pdf_end_obj: + if (!obj_obj_is_stream(pdf, k) && st.s[st.l - 1] != '\n') + pdf_out(pdf, '\n'); + */ } if (obj_obj_is_stream(pdf, k)) { pdf_end_stream(pdf); pdf_end_obj(pdf); - } else + } else /* here we do the \n */ pdf_end_obj(pdf); luaL_unref(Luas, LUA_REGISTRYINDEX, l); obj_obj_data(pdf, k) = LUA_NOREF; @@ -137,7 +139,7 @@ void init_obj_obj(PDF pdf, int k) out only when the object is referenced by \.{\\pdfrefobj}. When \.{\\pdfobj} is used with \.{\\immediate}, the object contents will be written out immediately. Objects referenced in the current page are appended into - |pdf_obj_list|. + |pdf_obj_list|. @c void scan_obj(PDF pdf) diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfsaverestore.w b/Build/source/texk/web2c/luatexdir/pdf/pdfsaverestore.w index 1b6859566a3..92a642adeb0 100644 --- a/Build/source/texk/web2c/luatexdir/pdf/pdfsaverestore.w +++ b/Build/source/texk/web2c/luatexdir/pdf/pdfsaverestore.w @@ -19,8 +19,8 @@ @ @c static const char _svn_version[] = - "$Id: pdfsaverestore.w 4442 2012-05-25 22:40:34Z hhenkel $" - "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/pdf/pdfsaverestore.w $"; + "$Id: pdfsaverestore.w 4847 2014-03-05 18:13:17Z luigi $" + "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/pdf/pdfsaverestore.w $"; #include "ptexlib.h" @@ -55,14 +55,14 @@ static void checkpdfrestore(scaledpos pos) { scaledpos diff; if (pos_stack_used == 0) { - pdftex_warn("%s", "\\pdfrestore: missing \\pdfsave"); + luatex_warn("%s", "\\pdfrestore: missing \\pdfsave"); return; } pos_stack_used--; diff.h = pos.h - pos_stack[pos_stack_used].pos.h; diff.v = pos.v - pos_stack[pos_stack_used].pos.v; if (diff.h != 0 || diff.v != 0) { - pdftex_warn("Misplaced \\pdfrestore by (%dsp, %dsp)", (int) diff.h, + luatex_warn("Misplaced \\pdfrestore by (%dsp, %dsp)", (int) diff.h, (int) diff.v); } if (global_shipping_mode == SHIPPING_PAGE) { diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdfsetmatrix.w b/Build/source/texk/web2c/luatexdir/pdf/pdfsetmatrix.w index 34f3ead258c..d90dbf91a87 100644 --- a/Build/source/texk/web2c/luatexdir/pdf/pdfsetmatrix.w +++ b/Build/source/texk/web2c/luatexdir/pdf/pdfsetmatrix.w @@ -19,8 +19,8 @@ @ @c static const char _svn_version[] = - "$Id: pdfsetmatrix.w 4442 2012-05-25 22:40:34Z hhenkel $" - "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/pdf/pdfsetmatrix.w $"; + "$Id: pdfsetmatrix.w 4847 2014-03-05 18:13:17Z luigi $" + "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/pdf/pdfsetmatrix.w $"; #include "ptexlib.h" @@ -94,7 +94,7 @@ static void pdfsetmatrix(const char *in, scaledpos pos) if (global_shipping_mode == SHIPPING_PAGE) { if (sscanf((const char *) in, " %lf %lf %lf %lf ", &x.a, &x.b, &x.c, &x.d) != 4) { - pdftex_warn("Unrecognized format of \\pdfsetmatrix{%s}", in); + luatex_warn("Unrecognized format of \\pdfsetmatrix{%s}", in); return; } /* calculate this transformation matrix */ diff --git a/Build/source/texk/web2c/luatexdir/pdf/pdftables.w b/Build/source/texk/web2c/luatexdir/pdf/pdftables.w index ba8495137a2..48330c72e4c 100644 --- a/Build/source/texk/web2c/luatexdir/pdf/pdftables.w +++ b/Build/source/texk/web2c/luatexdir/pdf/pdftables.w @@ -19,8 +19,8 @@ @ @c static const char _svn_version[] = - "$Id: pdftables.w 4442 2012-05-25 22:40:34Z hhenkel $" - "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/pdf/pdftables.w $"; + "$Id: pdftables.w 4847 2014-03-05 18:13:17Z luigi $" + "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/pdf/pdftables.w $"; #include "ptexlib.h" @@ -58,11 +58,11 @@ static void avl_put_obj(PDF pdf, int t, oentry * oe) if (pdf->obj_tree[t] == NULL) { pdf->obj_tree[t] = avl_create(compare_info, NULL, &avl_xallocator); if (pdf->obj_tree[t] == NULL) - pdftex_fail("avlstuff.c: avl_create() pdf->obj_tree failed"); + luatex_fail("avlstuff.c: avl_create() pdf->obj_tree failed"); } pp = avl_probe(pdf->obj_tree[t], oe); if (pp == NULL) - pdftex_fail("avlstuff.c: avl_probe() out of memory in insertion"); + luatex_fail("avlstuff.c: avl_probe() out of memory in insertion"); } static void avl_put_int_obj(PDF pdf, int int0, int objptr, int t) diff --git a/Build/source/texk/web2c/luatexdir/ptexlib.h b/Build/source/texk/web2c/luatexdir/ptexlib.h index 5dab5974e2d..994856533b4 100644 --- a/Build/source/texk/web2c/luatexdir/ptexlib.h +++ b/Build/source/texk/web2c/luatexdir/ptexlib.h @@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License along with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */ -/* $Id: ptexlib.h 4718 2014-01-02 15:35:31Z taco $ */ +/* $Id: ptexlib.h 4877 2014-03-14 01:26:05Z luigi $ */ #ifndef PTEXLIB_H # define PTEXLIB_H @@ -85,7 +85,7 @@ extern char **suffixlist; /* in luainit.w */ # define check_buf(size, buf_size) \ if ((unsigned)(size) > (unsigned)(buf_size)) \ - pdftex_fail("buffer overflow: %d > %d at file %s, line %d", \ + luatex_fail("buffer overflow: %d > %d at file %s, line %d", \ (int)(size), (int)(buf_size), __FILE__, __LINE__ ) # define append_char_to_buf(c, p, buf, buf_size) do { \ @@ -297,6 +297,9 @@ void vf_out_image(PDF pdf, unsigned i); /* lua/ltexiolib.c */ void flush_loggable_info(void); +/* lua/luastuff.w and lua/luajitstuff.w */ +void luafunctioncall(int slot); + /* lua/luastuff.c */ void luatokencall(int p, int nameptr); extern void late_lua(PDF pdf, halfword p); diff --git a/Build/source/texk/web2c/luatexdir/tex/commands.h b/Build/source/texk/web2c/luatexdir/tex/commands.h index ee0407b0eb7..690823b7856 100644 --- a/Build/source/texk/web2c/luatexdir/tex/commands.h +++ b/Build/source/texk/web2c/luatexdir/tex/commands.h @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */ -/* $Id: commands.h 4634 2013-04-21 14:45:45Z hhenkel $ */ +/* $Id: commands.h 4877 2014-03-14 01:26:05Z luigi $ */ #ifndef COMMANDS_H # define COMMANDS_H @@ -263,6 +263,7 @@ typedef enum { font_identifier_code, /* command code for \.{tex.fontidentifier} (virtual) */ font_id_code, /* command code for \.{\\fontid} */ uchar_code, /* command code for \.{\\Uchar} */ + lua_function_code, /* command code for \.{\\luafunction} */ } convert_codes; typedef enum { diff --git a/Build/source/texk/web2c/luatexdir/tex/commands.w b/Build/source/texk/web2c/luatexdir/tex/commands.w index 75fdefda898..51d2112c1d5 100644 --- a/Build/source/texk/web2c/luatexdir/tex/commands.w +++ b/Build/source/texk/web2c/luatexdir/tex/commands.w @@ -21,8 +21,8 @@ @ @c static const char _svn_version[] = - "$Id: commands.w 4634 2013-04-21 14:45:45Z hhenkel $" - "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/tex/commands.w $"; + "$Id: commands.w 4878 2014-03-14 10:48:03Z taco $" + "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/commands.w $"; #include "ptexlib.h" @@ -490,6 +490,7 @@ void initialize_commands(void) 0); primitive_pdftex("pdfnormaldeviate", convert_cmd, normal_deviate_code, 0); primitive_core("directlua", convert_cmd, lua_code, 0); + primitive_luatex("luafunction", convert_cmd, lua_function_code, 0); primitive_luatex("luaescapestring", convert_cmd, lua_escape_string_code, 0); primitive_luatex("mathstyle", convert_cmd, math_style_code, 0); primitive_pdftex("expanded", convert_cmd, expanded_code, 0); diff --git a/Build/source/texk/web2c/luatexdir/tex/linebreak.w b/Build/source/texk/web2c/luatexdir/tex/linebreak.w index fd486c3367e..646676bcfa2 100644 --- a/Build/source/texk/web2c/luatexdir/tex/linebreak.w +++ b/Build/source/texk/web2c/luatexdir/tex/linebreak.w @@ -19,7 +19,7 @@ @ @c static const char _svn_version[] = - "$Id: linebreak.w 4777 2014-02-10 10:09:39Z luigi $" + "$Id: linebreak.w 4775 2014-02-07 12:36:34Z luigi $" "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/linebreak.w $"; #include "ptexlib.h" diff --git a/Build/source/texk/web2c/luatexdir/tex/mainbody.w b/Build/source/texk/web2c/luatexdir/tex/mainbody.w index 8f0e3c47f4c..9aada03cf30 100644 --- a/Build/source/texk/web2c/luatexdir/tex/mainbody.w +++ b/Build/source/texk/web2c/luatexdir/tex/mainbody.w @@ -23,7 +23,7 @@ @ @c static const char _svn_version[] = - "$Id: mainbody.w 4722 2014-01-03 09:32:35Z taco $" + "$Id: mainbody.w 4877 2014-03-14 01:26:05Z luigi $" "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/mainbody.w $"; #include "ptexlib.h" @@ -443,7 +443,7 @@ void main_body(void) if (pdf_draftmode_option != 0) pdf_draftmode = static_pdf->draftmode = pdf_draftmode_value; pdf_init_map_file((char *) pdftex_map); - if (end_line_char_inactive()) + if (end_line_char_inactive) decr(ilimit); else buffer[ilimit] = (packed_ASCII_code) int_par(end_line_char_code); diff --git a/Build/source/texk/web2c/luatexdir/tex/printing.w b/Build/source/texk/web2c/luatexdir/tex/printing.w index 77d55a736b1..53bd0c79a8a 100644 --- a/Build/source/texk/web2c/luatexdir/tex/printing.w +++ b/Build/source/texk/web2c/luatexdir/tex/printing.w @@ -19,7 +19,7 @@ @ @c static const char _svn_version[] = - "$Id: printing.w 4722 2014-01-03 09:32:35Z taco $" + "$Id: printing.w 4857 2014-03-07 00:01:41Z luigi $" "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/printing.w $"; #include "ptexlib.h" @@ -477,6 +477,15 @@ void print_banner(const char *v, int ver) if (format_ident > 0) print(format_ident); print_ln(); + if (show_luahashchars){ + wterm(' '); +#ifdef LuajitTeX + fprintf(term_out,"Number of bits used by the hash function (luajittex): %d",LUAJITTEX_HASHCHARS); +#else + fprintf(term_out,"Number of bits used by the hash function (luatex): %d",LUATEX_HASHCHARS); +#endif + print_ln(); + } if (shellenabledp) { wterm(' '); if (restrictedshell) diff --git a/Build/source/texk/web2c/luatexdir/tex/scanning.h b/Build/source/texk/web2c/luatexdir/tex/scanning.h index 8c263404173..ca7804ea749 100644 --- a/Build/source/texk/web2c/luatexdir/tex/scanning.h +++ b/Build/source/texk/web2c/luatexdir/tex/scanning.h @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */ -/* $Id: scanning.h 4085 2011-02-10 09:21:57Z taco $ */ +/* $Id: scanning.h 4877 2014-03-14 01:26:05Z luigi $ */ #ifndef SCANNING_H # define SCANNING_H @@ -57,7 +57,6 @@ extern void scan_limited_int(int max, const char *name); extern void scan_fifteen_bit_int(void); extern void scan_fifty_one_bit_int(void); -extern void scan_string_argument(void); extern void scan_four_bit_int_or_18(void); # define octal_token (other_token+'\'') /* apostrophe, indicates an octal constant */ diff --git a/Build/source/texk/web2c/luatexdir/tex/scanning.w b/Build/source/texk/web2c/luatexdir/tex/scanning.w index 6e1a423d173..f3cc9b29bb5 100644 --- a/Build/source/texk/web2c/luatexdir/tex/scanning.w +++ b/Build/source/texk/web2c/luatexdir/tex/scanning.w @@ -19,8 +19,8 @@ @ @c static const char _svn_version[] = - "$Id: scanning.w 4562 2013-01-21 02:58:59Z khaled $" - "$URL: https://foundry.supelec.fr/svn/luatex/branches/ex-glyph/source/texk/web2c/luatexdir/tex/scanning.w $"; + "$Id: scanning.w 4877 2014-03-14 01:26:05Z luigi $" + "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/scanning.w $"; #include "ptexlib.h" @@ -939,33 +939,6 @@ void scan_four_bit_int_or_18(void) } -@ @c -void scan_string_argument(void) -{ - int s; - scan_left_brace(); - get_x_token(); - while ((cur_cmd != right_brace_cmd)) { - if ((cur_cmd == letter_cmd) || (cur_cmd == other_char_cmd)) { - str_room(1); - append_char(cur_chr); - } else if (cur_cmd == spacer_cmd) { - str_room(1); - append_char(' '); - } else { - tprint("Bad token appearing in string argument"); - } - get_x_token(); - } - s = make_string(); - /* todo: this was just conserving the string pool: */ -#if 0 - if (str_eq_str("mi",s)) s="mi"; - if (str_eq_str("mo",s)) s="mo"; - if (str_eq_str("mn",s)) s="mn"; -#endif - cur_val = s; -} @ An integer number can be preceded by any number of spaces and `\.+' or diff --git a/Build/source/texk/web2c/luatexdir/tex/texfileio.w b/Build/source/texk/web2c/luatexdir/tex/texfileio.w index 769dd3bd1c8..3a7ab5578c0 100644 --- a/Build/source/texk/web2c/luatexdir/tex/texfileio.w +++ b/Build/source/texk/web2c/luatexdir/tex/texfileio.w @@ -19,7 +19,7 @@ @ @c static const char _svn_version[] = - "$Id: texfileio.w 4722 2014-01-03 09:32:35Z taco $" + "$Id: texfileio.w 4877 2014-03-14 01:26:05Z luigi $" "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/texfileio.w $"; #include "ptexlib.h" @@ -973,7 +973,7 @@ void start_input(void) ; } firm_up_the_line(); - if (end_line_char_inactive()) + if (end_line_char_inactive) decr(ilimit); else buffer[ilimit] = (packed_ASCII_code) end_line_char; diff --git a/Build/source/texk/web2c/luatexdir/tex/texnodes.h b/Build/source/texk/web2c/luatexdir/tex/texnodes.h index bfc3a424091..d1015373909 100644 --- a/Build/source/texk/web2c/luatexdir/tex/texnodes.h +++ b/Build/source/texk/web2c/luatexdir/tex/texnodes.h @@ -1,5 +1,5 @@ /* texnodes.h - + Copyright 2006-2008 Taco Hoekwater <taco@luatex.org> This file is part of LuaTeX. @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */ -/* $Id: texnodes.h 4634 2013-04-21 14:45:45Z hhenkel $ */ +/* $Id: texnodes.h 4847 2014-03-05 18:13:17Z luigi $ */ #include <stdarg.h> @@ -146,7 +146,7 @@ typedef enum { # define synctex_tag_glue(a) vinfo((a)+3) # define synctex_line_glue(a) vlink((a)+3) -/* disc nodes could eventually be smaller, because the indirect +/* disc nodes could eventually be smaller, because the indirect pointers are not really needed (8 instead of 10). */ @@ -691,7 +691,7 @@ extern void print_short_node_contents(halfword n); extern void show_node_list(int i); extern pointer actual_box_width(pointer r, scaled base_width); -/* TH: these two defines still need checking. The node ordering in luatex is not +/* TH: these two defines still need checking. The node ordering in luatex is not quite the same as in tex82 */ # define precedes_break(a) (type((a))<math_node && \ @@ -785,4 +785,9 @@ extern halfword new_skip_param(int n); extern halfword new_kern(scaled w); extern halfword new_penalty(int m); +extern int lua_properties_enabled ; +extern int lua_properties_level ; +extern int lua_properties_use_metatable ; + #endif + diff --git a/Build/source/texk/web2c/luatexdir/tex/texnodes.w b/Build/source/texk/web2c/luatexdir/tex/texnodes.w index c087343b90c..73b39d08757 100644 --- a/Build/source/texk/web2c/luatexdir/tex/texnodes.w +++ b/Build/source/texk/web2c/luatexdir/tex/texnodes.w @@ -19,7 +19,7 @@ @ @c static const char _svn_version[] = - "$Id: texnodes.w 4754 2014-01-23 10:01:21Z taco $" + "$Id: texnodes.w 4847 2014-03-05 18:13:17Z luigi $" "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/texnodes.w $"; #include "ptexlib.h" @@ -334,6 +334,173 @@ node_info whatsit_node_data[] = { #define last_whatsit_node user_defined_node +/* hh: experiment */ + +/* + +When we copy a node list, there are several possibilities: we do the same as a new node, +we copy the entry to the table in properties (a reference), we do a deep copy of a table +in the properties, we create a new table and give it the original one as a metatable. +After some experiments (that also included timing) with these scenarios I decided that a +deep copy made no sense, nor did nilling. In the end both the shallow copy and the metatable +variant were both ok, although the second ons is slower. The most important aspect to keep +in mind is that references to other nodes in properties no longer can be valid for that +copy. We could use two tables (one unique and one shared) or metatables but that only +complicates matters. + +When defining a new node, we could already allocate a table but it is rather easy to do +that at the lua end e.g. using a metatable __index method. That way it is under macro +package control. + +When deleting a node, we could keep the slot (e.g. setting it to false) but it could make +memory consumption raise unneeded when we have temporary large node lists and after that +only small lists. + +So, in the end this is what we ended up with. For the record, I also experimented with the +following: + +- copy attributes to the properties so that we hav efast access at the lua end: in the end + the overhead is not compensated by speed and convenience, in fact, attributes are not + that slow when it comes to accessing them +- a bitset in the node but again the gain compared to attributes is neglectable and it also + demands a pretty string agreement over what bit represents what, and this is unlikely to + succeed in the tex community (I could use it for font handling, which is cross package, + but decided that it doesn't pay off + +In case one wonders why properties make sense then, well, it is not so much speed that we +gain, but more convenience: storing all kind of (temporary) data in attributes is no fun and +this mechanism makes sure that properties are cleaned up when a node is freed. Also, the +advantage of a more or less global properties table is that we stay at the lua end. An +alternative is to store a reference in the node itself but that is complicated by the fact +that the register has some limitations (no numeric keys) and we also don't want to mess with +it too much. + +*/ + +int lua_properties_level = 0 ; /* can be private */ +int lua_properties_enabled = 0 ; +int lua_properties_use_metatable = 0 ; + +/* We keep track of nesting so that we don't oveflow the stack, and, what is more important, +don't keep resolving the registry index. */ + +#define lua_properties_push do { \ + if (lua_properties_enabled) { \ + lua_properties_level = lua_properties_level + 1 ; \ + if (lua_properties_level == 1) { \ + lua_rawgeti(Luas, LUA_REGISTRYINDEX, luaS_index(node_properties)); \ + lua_gettable(Luas, LUA_REGISTRYINDEX); \ + } \ + } \ +} while(0) + +#define lua_properties_pop do { \ + if (lua_properties_enabled) { \ + if (lua_properties_level == 1) \ + lua_pop(Luas,1); \ + lua_properties_level = lua_properties_level - 1 ; \ + } \ +} while(0) + +/* No setting is needed: */ + +#define lua_properties_set(target) do { \ +} while(0) + +/* Resetting boils down to nilling. */ + +#define lua_properties_reset(target) do { \ + if (lua_properties_enabled) { \ + if (lua_properties_level == 0) { \ + lua_rawgeti(Luas, LUA_REGISTRYINDEX, luaS_index(node_properties)); \ + lua_gettable(Luas, LUA_REGISTRYINDEX); \ + lua_pushnil(Luas); \ + lua_rawseti(Luas,-2,target); \ + lua_pop(Luas,1); \ + } else { \ + lua_pushnil(Luas); \ + lua_rawseti(Luas,-2,target); \ + } \ + } \ +} while(0) + +/* For a moment I considered supporting all kind of data types but in practice +that makes no sense. So we stick to a cheap shallow copy with as option a +metatable. Btw, a deep copy would look like this: + +static void copy_lua_table(lua_State* L, int index) { + lua_newtable(L); + lua_pushnil(L); + while(lua_next(L, index-1) != 0) { + lua_pushvalue(L, -2); + lua_insert(L, -2); + if (lua_type(L,-1)==LUA_TTABLE) + copy_lua_table(L,-1); + lua_settable(L, -4); + } + lua_pop(L,1); +} + +#define lua_properties_copy(target, source) do { \ + if (lua_properties_enabled) { \ + lua_pushnumber(Luas,source); \ + lua_rawget(Luas,-2); \ + if (lua_type(Luas,-1)==LUA_TTABLE) { \ + copy_lua_table(Luas,-1); \ + lua_pushnumber(Luas,target); \ + lua_insert(Luas,-2); \ + lua_rawset(Luas,-3); \ + } else { \ + lua_pop(Luas,1); \ + } \ + } \ +} while(0) + +*/ + +/* isn't there a faster way to metatable? */ + +#define lua_properties_copy(target,source) do { \ + if (lua_properties_enabled) { \ + if (lua_properties_level == 0) { \ + lua_rawgeti(Luas, LUA_REGISTRYINDEX, luaS_index(node_properties)); \ + lua_gettable(Luas, LUA_REGISTRYINDEX); \ + lua_rawgeti(Luas,-1,source); \ + if (lua_type(Luas,-1)==LUA_TTABLE) { \ + if (lua_properties_use_metatable) { \ + lua_newtable(Luas); \ + lua_insert(Luas,-2); \ + lua_setfield(Luas,-2,"__index"); \ + lua_newtable(Luas); \ + lua_insert(Luas,-2); \ + lua_setmetatable(Luas,-2); \ + } \ + lua_rawseti(Luas,-2,target); \ + } else { \ + lua_pop(Luas,1); \ + } \ + lua_pop(Luas,1); \ + } else { \ + lua_rawgeti(Luas,-1,source); \ + if (lua_type(Luas,-1)==LUA_TTABLE) { \ + if (lua_properties_use_metatable) { \ + lua_newtable(Luas); \ + lua_insert(Luas,-2); \ + lua_setfield(Luas,-2,"__index"); \ + lua_newtable(Luas); \ + lua_insert(Luas,-2); \ + lua_setmetatable(Luas,-2); \ + } \ + lua_rawseti(Luas,-2,target); \ + } else { \ + lua_pop(Luas,1); \ + } \ + } \ + } \ +} while(0) + +/* Here end the property handlers. */ + @ @c halfword new_node(int i, int j) { @@ -408,7 +575,6 @@ halfword new_node(int i, int j) synctex_line_glue(n) = line; break; case kern_node: - /* synctex ignores implicit kerns */ if (j != 0) { synctex_tag_kern(n) = cur_input.synctex_tag_field; synctex_line_kern(n) = line; @@ -428,6 +594,7 @@ halfword new_node(int i, int j) /* take care of attributes */ if (nodetype_has_attributes(i)) { build_attribute_list(n); + /* lua_properties_set */ } type(n) = (quarterword) i; subtype(n) = (quarterword) j; @@ -458,20 +625,23 @@ halfword new_glyph_node(void) type(n) = glyph_node; subtype(n) = 0; build_attribute_list(n); + /* lua_properties_set */ return n; } @ makes a duplicate of the node list that starts at |p| and returns a - pointer to the new list + pointer to the new list @c halfword do_copy_node_list(halfword p, halfword end) { halfword q = null; /* previous position in new list */ halfword h = null; /* head of the list */ + register halfword s ; copy_error_seen = 0; + lua_properties_push; /* saves stack and time */ while (p != end) { - register halfword s = copy_node(p); + s = copy_node(p); if (h == null) { h = s; } else { @@ -480,6 +650,7 @@ halfword do_copy_node_list(halfword p, halfword end) q = s; p = vlink(p); } + lua_properties_pop; /* saves stack and time */ return h; } @@ -488,7 +659,50 @@ halfword copy_node_list(halfword p) return do_copy_node_list(p, null); } -@ make a dupe of a single node +/* There is no gain in using a temp var: + + #define copy_sub_list(target,source) do { \ + l = source; \ + if (l != null) { \ + s = copy_node_list(l); \ + target = s; \ + } else { \ + target = null; \ + } \ + } while (0) + + #define copy_sub_node(target,source) do { \ + l = source; \ + if (l != null) { \ + s = copy_node(l); \ + target = s ; \ + } else { \ + target = null; \ + } \ + } while (0) + + So we use: +*/ + +#define copy_sub_list(target,source) do { \ + if (source != null) { \ + s = do_copy_node_list(source, null); \ + target = s; \ + } else { \ + target = null; \ + } \ + } while (0) + +#define copy_sub_node(target,source) do { \ + if (source != null) { \ + s = copy_node(source); \ + target = s ; \ + } else { \ + target = null; \ + } \ +} while (0) + +@ make a dupe of a single node @c halfword copy_node(const halfword p) { @@ -506,7 +720,7 @@ halfword copy_node(const halfword p) (sizeof(memory_word) * (unsigned) i)); /* handle synctex extension */ - switch (type(p)) { + switch (type(p)) { case math_node: synctex_tag_math(r) = cur_input.synctex_tag_field; synctex_line_math(r) = line; @@ -516,38 +730,25 @@ halfword copy_node(const halfword p) synctex_line_kern(r) = line; break; } - if (nodetype_has_attributes(type(p))) { add_node_attr_ref(node_attr(p)); - alink(r) = null; /* needs checking */ + alink(r) = null; + lua_properties_copy(r,p); } vlink(r) = null; - switch (type(p)) { case glyph_node: - s = copy_node_list(lig_ptr(p)); - lig_ptr(r) = s; + copy_sub_list(lig_ptr(r),lig_ptr(p)) ; break; case glue_node: add_glue_ref(glue_ptr(p)); - s = copy_node_list(leader_ptr(p)); - leader_ptr(r) = s; + copy_sub_list(leader_ptr(r),leader_ptr(p)) ; break; case hlist_node: case vlist_node: case unset_node: - s = copy_node_list(list_ptr(p)); - list_ptr(r) = s; - break; - case ins_node: - add_glue_ref(split_top_ptr(p)); - s = copy_node_list(ins_ptr(p)); - ins_ptr(r) = s; - break; - case margin_kern_node: - s = copy_node(margin_char(p)); - margin_char(r) = s; + copy_sub_list(list_ptr(r),list_ptr(p)) ; break; case disc_node: pre_break(r) = pre_break_head(r); @@ -578,63 +779,51 @@ halfword copy_node(const halfword p) assert(tlink_no_break(r) == null); } break; + case ins_node: + add_glue_ref(split_top_ptr(p)); + copy_sub_list(ins_ptr(r),ins_ptr(p)) ; + break; + case margin_kern_node: + copy_sub_node(margin_char(r),margin_char(p)); + break; case mark_node: add_token_ref(mark_ptr(p)); break; case adjust_node: - s = copy_node_list(adjust_ptr(p)); - adjust_ptr(r) = s; + copy_sub_list(adjust_ptr(r),adjust_ptr(p)); break; - case choice_node: - s = copy_node_list(display_mlist(p)); - display_mlist(r) = s; - s = copy_node_list(text_mlist(p)); - text_mlist(r) = s; - s = copy_node_list(script_mlist(p)); - script_mlist(r) = s; - s = copy_node_list(script_script_mlist(p)); - script_script_mlist(r) = s; + copy_sub_list(display_mlist(r),display_mlist(p)) ; + copy_sub_list(text_mlist(r),text_mlist(p)) ; + copy_sub_list(script_mlist(r),script_mlist(p)) ; + copy_sub_list(script_script_mlist(r),script_script_mlist(p)) ; break; case simple_noad: case radical_noad: case accent_noad: - s = copy_node_list(nucleus(p)); - nucleus(r) = s; - s = copy_node_list(subscr(p)); - subscr(r) = s; - s = copy_node_list(supscr(p)); - supscr(r) = s; + copy_sub_list(nucleus(r),nucleus(p)) ; + copy_sub_list(subscr(r),subscr(p)) ; + copy_sub_list(supscr(r),supscr(p)) ; if (type(p) == accent_noad) { - s = copy_node_list(accent_chr(p)); - accent_chr(r) = s; - s = copy_node_list(bot_accent_chr(p)); - bot_accent_chr(r) = s; + copy_sub_list(accent_chr(r),accent_chr(p)) ; + copy_sub_list(bot_accent_chr(r),bot_accent_chr(p)) ; } else if (type(p) == radical_noad) { - s = copy_node(left_delimiter(p)); - left_delimiter(r) = s; - s = copy_node_list(degree(p)); - degree(r) = s; + copy_sub_node(left_delimiter(r),left_delimiter(p)) ; + copy_sub_list(degree(r),degree(p)) ; } break; case fence_noad: - s = copy_node(delimiter(p)); - delimiter(r) = s; + copy_sub_node(delimiter(r),delimiter(p)) ; break; case sub_box_node: case sub_mlist_node: - s = copy_node_list(math_list(p)); - math_list(r) = s; + copy_sub_list(math_list(r),math_list(p)) ; break; case fraction_noad: - s = copy_node_list(numerator(p)); - numerator(r) = s; - s = copy_node_list(denominator(p)); - denominator(r) = s; - s = copy_node(left_delimiter(p)); - left_delimiter(r) = s; - s = copy_node(right_delimiter(p)); - right_delimiter(r) = s; + copy_sub_list(numerator(r),numerator(p)) ; + copy_sub_list(denominator(r),denominator(p)) ; + copy_sub_node(left_delimiter(r),left_delimiter(p)) ; + copy_sub_node(right_delimiter(r),right_delimiter(p)) ; break; case glue_spec_node: glue_ref_count(r) = null; @@ -880,6 +1069,33 @@ int copy_error(halfword p) return 0; } +/* No gain in a helper: + + #define free_sub_list(source) do { \ + l = source; \ + if (l != null) \ + flush_node_list(l); \ + } while (0) + + #define free_sub_node(source) do { \ + l = source; \ + if (l != null) \ + flush_node(l); \ + } while (0) + + So: + +*/ + +#define free_sub_list(source) do { \ + if (source != null) \ + flush_node_list(source); \ +} while (0) + +#define free_sub_node(source) do { \ + if (source != null) \ + flush_node(source); \ +} while (0) @ @c void flush_node(halfword p) @@ -897,11 +1113,29 @@ void flush_node(halfword p) switch (type(p)) { case glyph_node: - flush_node_list(lig_ptr(p)); + free_sub_list(lig_ptr(p)); break; case glue_node: delete_glue_ref(glue_ptr(p)); - flush_node_list(leader_ptr(p)); + free_sub_list(leader_ptr(p)); + break; + case hlist_node: + case vlist_node: + case unset_node: + free_sub_list(list_ptr(p)); + break; + case disc_node: + free_sub_list(vlink(pre_break(p))); + free_sub_list(vlink(post_break(p))); + free_sub_list(vlink(no_break(p))); +// why not: free_sub_list(pre_break(p)); +// why not: free_sub_list(post_break(p)); +// why not: free_sub_list(no_break(p)); + break; + case rule_node: + case kern_node: + case math_node: + case penalty_node: break; case glue_spec_node: /* this allows free-ing of lua-allocated glue specs */ @@ -914,20 +1148,6 @@ void flush_node(halfword p) } return ; break ; - case attribute_node: - case attribute_list_node: - case temp_node: - case rule_node: - case kern_node: - case math_node: - case penalty_node: - break; - - case hlist_node: - case vlist_node: - case unset_node: - flush_node_list(list_ptr(p)); - break; case whatsit_node: switch (subtype(p)) { @@ -1039,38 +1259,33 @@ void flush_node(halfword p) case mark_node: delete_token_ref(mark_ptr(p)); break; - case disc_node: - flush_node_list(vlink(pre_break(p))); - flush_node_list(vlink(post_break(p))); - flush_node_list(vlink(no_break(p))); - break; case adjust_node: flush_node_list(adjust_ptr(p)); break; case style_node: /* nothing to do */ break; case choice_node: - flush_node_list(display_mlist(p)); - flush_node_list(text_mlist(p)); - flush_node_list(script_mlist(p)); - flush_node_list(script_script_mlist(p)); + free_sub_list(display_mlist(p)); + free_sub_list(text_mlist(p)); + free_sub_list(script_mlist(p)); + free_sub_list(script_script_mlist(p)); break; case simple_noad: case radical_noad: case accent_noad: - flush_node_list(nucleus(p)); - flush_node_list(subscr(p)); - flush_node_list(supscr(p)); + free_sub_list(nucleus(p)); + free_sub_list(subscr(p)); + free_sub_list(supscr(p)); if (type(p) == accent_noad) { - flush_node_list(accent_chr(p)); - flush_node_list(bot_accent_chr(p)); + free_sub_list(accent_chr(p)); + free_sub_list(bot_accent_chr(p)); } else if (type(p) == radical_noad) { - flush_node(left_delimiter(p)); - flush_node_list(degree(p)); + free_sub_node(left_delimiter(p)); + free_sub_list(degree(p)); } break; case fence_noad: - flush_node(delimiter(p)); + free_sub_list(delimiter(p)); break; case delim_node: /* nothing to do */ case math_char_node: @@ -1078,16 +1293,16 @@ void flush_node(halfword p) break; case sub_box_node: case sub_mlist_node: - flush_node_list(math_list(p)); + free_sub_list(math_list(p)); break; case fraction_noad: - flush_node_list(numerator(p)); - flush_node_list(denominator(p)); - flush_node(left_delimiter(p)); - flush_node(right_delimiter(p)); + free_sub_list(numerator(p)); + free_sub_list(denominator(p)); + free_sub_node(left_delimiter(p)); + free_sub_node(right_delimiter(p)); break; case pseudo_file_node: - flush_node_list(pseudo_lines(p)); + free_sub_list(pseudo_lines(p)); break; case pseudo_line_node: case shape_node: @@ -1107,14 +1322,19 @@ void flush_node(halfword p) case inserting_node: case split_up_node: case expr_node: + case attribute_node: + case attribute_list_node: + case temp_node: break; default: fprintf(stdout, "flush_node: type is %d\n", type(p)); return; } - if (nodetype_has_attributes(type(p))) + if (nodetype_has_attributes(type(p))) { delete_attribute_ref(node_attr(p)); + lua_properties_reset(p); + } free_node(p, get_node_size(type(p), subtype(p))); return; } @@ -1128,12 +1348,13 @@ void flush_node_list(halfword pp) return; if (free_error(p)) return; - + lua_properties_push; /* saves stack and time */ while (p != null) { register halfword q = vlink(p); flush_node(p); p = q; } + lua_properties_pop; /* saves stack and time */ } @ @c @@ -1423,7 +1644,7 @@ halfword get_node(int s) { register halfword r; #if 0 - check_static_node_mem(); + check_static_node_mem(); #endif assert(s < MAX_CHAIN_SIZE); @@ -2566,9 +2787,9 @@ static void show_whatsit_node(int p) clobbered or chosen at random. -@ |str_room| need not be checked; see |show_box| +@ |str_room| need not be checked; see |show_box| -@ Recursive calls on |show_node_list| therefore use the following pattern: +@ Recursive calls on |show_node_list| therefore use the following pattern: @c #define node_list_display(A) do { \ append_char('.'); \ diff --git a/Build/source/texk/web2c/luatexdir/tex/textoken.h b/Build/source/texk/web2c/luatexdir/tex/textoken.h index c557012e7a2..f757612fc5d 100644 --- a/Build/source/texk/web2c/luatexdir/tex/textoken.h +++ b/Build/source/texk/web2c/luatexdir/tex/textoken.h @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */ -/* $Id: textoken.h 4634 2013-04-21 14:45:45Z hhenkel $ */ +/* $Id: textoken.h 4877 2014-03-14 01:26:05Z luigi $ */ #ifndef TEXTOKEN_H # define TEXTOKEN_H @@ -139,9 +139,9 @@ extern int get_char_cat_code(int); |get_next| if it wants to suppress expansion. */ -# define no_expand_flag special_char - -extern boolean end_line_char_inactive(void); +# define no_expand_flag special_char +# define end_line_char int_par(end_line_char_code) +# define end_line_char_inactive ((end_line_char < 0) || (end_line_char > 127)) extern halfword par_loc; extern halfword par_token; diff --git a/Build/source/texk/web2c/luatexdir/tex/textoken.w b/Build/source/texk/web2c/luatexdir/tex/textoken.w index b12f54fa006..48f6e43d48b 100644 --- a/Build/source/texk/web2c/luatexdir/tex/textoken.w +++ b/Build/source/texk/web2c/luatexdir/tex/textoken.w @@ -19,7 +19,7 @@ @ @c static const char _svn_version[] = - "$Id: textoken.w 4786 2014-02-10 13:17:44Z taco $" + "$Id: textoken.w 4877 2014-03-14 01:26:05Z luigi $" "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/textoken.w $"; #include "ptexlib.h" @@ -28,7 +28,6 @@ static const char _svn_version[] = #define pausing int_par(pausing_code) #define cat_code_table int_par(cat_code_table_code) #define tracing_nesting int_par(tracing_nesting_code) -#define end_line_char int_par(end_line_char_code) #define suppress_outer_error int_par(suppress_outer_error_code) #define every_eof equiv(every_eof_loc) @@ -1238,14 +1237,6 @@ static boolean check_expanded_code(int *kk) return false; } -@ todo: this is a function because it is still used from the converted pascal. - once that is gone, it can be a \#define again - -@c -boolean end_line_char_inactive(void) -{ - return ((end_line_char < 0) || (end_line_char > 127)); -} @ All of the easy branches of |get_next| have now been taken care of. There is one more branch. @@ -1327,7 +1318,7 @@ static next_line_retval next_line(void) } return next_line_restart; } - if (inhibit_eol || end_line_char_inactive()) + if (inhibit_eol || end_line_char_inactive) ilimit--; else buffer[ilimit] = (packed_ASCII_code) end_line_char; @@ -1346,7 +1337,7 @@ static next_line_retval next_line(void) if (selector < log_only) open_log_file(); if (interaction > nonstop_mode) { - if (end_line_char_inactive()) + if (end_line_char_inactive) ilimit++; if (ilimit == istart) { /* previous line was empty */ tprint_nl("(Please type a command or say `\\end')"); @@ -1355,7 +1346,7 @@ static next_line_retval next_line(void) first = istart; prompt_input("*"); /* input on-line into |buffer| */ ilimit = last; - if (end_line_char_inactive()) + if (end_line_char_inactive) ilimit--; else buffer[ilimit] = (packed_ASCII_code) end_line_char; @@ -1718,29 +1709,30 @@ static boolean print_convert_string(halfword c, int i) } @ @c -int scan_lua_state(void) +int scan_lua_state(void) /* hh-ls: optional name or number (not optional name optional number) */ { - int sn = 0; - if (scan_keyword("name")) { - scan_pdf_ext_toks(); - sn = def_ref; - } /* Parse optional lua state integer, or an instance name to be stored in |sn| */ /* Get the next non-blank non-relax non-call token */ + int sn = 0; do { get_x_token(); } while ((cur_cmd == spacer_cmd) || (cur_cmd == relax_cmd)); - back_input(); /* have to push it back, whatever it is */ if (cur_cmd != left_brace_cmd) { - scan_register_num(); - if (get_lua_name(cur_val)) - sn = (cur_val - 65536); + if (scan_keyword("name")) { + (void) scan_toks(false, true); + sn = def_ref; + } else { + scan_register_num(); + if (get_lua_name(cur_val)) + sn = (cur_val - 65536); + } } return sn; } + @ The procedure |conv_toks| uses |str_toks| to insert the token list for |convert| functions into the scanner; `\.{\\outer}' control sequences are allowed to follow `\.{\\string}' and `\.{\\meaning}'. @@ -1840,7 +1832,7 @@ void conv_toks(void) save_warning_index = warning_index; save_def_ref = def_ref; u = save_cur_string(); - scan_pdf_ext_toks(); + scan_toks(false, true); /*hh-ls was scan_pdf_ext_toks();*/ s = tokens_to_string(def_ref); delete_token_ref(def_ref); def_ref = save_def_ref; @@ -1870,7 +1862,7 @@ void conv_toks(void) save_scanner_status = scanner_status; save_def_ref = def_ref; save_warning_index = warning_index; - scan_pdf_ext_toks(); + scan_toks(false, true); /*hh-ls was scan_pdf_ext_toks();*/ bool = in_lua_escape; in_lua_escape = true; escstr.s = (unsigned char *) tokenlist_to_cstring(def_ref, false, &l); @@ -1893,7 +1885,7 @@ void conv_toks(void) save_warning_index = warning_index; save_def_ref = def_ref; u = save_cur_string(); - scan_pdf_ext_toks(); + scan_toks(false, true); /*hh-ls was scan_pdf_ext_toks();*/ warning_index = save_warning_index; scanner_status = save_scanner_status; ins_list(token_link(def_ref)); @@ -1907,7 +1899,7 @@ void conv_toks(void) save_def_ref = def_ref; save_warning_index = warning_index; sn = scan_lua_state(); - scan_pdf_ext_toks(); + scan_toks(false, true); /*hh-ls was scan_pdf_ext_toks();*/ s = def_ref; warning_index = save_warning_index; def_ref = save_def_ref; @@ -1920,6 +1912,19 @@ void conv_toks(void) lua_string_start(); return; break; + case lua_function_code: + scan_int(); + if (cur_val <= 0) { + pdf_error("luafunction", "invalid number"); + } else { + u = save_cur_string(); + luacstrings = 0; + luafunctioncall(cur_val); + restore_cur_string(u); + if (luacstrings > 0) + lua_string_start(); + } + break; case pdf_insert_ht_code: scan_register_num(); break; @@ -2021,6 +2026,7 @@ void conv_toks(void) case pdf_creation_date_code: case lua_escape_string_code: case lua_code: + case lua_function_code: case expanded_code: break; default: @@ -2157,7 +2163,7 @@ void read_toks(int n, halfword r, halfword j) } ilimit = last; - if (end_line_char_inactive()) + if (end_line_char_inactive) decr(ilimit); else buffer[ilimit] = (packed_ASCII_code) int_par(end_line_char_code); diff --git a/Build/source/texk/web2c/luatexdir/utils/utils.w b/Build/source/texk/web2c/luatexdir/utils/utils.w index cf63c479097..10b4c5c687f 100644 --- a/Build/source/texk/web2c/luatexdir/utils/utils.w +++ b/Build/source/texk/web2c/luatexdir/utils/utils.w @@ -20,7 +20,7 @@ @ @c static const char _svn_version[] = - "$Id: utils.w 4720 2014-01-02 16:06:16Z taco $" + "$Id: utils.w 4882 2014-03-14 12:56:21Z taco $" "$URL: https://foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/utils/utils.w $"; @ @c @@ -40,6 +40,7 @@ static const char _svn_version[] = #include "lua/luatex-api.h" /* for ptexbanner */ #include "png.h" +#include "mplib.h" /* POPPLER_VERSION is defined in poppler-config.h for poppler from * the TeX Live tree, or in the Makefile for an installed version. */ @@ -48,7 +49,7 @@ static const char _svn_version[] = @ @c #define check_nprintf(size_get, size_want) \ if ((unsigned)(size_get) >= (unsigned)(size_want)) \ - pdftex_fail ("snprintf failed: file %s, line %d", __FILE__, __LINE__); + luatex_fail ("snprintf failed: file %s, line %d", __FILE__, __LINE__); char *cur_file_name = NULL; static char print_buf[PRINTF_BUF_SIZE]; @@ -114,7 +115,7 @@ void make_subset_tag(fd_entry * fd) aa = avl_probe(st_tree, fd->subset_tag); assert(aa != NULL); if (j > 2) - pdftex_warn + luatex_warn ("\nmake_subset_tag(): subset-tag collision, resolved in round %d.\n", j); } @@ -131,7 +132,7 @@ void tex_printf(const char *fmt, ...) va_end(args); } -@ |pdftex_fail| may be called when a buffer overflow has happened/is +@ |luatex_fail| may be called when a buffer overflow has happened/is happening, therefore may not call mktexstring. However, with the current implementation it appears that error messages are misleading, possibly because pool overflows are detected too late. @@ -141,7 +142,7 @@ void tex_printf(const char *fmt, ...) @c __attribute__ ((noreturn, format(printf, 1, 2))) -void pdftex_fail(const char *fmt, ...) +void luatex_fail(const char *fmt, ...) { va_list args; va_start(args, fmt); @@ -171,7 +172,7 @@ void pdftex_fail(const char *fmt, ...) pdftex.web! @c __attribute__ ((format(printf, 1, 2))) -void pdftex_warn(const char *fmt, ...) +void luatex_warn(const char *fmt, ...) { int old_selector = selector; va_list args; @@ -192,7 +193,7 @@ void pdftex_warn(const char *fmt, ...) @ @c void garbage_warning(void) { - pdftex_warn("dangling objects discarded, no output file produced."); + luatex_warn("dangling objects discarded, no output file produced."); remove_pdffile(static_pdf); } @@ -225,7 +226,7 @@ void make_pdftex_banner(void) size_t xfwrite(void *ptr, size_t size, size_t nmemb, FILE * stream) { if (fwrite(ptr, size, nmemb, stream) != nmemb) - pdftex_fail("fwrite() failed"); + luatex_fail("fwrite() failed"); return nmemb; } @@ -233,7 +234,7 @@ size_t xfwrite(void *ptr, size_t size, size_t nmemb, FILE * stream) int xfflush(FILE * stream) { if (fflush(stream) != 0) - pdftex_fail("fflush() failed (%s)", strerror(errno)); + luatex_fail("fflush() failed (%s)", strerror(errno)); return 0; } @@ -242,7 +243,7 @@ int xgetc(FILE * stream) { int c = getc(stream); if (c < 0 && c != EOF) - pdftex_fail("getc() failed (%s)", strerror(errno)); + luatex_fail("getc() failed (%s)", strerror(errno)); return c; } @@ -251,7 +252,7 @@ int xputc(int c, FILE * stream) { int i = putc(c, stream); if (i < 0) - pdftex_fail("putc() failed (%s)", strerror(errno)); + luatex_fail("putc() failed (%s)", strerror(errno)); return i; } @@ -264,7 +265,7 @@ scaled ext_xn_over_d(scaled x, scaled n, scaled d) else r -= 0.5; if (r >= (double) max_integer || r <= -(double) max_integer) - pdftex_warn("arithmetic: number too big"); + luatex_warn("arithmetic: number too big"); return (scaled) r; } @@ -346,11 +347,13 @@ void initversionstring(char **versions) const_string fmt = "Compiled with libpng %s; using %s\n" "Compiled with zlib %s; using %s\n" - "Compiled with poppler version %s\n"; + "Compiled with poppler version %s\n" + "Compiled with mplib version %s\n"; size_t len = strlen(fmt) + strlen(PNG_LIBPNG_VER_STRING) + strlen(png_libpng_ver) + strlen(ZLIB_VERSION) + strlen(zlib_version) + strlen(POPPLER_VERSION) + + strlen(mp_metapost_version()) + 1; /* len will be more than enough, because of the placeholder chars in fmt @@ -358,7 +361,7 @@ void initversionstring(char **versions) *versions = xmalloc(len); sprintf(*versions, fmt, PNG_LIBPNG_VER_STRING, png_libpng_ver, - ZLIB_VERSION, zlib_version, POPPLER_VERSION); + ZLIB_VERSION, zlib_version, POPPLER_VERSION, mp_metapost_version()); } @ @c |