Двигун розмітки

Двигун розкладки

Шар розкладки перетворює стилізований DOM у геометрію: дерево коробок, а потім фрагменти з розмірами та позиціями. Це етап після обчислених стилів, і його виходи — прості об’єкти Python, які ви можете дослідити.


Від DOM до дерева коробок

build_box_tree() створює BoxRoot з BoxNode записів зі стилізованого документа, класифікуючи модель відображення кожного елемента за допомогою classify_display() проти перерахування Display. ComputedStyle і EdgeSizes містять стиль для кожної коробки та вимірювання моделі коробки.

Блокова розкладка

layout_block_tree() виконує блоковий рівень розкладки над деревом коробок, створюючи FragmentRoot, що містить BlockFragment записів з визначеною геометрією.

Вбудована розкладка

Вбудований вміст формується у ShapedRun та InlineTextFragment частини, збираються у LineFragment рядки за допомогою layout_inline_fragments() та flush_inline_run().

Pagination

paginate_fragments() розділяє вивід фрагментів на PageFragment сторінки, дотримуючись BreakHints, при цьому PageMarginBoxes моделює області полів сторінки і flush_page() завершує кожну сторінку.


Поради та найкращі практики

  • Обчислені стилі потрібно розв’язати перед розміткою — дерево коробок походить від стилізованих елементів
  • Перевіряйте EdgeSizes, коли розміри коробки виглядають неправильними; поля та внутрішні відступи розв’язуються там
  • Тримайте дерево коробок і дерево фрагментів окремо у вашій ментальній моделі: коробки описують структуру, фрагменти описують розміщену геометрію

Поширені проблеми

ПроблемаПричинаВиправлення
Порожній вивід фрагментаЗапуск розмітки на неоформленому або порожньому деревіСпочатку підключіть таблиці стилів і вміст
Неочікувана класифікація відображенняОбчислене display елемента відрізняється від припущенняПеревірте результат classify_display() для коробки
Розриви сторінок у незвичних місцяхПідказки розриву не встановленіНадайте BreakHints до paginate_fragments()

FAQ

У чому різниця між box і fragment?

Boxes (BoxNode) описують структуру макета, отриману зі стилів; fragments (BlockFragment, LineFragment) — це розміщені результати з геометрією.

Чи підтримує engine пагінацію?

Так — paginate_fragments() створює PageFragment сторінок з margin boxes.

Звідки беруться text runs?

Вбудований контент формується у об’єкти ShapedRun і збирається у рядки LineFragment.


API Reference Підсумок

Клас/МетодОпис
build_box_treeОтримайте дерево коробки зі стилізованого DOM
layout_block_treeЗапустити блокове розташування над деревом блоків
layout_inline_fragmentsОб’єднати вбудований вміст у рядки
paginate_fragmentsРозділити фрагменти на сторінки
BoxNodeОдин блок у структурі розкладки
PageFragmentОдна оформлена сторінка

Дивіться також

 Українська