Lay-outengine
Lay-outengine
De lay-outlaag zet een gestylede DOM om in geometrie: een boxboom, daarna fragmenten met afmetingen en posities. Het is de fase na berekende stijlen, en de uitvoer bestaat uit platte Python-objecten die je kunt inspecteren.
Van DOM naar Boxboom
build_box_tree() produceert een BoxRoot van BoxNode items uit een gestyled document, waarbij elk elementmodel wordt geclassificeerd via classify_display() tegen de Display-enumeratie. ComputedStyle en EdgeSizes dragen de per-box stijl- en boxmodelmetingen.
Bloklay-out
layout_block_tree() voert blokniveau lay-out uit over de boxboom, en produceert een FragmentRoot die BlockFragment items bevat met opgeloste geometrie.
Inline lay-out
Inline-inhoud wordt gevormd tot ShapedRun en InlineTextFragment stukken, samengevoegd tot LineFragment regels via layout_inline_fragments() en flush_inline_run().
Pagination
paginate_fragments() splitst fragmentoutput in PageFragment pagina’s, met inachtneming van BreakHints, waarbij PageMarginBoxes de paginamarge-gebieden modelleert en flush_page() elke pagina afrondt.
Tips en best practices
- Los berekende stijlen op vóór layout — de boxboom wordt afgeleid van gestileerde elementen
- Inspecteer
EdgeSizeswanneer de afmetingen van de box er verkeerd uitzien; marges en opvulling worden daar opgelost - Houd de boxboom en fragmentboom gescheiden in je mentale model: boxen beschrijven structuur, fragmenten beschrijven geplaatste geometrie
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
| Lege fragmentoutput | Layout uitgevoerd op een niet-gestylede of lege boom | Stylesheets en inhoud eerst koppelen |
| Onverwachte weergaveclassificatie | Berekende display van element verschilt van de aanname | Controleer classify_display() resultaat voor de box |
| Pagina-einden op vreemde plaatsen | Break hints niet ingesteld | Lever BreakHints aan paginate_fragments() |
FAQ
Wat is het verschil tussen een box en een fragment?
Boxen (BoxNode) beschrijven de lay-outstructuur afgeleid van stijlen; fragmenten (BlockFragment, LineFragment) zijn de geplaatste resultaten met geometrie.
Ondersteunt de engine paginering?
Ja — paginate_fragments() produceert PageFragment pagina’s met margin boxes.
Waar komen text runs vandaan?
Inline-inhoud wordt gevormd tot ShapedRun-objecten en samengevoegd tot LineFragment-regels.
API Reference Samenvatting
| Klasse/Methode | Beschrijving |
|---|---|
build_box_tree | Leid de boxboom af uit een gestylede DOM |
layout_block_tree | Voer bloklay-out uit over de boxboom |
layout_inline_fragments | Stel inline-inhoud samen tot regels |
paginate_fragments | Splits fragmenten in pagina’s |
BoxNode | Één box in de lay-outstructuur |
PageFragment | Eén opgemaakte pagina |