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;