thirddata = thirddata or {} thirddata.externalfilter = thirddata.externalfilter or {} local externalfilter = thirddata.externalfilter local trace_externalfilter = false trackers.register("thirddata.externalfilter", function(v) trace_externalfilter = v end) local report_externalfilter = logs.new("thirddata.externalfilter") local newline = lpeg.P("\n\r") + lpeg.P("\r\n") + lpeg.P("\n") + lpeg.P("\r") local splitter = lpeg.Ct(lpeg.splitat(newline)) local space = lpeg.P(" ") local any = lpeg.Cs(1) local spaceparser = space^0 * lpeg.C(any^0) function externalfilter.httpget(filter, name, separator) local content = buffers.getcontent(name) local lines = lpeg.match(splitter, content) for i=1,#lines do lines[i] = lpeg.match(spaceparser, lines[i]) end content = table.concat(lines, separator) local url = filter .. content if trace_externalfilter then report_externalfilter("downloading url %s", url) end local specification = resolvers.splitmethod(url) local file = resolvers.finders['http'](specification) or "" if trace_externalfilter then if file and file ~= "" then report_externalfilter("saving file %s", file) else report_externalfilter("download failed") end end return tex.sprint(tex.ctxcatcodes,file) end