Разработка → One-liner для компиляции шаблонов на Lua

dannote 16 ноября 2014 в 11:51 6,2k
Синтаксис 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/[][]=[][]/]=]_"\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.
Проголосовать:
+15
Сохранить: