AST de flux de conținut care păstrează token-urile
HPDFContentStream oferă un model de sintaxă fără pierderi și mărginit pentru editări țintite ale fluxurilor de conținut PDF decodate
Parsare și inspectare
HPDFParseContentStreamAST creează un THPDFContentStreamAST cu limite implicite de 4,194,304 lexeme și 256 de containere imbricate; apelanții care au nevoie de limite mai stricte pot apela THPDFContentStreamAST.Create direct
THPDFContentLexemeKind distinge spații albe, comentarii, numere, nume, șiruri literale și hexazecimale, booleeni, null-uri, cuvinte, delimitatori de containere, date de imagini inline și octeți malformați; fiecare octet de intrare aparține exact unui THPDFContentLexeme
THPDFContentSyntaxNodeKind distinge rădăcina, operațiile, operanzii, tablourile, dicționarele, procedurile, imaginile inline și regiunile malformate; fiecare THPDFContentSyntaxNode folosește indexuri de părinte, primul copil, ultimul copil și următorul frate, astfel încât traversarea să nu aloce tablouri de copii
Utilizați GetLexeme, GetLexemeBytes, GetLexemeText și GetNode cu LexemeCount și NodeCount; GetOriginalBytes returnează o copie independentă a sursei
Valid, ErrorOffset și ErrorMessage raportează intrarea malformată păstrând serializarea exactă la octet, iar GetStatistics completează THPDFContentASTStatistics cu dimensiunea sursei, numărători, adâncimea maximă, numărul de imagini inline și numărul de noduri malformate
Editarea suprapunerilor
ReplaceRange folosește decalaje de octeți jumătate-deschise, în timp ce ReplaceLexeme, ReplaceNode, DeleteNode, InsertBeforeNode și InsertAfterNode derivă intervale din înregistrările de sintaxă
Fiecare THPDFContentEdit este copiat într-un strat sortat; editările conflictuale sunt respinse, intervalele adiacente rămân valide, EditCount raportează editările acceptate, iar ClearEdits restaurează ieșirea fără operație
Vizitatori de operatori
HPDFVisitContentStreamOperators suprapune callback-uri de vizitator cu numărare de referințe și evenimente Delphi peste acest AST, oferă o vizualizare read-only a operanzilor, aplică bugete de sursă, operator, lexem, adâncime și înlocuire și reparsează ieșirea transformată înainte de succes
Serialize
Serialize creează un tablou de octeți de ieșire după un calcul de dimensiune verificat la depășire, în timp ce WriteToStream scrie intervalele de sursă neatinse și intervalele de înlocuire direct într-un TStream deținut de apelant
Fără editări, oricare dintre căi reproduce sursa octet cu octet, fără a schimba ortografia numerică, escape-urile de șir, comentariile, sfârșiturile de linie, delimitatorii sau payload-urile de imagini 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;