Макропроцессор TEMA обрабатывает заданные шаблоны текстовых файлов и заменяет найденные в них инструкции на результаты их выполнения.
Особенности:
Формат инструкций
<%список_функций{:|\|`}данные%>
где
список_функций
- список имен функций, разделенных
пробелами. Может быть пустым.
данные
- данные, передаваемые функции.
Формат данных
[список_аргументов][текст]
где
список_аргументов
- список аргументов функции, разделенных пробелами.
Может быть пустым.
текст
- текст, передаваемый функции без разбиения на аргументы.
Может быть пустым. Количество аргументов, после которого следует
текст, зависит от функции.
Разделитель между списком функций и данными определяет, как должны обрабатываться данные функции:
:
- рекурсивная обработка,
\
или `
- передать без обработки.
Если в списке функций задано две и более функции, они выполняются, начиная с последней, так что каждая функция получает в качестве данных результат выполнения следующей функции.
Каждая функция имеет код возврата - целое число. Код возврата инструкции - код возврата первой в списке функции. Код возврата, получаемый при обработке текста - сумма кодов возврата обработанных инструкций (как правило, смысл этого значения - количество инструкций, замененных на непустой текст).
Кроме скобок '<', '>', можно использовать скобки '[', ']'.
set
Аргументы: | имя |
Текст: | значение |
Действие: | Устанавливает значение переменной имя. |
Результат: | имя |
Код возврата: | 1 |
define
Аргументы: | имя |
Текст: | шаблон |
Действие: | Определяет новую функцию имя, при
вызове которой обрабатывается шаблон. При обработке доступны
функции nextarg для получения очередного аргумента
вызываемой функции и data для получения текста. |
Результат: | имя |
Код возврата: | 1 |
load
Аргументы: | имя имя_класса |
Действие: | Определяет новую функцию имя. Реализация функции определена
Java-классом имя_класса, наследующим класс
kryshen.tema.Function . |
Результат: | имя |
Код возврата: | 1 |
prepare
Аргументы: | имя |
Текст: | запрос |
Действие: | Подготавливает SQL-запрос запрос для выполнения, записывает подготовленный запрос в переменную имя. |
Результат: | имя |
Код возврата: | 1 |
query
Аргументы: | имя_запроса шаблон парам1 ... парамN |
Действие: | Выполняет запрос с параметрами, подготовленный с помощью функции
prepare. Значения параметров подставляются в запрос вместо символа
'?'. Значения полей ответа доступны с помощью функции db ,
как переменные шаблона шаблон. При обработки шаблона также
определяется переменная number , содержащая номер текущей
строки ответа. |
Результат: | результат обработки шаблона шаблон для каждой строки ответа. |
Код возврата: | Количество полученных строк ответа. |
optional
Текст: | данные |
Результат: | данные, если при обработке данных был получен код возврата отличный от 0, иначе - пустая строка. |
Код возврата: | 1, если результат - пустая строка, 0 - иначе. |
image
Аргументы: | исх_файл кон_файл формат [макс_ширина [макс_высота]] |
Действие: | Загружает изображение из файла исх_файл (путь определяется относительно конфигурационного параметра "resource_base") и преобразует его в указанный формат, сохраняя результат в кон_файл. Если заданы максимальная высота и ширина, большие изображения будут уменьшены. |
Результат: | кон_файл при успешном выполнении, пустая строка - иначе. |
Код возврата: | 1 при успешном выполнении, 0 - иначе. |
copy
Аргументы: | исх_файл кон_файл |
Действие: | Копирует файл исх_файл в файл кон_файл (путь исх_файл определяется относительно конфигурационного параметра "resource_base"). |
Результат: | кон_файл при успешном выполнении, пустая строка - иначе. |
Код возврата: | 1 при успешном выполнении, 0 - иначе. |
write
Аргументы: | имя_файла |
Текст: | данные |
Действие: | Записывает данные в файл исх_файл. |
Результат: | кон_файл при успешном выполнении, пустая строка - иначе. |
Код возврата: | 1 при успешном выполнении, 0 - иначе. |
read
Текст: | имя_файла |
Действие: | Читает файл имя_файла. |
Результат: | прочитанные данные при успешном выполнении, пустая строка - иначе. |
Код возврата: | 1 при успешном выполнении, 0 - иначе. |
include
Текст: | имя_файла |
Действие: | включает шаблон из файла имя_файла. |
Результат: | результат обработки шаблона. |
Код возврата: | код возврата, полученный при обработке шаблона. |
!
Текст: | данные |
Действие: | нет. |
Результат: | нет. |
Код возврата: | код возврата, полученный при обработке текста данных. |
replace
Аргументы: | стр1 стр2 |
Текст: | данные |
Результат: | данные, с замененными вхождениями подстроки стр1 на стр2. |
Код возврата: | код возврата, полученный при обработке текста данных. |
xml_escape
Текст: | данные |
Результат: | текст данные, в котором символы '&', '<', '>', '`', '\' заменены на соответствующие сущности XML. |
Код возврата: | код возврата, полученный при обработке текста данных. |
xml_cdata
Текст: | данные |
Результат: | данные в виде блока XML CDATA. |
Код возврата: | код возврата, полученный при обработке текста данных. |
Макропроцессор TEMA расширяем: возможно добавление в систему новых функций, реализованных в виде классов на языке Java.
java -jar tema.jar [опции]
Опции:
-d[emo] | Демонстрационный режим |
-v[ersion] | Вывод версии |
-h[help] -u[sage] | Вывод справки |
При запуске читается файл "tema.properties" из текущего каталога.
Пример файла "tema.properties":
# Настройка источника данных # resource : jdbc:odbc:database # driver : sun.jdbc.odbc.JdbcOdbcDriver # Базовый каталог ресурсов # resource_base : . # Шаблон, с которого начинается обработка main_template : main.template # Кодировки файлов # input_encoding : UTF-8 # output_encoding : UTF-8 # Кэширование шаблонов # cache_read : true # Вывод результата разбора шаблона main.template в stderr # output : stderr # Вывод сообщений об ошибках в файл # log : dbreader.log