Макропроцессор TEMA

Макропроцессор 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