AST toka sadržaja koji čuva tokene
HPDFContentStream pruža omeđeni model sintakse bez gubitaka za ciljane izmjene dekodiranih tokova sadržaja PDF-a
Raščlamba i pregled
HPDFParseContentStreamAST stvara THPDFContentStreamAST sa zadanim ograničenjima od 4 194 304 leksema i 256 ugniježđenih spremnika; pozivatelji kojima trebaju stroža ograničenja mogu izravno pozvati THPDFContentStreamAST.Create
THPDFContentLexemeKind razlikuje razmake, komentare, brojeve, imena, literalne i heksadecimalne nizove, logičke vrijednosti, null-ove, riječi, graničnike spremnika, podatke ugrađenih slika i neispravne bajtove; svaki ulazni bajt pripada točno jednom THPDFContentLexeme-u
THPDFContentSyntaxNodeKind razlikuje korijen, operacije, operande, nizove, rječnike, procedure, ugrađene slike i neispravna područja; svaki THPDFContentSyntaxNode koristi indekse roditelja, prvog djeteta, zadnjeg djeteta i sljedećeg brata tako da prolazak ne dodjeljuje polja djece
Koristite GetLexeme, GetLexemeBytes, GetLexemeText i GetNode s LexemeCount-om i NodeCount-om; GetOriginalBytes vraća neovisnu kopiju izvora
Valid, ErrorOffset i ErrorMessage izvještavaju o neispravnom ulazu uz zadržavanje serijalizacije točne do bajta, a GetStatistics ispunjava THPDFContentASTStatistics s veličinom izvora, brojanjima, najvećom dubinom, brojem ugrađenih slika i brojem neispravnih čvorova
Uređivački prekrivači
ReplaceRange koristi poluotvorene pomake bajtova, dok ReplaceLexeme, ReplaceNode, DeleteNode, InsertBeforeNode i InsertAfterNode izvode raspone iz zapisa sintakse
Svaki THPDFContentEdit kopira se u sortirani prekrivač; sukobljene izmjene odbijaju se, susjedni rasponi ostaju valjani, EditCount izvještava o prihvaćenim izmjenama, a ClearEdits vraća izlaz bez operacija
Posjetitelji operatora
HPDFVisitContentStreamOperators slojevito dodaje povratne pozive posjetitelja i Delphi događaja s brojanjem referenci preko ovog AST-a, pruža prikaz operanda samo za čitanje, provodi proračune izvora, operatora, leksema, dubine i zamjena te ponovno raščlanjuje transformirani izlaz prije uspjeha
Serijalizacija
Serialize stvara jedno izlazno polje bajtova nakon izračuna veličine uz provjeru prekoračenja, dok WriteToStream zapisuje nedirnute izvorne raspone i raspone zamjena izravno u TStream u vlasništvu pozivatelja
Bez izmjena, obje putanje reproduciraju izvor bajt po bajt bez promjene numeričkog pisanja, izbjegavanja nizova, komentara, završetaka redaka, graničnika ili korisnih tereta ugrađenih slika
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;