diff options
author | Hans Hagen <pragma@wxs.nl> | 2018-10-17 15:43:08 +0200 |
---|---|---|
committer | Context Git Mirror Bot <phg@phi-gamma.net> | 2018-10-17 15:43:08 +0200 |
commit | e5f189d9965a70c8f3043c07c7b07d41ef268e93 (patch) | |
tree | ea192c431e2762fbae01fdd44cb3a48278b06fc0 /tex/context/base/mkiv/util-sac.lua | |
parent | 9f36318b0e571bcbc93dc2112d01bbf2178ed020 (diff) | |
download | context-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.lua | 64 |
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 |