1
1
mirror of https://github.com/Kozea/WeasyPrint.git synced 2024-10-05 08:27:22 +03:00
WeasyPrint/weasyprint/layout/__init__.py
2012-05-23 11:30:52 +02:00

54 lines
1.6 KiB
Python

# coding: utf8
"""
weasyprint.layout
-----------------
Transform a "before layout" box tree into an "after layout" tree.
(Surprising, hu?)
Break boxes across lines and pages; determine the size and dimension
of each box fragement.
Boxes in the new tree have *used values* in their ``position_x``,
``position_y``, ``width`` and ``height`` attributes, amongst others.
See http://www.w3.org/TR/CSS21/cascade.html#used-value
:copyright: Copyright 2011-2012 Simon Sapin and contributors, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
from __future__ import division, unicode_literals
from .absolute import absolute_layout
from .pages import make_all_pages, make_margin_boxes
def layout_document(document, root_box):
"""Lay out the whole document.
This includes line breaks, page breaks, absolute size and position for all
boxes.
:param document: a Document object.
:returns: a list of laid out Page objects.
"""
pages = list(make_all_pages(document, root_box))
page_counter = [1]
counter_values = {'page': page_counter, 'pages': [len(pages)]}
for page in pages:
root, = page.children
root_children = list(root.children)
for fixed_box in document.fixed_boxes:
fixed_box_for_page = fixed_box.copy()
absolute_layout(document, fixed_box_for_page, page)
root_children.append(fixed_box_for_page)
root = root.copy_with_children(root_children)
page.children = (root,) + tuple(
make_margin_boxes(document, page, counter_values))
yield page
page_counter[0] += 1