Size: a a a

2020 March 02

VV

V V in pro.lua
Snusmumriken
А то у меня на работе кто-то фигачил лютый шаблонизатор, работающий с чем-то таким:
[[<html>
 <head>...</head>
 <body>
   <?for i = 1, 100 do?>
     <div><?i?></div>
   <?end?>
 </body>
</html>]]

И в коде этого шаблонизатора без поллитры не разберёшься за неделю, хотя кода там немного, и весь на gsub'ах и одном loadstring'е. Можно было бы гораздо проще, хоть и незначительно медленнее.
Шаблонизатор - это что за зверь такой?
источник

S

Snusmumriken in pro.lua
V V
Хорошо, когда цена за них невысокая.

Но может оказаться, что "дедов кий способ на коленке" просто не справляется с задачей за адекватное время.

Тогда и наступает время всяческих извращений.
Разумеется. Но каждый инструмент типа к месту. И да, было бы неплохо если бы ты накатал подробную статью по данной теме, со схемками и образцами кода ))

> Шаблонизатор
Ну тут же всё написано. Данный конкретный, например, генерирует по данному шаблону такую хтмлу:
[[<html>
 <head>...</head>
 <body>
     <div>1</div>
     <div>2</div>
     <div>3</div>
       ...
     <div>100</div>
 </body>
</html>]]

Соответственно, можно подсунуть табличек с данными, распарсить их прямо в шаблоне и запихнуть на свои места. Или генерить вовсе даже не хтмл, а, например, xml или md или yaml с другим шаблоном (хотя на md и yaml часть тегов может сломаться, надо проверить).
источник

S

Snusmumriken in pro.lua
И любой инструмент в любом языке для аналогичных целей является шаблонизатором. Простейший вариант для подстановки слов уже встроен в луа:
local template = "$foo, the beautiful $bar!"
local data = {foo = "Hello", bar = "world"}

local dummy =  template:gsub("%$(%w+)", data)
print(dummy) --> Hello, the beautiful world!


Но он, разумеется, не умеет в инлайн-код : )
источник

f

fgntfg in pro.lua
Snusmumriken
Прост реальные данные обычно примерно вот такие. Хммм.
<some tags>
 <unused stuff blabla/>
 <nested bullshit>
   <tag WE NEED THIS/>   <--
   <tag AND THIS/>       <--
 </nested bullshit>
 <unused stuff blabla/>
 <nested bullshit2>
   <tag WE NEED THIS/>   <--
   <tag AND THIS/>       <--
 </nested bullshit2>
</some tags>

Только в одну строку, для пущего комфорта ))
Я теперь плачу, ты этого хотел добиться?
источник

S

Snusmumriken in pro.lua
источник

VV

V V in pro.lua
Snusmumriken
Разумеется. Но каждый инструмент типа к месту. И да, было бы неплохо если бы ты накатал подробную статью по данной теме, со схемками и образцами кода ))

> Шаблонизатор
Ну тут же всё написано. Данный конкретный, например, генерирует по данному шаблону такую хтмлу:
[[<html>
 <head>...</head>
 <body>
     <div>1</div>
     <div>2</div>
     <div>3</div>
       ...
     <div>100</div>
 </body>
</html>]]

Соответственно, можно подсунуть табличек с данными, распарсить их прямо в шаблоне и запихнуть на свои места. Или генерить вовсе даже не хтмл, а, например, xml или md или yaml с другим шаблоном (хотя на md и yaml часть тегов может сломаться, надо проверить).
Можно написать, но тут сперва понять надо, для какой аудитории и в каком объёме.

Подумаю на выходных, что можно выкатить)

По поводу шаблонизаторов - ок, понял.
Но код в одну строку не плох сам по себе, если из каждого шага очевидно, какое произошло преобразование.
Когда они похожи, то лучше так не делать. Твой товарищ не внемлет голосу чистого разума?))

P.s. большие статические шаблонизаторы тоже странное решение - много текста и очень малая область накрываемых задач. Но это имхо чуть более, чем полностью.
источник

S

Snusmumriken in pro.lua
Статистические шаблонизаторы? А это что за звери?
Я вот сейчас пользуюсь статистическим анализатором кода, но не шаблонизатором ))

Ну и у шаблонизаторов есть целое множество применений. Любая рендерилка языков разметки формально является шаблонизатором, так как трансформирует твой шаблон (например, в md или tex) в различные форматы (например, в html/rtf/pdf).
источник

S

Snusmumriken in pro.lua
Да, на всякий случай уточняю: я давал тот шаблонизатор просто как пример переусложнённой фигни, которая очень быстро и круто работает, но совершенно нечитаема и неподдерживаема.

> Но код в одну строку не плох сам по себе
Ты про какой код? Про инлайн-вставки в шаблоны, или про реализацию какой-нибудь фигни?

Я не всегда понимаю о чём ты говоришь и почему, поэтому давай сначала прояснять терминологию.
источник

DF

Dollar Føølish in pro.lua
Што делает етот кот
источник

DF

Dollar Føølish in pro.lua
Типа
local strbuf = ""
while true do
 local a, b = strbuf:find("regex")
 while a and b do
   local block
   block, strbuf = strbuf:sub(a, b), strbuf:sub(b + 1)
   parse_block(block)
   a, b = strbuf:find("regex")
 end
 local chunk = read(2048 * 100000)
 if #chunk == 0 then break end
 strbuf = strbuf .. chunk
end
источник

DF

Dollar Føølish in pro.lua
Я в луа не силен
источник

DF

Dollar Føølish in pro.lua
Вижу что вроде постепенно затирает то что нашел регекспом
источник

DF

Dollar Føølish in pro.lua
Или скипает
источник

S

Snusmumriken in pro.lua
Ну типа у нас есть буфер strbuf. Мы ищем в нём фигню регуляркой. Нашли — отпиливаем этот кусок и парсим, не нашли — добавляем туда ещё кусок и снова ищем.
a и b — начало и конец найденной регулярки.
Цикл while a and b нужен чтобы распарсить все подходящие под регулярку куски в текущем strbuf, их там может быть много.
источник

DF

Dollar Føølish in pro.lua
Спасибо дружище
источник

VV

V V in pro.lua
Snusmumriken
Статистические шаблонизаторы? А это что за звери?
Я вот сейчас пользуюсь статистическим анализатором кода, но не шаблонизатором ))

Ну и у шаблонизаторов есть целое множество применений. Любая рендерилка языков разметки формально является шаблонизатором, так как трансформирует твой шаблон (например, в md или tex) в различные форматы (например, в html/rtf/pdf).
Не статистические, а статические) я имею ввиду ситуация, когда шаблон не собирается из примитивы языка разметки, а просто является огромным куском неизменного текста, ждущего на вход такой же большой список аргументов.

Тогда эта штука работает быстро, но решает только одну-единственную задачу. Это потребует по отдельному шаблону на каждую новую задачу. Что на мой взгляд не очень хорошо с позиции повторного использования кода.
источник

S

Snusmumriken in pro.lua
Хммм, а что ты предлагаешь взамен?
В норме — основные элементы набиваются по шаблонам.
Есть условный общий шаблон странички, в него набиваются разные части типа результатов работы шаблонизатора для шапки, для ленты новостей, для всяких таких штук.

В результате под каждый отдельный элемент какой-нибудь веб-странички есть свой шаблон, который как правило состоит из шаблонов попроще. Обычное дерево.
источник

VV

V V in pro.lua
Snusmumriken
Да, на всякий случай уточняю: я давал тот шаблонизатор просто как пример переусложнённой фигни, которая очень быстро и круто работает, но совершенно нечитаема и неподдерживаема.

> Но код в одну строку не плох сам по себе
Ты про какой код? Про инлайн-вставки в шаблоны, или про реализацию какой-нибудь фигни?

Я не всегда понимаю о чём ты говоришь и почему, поэтому давай сначала прояснять терминологию.
Нечитаемое / неподдерживаемо - иногда допустимая цена, если иначе недостаточно быстродействие.

Ок, что такое инлайн-вставки?)

Ну да, есть такое. Сорян) Я иногда твои уточняющие вопросы тоже не понимаю. Давай попробуем к общим термина прийти.
источник

S

Snusmumriken in pro.lua
Инлайн-вставки — типа такого:
   <?for i = 1, 100 do?>
     <div><?i?></div>
   <?end?>

Куски кода в шаблоне. Вот этот вот должен сгенерить 100 div'ов на этом месте, каждый со своей внутренней фигнёй.
источник

VV

V V in pro.lua
Snusmumriken
Хммм, а что ты предлагаешь взамен?
В норме — основные элементы набиваются по шаблонам.
Есть условный общий шаблон странички, в него набиваются разные части типа результатов работы шаблонизатора для шапки, для ленты новостей, для всяких таких штук.

В результате под каждый отдельный элемент какой-нибудь веб-странички есть свой шаблон, который как правило состоит из шаблонов попроще. Обычное дерево.
Значит, я тебя неправильно понял. Подумал, что шаблоны типа приведённого тобой строятся по принципу "вся начинка в одном шаблоне", и он описывает все элементы в себе, от заголовков, до цветов кнопок.

И, что такой шаблон плох только своей нечитаемостью.

На мой взгляд минус такой работы с шаблонами был бы в крайне низкой гибкости.
источник