AST Aliran-Konten yang Mempertahankan Token

HPDFContentStream menyediakan model sintaks lossless terbatas untuk suntingan tertarget pada aliran konten PDF yang didekode

Parsing dan inspeksi

HPDFParseContentStreamAST membuat THPDFContentStreamAST dengan batas default 4.194.304 leksem dan 256 kontainer bersarang; penelepon yang memerlukan batas lebih ketat dapat memanggil THPDFContentStreamAST.Create secara langsung

THPDFContentLexemeKind membedakan spasi, komentar, angka, nama, string literal dan heksadesimal, boolean, null, kata, pembatas kontainer, data gambar-inline, dan byte malformed; setiap byte masukan milik tepat satu THPDFContentLexeme

THPDFContentSyntaxNodeKind membedakan root, operasi, operan, larik, kamus, prosedur, gambar inline, dan wilayah malformed; setiap THPDFContentSyntaxNode menggunakan indeks induk, anak-pertama, anak-terakhir, dan saudara-berikutnya sehingga traversal tidak mengalokasikan larik anak

Gunakan GetLexeme, GetLexemeBytes, GetLexemeText, dan GetNode dengan LexemeCount dan NodeCount; GetOriginalBytes mengembalikan salinan sumber yang independen

Valid, ErrorOffset, dan ErrorMessage melaporkan masukan malformed sambil mempertahankan serialisasi tepat-byte, dan GetStatistics mengisi THPDFContentASTStatistics dengan ukuran sumber, jumlah, kedalaman maksimum, jumlah gambar-inline, dan jumlah node malformed

Overlay suntingan

ReplaceRange menggunakan offset byte setengah-terbuka, sementara ReplaceLexeme, ReplaceNode, DeleteNode, InsertBeforeNode, dan InsertAfterNode menurunkan rentang dari rekaman sintaks

Setiap THPDFContentEdit disalin ke dalam overlay yang diurutkan; suntingan yang bertentangan ditolak, rentang yang berdekatan tetap valid, EditCount melaporkan suntingan yang diterima, dan ClearEdits mengembalikan keluaran no-op

Visitor operator

HPDFVisitContentStreamOperators melapisi callback visitor berhitung-referensi dan event Delphi di atas AST ini, menyediakan tampilan operan hanya-baca, menegakkan anggaran sumber, operator, leksem, kedalaman, dan penggantian, serta men-parse ulang keluaran yang ditransformasi sebelum sukses

Serialisasi

Serialize membuat satu larik byte keluaran setelah perhitungan ukuran yang diperiksa-overflow, sementara WriteToStream menulis rentang sumber yang tak tersentuh dan rentang penggantian langsung ke TStream milik penelepon

Tanpa suntingan, kedua jalur mereproduksi sumber byte per byte tanpa mengubah ejaan numerik, escape string, komentar, akhir baris, pembatas, atau muatan gambar-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;