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;