From: William Victor Mote Date: Tue, 22 Apr 2003 03:33:55 +0000 (+0000) Subject: Add
ids. X-Git-Tag: Root_Temp_KnuthStylePageBreaking~1574 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=94c204d2d91d633b2d89a28f869691c1f65e5b73;p=xmlgraphics-fop.git Add
ids. git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@196308 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/documentation/content/xdocs/design/layout.xml b/src/documentation/content/xdocs/design/layout.xml index 0413057b2..abaecf78c 100644 --- a/src/documentation/content/xdocs/design/layout.xml +++ b/src/documentation/content/xdocs/design/layout.xml @@ -27,7 +27,7 @@ Note: it may be possible to start immediately after a block formatting object ha It is also possible to layout all pages in a page sequence after each page sequence has been added from the xml.

The layout process is handled by a set of layout managers. The block level layout managers are used to create the block areas which are added to the region area of a page.

-
+
Layout Managers

The layout managers are set up from the hierarchy of the formatting object tree. A manager represents a hierachy of area producing objects. @@ -42,7 +42,7 @@ It will keep a list of line areas inside block areas. Each line area will contain a list of inline areas that is able to be adjusted if the need arises.

The objects in the area tree that are organised by the manager will mostly contain the information about there layout such as spacing and keeps, this information will be thrown away once the layout for a page is finalised.

-
+
Creating Managers

The managers are created by the page sequence. The top level manager is the Page manager. @@ -51,13 +51,13 @@ This asks the flow to add all managers in this page sequence.

Neutral objects don't represent any areas but are used to contain a block level area and as such these objects will ask the appropriate child to create a layout manager.

Any nested block areas or inline areas may be handled by the layout manager at a later stage.

-
+
Using Managers

Block area layout managers are used to create a block area, other block level managers may ask their child layout managers to create block areas which are then added to the area tree(subset).

A manager is used to add areas to a page until the page is full, then the manages contain all the information necessary to make the decision about page break and spacing. A manager can split an area that it has created will keep a status about what has been added to the current area tree.

-
+
Page Layout

Once the Page layout manager, belonging to the page sequence, is ready then we can start laying out each page. The page sequence will create the current page to put the page data, the next page and if it exists @@ -79,11 +79,11 @@ So if the objects are placed first at optimum then you will need to keep going t

The spacing and keep information is stored so that the area positions and sizes can be adjusted.

-
+
Balancing Page

The page is vertically justified so that it distributes the areas on the page for the best result when considering keeps and spacing.

-
+
Finding Break

First the keeps are checked. The available space on the page may have changed due to the presence of before floats or footnotes. @@ -100,13 +100,13 @@ The lowest keep value may need to be reassessed as each conditional area is remo

The before float and footnote regions are managed so that the separator regions will be present if it contains at least one area.

-
+
Optimising

Once the areas for the page are finalised then the spacing will need to be adjusted. The available height on the page is compared with the min and max spacing. All of the spacing in all the areas on the page is then adjusted by the appropriate percentage value.

-
+
Multi-Column Pages

In the case of multi-column pages the column breaks and eventually the page break must be found in a slightly different way.

The columns need to be layed out completely from first to last but this can only be done after a rough estimate of all the elements on the page in case of before floats or footnotes.

@@ -115,7 +115,7 @@ Then if there are any before floats or footnotes then the availabe space is adju Then each the best break is found for each column starting from the first column. If any before floats or footnotes are removed as a result of the new breaks and optimised spacing then all the columns should still be layed out for the same column height.

-
+
Completing Page

After the region body has been finished the static areas can be layed out. The width of the static area is set and the height is inifinite, that is all block areas should be placed in the area and their visibility is controlled be other factors.

@@ -123,7 +123,7 @@ The width of the static area is set and the height is inifinite, that is all blo

The ordering of the area tree must be adjusted so that the areas are before, start, body, end and after in that order. The body region should be in the order before float, main then footnote.

-
+
Line Areas

Creating a line areas uses a similair concept. Each inline area is placed across the available space until there is no room left. @@ -132,7 +132,7 @@ The line is then split by considering all keeps and spacing.

The line break is at the lowest keep value starting from the end of the line.

Once a line has been layed out for a particular width then that line is fixed for the page (except for unresolved page references).

-
+
Before Floats and Footnotes

The before float region and footnote region are handled by the page layoutmanger. These regions will handle the addition and removal of the separator regions when before floats/footnotes area added and removed.

@@ -142,7 +142,7 @@ The size of these areas is determined by the content. This in turn effects the available size of the main reference area that contains the flow.

A layout manager handles the adding and removing of footnotes/floats, this in turn effects the available space in the main reference area.

-
+
Side Floats

If a float anchor is present in a particular line area then the available space for that line (and other in the block) will be reduced. The side float adds to the height of the block area and this height also depends on the clear value of subsequent blocks. @@ -155,7 +155,7 @@ so that it can adjust the available inline progression dimension for the relevant line areas.

-
+
Unresolved Areas

Once the layout of the page is complete there may be unresolved areas.

Page number citations and links may require following pages to be layed out before they can be resolved. @@ -167,46 +167,46 @@ Once all id's are resolved then the page can be rendered.

When the area is resolved then the area is adjusted to its proper size and the line area is re-aligned to accomodate the change.

-
+ -
+
Inline Areas

This is the definition of all inline areas that will exist in the area.

-
+
Fixed Areas

instream-foreign-object, external-graphic, inline-container

These areas have a fixed width and height. They also have a viewport.

-
+
Stretch Areas

leader, inline space

These areas have a fixed height but the width may vary.

-
+
Character Areas

character

This is an simple character that has fixed properties according to the current font. There are implicit keeps with adjacent characters.

-
+
Anchor Areas

float anchor, footnote anchor

This area has no size. It keeps the position for footnotes and floats and has a keep with the associated inline area.

-
+
Unresolved Page Numbers

page-number-citation

A page number area that needs resolving, behaves as a character and has the space of 3 normal characters reserved. The size will adjust when the value is resolved.

-
+
Block Areas

When a block creating element is complete then it is possible to build the block area and add it to the paprent.

@@ -226,21 +226,21 @@ The line areas are created by the LineLayoutManager in which the inline areas fl

Once the layout has been finalised then this information can be discarded.

-
+
Page Areas

Contains inforamtion about all the block areas in the body, before area and footer area.

Has a list of the unresolved page references and a list of id refences that can be used to obtain the area associated with that id.

-
+
Test Cases

Here a few layout possibilities areas explored to determine how the layout process will handle these situations.

-
+
Simple Pages

All blocks (including nested) are placed on the page with minimum spacing and the last block has the minimum number of lines past the page end. The lowest keep value is then found within the body area limits. Then the next equally low keep is found to determine if the spacing will be closer to the optimum values.

-
+
Before Floats/Footnotes

After filling the page with the block areas then the new body height is used to find the best position to break. Before each line area or block area is remove any associated before floats and footnotes are removed. @@ -248,7 +248,7 @@ This will then adjust the available space on the page and may allow for a differ Areas are removed towards the new breaking point until the areas fit on the page. When finding the optimum spacing the removal of before floats and footnotes must also be onsidered.

-
+
Multicolumn

First the page is filled with all columns for the intial page area. Then each column is adjusted for the new height starting from the first column. @@ -256,7 +256,7 @@ The best break for the column is found then the next column is considered, any l Once all the columns are finished then all the columns are adjusted to fit in the same height columns. This handles the situation where before floats or footnotes may have been removed.

-
+
Last Page

If in the process of adding areas to a page it is found that there are no more areas in the flow then this page will need to be changed to the last page (if applicable). The areas are then placed on a last page.