Портативне ядро 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