summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lualibs-dir.lua10
-rw-r--r--lualibs-file.lua2
-rw-r--r--lualibs-io.lua7
-rw-r--r--lualibs-lpeg.lua22
-rw-r--r--lualibs-string.lua7
-rw-r--r--lualibs-table.lua71
-rw-r--r--lualibs-unicode.lua12
-rw-r--r--lualibs-utils.lua11
-rw-r--r--lualibs.dtx25
9 files changed, 135 insertions, 32 deletions
diff --git a/lualibs-dir.lua b/lualibs-dir.lua
index 5828d99..2643f53 100644
--- a/lualibs-dir.lua
+++ b/lualibs-dir.lua
@@ -204,8 +204,9 @@ local make_indeed = true -- false
if string.find(os.getenv("PATH"),";") then -- os.type == "windows"
function dir.mkdirs(...)
- local str, pth = "", ""
- for _, s in ipairs({...}) do
+ local str, pth, t = "", "", { ... }
+ for i=1,#t do
+ local s = t[i]
if s ~= "" then
if str ~= "" then
str = str .. "/" .. s
@@ -303,8 +304,9 @@ if string.find(os.getenv("PATH"),";") then -- os.type == "windows"
else
function dir.mkdirs(...)
- local str, pth = "", ""
- for _, s in ipairs({...}) do
+ local str, pth, t = "", "", { ... }
+ for i=1,#t do
+ local s = t[i]
if s ~= "" then
if str ~= "" then
str = str .. "/" .. s
diff --git a/lualibs-file.lua b/lualibs-file.lua
index 6f5f5d0..2bfc070 100644
--- a/lualibs-file.lua
+++ b/lualibs-file.lua
@@ -297,7 +297,7 @@ function file.splitname(str) -- returns drive, path, base, suffix
return lpegmatch(pattern,str)
end
--- function test(t) for k, v in pairs(t) do print(v, "=>", file.splitname(v)) end end
+-- function test(t) for k, v in next, t do print(v, "=>", file.splitname(v)) end end
--
-- test { "c:", "c:/aa", "c:/aa/bb", "c:/aa/bb/cc", "c:/aa/bb/cc.dd", "c:/aa/bb/cc.dd.ee" }
-- test { "c:", "c:aa", "c:aa/bb", "c:aa/bb/cc", "c:aa/bb/cc.dd", "c:aa/bb/cc.dd.ee" }
diff --git a/lualibs-io.lua b/lualibs-io.lua
index 5a126da..66e2793 100644
--- a/lualibs-io.lua
+++ b/lualibs-io.lua
@@ -170,13 +170,14 @@ function io.ask(question,default,options)
elseif not options then
return answer
else
- for _,v in pairs(options) do
- if v == answer then
+ for k=1,#options do
+ if options[k] == answer then
return answer
end
end
local pattern = "^" .. answer
- for _,v in pairs(options) do
+ for k=1,#options do
+ local v = options[k]
if find(v,pattern) then
return v
end
diff --git a/lualibs-lpeg.lua b/lualibs-lpeg.lua
index f060f3b..b107a8e 100644
--- a/lualibs-lpeg.lua
+++ b/lualibs-lpeg.lua
@@ -98,6 +98,15 @@ lpeg.splitat = splitat
local cache = { }
+function lpeg.split(separator,str)
+ local c = cache[separator]
+ if not c then
+ c = Ct(splitat(separator))
+ cache[separator] = c
+ end
+ return match(c,str)
+end
+
function string:split(separator)
local c = cache[separator]
if not c then
@@ -107,8 +116,21 @@ function string:split(separator)
return match(c,self)
end
+lpeg.splitters = cache
+
local cache = { }
+function lpeg.checkedsplit(separator,str)
+ local c = cache[separator]
+ if not c then
+ separator = P(separator)
+ local other = C((1 - separator)^0)
+ c = Ct(separator^0 * other * (separator^1 * other)^0)
+ cache[separator] = c
+ end
+ return match(c,str)
+end
+
function string:checkedsplit(separator)
local c = cache[separator]
if not c then
diff --git a/lualibs-string.lua b/lualibs-string.lua
index 25b8f8e..9856d52 100644
--- a/lualibs-string.lua
+++ b/lualibs-string.lua
@@ -230,7 +230,7 @@ function string:totable()
return lpegmatch(pattern,self)
end
---~ for _, str in ipairs {
+--~ local t = {
--~ "1234567123456712345671234567",
--~ "a\tb\tc",
--~ "aa\tbb\tcc",
@@ -238,7 +238,10 @@ end
--~ "aaaa\tbbbb\tcccc",
--~ "aaaaa\tbbbbb\tccccc",
--~ "aaaaaa\tbbbbbb\tcccccc",
---~ } do print(string.tabtospace(str)) end
+--~ }
+--~ for k,v do
+--~ print(string.tabtospace(t[k]))
+--~ end
function string.tabtospace(str,tab)
-- we don't handle embedded newlines
diff --git a/lualibs-table.lua b/lualibs-table.lua
index e8f72ed..ee395d0 100644
--- a/lualibs-table.lua
+++ b/lualibs-table.lua
@@ -11,8 +11,56 @@ table.join = table.concat
local concat, sort, insert, remove = table.concat, table.sort, table.insert, table.remove
local format, find, gsub, lower, dump, match = string.format, string.find, string.gsub, string.lower, string.dump, string.match
local getmetatable, setmetatable = getmetatable, setmetatable
-local type, next, tostring, tonumber, ipairs, pairs = type, next, tostring, tonumber, ipairs, pairs
-local unpack = unpack or table.unpack
+local type, next, tostring, tonumber, ipairs = type, next, tostring, tonumber, ipairs
+
+-- Starting with version 5.2 Lua no longer provide ipairs, which makes
+-- sense. As we already used the for loop and # in most places the
+-- impact on ConTeXt was not that large; the remaining ipairs already
+-- have been replaced. In a similar fashio we also hardly used pairs.
+--
+-- Just in case, we provide the fallbacks as discussed in Programming
+-- in Lua (http://www.lua.org/pil/7.3.html):
+
+if not ipairs then
+
+ -- for k, v in ipairs(t) do ... end
+ -- for k=1,#t do local v = t[k] ... end
+
+ local function iterate(a,i)
+ i = i + 1
+ local v = a[i]
+ if v ~= nil then
+ return i, v --, nil
+ end
+ end
+
+ function ipairs(a)
+ return iterate, a, 0
+ end
+
+end
+
+if not pairs then
+
+ -- for k, v in pairs(t) do ... end
+ -- for k, v in next, t do ... end
+
+ function pairs(t)
+ return next, t -- , nil
+ end
+
+end
+
+-- Also, unpack has been moved to the table table, and for compatiility
+-- reasons we provide both now.
+
+if not table.unpack then
+ table.unpack = _G.unpack
+elseif not unpack then
+ _G.unpack = table.unpack
+end
+
+-- extra functions, some might go (when not used)
function table.strip(tab)
local lst = { }
@@ -78,7 +126,7 @@ end
table.sortedkeys = sortedkeys
table.sortedhashkeys = sortedhashkeys
-function table.sortedpairs(t)
+function table.sortedhash(t)
local s = sortedhashkeys(t) -- maybe just sortedkeys
local n = 0
local function kv(s)
@@ -89,6 +137,8 @@ function table.sortedpairs(t)
return kv, s
end
+table.sortedpairs = table.sortedhash
+
function table.append(t, list)
for _,v in next, list do
insert(t,v)
@@ -197,7 +247,7 @@ end
table.fastcopy = fastcopy
table.copy = copy
--- rougly: copy-loop : unpack : sub == 0.9 : 0.4 : 0.45 (so in critical apps, use unpack)
+-- roughly: copy-loop : unpack : sub == 0.9 : 0.4 : 0.45 (so in critical apps, use unpack)
function table.sub(t,i,j)
return { unpack(t,i,j) }
@@ -211,18 +261,18 @@ end
-- slower than #t on indexed tables (#t only returns the size of the numerically indexed slice)
-function table.is_empty(t)
+function table.is_empty(t) -- obolete, use inline code instead
return not t or not next(t)
end
-function table.one_entry(t)
+function table.one_entry(t) -- obolete, use inline code instead
local n = next(t)
return n and not next(t,n)
end
-function table.starts_at(t)
- return ipairs(t,1)(t,0)
-end
+--~ function table.starts_at(t) -- obsolete, not nice anyway
+--~ return ipairs(t,1)(t,0)
+--~ end
function table.tohash(t,value)
local h = { }
@@ -326,7 +376,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
-- we could check for k (index) being number (cardinal)
if root and next(root) then
- local first, last = nil, 0 -- #root cannot be trusted here
+ local first, last = nil, 0 -- #root cannot be trusted here (will be ok in 5.2 when ipairs is gone)
if compact then
-- NOT: for k=1,#root do (we need to quit at nil)
for k,v in ipairs(root) do -- can we use next?
@@ -857,3 +907,4 @@ function table.insert_after_value(t,value,extra)
end
insert(t,#t+1,extra)
end
+
diff --git a/lualibs-unicode.lua b/lualibs-unicode.lua
index 290234d..0c5a601 100644
--- a/lualibs-unicode.lua
+++ b/lualibs-unicode.lua
@@ -48,14 +48,20 @@ unicode.utfname = {
[4] = 'utf-32-be'
}
-function unicode.utftype(f) -- \000 fails !
+-- \000 fails in <= 5.0 but is valid in >=5.1 where %z is depricated
+
+function unicode.utftype(f)
local str = f:read(4)
if not str then
f:seek('set')
return 0
- elseif find(str,"^%z%z\254\255") then
+ -- elseif find(str,"^%z%z\254\255") then -- depricated
+ -- elseif find(str,"^\000\000\254\255") then -- not permitted and bugged
+ elseif find(str,"\000\000\254\255",1,true) then -- seems to work okay (TH)
return 4
- elseif find(str,"^\255\254%z%z") then
+ -- elseif find(str,"^\255\254%z%z") then -- depricated
+ -- elseif find(str,"^\255\254\000\000") then -- not permitted and bugged
+ elseif find(str,"\255\254\000\000",1,true) then -- seems to work okay (TH)
return 3
elseif find(str,"^\254\255") then
f:seek('set',2)
diff --git a/lualibs-utils.lua b/lualibs-utils.lua
index a5bc9d7..ebc27b8 100644
--- a/lualibs-utils.lua
+++ b/lualibs-utils.lua
@@ -10,6 +10,7 @@ if not modules then modules = { } end modules ['l-utils'] = {
local gsub = string.gsub
local concat = table.concat
+local type, next = type, next
if not utils then utils = { } end
if not utils.merger then utils.merger = { } end
@@ -85,9 +86,10 @@ function utils.merger._self_libs_(libs,list)
if type(libs) == 'string' then libs = { libs } end
if type(list) == 'string' then list = { list } end
local foundpath = nil
- for _, lib in ipairs(libs) do
- for _, pth in ipairs(list) do
- pth = gsub(pth,"\\","/") -- file.clean_path
+ for i=1,#libs do
+ local lib = libs[i]
+ for j=1,#list do
+ local pth = gsub(list[j],"\\","/") -- file.clean_path
utils.report("checking library path %s",pth)
local name = pth .. "/" .. lib
if lfs.isfile(name) then
@@ -99,7 +101,8 @@ function utils.merger._self_libs_(libs,list)
if foundpath then
utils.report("using library path %s",foundpath)
local right, wrong = { }, { }
- for _, lib in ipairs(libs) do
+ for i=1,#libs do
+ local lib = libs[i]
local fullname = foundpath .. "/" .. lib
if lfs.isfile(fullname) then
-- right[#right+1] = lib
diff --git a/lualibs.dtx b/lualibs.dtx
index c34f8e3..97bce82 100644
--- a/lualibs.dtx
+++ b/lualibs.dtx
@@ -33,7 +33,7 @@
\input docstrip.tex
\Msg{************************************************************************}
\Msg{* Installation}
-\Msg{* Package: lualibs 2010/01/11 v0.92 Lua additional functions.}
+\Msg{* Package: lualibs 2010/05/21 v0.94 Lua additional functions.}
\Msg{************************************************************************}
\keepsilent
@@ -90,7 +90,7 @@ and the derived file lualibs.lua.
%<*driver>
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{lualibs.drv}
- [2010/01/11 v0.92 Lua additional functions.]
+ [2010/05/21 v0.94 Lua additional functions.]
\documentclass{ltxdoc}
\EnableCrossrefs
\CodelineIndex
@@ -120,7 +120,7 @@ and the derived file lualibs.lua.
% \GetFileInfo{lualibs.drv}
%
% \title{The \textsf{lualibs} package}
-% \date{2010/05/10 v0.93}
+% \date{2010/05/21 v0.94}
% \author{Elie Roux \\ \texttt{elie.roux@telecom-bretagne.eu}}
%
% \maketitle
@@ -172,8 +172,8 @@ module('lualibs', package.seeall)
do
local lualibs_module = {
name = "lualibs",
- version = 0.93,
- date = "2010/05/10",
+ version = 0.94,
+ date = "2010/05/21",
description = "Lua additional functions.",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL & Elie Roux",
copyright = "PRAGMA ADE / ConTeXt Development Team",
@@ -402,6 +402,21 @@ end
% \end{macrocode}
%
% \end{macro}
+% \begin{macro}{table.starts_at}
+%
+% No idea what it was used for, but Hans depricated it with the comment
+% \textit{obsolete, not nice anyway}, just restore it here until we have a
+% process to deprecate unused functions like this.
+%
+% \begin{macrocode}
+
+function table.starts_at(t)
+ return ipairs(t,1)(t,0)
+end
+
+% \end{macrocode}
+%
+% \end{macro}
%
% \iffalse
%</lua>