diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/m-database.lua')
-rw-r--r-- | Master/texmf-dist/tex/context/base/m-database.lua | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/Master/texmf-dist/tex/context/base/m-database.lua b/Master/texmf-dist/tex/context/base/m-database.lua index b9ec3aa3691..47854daa023 100644 --- a/Master/texmf-dist/tex/context/base/m-database.lua +++ b/Master/texmf-dist/tex/context/base/m-database.lua @@ -10,6 +10,7 @@ local sub, gmatch, format = string.sub, string.gmatch, string.format local concat = table.concat local lpegpatterns, lpegmatch, lpegsplitat = lpeg.patterns, lpeg.match, lpeg.splitat local lpegP, lpegC, lpegS, lpegCt = lpeg.P, lpeg.C, lpeg.S, lpeg.Ct +local stripstring = string.strip -- One also needs to enable context.trace, here we only plug in some code (maybe -- some day this tracker will also toggle the main context tracer. @@ -20,12 +21,19 @@ local report_database = logs.reporter("database") buffers.database = buffers.database or { } +local l_tab = lpegpatterns.tab +local l_space = lpegpatterns.space +local l_comma = lpegpatterns.comma +local l_empty = lpegS("\t\n\r ")^0 * lpegP(-1) + +local v_yes = interfaces.variables.yes + local separators = { -- not interfaced - tab = lpegpatterns.tab, - tabs = lpegpatterns.tab^1, - comma = lpegpatterns.comma, - space = lpegpatterns.space, - spaces = lpegpatterns.space^1, + tab = l_tab, + tabs = l_tab^1, + comma = l_comma, + space = l_space, + spaces = l_space^1, } function buffers.database.process(settings) @@ -46,6 +54,7 @@ function buffers.database.process(settings) local first, last = settings.first or "", settings.last or "" local left, right = settings.left or "", settings.right or "" local setups = settings.setups or "" + local strip = settings.strip == v_yes or false local command = settings.command separatorchar = (not separatorchar and ",") or separators[separatorchar] or separatorchar local separator = type(separatorchar) == "string" and lpegS(separatorchar) or separatorchar @@ -54,7 +63,7 @@ function buffers.database.process(settings) local quotedata = nil for chr in gmatch(quotechar,".") do local quotechar = lpegP(chr) - local quoteword = quotechar * lpeg.C((1 - quotechar)^0) * quotechar + local quoteword = l_space^0 * quotechar * lpegC((1 - quotechar)^0) * quotechar * l_space^0 if quotedata then quotedata = quotedata + quoteword else @@ -63,12 +72,12 @@ function buffers.database.process(settings) end whatever = quotedata + whatever end - local checker = commentchar ~= "" and lpeg.S(commentchar) + local checker = commentchar ~= "" and lpegS(commentchar) local splitter = lpegCt(whatever * (separator * whatever)^0) local found = false for i=1,#data do local line = data[i] - if line ~= "" and (not checker or not lpegmatch(checker,line)) then + if not lpegmatch(l_empty,line) and (not checker or not lpegmatch(checker,line)) then local list = lpegmatch(splitter,line) if not found then if setups ~= "" then @@ -82,13 +91,14 @@ function buffers.database.process(settings) local result, r = { }, 0 r = r + 1 ; result[r] = first for j=1,#list do + local str = strip and stripstring(list[j]) or list[j] r = r + 1 ; result[r] = left if command == "" then - r = r + 1 ; result[r] = list[j] + r = r + 1 ; result[r] = str else r = r + 1 ; result[r] = command r = r + 1 ; result[r] = "{" - r = r + 1 ; result[r] = list[j] + r = r + 1 ; result[r] = str r = r + 1 ; result[r] = "}" end r = r + 1 ; result[r] = right @@ -98,12 +108,13 @@ function buffers.database.process(settings) else context(first) for j=1,#list do + local str = strip and stripstring(list[j]) or list[j] context(left) if command == "" then - context(list[j]) + context(str) else context(command) - context(false,list[j]) + context(false,str) end context(right) end |