1if not modules then modules = { } end modules ['libs-imp-zstd'] = { 2 version = 1.001, 3 comment = "companion to luat-lib.mkxl", 4 author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", 5 copyright = "PRAGMA ADE / ConTeXt Development Team", 6 license = "see context related readme files" 7} 8 9-- Instead of linking in libs like this we now do them optional. After all, once 10-- we start adding more and more stuff statically we en dup with a mess. In fact, 11-- this lib was the reason for no longer embedding lzo and lz4. 12 13-- c:/data/develop/tex-context/tex/texmf-win64/bin/lib/luametatex/lua/copies/curl/libzstd.dll 14 15-- require("libs-imp-zstd.lmt") -- only loads 16-- 17-- local zstd = require("zstd") -- activates 18-- 19-- local data = io.loaddata("t:/sources/char-def.lua") 20-- local comp = zstd.compress (data) 21-- local back = zstd.decompress(comp) 22-- 23-- print(#data,#comp,#back,#back==#data) 24 25local libname = "zstd" 26local libfile = "libzstd" 27 28local zstdlib = resolvers.libraries.validoptional(libname) 29 30if not zstdlib then return end 31 32local zstd_compress = zstdlib.compress 33local zstd_decompress = zstdlib.decompress 34 35local function okay() 36 if resolvers.libraries.optionalloaded(libname,libfile) then 37 okay = function() return true end 38 else 39 okay = function() return false end 40 end 41 return okay() 42end 43 44local zstd = { 45 compress = function (s) return okay() and zstd_compress (s) end, 46 decompress = function (s) return okay() and zstd_decompress(s) end, 47} 48 49package.loaded[libname] = zstd 50 51return zstd 52 53-- local foreign = optional.loaded.foreign 54-- local newbuffer = foreign.newbuffer 55-- local getbuffer = foreign.getbuffer 56-- 57-- local zstd = foreign.load("libzstd") 58-- 59-- local ZSTD_compressBound = zstd:register { 60-- name = "ZSTD_compressBound", 61-- result = "int", 62-- arguments = { "int" }, 63-- } 64-- 65-- local ZSTD_getFrameContentSize = zstd:register { 66-- name = "ZSTD_getFrameContentSize", 67-- result = "int", 68-- arguments = { "pointer", "int" }, 69-- } 70-- 71-- local ZSTD_compress = zstd:register { 72-- name = "ZSTD_compress", 73-- result = "int", 74-- arguments = { "pointer", "int", "string", "int", "int" }, 75-- arguments = { "pointer", "int", "pointer", "int", "int" }, 76-- } 77-- 78-- local ZSTD_decompress = zstd:register { 79-- name = "ZSTD_decompress", 80-- result = "int", 81-- arguments = { "pointer", "int", "string", "int" }, 82-- } 83-- 84-- local function zstd_compress(source,level) 85-- local sourcesize = #source 86-- local targetsize = ZSTD_compressBound(sourcesize) 87-- local target = newbuffer(targetsize) 88-- local result = ZSTD_compress(target,targetsize,source,sourcesize,tonumber(level) or 3) 89-- return getbuffer(target,result) 90-- end 91-- 92-- local function zstd_decompress(source) 93-- local sourcesize = #source 94-- local targetsize = ZSTD_getFrameContentSize(source,sourcesize) 95-- local target = newbuffer(targetsize) 96-- local result = ZSTD_decompress(target,targetsize,source,sourcesize) 97-- return getbuffer(target,result) 98-- end 99 |