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