2009-06-24

SciTE и шаблоны mako (mako templates) для Python

Несмотря на то, какой гибкий редактор этот SciTE, я обнаружил в нем заковыку, с которой боролся пару дней. Дело в том, что когда используешь его для создания шаблонов на движке mako (используется во фреймворках типа Pylons и сам по себе), то всё после тега типа <%include>, <%def> и т.п. будет подсвечено одним болотным цветом. Редактор считает это началом блока ASP. Цвет видимо подходящий...
Долгие поиски и копания в гугле и файлах .properties были неутешительны. Во-первых, эта проблема не только SciTE (Scintilla), но и других редакторов и IDE, и я нашел только один, который игнорировал эту засаду - обычный gEdit. Во-вторых, несмотря на гибкость, обработчик лексеров все-же изменить правкой конфигов нельзя, это вшито в программу, и придется очень глубоко вникать, изменять, пересобирать...


Вот простой путь, для тех, кто хочет использовать SciTE и при этом видеть нормальную подсветку синтаксиса: после каждого тега mako добавляйте конструкцию:
<!--%>-->
Она скажет редактору, что блок ASP закончен, и можно продолжать обрабатывать HTML код. При этом, из-за html-комментариев, закрывающий тег на странице виден не будет.


Второй вариант - более глобальный поначалу, но зато намного упрощающий жизнь потом. Я ковыряю Pylons, поэтому покажу, как это делается там:
В файле /config/environment.py вносим дополнительно:

def load_environment(global_conf, app_conf):
.......... содержимое функции ..........
tmpl_options['mako.preprocessor']=mako_replase_tag_to_my
def mako_replase_tag_to_my(s):
return s.replace('<mako:','<%').replace('</mako:','</%')

После этого в шаблонах вместо <% пишем <mako:, а вместо </% пишем </mako:
Уф. Ну и намучился я с этим. Но Слава Богу!

Комментариев нет: