Портативне ядро Linux

Портативне ядро компілює наявну об'єктну модель, простий парсер об'єктів, хелпери Direct File I/O, інтерпретатор content stream, хелпери значень PDF, записувач xref і trailer, бекенд Flate та примітиви AES у нативні програми Linux за допомогою Free Pascal

HPDFPlatform надає справжні POSIX-файли з відображенням у пам'ять і позиційні читання, створення тимчасових файлів, синхронізацію worker'ів та випадкові байти операційної системи; адаптер Windows зберігає наявну нативну поведінку файлів і відображення

Охоплення приймання

Tests/Linux/Run-PortableCoreTests.sh збирає нативний консольний виконуваний файл x86_64 ELF, очищає змінні робочого столу, перевіряє залежності від GUI-бібліотек і запускає вісім груп регресій із тайм-аутом

Перевірки охоплюють escape-послідовності парсера та непрямі посилання, інваріантні значення PDF і потокові фільтри, відображені вікна та зсуви розріджених файлів понад 4 ГіБ, стиснуті асинхронні 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 і використовує Fontconfig зі встановленими шрифтами TrueType на Linux для стандартних шрифтів без явних ширин; підміна залежить від установлених шрифтів і правил Fontconfig

Контракти платформних і шрифтових хелперів

THPDFPlatformHandle — знаковий дескриптор нативної ширини, а HPDFInvalidFileHandle дорівнює -1; HPDFOpenReadOnlyFile і HPDFCloseFile керують дескрипторами читання, тоді як HPDFFileSize і HPDFReadFileAt використовують позиції Int64, і викликачі мають обробляти неповні читання

HPDFMappingGranularity надає потрібне вирівнювання зсуву; HPDFCreateReadOnlyMapping повертає нуль при збої, HPDFMapReadOnly відображає запитаний діапазон, а HPDFUnmapReadOnly / HPDFCloseMapping вивільняють подання та відображення

HPDFCreateTemporaryFile монопольно створює файл, шлях і прибирання якого належать викликачу; HPDFInitializeLock / HPDFDeleteLock керують нативними critical section

THPDFPlatformEvent є псевдонімом TEvent; HPDFCreateEvent, HPDFWaitEvent, HPDFSignalEvent і HPDFResetEvent керують синхронізацією, а викликач звільняє події після зупинки worker'а

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 перед використанням worker-потоків; тест портативного ядра також завантажує 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