summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Pégourié-Gonnard <mpg@elzevir.fr>2010-05-24 11:13:05 +0200
committerManuel Pégourié-Gonnard <mpg@elzevir.fr>2010-11-11 15:49:17 +0100
commit6f4d544ddc09c05162e8824e83ae9f0b88673cc2 (patch)
treef5f16ef9f5e6fe904f3c25474bed3d086a4a680c
parent36f5a75442848e55685b08b6a83366561aa86b88 (diff)
downloadluatexbase-6f4d544ddc09c05162e8824e83ae9f0b88673cc2.tar.gz
Return custom err/war/inf functions.
-rw-r--r--TODO2
-rw-r--r--luatexbase-modutils.dtx35
2 files changed, 27 insertions, 10 deletions
diff --git a/TODO b/TODO
index 9eaace7..46892c2 100644
--- a/TODO
+++ b/TODO
@@ -1,8 +1,6 @@
modutils
--------
-- create private functions for infwarrerr?
-
- review logic: should this module be mandatory?
if not, what should happen with mixed require(), require_module(),
declaration and no declaration?
diff --git a/luatexbase-modutils.dtx b/luatexbase-modutils.dtx
index 16765c3..a21d3cf 100644
--- a/luatexbase-modutils.dtx
+++ b/luatexbase-modutils.dtx
@@ -192,7 +192,10 @@ See source file '\inFileName' for details.
%
% The functions provided (all found in the |luatexbase| table) are
% |module_error|, |module_warning|, |module_info| (writes to terminal and
-% log).
+% log). Custom versions of this functions, not needing the first argument, are
+% returned (in the order: error, warning, info) by
+% |luatexbase.errwarinf|\parg{name} and by the |luatexbase.provides_module()|
+% functions.
%
% \section{Implementation}
%
@@ -426,9 +429,13 @@ end
% |error()| is used. For now, the error reports look less good than with
% \tex's |\errmessage|, but hopefully it will be improved in future
% versions of \luatex. We could invoke |\errmessage| using |tex.sprint()|,
-% but it may cause problems on the \tex end, and moreover |error()| will
-% still be used by Lua for other errors, so it makes messages more
-% consistent.
+% but it may cause problems on the \tex end,\footnote{Eg, it will not work
+% inside an \cs{edef}.} and moreover |error()| will still be used by Lua
+% for other errors, so it makes messages more consistent.
+%
+% An internal function is used for error messages, so that the calling
+% level (last argument of |error()| remains constant using either
+% |module_error()| or a custom version as return by |errwarinf()|.
%
% \begin{macrocode}
local function msg_format(msg_type, mod_name, ...)
@@ -460,12 +467,21 @@ function module_info(mod, ...)
end
% \end{macrocode}
%
+% Produce custom versions of the reporting functions.
+%
+% \begin{macrocode}
+function errwarinf(name)
+ return function(...) module_error_int(name, ...) end,
+ function(...) module_warning(name, ...) end,
+ function(...) module_info(name, ...) end
+end
+% \end{macrocode}
+%
% For our own convenience, local functions for warning and errors in the
% present module.
%
% \begin{macrocode}
-local function err(...) module_error_int('luatexbase.modutils', ...) end
-local function warn(...) module_warning('luatexbase.modutils', ...) end
+local err, warn = errwarinf('luatexbase.modutils')
% \end{macrocode}
%
% \subsubsection{module loading and providing functions}
@@ -511,7 +527,8 @@ function require_module(name, version)
end
% \end{macrocode}
%
-% Provide identification information for a module.
+% Provide identification information for a module. As a bonus, custom
+% reporting functions are returned.
%
% \begin{macrocode}
function provides_module(mod)
@@ -542,6 +559,7 @@ function provides_module(mod)
modules[mod.name] = mod
texio.write_nl('log', string.format("Lua module: %s %s v%.02f %s\n",
mod.name, mod.date, mod.version, mod.description))
+ return errwarinf(mod.name)
end
% \end{macrocode}
%
@@ -555,12 +573,13 @@ end
%
% \begin{macrocode}
%<*testdummy>
-luatexbase.provides_module {
+local err, warn, info = luatexbase.provides_module {
name = 'test-modutils',
date = '2000/01/01',
version = 1,
description = 'dummy test package',
}
+info('It works!\nOh, rly?\nYeah rly!')
%</testdummy>
% \end{macrocode}
%