Alterator/shell
alterator-sh-functions
Простейший бэкенд
Простейший бэкенд выглядит следующим образом:
#!/bin/sh
alterator_api_version=1
po_domain="alterator-text"
. alterator-sh-functions
on_message()
{
case "$in_action" in
read) write_string_param name value ;;
esac
}
message_loop on_message
Глобальные переменные
переменная | значение по умолчанию | описание |
---|---|---|
alterator_api_version | 0 | Версия API. переменная должна обязательно определяться во всех новых модулях. Текущее значение версии '1'. |
po_domain | alterator-<бэкенд> | Словарь используемый для перевода сообщений на родной язык пользователя |
Ввод
message_loop
Синтаксис: message_loop [<обработчик>]
Основной цикл работы бэкенда, on_message — вызывается при каждом новом запросе к бэкенду. Входные параметры передаются через глобальные переменные с префиксом in_ (например $in_action).
Результатом работы функции on_message является печать выходных параметров постредством функций с префиксом write_.
Имена входных и выходных параметров могут состоять только из латинских букв, цифр и символа подчёркивания. Использование других символов недопустимо.
Вывод
_
Синтаксис: _ <строка> [<домен>]
Перевод строки на язык пользователя
Перевод осуществляется в зависимости от значения входного параметра language. Если домен не указан, используется значение глобальной переменной po_domain.
write_error
Синтаксис: write_error <сообщение>
Вывод сообщения об ошибке.
После вывода ошибки обязательно должна стоять инструкция для выхода из функции.
write_string_param
Синтаксис: write_string_param <имя> <значение>
Вывод значения параметра строкового типа.
write_bool_param
Синтаксис: write_bool_param <имя> <значение>
Вывод значения параметра логического типа. <значения>, отличные от yes, no, on, true или 1 (в любом регистре), считаются ложными.
write_enum_item
Синтаксис: write_enum_item <ключ> [<метка>]
Вывод элемента списка значений для параметра перечислимого типа.
Вывод списка значений перечислимого типа обрабатывается отдельно. Недопустимо смешивать вывод значений перечислимого типа и других.
<ключ> — имя, один из вариантов текущего значения перечислимого типа которым пользуется бэкенд. Вывод текущего значения осуществляется в отдельной секции при помощи функции write_string_param.
<метка> — описание значения, выводимое пользователю. Если метка не задана, то она считается равной <ключу>.
Пример:
list) write_enum_item "a" "variant a"
write_enum_item "b" "variant b"
;;
read)
write_string_param "enum" "a" ;; #вывод текущего значения параметра по имени enum
write)
... $in_enum ... ;; # обработка варианта выбранного пользователем, переменная равна или a или b
write_enum
Синтаксис: write_enum
Трансляция потока в вывод списка значений для параметра перечислимого типа.
Работает аналогично write_enum_item, но позволяет вывести сразу несколько вариантов. Cписок принимается на стандартный ввод в виде строк вида: <ключ><разделитель><метка> Вид <разделителя> управляется при помощи переменной среды IFS.
write_table_item
Синтаксис: write_table_item <параметр1> <значение1> <параметр2> <значение2> …
Вывод информации для строки таблицы.
Так же как и вывод информации для enum, вывод строк таблицы выполняется отдельно (в действии list).
Отладка
write_debug
Синтаксис: write_debug <формат> [<параметры...>]
Если выставленая переменная среды ALTERATOR_DEBUG, то печатается отладочная информация, иначе никакого вывода не происходит. Параметры такие же как и у функции printf.
Переменная ALTERATOR_DEBUG автоматически выставляется при запуске любого интерфейса alterator в отладочном режиме.
Отличия в версиях API
Версия 0 полностью совместима с библиотекой /usr/share/alterator/build/backend3.sh
Начиная с версии 1, стандартный вывод перенаправлен в стандартный вывод ошибок. Для ответа из бэкенда следует пользоваться только стандартными функциями серии write_. Поскольку начиная с этой версии библиотека сама формирует ответ, то нет необходимости в выводе символов '(' и ')', а также наличия "обработчика по умолчанию". Версию необходимо указывать до включения файла с библиотекой.
Было:
. alterator-sh-functions.
on_message()
{
case "$in_action"
a)
echo '('
printf 'a "%s"' "b"
echo ')'
;;
*)
echo '#f'
;;
esac
}
message_loop
Стало:
alterator_api_version=1
. alterator-sh-functions
on_message()
{
case "$in_action"
a)
write_string_param a b
;;
esac
}
message_loop