summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changes22
-rw-r--r--Makefile11
-rw-r--r--TODO4
-rw-r--r--lltxb-dtxstyle.tex6
-rw-r--r--luatexbase-loader.dtx139
-rw-r--r--luatexbase-mcb.dtx27
-rw-r--r--luatexbase-modutils.dtx14
-rw-r--r--luatexbase.dtx30
8 files changed, 133 insertions, 120 deletions
diff --git a/Changes b/Changes
index 10a79e6..7b39c55 100644
--- a/Changes
+++ b/Changes
@@ -1,5 +1,27 @@
Changes in the luatexbase package/bundle
+2013/04/22 v0.6
+ loader
+ - do not output included file paths when called by texlua
+ mcb
+ - passing most of the term output to the log
+
+2013/04/13 v0.5
+ all
+ - input luatex.sty before doing anything, as luatex.sty
+ breaks if loaded after luatexbase
+ mcb and loader
+ - compatibility with Lua 5.2 (LuaTeX >= 0.74)
+ loader
+ - fix an important bug making the kpse lua loader never used,
+ it should make package searching a bit faster.
+ - dropping support for LuaTeX < 0.45.
+ - small improvement to make x.y.lua look for x/y.lua, not
+ x/y/lua.
+ modutils
+ - fixing a bug printing "luatexbase-attr" in all documents
+ in plain TeX
+
2011/00/24 v0.4
cctb
- implement catcode table stacks à la luatex.sty
diff --git a/Makefile b/Makefile
index 0f65bf1..6fdc7fb 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
# Makefile for luatexbase
NAME = luatexbase
-DTX = $(wildcard *.dtx)
+DTX = $(wildcard luatexbase*.dtx)
DOC = $(patsubst %.dtx, %.pdf, $(DTX))
DTXSTY = lltxb-dtxstyle.tex
@@ -28,6 +28,9 @@ UNPACKED_LUATEX = luatex.sty test-luatex1.tex test-luatex2.tex \
UNPACKED = $(UNPACKED_MCB) $(UNPACKED_REGS) $(UNPACKED_ATTR) $(UNPACKED_CCTB) \
$(UNPACKED_LOADER) $(UNPACKED_MODUTILS) $(UNPACKED_COMPAT) \
$(UNPACKED_BASE) $(UNPACKED_LUATEX)
+UNPACKEDTL = $(UNPACKED_MCB) $(UNPACKED_REGS) $(UNPACKED_ATTR) $(UNPACKED_CCTB) \
+ $(UNPACKED_LOADER) $(UNPACKED_MODUTILS) $(UNPACKED_COMPAT) \
+ $(UNPACKED_BASE)
COMPILED = $(DOC)
GENERATED = $(COMPILED) $(UNPACKED)
SOURCE = $(DTX) $(DTXSTY) README TODO Changes Makefile
@@ -38,8 +41,8 @@ TMP_LOADER = $(TEST_LOADER).tex
TEST_MCB = test-mcb-aux.tex
# Files grouped by installation location
-RUNFILES = $(filter-out test-%, $(UNPACKED))
-DOCFILES = $(DOC) $(filter test-%, $(UNPACKED)) README TODO Changes
+RUNFILES = $(filter-out test-%, $(UNPACKEDTL))
+DOCFILES = $(DOC) $(filter test-%, $(UNPACKEDTL)) README TODO Changes
SRCFILES = $(DTX) Makefile
# The following definitions should be equivalent
@@ -84,7 +87,7 @@ luatexbase.%.lua: %.lua
$(UNPACKED_MCB): luatexbase-mcb.dtx
$(DO_TEX)
- echo \\\\relax > $(TEST_MCB)
+ echo "\\\relax" > $(TEST_MCB)
$(UNPACKED_REGS): luatexbase-regs.dtx
$(DO_TEX)
diff --git a/TODO b/TODO
index b70a84a..6205464 100644
--- a/TODO
+++ b/TODO
@@ -13,9 +13,7 @@ all
or generalise use of qstest
- add debug messages to be used in the test suite?
- mark all occurences of version-dependent stuff in the code
-- drop compat for 0.25 when tl2010 is frozen
-- quit using module() in favor of locals, more generally ensure compat with
- Lua 5.2
+- quit using module() in favor of locals
- support the syntax foo = require"foo" in modutils? How?
compat
diff --git a/lltxb-dtxstyle.tex b/lltxb-dtxstyle.tex
index 804dbfb..115d4f2 100644
--- a/lltxb-dtxstyle.tex
+++ b/lltxb-dtxstyle.tex
@@ -57,8 +57,8 @@
\newif\ifluatexbase
\author{%
Heiko Oberdiek (primary author of \pk{luatex}) \\
- Élie Roux (primary author of \pk{luatextra}) \\
- Manuel Pégourié-Gonnard (current developper)\thanks{%
+ \'Elie Roux (primary author of \pk{luatextra}) \\
+ Manuel P\'egouri\'e-Gonnard (current developper)\thanks{%
See ``History''
\ifluatexbase\else in \href{luatexbase.pdf}{\file{luatexbase.pdf}} \fi
for details.}%
@@ -68,7 +68,7 @@
}
\hypersetup{%
pdfsubject = {Basic resource management for LuaTeX},
- pdfauthor = {Manuel Pégourié-Gonnard, Élie Roux, Heiko Oberdiek},
+ pdfauthor = {Manuel P\'egouri\'e-Gonnard, \'Elie Roux, Heiko Oberdiek},
}
% other metadata
diff --git a/luatexbase-loader.dtx b/luatexbase-loader.dtx
index 3bf1b47..b8e5098 100644
--- a/luatexbase-loader.dtx
+++ b/luatexbase-loader.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright 2009, 2010 by Élie Roux <elie.roux@telecom-bretagne.eu>
+% Copyright 2009-2013 by Élie Roux <elie.roux@telecom-bretagne.eu>
% Copyright 2010, 2011 by Manuel Pégourié-Gonnard <mpg@elzevir.fr>
%
% This work is under the CC0 license.
@@ -112,9 +112,9 @@ See the aforementioned source file(s) for copyright and licensing information.
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
%
-% \pkdate{luatexbase-loader}{v0.4 2011-05-24}
+% \pkdate{luatexbase-loader}{v0.5 2013-04-13}
%
-% \maketitle
+% \maketitle
%
% \begin{abstract}
% Lua modules are loaded using the |require()| function which, similarly to
@@ -133,27 +133,18 @@ See the aforementioned source file(s) for copyright and licensing information.
% when the library is initialised (which is always the case in \tex mode,
% unless explicitly disabled by the user). However, it did not respect the
% Lua convention that |require("foo.bar")| should look for |foo/bar.lua| until
-% version 0.60. This package adds such behaviour to older versions of \luatex.
-%
-% More precisely, it implements a new kpse searcher that looks for file
-% |foo/bar| using Kpathsea with the format |lua| (that is, search along
-% |LUAINPUTS| and try the following extensions: |.luc|, |.luctex|, |.texluc|,
-% |.lua|, |.luatex|, |.texlua|). If this search fails, it falls back to
-% |foo.bar| (along the same path with the same extensions).
-%
-% Also, older versions of \luatex, such as 0.25.4 (\texlive 2008), don't know
-% about the |lua| format for kpse searching. So, an emulator for this function
-% is provided. The emulator is not perfect, in particular it may find more
-% results than the normal |lua| format search.\footnote{And may also fail to
-% find the file in particular cases, see comments in the implementation for
-% details.} In order to ensure more homogeneous results across versions, this
-% emulator is used as a fall-back when the real |lua| format search doesn't
-% find any result.
-%
-% Finally, a combined version of this new kpse searcher and the original
-% function at |package.loaders[2]| (using first the new loader, then the old
-% one if the new doesn't return any result) is installed as
-% |package.loaders[2]|.
+% version 0.60. \luatex 0.74 ships with Lua 5.2 that has a different loading
+% system.
+%
+% The aim of this package is to have a coherent behaviour between versions of
+% LuaTeX, and to get the loaded file's name printed in the output (\LaTeX
+% style). The first versions did ensure backward compatibilty to \luatex 0.25
+% but as \luatex development is quite fast, this version supports only \luatex
+% 0.45 and higher.
+%
+% More precisely, when asked for |foo.bar| (or |foo.bar.lua|), it first looks
+% for file |foo/bar| using Kpathsea with the format |lua|, and then for
+% |foo.bar|, removing the possible extension.
%
% \section{Implementation}
%
@@ -217,7 +208,7 @@ See the aforementioned source file(s) for copyright and licensing information.
\let\x\ProvidesPackage
\fi
\expandafter\endgroup
-\x{luatexbase-loader}[2011/05/24 v0.4 Lua module loader for LuaTeX]
+\x{luatexbase-loader}[2013/04/13 v0.5 Lua module loader for LuaTeX]
% \end{macrocode}
%
% Make sure \luatex is used.
@@ -266,7 +257,7 @@ See the aforementioned source file(s) for copyright and licensing information.
% \begin{macrocode}
\luatexbase@directlua{%
local file = "luatexbase.loader.lua"
- local path = assert(kpse.find_file(file, 'tex'),
+ local path = assert(kpse.find_file(file, 'lua'),
"File '"..file.."' not found")
texio.write_nl("("..path..")")
dofile(path)}
@@ -286,13 +277,29 @@ See the aforementioned source file(s) for copyright and licensing information.
module('luatexbase', package.seeall)
% \end{macrocode}
%
+% Just in case it's called from a \TeX Lua script...
+%
+% \begin{macrocode}
+kpse.set_program_name("luatex")
+% \end{macrocode}
+%
+% In \LaTeX, it's traditional to print the included file paths. We don't want
+% to do this for scripts using texlua... Currently there is no perfect check
+% of texlua vs. luatex, so we check for the token table.
+%
+% \begin{macrocode}
+local print_included_path = false
+if token then
+ print_included_path = true
+end
+% \end{macrocode}
+%
% Emulate (approximatively) kpse's lua format search. More precisely,
% combine the search path of |texmfscripts| and |tex| in order to
% approximate |LUAINPUTS|. But we need to handle suffixes ourselves.
%
% |lua_suffixes| is taken verbatim from Kpathsea's source
-% (\file{tex-file.c}, constant |LUA_SUFFIXES|).\footnote{Unchanged since
-% 2007-07-06, last checked 2010-05-10.}
+% (\file{tex-file.c}, constant |LUA_SUFFIXES|).\footnote{Last checked 2013-04-12.}
%
% \begin{macrocode}
local lua_suffixes = {
@@ -308,76 +315,42 @@ local function ends_with(suffix, name)
end
% \end{macrocode}
%
-% The search function first builds the list of filenames to be search. For
-% the lua format, kpse always adds a suffix if no (known) suffix is
-% present, so we do the same.
+% Auxiliary function for suffixes: returns the basename of a file if it end
+% by one of the suffixes.
%
% \begin{macrocode}
-local function find_file_lua_emul(name)
- local search_list = {}
+local function basename(name)
for _, suffix in ipairs(lua_suffixes) do
if ends_with(suffix, name) then
- search_list = { name }
- break
- else
- table.insert(search_list, name..suffix)
- end
- end
-% \end{macrocode}
-%
-% Now look for each file in this list.
-%
-% \begin{macrocode}
- for _, search_name in ipairs(search_list) do
- local f = kpse.find_file(search_name, 'texmfscripts')
- or kpse.find_file(search_name, 'tex')
-% \end{macrocode}
-%
-% There is a problem with using the |tex| search format: kpse will try to
-% add suffixes from the |TEX_SUFFIXES| list, which may lead to problems
-% if a file like \meta{name}|.lua.tex| exists. We prevent that by checking if
-% the file found ends with the required name. So \meta{name}|.lua| will
-% still be hidden by \meta{name}.|lua.tex| but it seems less bad not to
-% find it than to return an incorrect result.
-%
-% \begin{macrocode}
- if f and ends_with(search_name, f) then
- return f
+ return name:sub(1, -(suffix:len()+1))
end
end
+ return name
end
% \end{macrocode}
%
-% If lua search format is available, use it with emulation as a fall-back,
-% or just use emulation.
-%
-% \begin{macrocode}
-local find_file_lua
-if pcall('kpse.find_file', 'dummy', 'lua') then
- find_file_lua = function (name)
- return kpse.find_file(name, 'lua') or find_file_lua_emul(name)
- end
-else
- find_file_lua = function (name)
- return find_file_lua_emul(name)
- end
-end
-% \end{macrocode}
-%
-% Find the full path corresponding to a module name.
+% The main function, emulating the behaviour of |packages.searchers[2]|,
+% with a small improvement that eliminates the possible extension.
%
% \begin{macrocode}
local function find_module_file(mod)
- return find_file_lua(mod:gsub('%.', '/'), 'lua')
- or find_file_lua(mod, 'lua')
+ local compat = basename(mod):gsub('%.', '/')
+ return kpse.find_file(compat, 'lua') or kpse.find_file(mod, 'lua')
end
% \end{macrocode}
%
% Combined searcher, using primarily the new kpse searcher, and the
-% original as a fall-back.
+% original as a fall-back. Starting from \luatex 0.75, Lua 5.2 is used. Among
+% the changes, |package.loaders| is renamed as |package.searchers|.
+%
+% The main improvement is thus the printing of the filename in the output.
%
% \begin{macrocode}
-local package_loader_two = package.loaders[2]
+local package_loader_two
+if not package.searchers then
+ package.searchers = package.loaders
+end
+package_loader_two = package.searchers[2]
local function load_module(mod)
local file = find_module_file(mod)
if not file then
@@ -395,7 +368,9 @@ local function load_module(mod)
if not loader then
return "\n\t[luatexbase.loader] Loading error:\n\t"..error
end
- texio.write_nl("("..file..")")
+ if print_included_path then
+ texio.write_nl("("..file..")")
+ end
return loader
end
% \end{macrocode}
@@ -403,7 +378,7 @@ end
% Finally install this combined loader as loader 2.
%
% \begin{macrocode}
-package.loaders[2] = load_module
+package.searchers[2] = load_module
%</luamodule>
% \end{macrocode}
%
diff --git a/luatexbase-mcb.dtx b/luatexbase-mcb.dtx
index 6f1b1a6..f4d6448 100644
--- a/luatexbase-mcb.dtx
+++ b/luatexbase-mcb.dtx
@@ -2,6 +2,7 @@
%
% Copyright 2009, 2010 by Élie Roux <elie.roux@telecom-bretagne.eu>
% Copyright 2010, 2011 by Manuel Pégourié-Gonnard <mpg@elzevir.fr>
+% Copyright 2013 by Philipp Gesang <philipp.gesang@alumni.uni-heidelberg.de>
%
% This work is under the CC0 license.
%
@@ -114,7 +115,7 @@ See the aforementioned source file(s) for copyright and licensing information.
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
%
-% \pkdate{luatexbase-mcb}{2011/05/24 v0.4}
+% \pkdate{luatexbase-mcb}{2013/04/13 v0.5}
%
% \maketitle
%
@@ -331,7 +332,7 @@ See the aforementioned source file(s) for copyright and licensing information.
\let\x\ProvidesPackage
\fi
\expandafter\endgroup
-\x{luatexbase-mcb}[2011/05/24 v0.4 Callback management for LuaTeX]
+\x{luatexbase-mcb}[2013/04/13 v0.5 Callback management for LuaTeX]
% \end{macrocode}
%
% Make sure \luatex is used.
@@ -392,13 +393,13 @@ See the aforementioned source file(s) for copyright and licensing information.
%
% \begin{macrocode}
module('luatexbase', package.seeall)
-local err, warning, info = luatexbase.provides_module({
+local err, warning, info, log = luatexbase.provides_module({
name = "luatexbase-mcb",
- version = 0.4,
- date = "2011/05/24",
+ version = 0.5,
+ date = "2013/04/13",
description = "register several functions in a callback",
- author = "Hans Hagen, Elie Roux and Manuel Pegourie-Gonnard",
- copyright = "Hans Hagen, Elie Roux and Manuel Pegourie-Gonnard",
+ author = "Hans Hagen, Elie Roux, Manuel Pegourie-Gonnard and Philipp Gesang",
+ copyright = "Hans Hagen, Elie Roux, Manuel Pegourie-Gonnard and Philipp Gesang",
license = "CC0",
})
% \end{macrocode}
@@ -686,7 +687,7 @@ function add_to_callback (name,func,description,priority)
warning("several functions in '%s',\n"
.."only one will be active.", name)
end
- info("inserting '%s'\nat position %s in '%s'",
+ log("inserting '%s'\nat position %s in '%s'",
description, priority, name)
end
% \end{macrocode}
@@ -732,8 +733,8 @@ function remove_from_callback (name, description)
return
end
table.remove(l, index)
- info("removing '%s'\nfrom '%s'", description, name)
- if table.maxn(l) == 0 then
+ log("removing '%s'\nfrom '%s'", description, name)
+ if #l == 0 then
callbacklist[name] = nil
if not lua_callbacks_defaults[name] then
register_callback(name, nil)
@@ -755,11 +756,11 @@ function reset_callback (name, make_false)
err("unable to reset '%s':\nis not a valid callback", name)
return
end
- info("resetting callback '%s'", name)
+ log("resetting callback '%s'", name)
callbacklist[name] = nil
if not lua_callbacks_defaults[name] then
if make_false == true then
- info("setting '%s' to false", name)
+ log("setting '%s' to false", name)
register_callback(name, false)
else
register_callback(name, nil)
@@ -822,7 +823,7 @@ function create_callback(name, ctype, default)
err("unable to create callback '%s':\ntype '%s' undefined", name, ctype)
return nil
end
- info("creating '%s' type %s", name, ctype)
+ log("creating '%s' type %s", name, ctype)
lua_callbacks_defaults[name] = default
callbacktypes[name] = ctype
end
diff --git a/luatexbase-modutils.dtx b/luatexbase-modutils.dtx
index 2dce051..6f500da 100644
--- a/luatexbase-modutils.dtx
+++ b/luatexbase-modutils.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright 2009, 2010 by Élie Roux <elie.roux@telecom-bretagne.eu>
+% Copyright 2009-2013 by Élie Roux <elie.roux@telecom-bretagne.eu>
% Copyright 2010, 2011 by Manuel Pégourié-Gonnard <mpg@elzevir.fr>
%
% This work is under the CC0 license.
@@ -111,7 +111,7 @@ See the aforementioned source file(s) for copyright and licensing information.
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
%
-% \pkdate{luatexbase-modutils}{v0.4 2011-05-24}
+% \pkdate{luatexbase-modutils}{v0.5 2013-04-13}
%
% \maketitle
%
@@ -345,7 +345,7 @@ See the aforementioned source file(s) for copyright and licensing information.
\let\x\ProvidesPackage
\fi
\expandafter\endgroup
-\x{luatexbase-modutils}[2011/05/24 v0.4 Module utilities for LuaTeX]
+\x{luatexbase-modutils}[2013/04/13 v0.5 Module utilities for LuaTeX]
% \end{macrocode}
%
% Make sure \luatex is used.
@@ -378,10 +378,10 @@ See the aforementioned source file(s) for copyright and licensing information.
% supporting Lua module and make sure |luaescapestring| is available.
%
% \begin{macrocode}
-\ifdefined\RequirePackage
- \RequirePackage{luatexbase-loader}
-\else
+\expandafter\ifx\csname RequirePackage\endcsname\relax
\input luatexbase-loader.sty
+\else
+ \RequirePackage{luatexbase-loader}
\fi
\luatexbase@directlua{require('luatexbase.modutils')}
\luatexbase@ensure@primitive{luaescapestring}
@@ -552,7 +552,7 @@ function require_module(name, req_date)
local info = modules[name]
if not info then
warn("module '%s' was not properly identified", name)
- elseif info.version then
+ elseif req_date and info.version then
if not (info.date and date_to_int(info.date) > date_to_int(req_date))
then
warn("module '%s' required in version '%s'\n"
diff --git a/luatexbase.dtx b/luatexbase.dtx
index b962f30..49b0c07 100644
--- a/luatexbase.dtx
+++ b/luatexbase.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright 2009, 2010 by Élie Roux <elie.roux@telecom-bretagne.eu>
+% Copyright 2009-2013 by Élie Roux <elie.roux@telecom-bretagne.eu>
% Copyright 2010, 2011 by Manuel Pégourié-Gonnard <mpg@elzevir.fr>
%
% This work is under the CC0 license.
@@ -93,7 +93,7 @@ See the aforementioned source file(s) for copyright and licensing information.
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
%
-% \pkdate{luatexbase}{v0.4 2011-05-24}
+% \pkdate{luatexbase}{v0.5 2013-04-13}
%
% \maketitle
%
@@ -126,18 +126,17 @@ See the aforementioned source file(s) for copyright and licensing information.
% change should happen in the future, except the removal of the deprecated
% commands (currently only \cs{setcatcoderange}). It works with the Plain and
% \latex formats adapted for \luatex as provided by \texlive and MiK\tex.
-% Currently the oldest version supported is 0.25.4 with formats from \texlive
-% 2008; the next release of this package will only support 0.40.6 and greater
-% with formats from \texlive 2009 and greater.
+% Currently the oldest version supported is 0.40.6 with formats from
+% \texlive 2009 and greater.
%
% \subsection{History}
%
% The first package for managing \luatex's new resources was the \pk{luatex}
-% package by Heiko Oberdiek. Later, Élie Roux wrote \pk{luatextra} which
+% package by Heiko Oberdiek. Later, \'Elie Roux wrote \pk{luatextra} which
% reprised many features of \pk{luatex} with little extensions to some of them
% and added independant low-level features (currently found in the
% \pk{modutils} and \pk{mcb} subpackages), as well as user-level things.
-% Later, \pk{luatexbase} was created by Manuel Pégourié-Gonnard by isolating
+% Later, \pk{luatexbase} was created by Manuel P\'egouri\'e-Gonnard by isolating
% the general low-level features of \pk{luatextra}, and later expanding on
% them.
%
@@ -215,7 +214,7 @@ See the aforementioned source file(s) for copyright and licensing information.
\let\x\ProvidesPackage
\fi
\expandafter\endgroup
-\x{luatexbase}[2011/05/24 v0.4 Module utilities for LuaTeX]
+\x{luatexbase}[2013/04/13 v0.5 Module utilities for LuaTeX]
% \end{macrocode}
%
% Make sure \luatex is used.
@@ -244,6 +243,21 @@ See the aforementioned source file(s) for copyright and licensing information.
\fi
% \end{macrocode}
%
+% %\subsection{luatex.sty compatibility}
+%
+% Currently, |luatex.sty| has to be loaded before luatexbase, otherwise it
+% raises an error, as the same names are used between luatexbase and luatex.
+%
+% This is a quite strange situation, but we hope to clarify it.
+%
+% \begin{macrocode}
+\expandafter\ifx\csname RequirePackage\endcsname\relax
+ \input luatex.sty
+\else
+ \RequirePackage{luatex}
+\fi
+% \end{macrocode}
+%
% \subsection{Packages loading}
%
% \begin{macrocode}