Портативное ядро 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, рисует в памяти и после перезагрузки и явно отклоняет неподдерживаемые политики полей или шейпинга