From 5aaa7476b5734c8d7611e7ebf2c6d609dea09064 Mon Sep 17 00:00:00 2001
From: Elie Roux <elie.roux@telecom-bretagne.eu>
Date: Sat, 4 May 2013 17:09:58 +0200
Subject: Adding a few auxiliary functions for module availability and version
 checking

---
 luatexbase-modutils.dtx | 82 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 82 insertions(+)

(limited to 'luatexbase-modutils.dtx')

diff --git a/luatexbase-modutils.dtx b/luatexbase-modutils.dtx
index 0645e1b..2851286 100644
--- a/luatexbase-modutils.dtx
+++ b/luatexbase-modutils.dtx
@@ -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
@@ -587,6 +595,73 @@ end
 luatexbase.provides_module = provides_module
 %    \end{macrocode}
 %
+%    \subsubsection{module availability and version checking}
+%
+%    A simple table copy function.
+%
+%    \begin{macrocode}
+local 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, or nil if the module is not loaded.
+%
+%    \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}
+%
+%    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}
@@ -605,6 +680,13 @@ local err, warn, info, log = luatexbase.provides_module {
 }
 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)
 %</testdummy>
 %    \end{macrocode}
 %
-- 
cgit v1.2.3


From 0f9a734bc3394928736cdddcd96a34db52ca8aef Mon Sep 17 00:00:00 2001
From: Elie Roux <elie.roux@telecom-bretagne.eu>
Date: Sat, 4 May 2013 17:23:27 +0200
Subject: Bump version and update documentation

---
 luatexbase-modutils.dtx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'luatexbase-modutils.dtx')

diff --git a/luatexbase-modutils.dtx b/luatexbase-modutils.dtx
index 2851286..33fc974 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
 %
-- 
cgit v1.2.3


From ad717ef646940a985b6cb153f08faec691c425a1 Mon Sep 17 00:00:00 2001
From: Elie Roux <elie.roux@telecom-bretagne.eu>
Date: Sat, 4 May 2013 18:02:12 +0200
Subject: Fixing small error in module date requirement

---
 luatexbase-modutils.dtx | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

(limited to 'luatexbase-modutils.dtx')

diff --git a/luatexbase-modutils.dtx b/luatexbase-modutils.dtx
index 33fc974..9da5605 100644
--- a/luatexbase-modutils.dtx
+++ b/luatexbase-modutils.dtx
@@ -567,9 +567,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
-- 
cgit v1.2.3


From 29bee8c9edf934690e25816c001e8afefd942e94 Mon Sep 17 00:00:00 2001
From: Elie Roux <elie.roux@telecom-bretagne.eu>
Date: Sun, 5 May 2013 15:00:23 +0200
Subject: Adding a few more accessors functions

---
 luatexbase-modutils.dtx | 46 ++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 44 insertions(+), 2 deletions(-)

(limited to 'luatexbase-modutils.dtx')

diff --git a/luatexbase-modutils.dtx b/luatexbase-modutils.dtx
index 9da5605..1a50f24 100644
--- a/luatexbase-modutils.dtx
+++ b/luatexbase-modutils.dtx
@@ -468,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}
@@ -484,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}
@@ -634,7 +636,8 @@ end
 luatexbase.get_module_info = get_module_info
 %    \end{macrocode}
 %
-%    Gives the version of a module, or nil if the module is not loaded.
+%    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)
@@ -648,6 +651,37 @@ 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}
@@ -677,6 +711,12 @@ 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'))
@@ -686,6 +726,8 @@ 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}
 %
-- 
cgit v1.2.3


From b7f3f777b1c825e4b4e0c8d6ec5592090078f36b Mon Sep 17 00:00:00 2001
From: Philipp Gesang <phg42.2a@gmail.com>
Date: Sun, 5 May 2013 15:32:28 +0200
Subject: fix scoping for fastcopy()

---
 luatexbase-modutils.dtx | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'luatexbase-modutils.dtx')

diff --git a/luatexbase-modutils.dtx b/luatexbase-modutils.dtx
index 9da5605..d9fd34a 100644
--- a/luatexbase-modutils.dtx
+++ b/luatexbase-modutils.dtx
@@ -599,7 +599,8 @@ luatexbase.provides_module = provides_module
 %    A simple table copy function.
 %
 %    \begin{macrocode}
-local fastcopy = table.fastcopy or function(old)
+local fastcopy
+fastcopy = table.fastcopy or function(old)
     if old then
         local new = { }
         for k,v in next, old do
-- 
cgit v1.2.3

