レイアウトエンジン

レイアウトエンジン

レイアウトエンジン

レイアウト層は、スタイルが適用された DOM をジオメトリに変換します:ボックスツリー、そしてサイズと位置を持つフラグメントです。これは、計算されたスタイルの後の段階で、その出力は検査可能なプレーン Python オブジェクトです。


DOM からボックスツリーへ

build_box_tree() は、スタイルが適用されたドキュメントから BoxNode エントリの BoxRoot を生成し、各要素のディスプレイモデルを classify_display() を用いて Display 列挙と照合して分類します。ComputedStyle と EdgeSizes は、ボックスごとのスタイルとボックスモデルの測定値を保持します。

ブロックレイアウト

layout_block_tree() はボックスツリー上でブロックレベルのレイアウトを実行し、解決されたジオメトリを持つ BlockFragment エントリを含む FragmentRoot を生成します。

インラインレイアウト

インラインコンテンツは ShapedRun と InlineTextFragment のピースに形成され、layout_inline_fragments() と flush_inline_run() を介して LineFragment 行に組み立てられます。

Pagination

paginate_fragments() はフラグメント出力を PageFragment ページに分割し、BreakHints を尊重し、PageMarginBoxes がページ余白領域をモデル化し、flush_page() が各ページを確定します。


ヒントとベストプラクティス

  • レイアウトの前に計算されたスタイルを解決します — ボックスツリーはスタイルが適用された要素から派生します。
  • ボックス寸法が正しくないときは EdgeSizes を検査してください;余白とパディングはそこで解決されます。
  • ボックスツリーとフラグメントツリーはメンタルモデルで明確に区別してください:ボックスは構造を記述し、フラグメントは配置されたジオメトリを記述します。

一般的な問題

問題原因修正
空のフラグメント出力レイアウトが未スタイルまたは空のツリーで実行されるまずスタイルシートとコンテンツを添付する
予期しない表示分類要素の計算された display が想定と異なるボックスの classify_display() 結果を確認してください
ページ区切りが不自然な場所にあります改ページヒントが設定されていませんBreakHints を paginate_fragments() に提供してください

FAQ

ボックスとフラグメントの違いは何ですか?

ボックス (BoxNode) はスタイルから派生したレイアウト構造を記述し、フラグメント (BlockFragment, LineFragment) はジオメトリを持つ配置結果です。

エンジンはページネーションに対応していますか?

はい — paginate_fragments() はマージンボックス付きで PageFragment ページを生成します。

テキストランはどこから来るのですか?

インラインコンテンツは ShapedRun オブジェクトに形成され、LineFragment 行に組み立てられます。


API Reference 概要

クラス/メソッド説明
build_box_treeスタイル済みDOMからボックスツリーを導出する
layout_block_treeボックストリー上でブロックレイアウトを実行する
layout_inline_fragmentsインラインコンテンツを行に組み立てる
paginate_fragmentsフラグメントをページに分割する
BoxNodeレイアウト構造内の1つのボックス
PageFragmentレイアウト済みページ1枚

参照

 日本語