Token-säilyttävä sisältö-streamin syntaksipuu
HPDFContentStream tarjoaa rajatun, häviöttömän syntaksimallin kohdennettuihin muokkauksiin purettuihin PDF-sisältöstreameihin
Jäsennys ja tarkastelu
HPDFParseContentStreamAST luo THPDFContentStreamAST-objektin, jonka oletusrajat ovat 4 194 304 leksemää ja 256 sisäkkäistä säiliötä; kutsujat, jotka tarvitsevat tiukemmat rajat, voivat kutsua suoraan THPDFContentStreamAST.Create
THPDFContentLexemeKind erottelee välilyönnit, kommentit, numerot, nimet, literaali- ja heksadesimaalimerkkijonot, totuusarvot, nollat, sanat, säiliöerottimet, sisäkuvatiedot ja virheelliset tavut; jokainen syöttötavu kuuluu tarkalleen yhteen THPDFContentLexeme-leksemaan
THPDFContentSyntaxNodeKind erottelee juuren, operaatiot, operandit, taulukot, sanakirjat, proseduurit, sisäkuvat ja virheelliset alueet; jokainen THPDFContentSyntaxNode käyttää parent-, first-child-, last-child- ja next-sibling-indeksejä, joten läpikäynti ei varaa lapsitauluja
Käytä GetLexeme, GetLexemeBytes, GetLexemeText ja GetNode -metodeja yhdessä LexemeCount- ja NodeCount-kenttien kanssa; GetOriginalBytes palauttaa riippumattoman lähdekopion
Valid, ErrorOffset ja ErrorMessage raportoivat virheellisen syötteen säilyttäen tavutarkan sarjallistamisen, ja GetStatistics täyttää THPDFContentASTStatistics-rakenteen lähdekoolla, laskureilla, enimmäissyvyydellä, sisäkuvien määrällä ja virhesolmujen määrällä
Muokkauskerrokset
ReplaceRange käyttää puoliavoimia tavusiirtymiä, kun taas ReplaceLexeme, ReplaceNode, DeleteNode, InsertBeforeNode ja InsertAfterNode johtavat alueet syntaksitietueista
Jokainen THPDFContentEdit kopioidaan lajiteltuun kerrokseen; ristiriitaiset muokkaukset hylätään, vierekkäiset alueet pysyvät voimassa, EditCount raportoi hyväksytyt muokkaukset ja ClearEdits palauttaa no-op-tuloksen
Operaattorivierailijat
HPDFVisitContentStreamOperators kerrostaa viitelaskenta-vierailijat ja Delphi-tapahtumakutsut tämän syntaksipuun päälle, tarjoaa vain-luku-operandinäkymän, valvoo lähde-, operaattori-, leksema-, syvyys- ja korvausbudjetteja ja jäsentää muunnetun tuloksen uudelleen ennen onnistumista
Sarjallistaminen
Serialize luo yhden tulostetavutaulukon ylivuototarkastetun kokolaskennan jälkeen, kun taas WriteToStream kirjoittaa koskemattomat lähdealueet ja korvausalueet suoraan kutsujan omistamaan TStream-objektiin
Ilman muokkauksia kumpikin polku toisintaa lähteen tavu tavulta muuttamatta numeerista kirjoitusasua, merkkijonopakomerkkejä, kommentteja, rivinvaihtoja, erottimia tai sisäkuvakuormia
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;