From bdc3e241bb61a8bbf64353cb4090b4da417b06b0 Mon Sep 17 00:00:00 2001 From: Diego Nehab Date: Wed, 17 Nov 2004 04:55:57 +0000 Subject: Little bug in manual. --- src/ltn12.lua | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src') diff --git a/src/ltn12.lua b/src/ltn12.lua index 9917ce8..ed39ec8 100644 --- a/src/ltn12.lua +++ b/src/ltn12.lua @@ -31,6 +31,7 @@ function filter.cycle(low, ctx, extra) end end +--[[ local function chain2(f1, f2) local ff1, ff2 = "", "" return function(chunk) @@ -55,6 +56,29 @@ local function chain2(f1, f2) end end end +]] + +local function chain2(f1, f2) + local co = coroutine.create(function(chunk) + while true do + local filtered1 = f1(chunk) + local filtered2 = f2(filtered1) + local done2 = filtered1 and "" + while true do + if filtered2 == "" or filtered2 == nil then break end + coroutine.yield(filtered2) + filtered2 = f2(done2) + end + if filtered1 == "" then chunk = coroutine.yield(filtered1) + elseif filtered1 == nil then return nil + else chunk = chunk and "" end + end + end) + return function(chunk) + local _, res = coroutine.resume(co, chunk) + return res + end +end -- chains a bunch of filters together function filter.chain(...) -- cgit v1.2.3-55-g6feb