66 table.insert(compile_template_to_table(result, data, start_lua, end_lua), |
66 table.insert(compile_template_to_table(result, data, start_lua, end_lua), |
67 "end") |
67 "end") |
68 return table.concat(result) |
68 return table.concat(result) |
69 end |
69 end |
70 |
70 |
|
71 local function compile_template_as_chunk(data, start_lua, end_lua) |
|
72 local result = { "local output = ... " } |
|
73 return |
|
74 table.concat(compile_template_to_table(result, data, start_lua, end_lua)) |
|
75 end |
|
76 |
71 local function compile_template(data, start_lua, end_lua) |
77 local function compile_template(data, start_lua, end_lua) |
72 return |
78 return table.concat(compile_template_to_table({ }, data, start_lua, end_lua)) |
73 table.concat(compile_template_to_table({ }, data, start_lua, end_lua)) |
|
74 end |
79 end |
75 |
80 |
76 local function load_template(data, start_lua, end_lua) |
81 local function load_template(data, start_lua, end_lua) |
77 return |
82 return assert(load(compile_template_as_chunk(data, start_lua, end_lua), |
78 assert(loadstring(compile_template_as_function(data, start_lua, end_lua), |
83 "=(load)")) |
79 "=(load)"))() |
|
80 end |
84 end |
81 |
85 |
82 local function execute_template(template, environment, output) |
86 local function execute_template(template, environment, output) |
83 setfenv(template, environment)(output) |
87 setfenv(template, environment)(output) |
84 end |
88 end |
128 return table.concat(output) |
132 return table.concat(output) |
129 end |
133 end |
130 |
134 |
131 local function execute_env_code(env_code, environment) |
135 local function execute_env_code(env_code, environment) |
132 for i = 1,#env_code do |
136 for i = 1,#env_code do |
133 local fun, emsg = loadstring(env_code[i]) |
137 local fun, emsg = load(env_code[i]) |
134 |
138 |
135 if fun then |
139 if fun then |
136 setfenv(fun, environment)() |
140 setfenv(fun, environment)() |
137 else |
141 else |
138 error("error loading " .. env_code[i] .. "\n" .. emsg) |
142 error("error loading " .. env_code[i] .. "\n" .. emsg) |
174 end |
178 end |
175 |
179 |
176 return ltp.merge_table( |
180 return ltp.merge_table( |
177 { |
181 { |
178 compile_template_to_table = compile_template_to_table, |
182 compile_template_to_table = compile_template_to_table, |
|
183 compile_template_as_chunk = compile_template_as_chunk, |
179 compile_template_as_function = compile_template_as_function, |
184 compile_template_as_function = compile_template_as_function, |
180 compile_template = compile_template, |
185 compile_template = compile_template, |
181 load_template = load_template, |
186 load_template = load_template, |
182 execute_template = execute_template, |
187 execute_template = execute_template, |
183 basic_environment = basic_environment, |
188 basic_environment = basic_environment, |