Cœur portable Linux
Le cœur portable compile le modèle d'objets existant, l'analyseur de simple-object, les helpers d'E/S Direct File, l'interpréteur de content stream, les helpers de valeurs PDF, l'écrivain xref et trailer, le backend Flate et les primitives AES dans des programmes Linux natifs avec Free Pascal
HPDFPlatform fournit de vrais fichiers mappés POSIX et des lectures positionnelles, la création de fichiers temporaires, la synchronisation des workers et des octets aléatoires du système d'exploitation ; l'adaptateur Windows préserve le comportement natif de fichiers et de mapping existant
Périmètre d'acceptation
Tests/Linux/Run-PortableCoreTests.sh construit un exécutable console ELF x86_64 natif, efface les variables d'affichage du bureau, vérifie les dépendances en bibliothèques GUI et exécute huit groupes de régressions avec un timeout
Les contrôles couvrent les échappements de l'analyseur et les références indirectes, les valeurs PDF invariantes et les filtres de flux, les fenêtres mappées et les offsets de fichiers creux au-delà de 4 GiB, les flux de débordement asynchrones compressés, les known answers Flate et AES, les hachages MD5 de fichiers, les IV aléatoires du système d'exploitation, la sérialisation xref classique valide, les nombres de pages et la recherche d'objets Direct File, et les positions de texte et de glyphes du content stream
Le fixture d'une page généré est écrit par l'écrivain existant et relu de manière indépendante via les helpers Direct File partagés ; les contrôles de contenu utilisent à la fois le résolveur d'identité Latin-1 existant et le résolveur de polices de page avec différences d'encodage et largeurs explicites
Données de polices et décodage de texte
HPDFFontData sépare de la GDI le décodage existant des noms de glyphes, des encodages et des CMap sfnt ; le rendu de glyphes embarqués Windows et le décodeur HPDFTextExtraction existant utilisent la même implémentation
THPDFTrueTypeData expose la recherche CMap prise en charge, le mappage inverse glyphe-vers-Unicode et les avances horizontales hmtx pour une image sfnt à police unique
HPDFBaseFontMetrics conserve le fournisseur GDI Windows et utilise Fontconfig avec les polices TrueType installées sous Linux pour les polices standard qui omettent des largeurs explicites ; la substitution dépend des polices installées et des règles Fontconfig
Contrats de plateforme et helpers de polices
THPDFPlatformHandle est un handle natif signé de largeur native et HPDFInvalidFileHandle vaut -1 ; HPDFOpenReadOnlyFile et HPDFCloseFile gèrent les handles de lecture, tandis que HPDFFileSize et HPDFReadFileAt utilisent des positions Int64 et que les appelants doivent gérer les lectures courtes
HPDFMappingGranularity fournit l'alignement d'offset requis ; HPDFCreateReadOnlyMapping renvoie zéro en cas d'échec, HPDFMapReadOnly mappe la plage demandée et HPDFUnmapReadOnly / HPDFCloseMapping libèrent la vue et le mapping
HPDFCreateTemporaryFile crée de manière exclusive un fichier dont le chemin et le nettoyage appartiennent à l'appelant ; HPDFInitializeLock / HPDFDeleteLock gèrent les sections critiques natives
THPDFPlatformEvent est un alias de TEvent ; HPDFCreateEvent, HPDFWaitEvent, HPDFSignalEvent et HPDFResetEvent gèrent la synchronisation, et l'appelant libère les événements après l'arrêt du worker
HPDFSecureRandomBytes remplit le tampon demandé depuis le système d'exploitation ou lève une exception
HPDFGlyphNameToUnicode, HPDFUnicodeToGlyphName, HPDFStdEncGlyphName, HPDFMacExpertEncGlyphName et HPDFBaseEncToUnicode conservent le comportement existant de noms et d'encodages ; HPDFBaseFontFamilyToken supprime les suffixes de sous-ensemble et de style, tandis que HPDFIsStandardTextFont reconnaît les alias Helvetica, Times et Courier
HPDFMeasureBaseFontWidths utilise le fournisseur GDI Windows ou Fontconfig sous Linux et les métriques horizontales sfnt partagées ; THPDFTrueTypeData et THPDFUnicodeByGID fournissent l'API de données de polices partagée
Types Direct File partagés
HPDFDirectFileTypes possède les définitions existantes THPDFKeyType, THPDFProtection, THPDFProtectOptions, THPDFDirectXrefEntry, THPDFDirectObjectSource et THPDFDirectFileState
Cette séparation permet à HPDFDirectFileIO d'utiliser les mêmes records et types de permissions sans importer le composant ni l'implémentation GUI
HPDFDoc conserve des alias et des constantes de valeurs d'enum sous les noms d'origine ; les ordinaux d'enum et les layouts de records sont inchangés
Initialisation des programmes Linux
Les programmes Free Pascal natifs doivent placer cthreads en tête de la liste uses avant d'utiliser des threads de travail ; le test du cœur portable charge aussi cwstring pour fournir le gestionnaire de conversion Unicode
Utilisez FPC 3.2.2 ou plus récent avec ses unités FCL et paszlib, un runtime C, Fontconfig avec des polices TrueType installées, et les outils file, ldd et timeout ; FPC_EXE et HPDF_LINUX_OUTPUT sélectionnent le compilateur et le répertoire de sortie isolé
Migration restante
Ce stade n'expose pas THotPDF sous Linux : le chargement et l'enregistrement de documents arbitraires, la résolution complète des ressources de page, l'édition AcroForm et les apparences, les signatures, le rendu, l'OCR et l'ABI C exigent encore une séparation de plateforme supplémentaire et une acceptation de bout en bout
Consultez Tests/Linux/Readme.en-us.md pour les contrats des adaptateurs de plateforme, la propriété des types Direct File, les limites exactes de régression, le runner de smoke Windows et les stades d'acceptation restants