summaryrefslogtreecommitdiff
path: root/tex
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2012-11-23 17:35:00 +0100
committerHans Hagen <pragma@wxs.nl>2012-11-23 17:35:00 +0100
commita57ab2d223a7bcc8e9ae57e148c30ac6e91fafdb (patch)
tree535c20bedddf44347bf2c451ba6e8ba00d47d9ea /tex
parent0a53837307e4b27c2b6543e3cab740c661d24481 (diff)
downloadcontext-a57ab2d223a7bcc8e9ae57e148c30ac6e91fafdb.tar.gz
beta 2012.11.23 17:35
Diffstat (limited to 'tex')
-rw-r--r--tex/context/base/context-version.pdfbin4148 -> 4152 bytes
-rw-r--r--tex/context/base/context-version.pngbin40426 -> 40647 bytes
-rw-r--r--tex/context/base/data-lua.lua4
-rw-r--r--tex/context/base/phys-dim.lua15
-rw-r--r--tex/context/base/status-files.pdfbin24538 -> 24539 bytes
-rw-r--r--tex/context/base/status-lua.pdfbin198684 -> 198711 bytes
-rw-r--r--tex/context/base/util-prs.lua50
7 files changed, 61 insertions, 8 deletions
diff --git a/tex/context/base/context-version.pdf b/tex/context/base/context-version.pdf
index 3349ae881..d17c41110 100644
--- a/tex/context/base/context-version.pdf
+++ b/tex/context/base/context-version.pdf
Binary files differ
diff --git a/tex/context/base/context-version.png b/tex/context/base/context-version.png
index d02983feb..43687ee49 100644
--- a/tex/context/base/context-version.png
+++ b/tex/context/base/context-version.png
Binary files differ
diff --git a/tex/context/base/data-lua.lua b/tex/context/base/data-lua.lua
index 87d346201..c63851525 100644
--- a/tex/context/base/data-lua.lua
+++ b/tex/context/base/data-lua.lua
@@ -115,6 +115,10 @@ function package.extraclibpath(...)
end
end
+if not package.loaders then
+ package.loaders = package.searchers -- 5.2
+end
+
if not package.loaders[-2] then
-- use package-path and package-cpath
package.loaders[-2] = package.loaders[2]
diff --git a/tex/context/base/phys-dim.lua b/tex/context/base/phys-dim.lua
index 5b883ac88..88a522195 100644
--- a/tex/context/base/phys-dim.lua
+++ b/tex/context/base/phys-dim.lua
@@ -82,8 +82,16 @@ local space = P(" ")
local lparent = P("(")
local rparent = P(")")
+local lbrace = P("{")
+local rbrace = P("}")
+
local digits = digit^1
+local powerdigits = plus * C(digits) / context.digitspowerplus
+ + minus * C(digits) / context.digitspowerminus
+ + C(digits) / context.digitspower
+
+
local ddigitspace = digitspace / "" / context.digitsspace
local ddigit = digits / context.digitsdigit
local dsemicomma = semicolon / "" / context.digitsseparatorspace
@@ -100,11 +108,8 @@ local dnegative = negative / "" / context.digitsnegative
local dhighspace = highspace / "" / context.digitshighspace
local dsomesign = plus / "" / context.digitsplus
+ minus / "" / context.digitsminus
-local dpower = power / "" * (
- plus * C(digits) / context.digitspowerplus
- + minus * C(digits) / context.digitspowerminus
- + C(digits) / context.digitspower
- )
+local dpower = power / "" * ( powerdigits + lbrace * powerdigits * rbrace )
+
local dpadding = padding / "" / context.digitszeropadding -- todo
local dleader = (dpositive + dnegative + dhighspace + dsomesign + dsignspace)^0
diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf
index 965f9ab05..83936aba1 100644
--- a/tex/context/base/status-files.pdf
+++ b/tex/context/base/status-files.pdf
Binary files differ
diff --git a/tex/context/base/status-lua.pdf b/tex/context/base/status-lua.pdf
index aa44ac99f..736cc36fc 100644
--- a/tex/context/base/status-lua.pdf
+++ b/tex/context/base/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/util-prs.lua b/tex/context/base/util-prs.lua
index 4166fca25..3cfb3e5f3 100644
--- a/tex/context/base/util-prs.lua
+++ b/tex/context/base/util-prs.lua
@@ -8,7 +8,7 @@ if not modules then modules = { } end modules ['util-prs'] = {
local lpeg, table, string = lpeg, table, string
-local P, R, V, S, C, Ct, Cs, Carg, Cc, Cg, Cf = lpeg.P, lpeg.R, lpeg.V, lpeg.S, lpeg.C, lpeg.Ct, lpeg.Cs, lpeg.Carg, lpeg.Cc, lpeg.Cg, lpeg.Cf
+local P, R, V, S, C, Ct, Cs, Carg, Cc, Cg, Cf, Cp = lpeg.P, lpeg.R, lpeg.V, lpeg.S, lpeg.C, lpeg.Ct, lpeg.Cs, lpeg.Carg, lpeg.Cc, lpeg.Cg, lpeg.Cf, lpeg.Cp
local lpegmatch, patterns = lpeg.match, lpeg.patterns
local concat, format, gmatch, find = table.concat, string.format, string.gmatch, string.find
local tostring, type, next, rawset = tostring, type, next, rawset
@@ -305,10 +305,13 @@ end
-- inspect(lpeg.match(pattern,[[key="value"]]))
-local newline = S('\r\n')
+local defaultspecification = { separator = ",", quote = '"' }
+
+-- this version accepts multiple separators and quotes as used in the
+-- database module
function parsers.csvsplitter(specification)
- specification = specification or { }
+ specification = specification and table.setmetatableindex(specification,defaultspecification) or defaultspecification
local separator = specification.separator
local quotechar = specification.quote
local separator = S(separator ~= "" and separator or ",")
@@ -331,3 +334,44 @@ function parsers.csvsplitter(specification)
return lpegmatch(parser,data)
end
end
+
+-- and this is a slightly patched version of a version posted by Philipp Gesang
+
+-- local mycsvsplitter = utilities.parsers.rfc4180splitter()
+--
+-- local crap = [[
+-- first,second,third,fourth
+-- "1","2","3","4"
+-- "a","b","c","d"
+-- "foo","bar""baz","boogie","xyzzy"
+-- ]]
+--
+-- local list, names = mycsvsplitter(crap,true) inspect(list) inspect(names)
+-- local list, names = mycsvsplitter(crap) inspect(list) inspect(names)
+
+function parsers.rfc4180splitter(specification)
+ specification = specification and table.setmetatableindex(specification,defaultspecification) or defaultspecification
+ local separator = specification.separator --> rfc: COMMA
+ local quotechar = P(specification.quote) --> DQUOTE
+ local dquotechar = quotechar * quotechar --> 2DQUOTE
+ / specification.quote
+ local separator = S(separator ~= "" and separator or ",")
+ local escaped = quotechar
+ * Cs((dquotechar + (1 - quotechar))^0)
+ * quotechar
+ local non_escaped = C((1 - quotechar - newline - separator)^1)
+ local field = escaped + non_escaped
+ local record = Ct((field * separator^-1)^1)
+ local headerline = record * Cp()
+ local wholeblob = Ct((newline^-1 * record)^0)
+ return function(data,getheader)
+ if getheader then
+ local header, position = lpegmatch(headerline,data)
+ local data = lpegmatch(wholeblob,data,position)
+ return data, header
+ else
+ return lpegmatch(wholeblob,data)
+ end
+ end
+end
+