Нативный форматер ИРБИС 128


НАЧАЛО >> Форматирование записей >> Нативный форматер ИРБИС 128📄 Скачать в DOCX


Нативный форматер модуля Format выполняет PFT-форматы ИРБИС 64 средствами PHP внутри ИРБИС 128. Основная точка входа - функция Format64.

Форматер нужен там, где системе требуется выполнить существующий PFT-формат ИРБИС 64 без внешнего вызова irbistool.exe: при формировании представлений записей, служебных HTML-фрагментов, результатов поиска и других текстовых блоков, которые строятся по данным записи.

1. Вызов Format64

Функция Format64 принимает:

Если текст формата передан напрямую, он используется как исходный PFT. Если текст пустой, форматер загружает формат по имени.

2. Загрузка форматов

При загрузке по имени Format64 ищет файлы форматов в базе ИРБИС:

Если расширение не указано, проверяются варианты .pft, .opt и .fmt. Имя @ раскрывается в формат, заданный параметром PftOpt базы, а при отсутствии такого параметра - в @pftw_h.opt.

Файлы ИРБИС 64 читаются как CP1251 и перед выполнением переводятся в UTF-8.

3. Этапы выполнения

Выполнение формата проходит несколько этапов:

  1. предварительная обработка текста формата;
  2. лексический разбор;
  3. построение AST;
  4. компиляция в инструкции виртуальной машины;
  5. выполнение инструкций в контексте записи.

Скомпилированные инструкции кешируются по тексту формата. При повторном выполнении того же текста форматер переиспользует кеш и выполняет уже готовый набор инструкций.

4. Контекст выполнения

Контекст хранит текущую базу, запись, стек значений, переменные формата, глобальные данные gbl, режим вывода и состояние повторяющихся групп. Для вложенных форматов используется общий контекст, поэтому переменные, глобальные команды и текущая запись передаются согласованно.

Для защиты от бесконечной рекурсии ограничена глубина вложенных вызовов формата. Также отслеживается загрузка уже загружаемых форматов: если формат снова запрашивает сам себя, повторная загрузка прерывается.

5. Поддерживаемые конструкции

Реализация покрывает основные конструкции PFT-форматов ИРБИС 64:

Перед выполнением форматер приводит некоторые специальные случаи к совместимому виду, например заменяет обращения вида v***, d***, n***, g***, o*** на поле 920.

6. Служебные проверки

Для регрессионной проверки совместимости предусмотрены страницы:

Format/Test64 может проверять одну базу или все базы из каталога ИРБИС 64, пропускать отдельные проблемные конструкции и при расхождении показывать результат внешнего форматера, результат PHP-реализации, лог xpft_error.log и минимизированный фрагмент формата для отладки.

7. Ограничения

Нативный форматер является совместимой PHP-реализацией, но не заменяет обязательную регрессионную проверку после изменений. При доработке нужно сравнивать результат с внешним irbistool.exe на реальных форматах и записях, особенно если формат использует редкие UNIFOR-команды, сложные повторяющиеся группы или вложенные форматы.

Служебные страницы проверки предназначены для разработчиков и администраторов. Они требуют доступного irbistool.exe, корректного пути к установленному ИРБИС 64 и тестовых записей в проверяемых базах.