AST de flux de contenu préservant les tokens
HPDFContentStream fournit un modèle syntaxique borné et sans perte pour des éditions ciblées des flux de contenu PDF décodés
Parsing et inspection
HPDFParseContentStreamAST crée un THPDFContentStreamAST avec des limites par défaut de 4 194 304 lexèmes et 256 conteneurs imbriqués ; les appelants qui ont besoin de limites plus serrées peuvent appeler THPDFContentStreamAST.Create directement
THPDFContentLexemeKind distingue les espaces, les commentaires, les nombres, les noms, les chaînes littérales et hexadécimales, les booléens, les nulls, les mots, les délimiteurs de conteneurs, les données d’images inline et les octets malformés ; chaque octet d’entrée appartient à exactement un THPDFContentLexeme
THPDFContentSyntaxNodeKind distingue la racine, les opérations, les opérandes, les tableaux, les dictionnaires, les procédures, les images inline et les régions malformées ; chaque THPDFContentSyntaxNode utilise des index parent, premier enfant, dernier enfant et frère suivant, si bien que la traversée n’alloue pas de tableaux d’enfants
Utilisez GetLexeme, GetLexemeBytes, GetLexemeText et GetNode avec LexemeCount et NodeCount ; GetOriginalBytes renvoie une copie indépendante de la source
Valid, ErrorOffset et ErrorMessage signalent les entrées malformées tout en conservant une sérialisation exacte à l’octet près, et GetStatistics remplit THPDFContentASTStatistics avec la taille de la source, les compteurs, la profondeur maximale, le nombre d’images inline et le nombre de nœuds malformés
Overlays d’édition
ReplaceRange utilise des offsets d’octets à bornes semi-ouvertes, tandis que ReplaceLexeme, ReplaceNode, DeleteNode, InsertBeforeNode et InsertAfterNode dérivent les plages des records syntaxiques
Chaque THPDFContentEdit est copié dans un overlay trié ; les éditions en conflit sont rejetées, les plages adjacentes restent valides, EditCount rapporte les éditions acceptées et ClearEdits restaure une sortie sans effet
Visiteurs d’opérateurs
HPDFVisitContentStreamOperators superpose à cet AST des visiteurs à comptage de références et des callbacks d’événements Delphi, fournit une vue en lecture seule des opérandes, applique les budgets de source, d’opérateur, de lexème, de profondeur et de remplacement, et repasse le parsing de la sortie transformée avant de déclarer le succès
Sérialisation
Serialize crée un tableau d’octets de sortie après un calcul de taille avec contrôle de débordement, tandis que WriteToStream écrit directement les plages source intactes et les plages de remplacement dans un TStream appartenu à l’appelant
Sans aucune édition, chaque voie reproduit la source à l’octet près sans changer l’écriture des nombres, les échappements de chaînes, les commentaires, les fins de ligne, les délimiteurs ni les charges utiles des images inline
var
AST: THPDFContentStreamAST;
Output: TBytes;
begin
AST:= HPDFParseContentStreamAST(ContentBytes);
try
if AST.Valid and AST.ReplaceRange(StartOfs, EndOfs, ReplacementBytes) then
AST.Serialize(Output);
finally
AST.Free;
end;
end;