Есть довольно много различных шаблонизаторов для представлений, которые компилируются при их парсинге в, скажем, нативный вид. Например что-то вроде такого для php:
@if ($article->status == 'active')
<div class="content">
{{ $article->content }}
@foreach ($articles->comments as $comment)
{{ $comment->content }}
@endforeach
</div>
@endif
Меняются лишь форматы блоков: "@if", "<% if ... %>" и т.п. Приводится все это для того же php к виду "<?php if ... : ?>".
Так вот стало интересно, есть ли шаблонизаторы с HTML/XML-подобным синтаксисом? И если нет, то почему?
Например, писать
<if article.status = 'active'>
<div class="content">
{{ article.content }}
<for comment in article.comments>
{{ comment.content }}
</for>
</div>
</if>
Получается, что мы практически не смешиваем языки, пишем практически на том же HTML, пусть и модифицированном. Даже подсветка синтаксиса тегов будет частично работать во многих редакторах. Тот же "for" можно привести вообще к полной валидности XML-структуры
<for each="comment" in="article.comments" by="comment_id">
{{ comment.content }}
</for>
С условными конструкциями, конечно, сложнее, извратиться тоже можно до
<check if="article.status = 'active'">
{{ article.status }}
</check>
С такой структурой можно было бы дополнять некоторые нативные теги, например формы. Размечаем форму как:
<form name="article" class="form">
<label for="title" />
<field name="title" class="form-input" />
<field name="type" class="form-select" />
<submit />
</form>
А программно при парсинге добавятся нужные атрибуты и значения
<form name="article" class="form" method="POST" action="/article/save/">
<input type="hidden" name="_token" value="12345" />
<label for="title">Article title</label>
<input name="title" class="form-input" type="text" placeholder="Enter title..." />
<select name="type" class="form-select">
<option value="blog">Blog</option>
<option value="gallery">Gallery</option>
</select>
<input type="submit" value="Create article" />
</form>