One-liner для компиляции шаблонов на Lua

в 8:51, , рубрики: Lua, Веб-разработка, Программирование, шаблонизаторы

Синтаксис 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

Проект на GitHub.

Автор: dannote

Источник


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js