summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/util-sac.lua
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2018-10-17 15:43:08 +0200
committerContext Git Mirror Bot <phg@phi-gamma.net>2018-10-17 15:43:08 +0200
commite5f189d9965a70c8f3043c07c7b07d41ef268e93 (patch)
treeea192c431e2762fbae01fdd44cb3a48278b06fc0 /tex/context/base/mkiv/util-sac.lua
parent9f36318b0e571bcbc93dc2112d01bbf2178ed020 (diff)
downloadcontext-e5f189d9965a70c8f3043c07c7b07d41ef268e93.tar.gz
2018-10-17 15:14:00
Diffstat (limited to 'tex/context/base/mkiv/util-sac.lua')
-rw-r--r--tex/context/base/mkiv/util-sac.lua64
1 files changed, 54 insertions, 10 deletions
diff --git a/tex/context/base/mkiv/util-sac.lua b/tex/context/base/mkiv/util-sac.lua
index 09c3819c5..62ce6bc1c 100644
--- a/tex/context/base/mkiv/util-sac.lua
+++ b/tex/context/base/mkiv/util-sac.lua
@@ -21,6 +21,10 @@ function streams.open(filename,zerobased)
return { f, 1, #f, zerobased or false }
end
+function streams.openstring(f,zerobased)
+ return { f, 1, #f, zerobased or false }
+end
+
function streams.close()
-- dummy
end
@@ -389,8 +393,32 @@ end
if sio and sio.readcardinaltable then
- streams.readcardinaltable = sio.readcardinaltable
- streams.readintegertable = sio.readintegertable
+ local readcardinaltable = sio.readcardinaltable
+ local readintegertable = sio.readintegertable
+
+ function utilities.streams.readcardinaltable(f,n,b)
+ local i = f[2]
+ local s = f[3]
+ local p = i + n * b
+ if p > s then
+ f[2] = s + 1
+ else
+ f[2] = p
+ end
+ return readcardinaltable(f[1],i,n,b)
+ end
+
+ function utilities.streams.readintegertable(f,n,b)
+ local i = f[2]
+ local s = f[3]
+ local p = i + n * b
+ if p > s then
+ f[2] = s + 1
+ else
+ f[2] = p
+ end
+ return readintegertable(f[1],i,n,b)
+ end
else
@@ -400,11 +428,19 @@ else
local readcardinal4 = streams.readcardinal4
function streams.readcardinaltable(f,n,b)
+ local i = f[2]
+ local s = f[3]
+ local p = i + n * b
+ if p > s then
+ f[2] = s + 1
+ else
+ f[2] = p
+ end
local t = { }
- if b == 1 then for i=1,n do t[i] = readcardinal1(f) end
- elseif b == 2 then for i=1,n do t[i] = readcardinal2(f) end
- elseif b == 3 then for i=1,n do t[i] = readcardinal3(f) end
- elseif b == 4 then for i=1,n do t[i] = readcardinal4(f) end end
+ if b == 1 then for i=1,n do t[i] = readcardinal1(f[1],i) end
+ elseif b == 2 then for i=1,n do t[i] = readcardinal2(f[1],i) end
+ elseif b == 3 then for i=1,n do t[i] = readcardinal3(f[1],i) end
+ elseif b == 4 then for i=1,n do t[i] = readcardinal4(f[1],i) end end
return t
end
@@ -414,11 +450,19 @@ else
local readinteger4 = streams.readinteger4
function streams.readintegertable(f,n,b)
+ local i = f[2]
+ local s = f[3]
+ local p = i + n * b
+ if p > s then
+ f[2] = s + 1
+ else
+ f[2] = p
+ end
local t = { }
- if b == 1 then for i=1,n do t[i] = readinteger1(f) end
- elseif b == 2 then for i=1,n do t[i] = readinteger2(f) end
- elseif b == 3 then for i=1,n do t[i] = readinteger3(f) end
- elseif b == 4 then for i=1,n do t[i] = readinteger4(f) end end
+ if b == 1 then for i=1,n do t[i] = readinteger1(f[1],i) end
+ elseif b == 2 then for i=1,n do t[i] = readinteger2(f[1],i) end
+ elseif b == 3 then for i=1,n do t[i] = readinteger3(f[1],i) end
+ elseif b == 4 then for i=1,n do t[i] = readinteger4(f[1],i) end end
return t
end