トークン保存コンテンツストリーム AST

HPDFContentStream は、デコード済み PDF コンテンツストリームへのターゲット編集のための境界付きロスレス構文モデルを提供します

解析と検査

HPDFParseContentStreamAST は、デフォルトの制限 4,194,304 レキシームと 256 のネストコンテナを持つ THPDFContentStreamAST を作成します。より厳しい制限が必要な呼び出し側は、THPDFContentStreamAST.Create を直接呼び出せます

THPDFContentLexemeKind は、空白、コメント、数値、名前、リテラルと 16 進文字列、ブール値、null、単語、コンテナ区切り文字、インライン画像データ、不正バイトを区別します。すべての入力バイトは正確に 1 つの THPDFContentLexeme に属します

THPDFContentSyntaxNodeKind は、ルート、操作、オペランド、配列、ディクショナリ、プロシージャ、インライン画像、不正領域を区別します。各 THPDFContentSyntaxNode は、親、最初の子、最後の子、次の兄弟のインデックスを使用するため、走査は子配列を割り当てません

GetLexeme、GetLexemeBytes、GetLexemeText、GetNode を LexemeCount と NodeCount とともに使用してください。GetOriginalBytes は独立したソースコピーを返します

Valid、ErrorOffset、ErrorMessage は、バイト正確シリアライゼーションを保持しながら不正入力を報告し、GetStatistics はソースサイズ、カウント、最大深度、インライン画像数、不正ノード数で THPDFContentASTStatistics を埋めます

編集オーバーレイ

ReplaceRange は半開バイトオフセットを使用し、ReplaceLexeme、ReplaceNode、DeleteNode、InsertBeforeNode、InsertAfterNode は構文レコードから範囲を導出します

各 THPDFContentEdit はソート済みオーバーレイにコピーされます。競合する編集は拒否され、隣接する範囲は有効なままであり、EditCount は受け入れられた編集を報告し、ClearEdits はノーオペレーション出力を復元します

演算子ビジター

HPDFVisitContentStreamOperators は、この AST 上に参照カウントビジターと Delphi イベントコールバックを重ね、読み取り専用オペランドビューを提供し、ソース、演算子、レキシーム、深度、置換予算を適用し、成功前に変換された出力を再解析します

シリアライズ

Serialize は、オーバーフローチェック済みサイズ計算の後に 1 つの出力バイト配列を作成し、WriteToStream は触れられていないソーススパンと置換スパンを呼び出し側所有の TStream に直接書き込みます

編集がない場合、どちらのパスも、数値の綴り、文字列エスケープ、コメント、行末、区切り文字、インライン画像ペイロードを変更せずに、ソースをバイト単位で再現します

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;