Синтаксис Lua позволяет реализовать шаблоны в стиле PHP буквально несколькими регулярными выражениями.
Для начала посмотрим, что из этого выйдет.
<? require 'tracking' ?>
И это все собирается одной командой в обычный модуль Lua:
На самом деле, для запуска потребуется написать еще одну короткую функцию:
Маленькая библиотека из трех функций доступна в Moon Rocks:
luarocks, в свою очередь, имеется в репозиториях Ubuntu:
Проект на GitHub.
Для начала посмотрим, что из этого выйдет.
Подстановка переменных
<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/[][]=[][]/]=]_"\0"_[=[/g; 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
Проект на GitHub.
