summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/data-tex.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkiv/data-tex.lua')
-rw-r--r--tex/context/base/mkiv/data-tex.lua27
1 files changed, 27 insertions, 0 deletions
diff --git a/tex/context/base/mkiv/data-tex.lua b/tex/context/base/mkiv/data-tex.lua
index b6b97a0a9..2d2c9b24d 100644
--- a/tex/context/base/mkiv/data-tex.lua
+++ b/tex/context/base/mkiv/data-tex.lua
@@ -57,6 +57,33 @@ resolvers.inputstack = resolvers.inputstack or { }
local inputstack = resolvers.inputstack
+----------------------------------------
+
+local lpegmatch = lpeg.match
+local newline = lpeg.patterns.newline
+local tsplitat = lpeg.tsplitat
+
+local linesplitters = {
+ tsplitat(newline), -- default since we started
+ tsplitat(lpeg.S(" ")^0 * newline),
+ tsplitat(lpeg.S(" \t")^0 * newline),
+ tsplitat(lpeg.S(" \f\t")^0 * newline), -- saves a bit of space at the cost of runtime
+ -- tsplitat(lpeg.S(" \v\f\t")^0 * newline),
+ -- tsplitat(lpeg.R("\0\31")^0 * newline),
+}
+
+local linesplitter = linesplitters[1]
+
+directives.register("system.linesplitmethod",function(v)
+ linesplitter = linesplitters[tonumber(v) or 1] or linesplitters[1]
+end)
+
+local function splitlines(str)
+ return lpegmatch(linesplitter,str)
+end
+
+-----------------------------------------
+
function helpers.textopener(tag,filename,filehandle,coding)
local lines
local t_filehandle = type(filehandle)