НАЧАЛО >> Форматирование записей >> Нативный форматер ИРБИС 128📄 Скачать в DOCX
Нативный форматер модуля Format выполняет PFT-форматы ИРБИС 64 средствами PHP внутри ИРБИС 128. Основная точка входа - функция Format64.
Форматер нужен там, где системе требуется выполнить существующий PFT-формат ИРБИС 64 без внешнего вызова irbistool.exe: при формировании представлений записей, служебных HTML-фрагментов, результатов поиска и других текстовых блоков, которые строятся по данным записи.
Функция Format64 принимает:
Если текст формата передан напрямую, он используется как исходный PFT. Если текст пустой, форматер загружает формат по имени.
При загрузке по имени Format64 ищет файлы форматов в базе ИРБИС:
apath = 10);Deposit (apath = 11).Если расширение не указано, проверяются варианты .pft, .opt и .fmt. Имя @ раскрывается в формат, заданный параметром PftOpt базы, а при отсутствии такого параметра - в @pftw_h.opt.
Файлы ИРБИС 64 читаются как CP1251 и перед выполнением переводятся в UTF-8.
Выполнение формата проходит несколько этапов:
Скомпилированные инструкции кешируются по тексту формата. При повторном выполнении того же текста форматер переиспользует кеш и выполняет уже готовый набор инструкций.
Контекст хранит текущую базу, запись, стек значений, переменные формата, глобальные данные gbl, режим вывода и состояние повторяющихся групп. Для вложенных форматов используется общий контекст, поэтому переменные, глобальные команды и текущая запись передаются согласованно.
Для защиты от бесконечной рекурсии ограничена глубина вложенных вызовов формата. Также отслеживается загрузка уже загружаемых форматов: если формат снова запрашивает сам себя, повторная загрузка прерывается.
Реализация покрывает основные конструкции PFT-форматов ИРБИС 64:
v, d, n, g, o;MDL, MDU, MHL, MHU, MPL, MPU;if ... then ... else ... fi;while ... do ... endwhile;select ... case ... endsel;ref, val, rsum, ravr, rmin, rmax, s, mfn, tag;&uf/&unifor и набор реализованных UNIFOR-команд;@....Перед выполнением форматер приводит некоторые специальные случаи к совместимому виду, например заменяет обращения вида v***, d***, n***, g***, o*** на поле 920.
Для регрессионной проверки совместимости предусмотрены страницы:
Format/Test64 - пакетное сравнение результатов irbistool.exe format и Format64 по форматам выбранной базы;Format/TestUI - интерактивная проверка одного текста PFT на заданной базе и записи.Format/Test64 может проверять одну базу или все базы из каталога ИРБИС 64, пропускать отдельные проблемные конструкции и при расхождении показывать результат внешнего форматера, результат PHP-реализации, лог xpft_error.log и минимизированный фрагмент формата для отладки.
Нативный форматер является совместимой PHP-реализацией, но не заменяет обязательную регрессионную проверку после изменений. При доработке нужно сравнивать результат с внешним irbistool.exe на реальных форматах и записях, особенно если формат использует редкие UNIFOR-команды, сложные повторяющиеся группы или вложенные форматы.
Служебные страницы проверки предназначены для разработчиков и администраторов. Они требуют доступного irbistool.exe, корректного пути к установленному ИРБИС 64 и тестовых записей в проверяемых базах.