| Сообщение от nerv_   | 
	| глупый вопрос - в боевых проектах использовал или сделал и положил на полку?   | 
	
Конечно использую, этот как бы и писалось под проект (я вроде об этом говорил

 ), причём огромный, сейчас уже больше 300-шаблонов (пишу несколько лет, но последние пол года на фул тайме, т.к. уволился с работы, Бог даст к НГ сделаю релиз) и многие находятся в зависимостях наследования.
Я очень жирно использую ООП и мне крайне важно было максимально гибкая система наследования в шаблонах, а также одинаково удобная система использования на сервере (node.js) и клиенте.
Ошибки и новые фичи исправляю по мере необходимости. На этой недели собирался сделать большой фикс, так как всплыли некоторые оч противные баги (вроде невозможности декларировать константы внутри прототипа).
С cdata проблема в том, что содержимое вырезается по регулярке до анализа шаблона и построения дерева, поэтому возможна следующая проблема:
{cdata}
    {end}
{end}
Фактически содержимое внутри блока cdata никак не обрабатывается, поэтому я могу написать что угодно, но в данном случае нужно либо как то экранировать {end} теги внутри области (как например это делается в xml), тому кто пишет шаблон или ввести особый закрывающий тег, как сейчас сделано у меня.
А так я не вижу смысла делать для каждой директивы свой закрывающий тег - это имхо не круто, тем более с точки зрения парсинга это не даёт профита, т.к. по шаблону у меня строится дерево, в котором видна вся вложенность блоков. Ну а чтобы было видно человеку - нужно делать отступы 
 
{template foo(params, type = 'static')}
    {if type === 'static'}
        муахахаха!
    {else}
        {block bar}
            ...
        {end}
    {end}
{end}