Вызов:
HWSPP.py <имя файла.hwp>
Синтаксис файла hwp совпадает с синтаксисом файла hws, дополняя его специальными комментариями, начинающимися на
//#.....
#make_code(tpl)
#save_and_return(data,event[,var])
##tpl_char(open,close)
##code_var(name)
Препроцессором обрабатываются только строки, содержащие специальные комментарии, остальной код выводится в выходной файл без изменений.
Подробнее о каждой команде:
make_code(tpl) - генерирует hws-код по шаблону tpl. Пример шаблона
SomeFunc($X{,$Y{,$Z}},$Q,doit)
Символ $ является признаком начала имени свойства (в том смысле, какое это слово имеет для hws).
Скобки "{" и "}" определяют необязательные аргументы функции - они появятся в коде целевого языка только если все свойства внутри этого блока имеют отличные от дефолтного значения (isndef). ВНИМАНИЕ: запятые желательно втаскивать в блоки "{...}"!
Таким образом, вышеприведённый шаблон создаст следующий код:
fvar(pp_var_0, pp_var_1, pp_var_2, pp_var_3)
fvar(pp_br_0, pp_br_1)
fvar(code)
pp_var_1 = Y
pp_var_0 = X
pp_var_2 = Z
pp_var_3 = Q
if (isndef(Z))
pp_br_1 = ',' && pp_var_3 && ''
else
pp_br_1 = ''
end
if (isndef(Y))
pp_br_0 = ',' && pp_var_2 && '' && pp_br_1 && ''
else
pp_br_0 = ''
end
code = 'SomeFunc(' && pp_var_1 && '' && pp_br_0 && ',' && pp_var_4 && ',doit)'
save_and_return(code, event[, var]) - генерирует код вызова события event с данными code. Если указан параметр var, то также генерируется код для нижней точки var, поэтому вызов save_and_return должен завершать функцию в hws-коде
tpl_char(open,close) - позволяет задать свои символы-ограничители блоков необязательных аргументов (вместо { и }). Первый аргумент - символ начала блока, второй - конца. Символы начала и конца должны быть различны!
code_var(name) - позволяет задать имя переменной, используемой для хранения результата работы make_code (по умолчанию - code).
В архиве сам скрипт плюс пример hwp-скрипта