Синтаксис Lua позволяет реализовать шаблоны в стиле PHP буквально несколькими регулярными выражениями.
Для начала посмотрим, что из этого выйдет.
Подстановка переменных
<a href="<%url%>"><%label%></a>
Логические конструкции
Будет
<? if 1 > 2 then ?>
лучше
<? else ?>
хуже
<? end ?>
Циклы
<ul>
<? for i = 1, 9999 do ?>
<li>ФЗ №<%i%></li>
<? end ?>
</ul>
Подключение других шаблонов
<html>
<script><? require "scripts" ?></script>
<style><? require "styles" ?></style>
...
<? require 'tracking' ?>
И любые другие конструкции на Lua
<? function warn() ?>
<b>Вы совершаете уголовно наказуемое деяние!</b>
<? end ?>
...
<? warn() ?>
...
<? --[[ ?>
Больше нечего скрывать
<? --]] ?>
И это все собирается одной командой в обычный модуль Lua:
(echo "return function(_)_[=["; sed -e "s/<%/]=]_(/g; s/%>/)_[=[/g; s/<[?]/]=] /g; s/[?]>/ _[=[/g"; echo "]=] end") < template.tpl > template.lua
На самом деле, для запуска потребуется написать еще одну короткую функцию:
function template.print(data, args, callback)
local callback = callback or print
local function exec(data)
if type(data) == "function" then
local args = args or {}
setmetatable(args, { __index = _G })
setfenv(data, args)
data(exec)
else
callback(tostring(data))
end
end
exec(data)
end
Установка
Маленькая библиотека из трех функций доступна в Moon Rocks:
luarocks install template
luarocks, в свою очередь, имеется в репозиториях Ubuntu:
sudo apt-get install luarocks
Автор: dannote