mirror of
https://github.com/TangentFoxy/etlua.git
synced 2025-07-28 02:52:17 +00:00
split @load apart, add @run
This commit is contained in:
46
etlua.lua
46
etlua.lua
@@ -169,7 +169,14 @@ do
|
|||||||
if not (success) then
|
if not (success) then
|
||||||
return nil, err
|
return nil, err
|
||||||
end
|
end
|
||||||
return self:load(self:chunks_to_lua())
|
local fn
|
||||||
|
fn, err = self:load(self:chunks_to_lua())
|
||||||
|
if not (fn) then
|
||||||
|
return nil, err
|
||||||
|
end
|
||||||
|
return function(...)
|
||||||
|
return self:run(fn, ...)
|
||||||
|
end
|
||||||
end,
|
end,
|
||||||
parse = function(self, str)
|
parse = function(self, str)
|
||||||
self.str = str
|
self.str = str
|
||||||
@@ -230,25 +237,26 @@ do
|
|||||||
end
|
end
|
||||||
return nil, err
|
return nil, err
|
||||||
end
|
end
|
||||||
return function(env, buffer)
|
return fn
|
||||||
if env == nil then
|
end,
|
||||||
env = { }
|
run = function(self, fn, env, buffer)
|
||||||
end
|
if env == nil then
|
||||||
if buffer == nil then
|
env = { }
|
||||||
buffer = { }
|
|
||||||
end
|
|
||||||
local combined_env = setmetatable({ }, {
|
|
||||||
__index = function(self, name)
|
|
||||||
local val = env[name]
|
|
||||||
if val == nil then
|
|
||||||
val = _G[name]
|
|
||||||
end
|
|
||||||
return val
|
|
||||||
end
|
|
||||||
})
|
|
||||||
setfenv(fn, combined_env)
|
|
||||||
return fn(buffer, #buffer, tostring, concat, html_escape)
|
|
||||||
end
|
end
|
||||||
|
if buffer == nil then
|
||||||
|
buffer = { }
|
||||||
|
end
|
||||||
|
local combined_env = setmetatable({ }, {
|
||||||
|
__index = function(self, name)
|
||||||
|
local val = env[name]
|
||||||
|
if val == nil then
|
||||||
|
val = _G[name]
|
||||||
|
end
|
||||||
|
return val
|
||||||
|
end
|
||||||
|
})
|
||||||
|
setfenv(fn, combined_env)
|
||||||
|
return fn(buffer, #buffer, tostring, concat, html_escape)
|
||||||
end,
|
end,
|
||||||
chunks_to_lua = function(self)
|
chunks_to_lua = function(self)
|
||||||
local buffer = {
|
local buffer = {
|
||||||
|
22
etlua.moon
22
etlua.moon
@@ -132,7 +132,9 @@ class Parser
|
|||||||
compile: (str) =>
|
compile: (str) =>
|
||||||
success, err = @parse str
|
success, err = @parse str
|
||||||
return nil, err unless success
|
return nil, err unless success
|
||||||
@load @chunks_to_lua!
|
fn, err = @load @chunks_to_lua!
|
||||||
|
return nil, err unless fn
|
||||||
|
(...) -> @run fn, ...
|
||||||
|
|
||||||
parse: (@str) =>
|
parse: (@str) =>
|
||||||
assert type(@str) == "string", "expecting string for parse"
|
assert type(@str) == "string", "expecting string for parse"
|
||||||
@@ -163,6 +165,7 @@ class Parser
|
|||||||
source_line = get_line @str, source_line_no
|
source_line = get_line @str, source_line_no
|
||||||
"#{err_msg} [#{source_line_no}]: #{source_line}"
|
"#{err_msg} [#{source_line_no}]: #{source_line}"
|
||||||
|
|
||||||
|
-- converts lua string into template function
|
||||||
load: (code, name="etlua") =>
|
load: (code, name="etlua") =>
|
||||||
code_fn = do
|
code_fn = do
|
||||||
code_ref = code
|
code_ref = code
|
||||||
@@ -179,14 +182,17 @@ class Parser
|
|||||||
|
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
||||||
(env={}, buffer={}) ->
|
fn
|
||||||
combined_env = setmetatable {}, __index: (name) =>
|
|
||||||
val = env[name]
|
|
||||||
val = _G[name] if val == nil
|
|
||||||
val
|
|
||||||
|
|
||||||
setfenv fn, combined_env
|
-- takes a function from @load and executes it with correct parameters
|
||||||
fn buffer, #buffer, tostring, concat, html_escape
|
run: (fn, env={}, buffer={}) =>
|
||||||
|
combined_env = setmetatable {}, __index: (name) =>
|
||||||
|
val = env[name]
|
||||||
|
val = _G[name] if val == nil
|
||||||
|
val
|
||||||
|
|
||||||
|
setfenv fn, combined_env
|
||||||
|
fn buffer, #buffer, tostring, concat, html_escape
|
||||||
|
|
||||||
-- generates the code of the template
|
-- generates the code of the template
|
||||||
chunks_to_lua: =>
|
chunks_to_lua: =>
|
||||||
|
Reference in New Issue
Block a user