diff --git a/etlua.lua b/etlua.lua index dfc94a3..445aaa6 100644 --- a/etlua.lua +++ b/etlua.lua @@ -1,10 +1,15 @@ -local VERSION = "1.0.1" +local VERSION = "1.0.2" local insert, concat do local _obj_0 = table insert, concat = _obj_0.insert, _obj_0.concat end -local setfenv = setfenv or function(fn, env) +local load, setfenv, assert, type, error, tostring, tonumber, setmetatable +do + local _obj_0 = _G + load, setfenv, assert, type, error, tostring, tonumber, setmetatable = _obj_0.load, _obj_0.setfenv, _obj_0.assert, _obj_0.type, _obj_0.error, _obj_0.tostring, _obj_0.tonumber, _obj_0.setmetatable +end +setfenv = setfenv or function(fn, env) local name local i = 1 while true do @@ -225,10 +230,13 @@ do end return nil, err end - return function(env) + return function(env, buffer) if env == nil then env = { } end + if buffer == nil then + buffer = { } + end local combined_env = setmetatable({ }, { __index = function(self, name) local val = env[name] @@ -239,12 +247,12 @@ do end }) setfenv(fn, combined_env) - return fn(tostring, concat, html_escape) + return fn(buffer, #buffer, tostring, concat, html_escape) end end, chunks_to_lua = function(self) local buffer = { - "local _b, _b_i, _tostring, _concat, _escape = {}, 0, ..." + "local _b, _b_i, _tostring, _concat, _escape = ..." } local buffer_i = #buffer local push diff --git a/etlua.moon b/etlua.moon index 8aab649..036a187 100644 --- a/etlua.moon +++ b/etlua.moon @@ -1,6 +1,7 @@ VERSION = "1.0.2" import insert, concat from table +import load, setfenv, assert, type, error, tostring, tonumber, setmetatable from _G setfenv = setfenv or (fn, env) -> local name @@ -178,20 +179,20 @@ class Parser return nil, err - (env={}) -> + (env={}, buffer={}) -> combined_env = setmetatable {}, __index: (name) => val = env[name] val = _G[name] if val == nil val setfenv fn, combined_env - fn tostring, concat, html_escape + fn buffer, #buffer, tostring, concat, html_escape -- generates the code of the template chunks_to_lua: => - -- todo: find a no-conflict name for buffer + -- todo: find a no-conflict name for locals buffer = { - "local _b, _b_i, _tostring, _concat, _escape = {}, 0, ..." + "local _b, _b_i, _tostring, _concat, _escape = ..." } buffer_i = #buffer