summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changes9
-rw-r--r--README20
-rw-r--r--lltxb-dtxstyle.tex9
-rw-r--r--luatexbase-modutils.dtx134
-rw-r--r--luatexbase.dtx6
5 files changed, 153 insertions, 25 deletions
diff --git a/Changes b/Changes
index 7b39c55..8e7fc21 100644
--- a/Changes
+++ b/Changes
@@ -1,6 +1,13 @@
Changes in the luatexbase package/bundle
-2013/04/22 v0.6
+2013/05/04 v0.6
+ attr
+ - hack to make luatexbase and luatex.sty compatible for attribute
+ allocation (same thing should be done for catcodetables)
+ - adding whatsit nodes allocation functions (see doc)
+ modutils
+ - adding functions to check the availability and version of a module
+ - fixing small error in module date requirement
loader
- do not output included file paths when called by texlua
mcb
diff --git a/README b/README
index 4424910..cb3c8ba 100644
--- a/README
+++ b/README
@@ -8,10 +8,13 @@ if desired:
– luatexbase-compat: compatibility helpers;
– luatexbase-loader: Lua module loading;
– luatexbase-regs: allocation of registers and the like;
-– luatexbase-attr: attribute allocation;
+– luatexbase-attr: attribute and whatsit node allocation;
– luatexbase-cctb: catcode table allocation;
– luatexbase-modutils: Lua module declaration; and
-- luatexbase-mcb: callbacks extensions.
+– luatexbase-mcb: callbacks extensions.
+
+The development takes place on https://github.com/lualatex/luatexbase.
+
Installation
------------
@@ -19,21 +22,16 @@ Installation
Here are the recommended installation methods (preferred first).
1. If you are using TeX Live 2010 or later, use 'tlmgr install luatexbase'.
-If your are using MiKTeX, use the MiKTeX Package Manager.
-Alternatively, try you Linux distribution's package management system.
+ If your are using MiKTeX, use the MiKTeX Package Manager.
+ Alternatively, try you Linux distribution's package management system.
-2. a. Grab luatexbase.tds.zip on the CTAN.
- b. Unzip it at the root of one or your TDS trees.
- c. You may need to update some filename database after this, see your TeX
- distribution's manual for details. (Hint: with TeX Live, run 'mktexlsr';
- with MikTeX, look for "Refresh FNDB" in the MikTeX menu.)
-
-3. a. Grab the sources from CTAN or github.
+2. a. Grab the sources from CTAN or github.
b. Run 'make install TEXMFROOT=/path/to/texmf'.
(Warning: 'make install' without giving a TEXMFROOT will
put files in './texmf', which is probably not what you want.)
c. See 2c.
+
License
-------
diff --git a/lltxb-dtxstyle.tex b/lltxb-dtxstyle.tex
index 115d4f2..d086326 100644
--- a/lltxb-dtxstyle.tex
+++ b/lltxb-dtxstyle.tex
@@ -56,19 +56,18 @@
% constant metadata
\newif\ifluatexbase
\author{%
- Heiko Oberdiek (primary author of \pk{luatex}) \\
- \'Elie Roux (primary author of \pk{luatextra}) \\
- Manuel P\'egouri\'e-Gonnard (current developper)\thanks{%
+ Heiko Oberdiek (primary author of \pk{luatex})\\
+ \'Elie Roux, Manuel P\'egouri\'e-Gonnard, Philipp Gesang\thanks{%
See ``History''
\ifluatexbase\else in \href{luatexbase.pdf}{\file{luatexbase.pdf}} \fi
for details.}%
\\[1ex]
- \url{https://github.com/mpg/luatexbase} \\
+ \url{https://github.com/lualatex/luatexbase} \\
\email{lualatex-dev@tug.org}%
}
\hypersetup{%
pdfsubject = {Basic resource management for LuaTeX},
- pdfauthor = {Manuel P\'egouri\'e-Gonnard, \'Elie Roux, Heiko Oberdiek},
+ pdfauthor = {Manuel P\'egouri\'e-Gonnard, \'Elie Roux, Heiko Oberdiek, Philipp Gesang},
}
% other metadata
diff --git a/luatexbase-modutils.dtx b/luatexbase-modutils.dtx
index 0645e1b..84c893c 100644
--- a/luatexbase-modutils.dtx
+++ b/luatexbase-modutils.dtx
@@ -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.5 2013-04-13}
+% \pkdate{luatexbase-modutils}{v0.6 2013-05-04}
%
% \maketitle
%
@@ -229,6 +229,14 @@ See the aforementioned source file(s) for copyright and licensing information.
% standard Lua function, so you may want to avoid overwriting it, hence the
% use of |err| in the above example.)
%
+% \begin{qcode}
+% local module_info = luatexbase.get_module_info(\meta{name})
+% local version = luatexbase.get_module_version(\meta{name})
+% local is_loaded = luatexbase.is_module_loaded(\meta{name})
+% \end{qcode}
+% These functions check for the availability or version of a module, and can
+% even return a copy of the |module_info| table.
+%
% \subsection{Templates}
%
% Let me emphasize again that, while |luatexbase.require_module()| is meant to
@@ -460,6 +468,7 @@ See the aforementioned source file(s) for copyright and licensing information.
%<*luamodule>
luatexbase = luatexbase or { }
local luatexbase = luatexbase
+local string_gsub = string.gsub
% \end{macrocode}
%
% \subsection{Internal functions and data}
@@ -476,7 +485,8 @@ local modules = modules or {}
%
% \begin{macrocode}
local function date_to_int(date)
- local numbers = string.gsub(date, "(%d+)/(%d+)/(%d+)", "%1%2%3")
+ if date == '' then return -1 end
+ local numbers = string_gsub(date, "(%d+)/(%d+)/(%d+)", "%1%2%3")
return tonumber(numbers)
end
% \end{macrocode}
@@ -559,9 +569,8 @@ local function require_module(name, req_date)
local info = modules[name]
if not info then
warn("module '%s' was not properly identified", name)
- elseif req_date and info.version then
- if not (info.date and date_to_int(info.date) > date_to_int(req_date))
- then
+ elseif req_date and info.date then
+ if date_to_int(info.date) < date_to_int(req_date) then
warn("module '%s' required in version '%s'\n"
.. "but found in version '%s'", name, req_date, info.date)
end
@@ -587,6 +596,106 @@ end
luatexbase.provides_module = provides_module
% \end{macrocode}
%
+% \subsubsection{module availability and version checking}
+%
+% A simple table copy function.
+%
+% \begin{macrocode}
+local fastcopy
+fastcopy = table.fastcopy or function(old)
+ if old then
+ local new = { }
+ for k,v in next, old do
+ if type(v) == "table" then
+ new[k] = fastcopy(v)
+ else
+ new[k] = v
+ end
+ end
+ local mt = getmetatable(old)
+ if mt then
+ setmetatable(new,mt)
+ end
+ return new
+ else
+ return { }
+ end
+end
+% \end{macrocode}
+%
+% Gives the table of the infos on a module, as given in |provides_module|.
+%
+% \begin{macrocode}
+local function get_module_info(name)
+ local module_table = modules[name]
+ if not module_table then
+ return nil
+ else
+ return fastcopy(module_table)
+ end
+end
+luatexbase.get_module_info = get_module_info
+% \end{macrocode}
+%
+% Gives the version of a module, nil if the module is not loaded and empty
+% string if the module did not set its date.
+%
+% \begin{macrocode}
+function get_module_version(name)
+ local module_table = modules[name]
+ if not module_table then
+ return nil
+ else
+ return module_table.version
+ end
+end
+luatexbase.get_module_version = get_module_version
+% \end{macrocode}
+%
+% Gives the date string of a module, nil if the module is not loaded and
+% empty string of the modules did not set its date.
+%
+% \begin{macrocode}
+function get_module_date(name)
+ local module_table = modules[name]
+ if not module_table then
+ return nil
+ else
+ return module_table.date
+ end
+end
+luatexbase.get_module_date = get_module_date
+% \end{macrocode}
+%
+% Gives the date number of a module, for date comparison, nil if the
+% module is not loaded and -1 if the module did not set its date. The number
+% is formated as |yyyymmdd|.
+%
+% \begin{macrocode}
+function get_module_date_int(name)
+ local module_table = modules[name]
+ if not module_table then
+ return nil
+ else
+ return module_table.date and date_to_int(module_table.date)
+ end
+end
+luatexbase.get_module_date_int = get_module_date_int
+% \end{macrocode}
+%
+% Returns true if the module is loaded, false otherwise.
+%
+% \begin{macrocode}
+function is_module_loaded(name)
+ if modules[name] then
+ return true
+ else
+ return false
+ end
+end
+luatexbase.is_module_loaded = is_module_loaded
+% \end{macrocode}
+%
% \begin{macrocode}
%</luamodule>
% \end{macrocode}
@@ -603,8 +712,23 @@ local err, warn, info, log = luatexbase.provides_module {
version = 1,
description = 'dummy test package',
}
+luatexbase.provides_module {
+ name = 'test-modutils2',
+ date = '',
+ version = 1,
+ description = 'dummy test package',
+}
info('It works!\nOh, rly?\nYeah rly!')
log("I'm a one-line info.")
+info("1 = "..luatexbase.get_module_version('test-modutils'))
+if is_module_loaded('test-modutils') then
+ info("ok!")
+else
+ err("problem!")
+end
+info("2000/01/01 = "..luatexbase.get_module_info('test-modutils').date)
+info("20000101 = "..luatexbase.get_module_date_int('test-modutils'))
+info("-1 = "..luatexbase.get_module_date_int('test-modutils2'))
%</testdummy>
% \end{macrocode}
%
diff --git a/luatexbase.dtx b/luatexbase.dtx
index 49b0c07..2849818 100644
--- a/luatexbase.dtx
+++ b/luatexbase.dtx
@@ -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.5 2013-04-13}
+% \pkdate{luatexbase}{v0.6 2013-05-04}
%
% \maketitle
%
@@ -116,7 +116,7 @@ See the aforementioned source file(s) for copyright and licensing information.
% \subpk{regs} extented allocation scheme for registers and the like,
% \emph{\`a la} \pk{etex}.
% \subpk{cctb} catcode table allocation.
-% \subpk{attr} attribute allocation.
+% \subpk{attr} attribute and whatsit node allocation.
% \subpk{mcb} callbacks extensions allowing to register many functions in a
% single callback, and declare new callbacks for packages.
% \subpk{modutils} Lua module declaration, including version checks.
@@ -214,7 +214,7 @@ See the aforementioned source file(s) for copyright and licensing information.
\let\x\ProvidesPackage
\fi
\expandafter\endgroup
-\x{luatexbase}[2013/04/13 v0.5 Module utilities for LuaTeX]
+\x{luatexbase}[2013/05/04 v0.6 Module utilities for LuaTeX]
% \end{macrocode}
%
% Make sure \luatex is used.