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;