Портативное ядро Linux
Портативное ядро компилирует существующую объектную модель, парсер simple-object, хелперы Direct File I/O, интерпретатор content-stream, хелперы значений PDF, писатель xref и trailer, бэкенд Flate и примитивы AES в нативные программы Linux с помощью Free Pascal
HPDFPlatform предоставляет настоящие POSIX-отображаемые файлы и позиционные чтения, создание временных файлов, синхронизацию воркеров и случайные байты операционной системы; адаптер Windows сохраняет существующее нативное поведение файлов и отображения
Границы приёмки
Tests/Linux/Run-PortableCoreTests.sh собирает нативный консольный исполняемый файл x86_64 ELF, очищает переменные десктопного дисплея, проверяет зависимости от GUI-библиотек и прогоняет восемь групп регрессий с таймаутом
Проверки покрывают escape-последовательности парсера и косвенные ссылки, инвариантные значения PDF и потоковые фильтры, отображаемые окна и разреженные файлы со смещениями выше 4 GiB, сжатые асинхронные spill-потоки, контрольные ответы Flate и AES, хэши файлов MD5, случайные IV операционной системы, корректную сериализацию классического xref, счётчики страниц и поиск объектов Direct File, а также текст и позиции глифов content-stream
Сгенерированная одностраничная фикстура записывается существующим писателем и независимо читается через общие хелперы Direct File; проверки содержимого используют и существующий резолвер идентичности Latin-1, и резолвер шрифтов страницы с отличиями кодировок и явными ширинами
Данные шрифтов и декодирование текста
HPDFFontData отделяет существующее декодирование имён глифов, кодировок и sfnt CMap от GDI; нативный рендеринг встроенных глифов Windows и существующий декодер HPDFTextExtraction используют одну реализацию
THPDFTrueTypeData открывает поддерживаемый поиск по CMap, обратное отображение глиф→Unicode и горизонтальные продвижения hmtx для sfnt-образа с одним шрифтом
HPDFBaseFontMetrics сохраняет провайдер Windows GDI и на Linux использует Fontconfig с установленными шрифтами TrueType для стандартных шрифтов без явных ширин; подстановка зависит от установленных шрифтов и правил Fontconfig
Контракты платформенных и шрифтовых хелперов
THPDFPlatformHandle — знаковый хэндл нативной ширины, а HPDFInvalidFileHandle равен -1; HPDFOpenReadOnlyFile и HPDFCloseFile управляют хэндлами чтения, HPDFFileSize и HPDFReadFileAt используют позиции Int64, и вызывающий код обязан обрабатывать неполные чтения
HPDFMappingGranularity даёт требуемое выравнивание смещений; HPDFCreateReadOnlyMapping возвращает ноль при сбое, HPDFMapReadOnly отображает запрошенный диапазон, а HPDFUnmapReadOnly / HPDFCloseMapping освобождают представление и отображение
HPDFCreateTemporaryFile монопольно создаёт файл, чьи путь и очистка принадлежат вызывающему коду; HPDFInitializeLock / HPDFDeleteLock управляют нативными критическими секциями
THPDFPlatformEvent — псевдоним TEvent; HPDFCreateEvent, HPDFWaitEvent, HPDFSignalEvent и HPDFResetEvent управляют синхронизацией, а вызывающий код освобождает события после остановки воркера
HPDFSecureRandomBytes заполняет запрошенный буфер из операционной системы или бросает исключение
HPDFGlyphNameToUnicode, HPDFUnicodeToGlyphName, HPDFStdEncGlyphName, HPDFMacExpertEncGlyphName и HPDFBaseEncToUnicode сохраняют существующее поведение имён и кодировок; HPDFBaseFontFamilyToken убирает суффиксы подмножества и стиля, а HPDFIsStandardTextFont распознаёт псевдонимы Helvetica, Times и Courier
HPDFMeasureBaseFontWidths использует провайдер Windows GDI или Linux Fontconfig и общие горизонтальные метрики sfnt; THPDFTrueTypeData и THPDFUnicodeByGID дают общий API шрифтовых данных
Общие типы Direct File
HPDFDirectFileTypes владеет существующими определениями THPDFKeyType, THPDFProtection, THPDFProtectOptions, THPDFDirectXrefEntry, THPDFDirectObjectSource и THPDFDirectFileState
Это разделение позволяет HPDFDirectFileIO использовать те же записи и типы разрешений без импорта компонента и GUI-реализации
HPDFDoc сохраняет псевдонимы и константы значений enum под исходными именами; ординалы enum и раскладки записей не меняются
Инициализация программ Linux
Нативные программы Free Pascal должны ставить cthreads первым в списке uses до использования воркер-потоков; тест портативного ядра также загружает cwstring, чтобы получить менеджер преобразований Unicode
Используйте FPC 3.2.2 или новее с его юнитами FCL и paszlib, рантайм C, Fontconfig с установленными шрифтами TrueType и утилиты file, ldd и timeout; FPC_EXE и HPDF_LINUX_OUTPUT выбирают компилятор и изолированный каталог вывода
Оставшаяся миграция
Этот этап не открывает THotPDF на Linux: произвольные загрузка и сохранение документов, полное разрешение ресурсов страниц, редактирование AcroForm и внешних видов, подписи, рендеринг, OCR и C ABI всё ещё требуют дальнейшего платформенного разделения и сквозной приёмки
Контракты платформенного адаптера, владение типами Direct File, точные границы регрессии, Windows smoke runner и оставшиеся этапы приёмки описаны в Tests/Linux/Readme.en-us.md
Headless-документ теперь принимает ограниченный профиль Standard AES-256 R5/R6, описанный в THPDFHeadlessAES256Security, включая права owner/user, сжатые объекты и зашифрованные инкрементальные сохранения форм
См. нативный Cairo-рендеринг и атомарную публикацию нативных подписей для зависимостей рантайма, поддерживаемого содержимого, бюджетов, разрешений, идентичности источника и контрактов вывода
Генерация внешних видов форм Unicode сохраняет исходные ревизии и безопасность AES, рисует в памяти и после перезагрузки и явно отклоняет неподдерживаемые политики полей или шейпинга