GDL: настраиваем окружение — II. Сниппеты и компиляция

3 сентября 2014 | версия для печати

Продолжение предыдущей статьи о настройке окружения GDL.

В этот раз хотелось бы обратить внимание на сниппеты и автоматический процесс сборки gdl-объекта непосредственно из xml-файла в том же Sublime Text, который понемногу превращается в небольшую специализированную IDEшку для разработки архикадовских объектов. Сам редактор, независимо от Archicad‘a и подсветка синтаксиса — это уже очень хорошо. Но можно пойти дальше и еще более ускорить и упростить сам процесс, сделав его комфортнее для разработки.

Сниппеты

Сборка сниппета предельно проста: ST -> Tools -> New Snippet... откроет вам шаблон с таким содержанием:

<snippet>
 <content><![CDATA[
Hello, ${1:this} is a ${2:snippet}.
]​]></content>
 <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
 <!-- <tabTrigger>hello</tabTrigger> -->
 <!-- Optional: Set a scope to limit where the snippet will trigger -->
 <!-- <scope>source.python</scope> -->
</snippet>

Это стандартный сублимовский шаблон сниппета, который нам предстоит заточить под команды GDL. Для примера возьмем команду TEXT2:

<snippet>
    <content><![CDATA[text2 ${1:x}, ${2:y}, "${3:expression}"] ]></content>
    <tabTrigger>text2</tabTlgger>
    <scope>source.gdl</scope>
    <description>TEXT2 x, y, expression</description>
</snippet>

Разберем конструкцию сниппета:

content — непосредственно сам контент, который будет вызван сниппетом, заключается во вторых квадратных скобках; перебор переменных заключается в выражениях вида ${1:x}, где число означает порядковый номер, выстраивая последовательность, которая будет реагировать на нажатие таба, переключая переменные для редактирования; x — переменная;

tabTrigger — код (текст, команда), на который будет реагировать сниппет, в данном случае я использую ловеркейсный вид команды TEXT2;

scope — область применения сниппета, т. е., какому синтаксису он подчинен, source.gdl говорит о том, что, в данном случае, сниппеты активны для только для GDL;

description — собственно, описание команды, которая будет отображаться в виде подсказки;

В итоге, получаем такой вид процесса:

Выбор команды
Полученный результат

В целом, достаточно удобная и полезная штука — даже спустя несколько лет, я до сих пор не помню большее количество команд и, особенно, их правильный синтаксис. Подсказки же сниппетов позволяют интуитивно и быстро нащупать необходимые и правильные команды без перебора документации

Небольшая подборка сниппетов для GDL — https://github.com/Archimatika/gdl-sublime/tree/master/snippets.

Руководство по созданию сниппетов — http://habrahabr.ru/post/148324/.

Компиляция

После того, как исходный код написан в xml-файле, его необходимо сконвертировать в родной gdl-объект. Это можно было бы сделать посредством lpxml конвертера, но дольше и не столь удобно. Более изящный вариант — написать build system для сублима, который автоматически скомпилирует исходный код в архикадовский объект. Подробнее о build system можно ознакомиться здесь, я же приведу пример собственного билдера, который создает gdl-файл.

{
"cmd": ["gdl.builder.bat", "C:/Program Files (x86)/GRAPHISOFT/Converter/LP_XMLConverter", "$file", "$file_path", "$file_base_name"],
"working_dir": "$packages"
}

Он состоит из двух частей: из файла GDL.sublime-build, определяющего непосредственно сам билдер и батника gdl.builder.bat, содержащего команды конвертера. В данном случае:

cmd — команда, вызывающая батник, конвертер и передающая глобальные переменные Sublim Text'a — $file, $file_path, $file_base_name, содержащие информацию об исходном файле;

working_dir — директория, содержащая озвученные скрипты, $packages — глобальная переменная, указывающая расположение пакетов редактора;

Сам батник содержит следующее:

@echo off
echo # %DATE% - %TIME% begin to build an object...
%1 xml2libpart -l UTF8 %2 %3/%4.gsm

Где мы вызываем команду конвертера и принимаем указанные ранее переменные %1, %2, %3, %4.

В итоге, если все прошло успешно, получаем небольшой рипорт:

Успешная сборка объекта

Объект был собран и помещен в ту же папку, где находился исходный xml-файл, с тем же именем. Связка сублимовского билдера и cmd команд открывают, по-сути, массу возможностей для гибкой системы «выпечки» и хранения объектов. При желании, можно настроить выгрузку объектов непосредственно в git-репозиторий, но об этом как-нибудь в другой раз.

Ссылки на билдер и батник — https://github.com/Archimatika/gdl-sublime/blob/master/builders/GDL.sublime-build, https://github.com/Archimatika/gdl-sublime/blob/master/builders/gdl.builder.bat.

Игорь Юрасов, bim-специалист
tech.archimatika.com