[Accessibility conventions are described at the bottom of the page]

4. Area and page basics
[> 5.][< 3.4.6][^^^]
4.0 Area and page overview
[> 4.0.1][> 4.1][> 5.][< 4.][^^][^^^]
Understanding areas and pages is critical to writing successful XSL-FO instances
[[1] - the rendering process renders the area tree created by formatting objects
 [1] - to get the desired rendered result, one must know how to position and nest areas of content and set their traits
[[2] - formatting objects are chosen to give the desired layout result
 [2] - the names of formatting objects may be totally irrelevant to the reason they are used in an XSL-FO instance to get the particular areas desired
]]
Area model describes the nature of the areas of content that can be created
[[1] - XSL-FO 1 only defines rectangular areas (some of which may be square)
 [1] - areas of canvas arranged in hierarchical order in area tree (see [Processing model of formatting - Section 3.2.1 Processing model of formatting])
[[2] - child areas arranged inside the parent area's content-rectangle
 [2] - formatting objects may add areas to multiple branches of the hierarchy
 [2] - objects in a given branch of the area tree stack next to each other
][1] - many different rectangles define the formatter's behavior for the area's content
[[2] - area itself is spaced between its siblings and within parent using a transparent spacing specification
 [2] - rectangles of an opaque border around content may be specified
[[3] - with a border thickness described by the differences between respective edges of two rectangles and a pattern with transparent background
][2] - rectangles of transparent perimeter spacing around rendered child content within the inside edge of the border (the padding rectangle)
][1] - the number of rectangles in play and their nuances can be overwhelming
[[2] - it is not necessary to know all the rectangles to get simple good-quality results
 [2] - it is important to be aware of the different rectangles to better understand the interplay of areas and the controls available in XSL-FO properties
]]
[Figure 4.1: The rectangles describing an area
The image shows a set of nested rectangles with the rectangle labeled "Area content" at the center.
The outermost rectangle is a spacing rectangle whose content is transparent, within which is a border rectangle whose content is opaque, except within which is found a padding rectangle whose content is transparent, within which is the area's content.
]
Writing direction and reference orientation govern visual placement of areas on a page
[[1] - these values define the block-progression and inline-progression directions for an area
 [1] - supports natural directions of common writing systems of the world
 [1] - orientation can be overridden to produce special effects in the rendered result
 [1] - values also define the before- and after-sides in the block-progression direction and the start- and end-sides in the inline-progression direction
]
Areas on the page are not mutually exclusive
[[1] - areas can be formatted to overlap other areas in whole or in part
[[2] - transparent backgrounds show other areas behind
][1] - sibling areas in a given branch of the area tree typically do not overlap
 [1] - common formatting problems occur when areas from different branches of the tree occupy the same real estate on the page
[[2] - must plan ahead so the stacking of areas in one branch doesn't interfere with the stacking of areas on other branches
]]
4.0.1 Page geometry
[> 4.0.2][> 4.1][> 5.][< 4.0][^][^^][^^^]
A page is described by the geometry of its size and various regions
[[1] - every page has a <[region-body]> with the initial name xsl-region-body
[[2] - content flowed in this region goes is in the main reference area
][1] - possible incursion into the body by four perimeter regions on the four edges
[[2] - <[region-before]> with the initial name "xsl-region-before"
 [2] - <[region-after]> with the initial name "xsl-region-after"
 [2] - <[region-start]> with the initial name "xsl-region-start"
 [2] - <[region-end]> with the initial name "xsl-region-end"
 [2] - precedence controls which regions occupy the corners of the perimeter
[[3] - default precedence given to <[region-start]> and <[region-end]>
 [3] - overridden only by [precedence]= property on <[region-before]> and <[region-after]>
]][1] - regions are referenced in XSL-FO by using their name
[[2] - regions can be custom-named
]]
[Figure 4.2: Regions of a page
Three pages are shown. The page on the left shows the majority of the page occupied by a solid-lined rectangle representing the main content region of the page and named "xsl-region-body".
The middle and right pages show four perimeter rectangles incurring into main content region. In the middle page the topmost "xsl-region-before" region and the bottommost "xsl-region-after" region each occupy the entire width of the page. The leftmost "xsl-region-start" and the rightmost "xsl-region-end" occupy as much of the page between the topmost and bottommost regions. The middle region is labeled "xsl-region-body".
In the right page, the leftmost "xsl-region-start" and the rightmost "xsl-region-end" occupy the entire height of the page. The topmost "xsl-region-before" region and the bottommost "xsl-region-after" region each occupy as much of the page between the leftmost and rightmost regions.
]
Of note:
[[1] - the middle page shows the start and end regions have precedence for the corners of the page over the before and after regions (the default)
 [1] - the [precedence]= property is used to give precedence individually to the before and after regions when needed
]
Page regions are targets for either paginated flow or static content
[[1] - paginated flow triggers as many pages as needed by the amount of flowed content
[[2] - when a page's region accepting flow overflows, a new page in the page sequence is triggered
 [2] - different regions on separate pages can accept paginated flow (but not on the same page)
 [2] - the flow indicates the name of the target region for the content
][1] - static content for reproduction on every page triggered by pagination
[[2] - the static definition indications the name of the target region for the content
[[3] - only if the new page includes the named region does a given region's static content get rendered
][2] - components of static content may be dynamically populated with the page number and the content of user-defined markers appearing on the page being formatted
]]
The formatting objects in each region create descendant areas in that region's branch in the area tree
[[1] - the sibling areas in each branch stack separately from the sibling areas in other branches
 [1] - without proper body region margins, the perimeter region areas will overlap on top of the body region areas
]
4.0.2 Area and page constructs
[> 4.1][> 5.][< 4.0.1][^][^^][^^^]
The XSL-FO objects covered in this chapter are summarized as follows.
Content-oriented formatting objects:
[[1] - <[wrapper]> ([6.13.4])
[[2] - a neutral construct for specifying inherited properties for descendent constructs
][1] - <[block]> ([6.5.2])
[[2] - the description of canvas content that is distinct from its preceding area content
][1] - <[initial-property-set]> ([6.6.4])
[[2] - an auxiliary construct for specifying properties applied to the first line of the parent
][1] - <[inline]> ([6.6.7])
[[2] - a description of canvas content that is distinct from its preceding content within a line generated in a block
][1] - <[page-number-citation]> ([6.6.11])
[[2] - an inline-level place holder replaced with the page number of the first normal area of the cited formatting object
][1] - [F1.1]<[page-number-citation-last]> ([6.6.12])
[[2] - an inline-level place holder replaced with the page number of the last normal area of a sequence of pages
]]
Page-oriented formatting objects:
[[1] - <[simple-page-master]> ([6.4.13])
[[2] - the specification of a given page's physical geometry
][1] - <[region-body]> ([6.4.14])
[[2] - the definition of the middle area inside any perimeter defined for the page
][1] - <[title]> ([6.4.21])
[[2] - a page sequence's ancillary description not rendered on the page canvas
]]
4.1 Area model details
[> 4.2][< 4.0.2][^^][^^^]
4.1.1 Geometric rendered areas
[> 4.1.2][> 4.2][> 5.][< 4.0.2][^^][^^^]
Result of formatting is the generation of geometric areas for rendering based upon an area model
[[1] - a superset of CSS2 box formatting model
 [1] - includes references to areas by other areas
 [1] - relationships and space adjustment between areas generated for letters, words, lines and blocks
]
Areas arranged hierarchically as a result of interpreting formatting objects
[[1] - see [Processing model of formatting - Section 3.2.1]
 [1] - different branches of the tree collect areas that are related
[[2] - a single XSL-FO object can generate areas for multiple area tree branches
][1] - each has a relative or absolute position described by a spacing constraint
 [1] - each may have content to display
 [1] - each may have different visual or aural presentations than other areas
 [1] - placement of every glyph, shape and image with spacing constraints
]
Not all kinds of areas can be directly specified by the XSL-FO instance
[[1] - e.g.: lines in a block are areas synthesized only by the formatter during the flowing of information
 [1] - objects and properties in the XSL-FO instance can influence the presentation of the synthesized areas
[[2] - e.g. <[initial-property-set]> object influencing the first generated line of a block
[[3] - an empty formatting object that does not generate any areas
][2] - e.g. [line-height]= property governing how much of a block is taken up by each of the lines
]]
A paginated area and static areas (regions) can be defined for each page
[[1] - paginated areas accept content to be flowed and trigger the generation of as many pages as needed to fit the flow of information to be rendered
[[2] - defined as descendants of <[flow]> objects
][1] - static areas are rendered on every page that is generated by pagination
[[2] - defined as descendants of <[static-content]> objects
][1] - a page's geometry need not contain any region that is accepting flow
[[2] - such a page is rendered with only the static content and the formatter moves to the next page geometry in the sequence of pages
]]
A single object can create many areas
[[1] - not all generated areas of a given sequence need be adjacent nor hierarchically related to each other
[[2] - one object can add areas to separate area tree branches
][1] - the name of the formatting object that produces the desired areas are unimportant
[[2] - the objective is to position information on the page and the choice of which formatting object used to create the needed areas is based on the semantics of the formatting object instead of the name of the formatting object
[[3] - e.g. using a <[list-block]> to lay out aligned pairs of paragraphs of different languages even though the essence of the information being formatted isn't a list
]]]
The hierarchical area tree has familial relationships between nodes of the tree
[[1] - child, sibling, parent, descendant, ancestor, root
 [1] - a set of nodes is ordered within the parent
[[2] - only one order of sibling nodes
 [2] - initial, preceding, following, and final relationships
][1] - two traversals of the tree when dealing with child nodes of the parent
[[2] - pre-order traversal orders the parent before the children
[[3] - e.g. determining the "next" area for [keep-with-next]=
 [3] - e.g. determining preference in markers for <[retrieve-marker]>
][2] - post-order traversal orders the parent after the children
[[3] - e.g. determining the "previous" area for [keep-with-previous]=
][2] - neither traversal order changes the order of the children themselves
]]
The root node is not an area
[[1] - all other nodes are rectangular areas of result canvas
 [1] - areas in the tree may be of zero size
[[2] - useful for carrying identification information in the tree without occupying real estate on the page
 [2] - a page with only a zero-sized area is not an empty or blank page and is considered an area present on the page for the purposes of resolving the first and last areas in a reference area
]]
Area tree can have very many areas described
[[1] - even every glyph (character shape) has its own area
 [1] - every area has its own placement direction and spacing constraint
 [1] - no obligation on the formatter to serialize or externalize area tree
]
Most nodes generate a singular area
[[1] - exception for ligatures that have leaf nodes combined to produce a single area
[[2] - e.g. combinations of English letters into a single glyph such as "a" and "e" becoming "æ"
 [2] - e.g. combinations of Arabic characters based on location and sibling characters
]]
The formatter has sufficient information in the finalized areas to effect the rendering
[[1] - missing or conflicting constraints are resolved by the formatter in an implementation-dependent fashion
[[2] - may be constrained by the rendering technology used by the formatter
][1] - page fidelity is an important portability issue
[[2] - two conforming XSL-FO agents need not produce the identical rendering
 [2] - each formatter can create a different area tree based on interpretation of unspecified traits
[[3] - e.g. hyphenation and justification rules
 [3] - e.g. default value for inter-line leading
][2] - the rendering process can create a different result based on unspecified traits
[[3] - e.g. font
]]]
4.1.2 Directions and writing modes
[> 4.1.3][> 4.2][> 5.][< 4.1.1][^][^^][^^^]
Orientations and directions are defined for a reference area
[[1] - every reference area has an orientation with respect the definition of the "top" of the area and its writing direction
 [1] - descendent reference areas can have orientations modified relative to containing reference area
 [1] - descendent areas that are not reference areas cannot have their orientations changed
]
Reference areas are found in many places in the area tree, including:
[[1] - region-reference-area (perimeter regions)
 [1] - main-reference-area (page bodies)
 [1] - before-float-reference-area (before-floats)
 [1] - footnote-reference-area (footnotes)
 [1] - span-reference-area (spanned columns)
 [1] - normal-flow-reference-area (columns)
 [1] - lines in a block
 [1] - <[title]>
 [1] - <[block-container]> and <[inline-container]>
 [1] - <[table]>, <[table-caption]>, and <[table-cell]>
]
Stacking rules govern how adjacent areas created by objects in flow are related along directions
[[1] - all objects are defined as stacking in a particular direction relative to adjacent or other objects
 [1] - some objects are "out of line" in the stacking order
[[2] - position is related to objects other than those that are adjacent
][1] - general rules of thumb with powerful nuances available for specific requirements
]
Conditionality governs how spacing is accommodated at the beginning or termination of reference areas
[[1] - the default conditionality for [space-before]= and [space-after]= is "discard"
[[2] - can be changed explicitly to "retain"
][1] - space that can be discarded is discarded when it appears as the first or last area inside of a reference area
[[2] - accommodates typical need to discard space at the tops of pages and columns when flowing paragraphs with space separations
]]
Various directions govern the relative placement of objects to their siblings
[[1] - inline-progression-direction
[[2] - the stacking of glyph areas and other inline areas within a line
 [2] - the stacking of cells in a table row
 [2] - shift-direction
[[3] - used for subscripts and superscripts rendered in inline areas
 [3] - perpendicular to inline-progression-direction
 [3] - inverse of the initial block-progression-direction
][2] - glyph-direction
[[3] - direction of the top of the glyph
 [3] - initially same as top of reference area
 [3] - can be rotated or inverted clockwise relative to top of reference area
]][1] - block-progression-direction
[[2] - the stacking of lines and blocks relative to other lines and blocks in an area
 [2] - the stacking of rows in a table
]]
Writing-mode-related properties reflect cultural practices of flowing information on a page:
[[1] - e.g. an indent at the start of a line in a left-to-right writing mode is on the opposite side of the page than an indent at the start of a line in a right-to-left writing mode
 [1] - before, after, start, end edges of each writing mode are relative to the reference orientation that defines the top edge of the area
[[2] - using top, bottom, left and right ignores the writing mode and is less portable
]]
[Figure 4.3: Possible writing modes
Three pages are shown, each reflecting the block-progression direction and line-progression direction of different writing modes, the two pages on the left in a portrait orientation and the page on the right in a landscape orientation. Each page has a "T" above the top of the page.
The left page is labeled "lr-tb (lr)", the middle page is labeled "rl-tb (rl)", and the right page is labeled "tb-rl (tb)".
The left page shows three large, wide arrows indicating the block-progression direction from top to bottom, the center one being indented (narrowed and positioned to the right). Each block-progression-direction arrow contains perpendicular narrow arrows pointing from left to right indicating the line-progression direction. The space between the upper block arrow and the indented block is labeled "B" for "Before". The space between the indented block and the lower block is labeled "A" for "After". The space between the left edge of the page and the indented block is labeled "S" for "Start". The space between the indented block and the right edge of the page is labeled "E" for "End".
The middle page shows three large, wide arrows indicating the block-progression direction from top to bottom, the center one being indented (narrowed and positioned to the left). Each block-progression-direction arrow contains perpendicular narrow arrows pointing from right to left indicating the line-progression direction. The space between the upper block arrow and the indented block is labeled "B" for "Before". The space between the indented block and the lower block is labeled "A" for "After". The space between the right edge of the page and the block is labeled "S" for "Start". The space between the indented block and the left edge of the page is labeled "E" for "End".
The right page shows three large, wide arrows indicating the block-progression direction from right to left, the center one being indented (narrowed and positioned to the bottom). Each block-progression-direction arrow contains perpendicular narrow arrows pointing from top to bottom indicating the line-progression direction. The space between the right block arrow and the indented block is labeled "B" for "Before". The space between the indented block and the left block is labeled "A" for "After". The space between the top edge of the page and the block is labeled "S" for "Start". The space between the indented block and the right edge of the page is labeled "E" for "End".
]
Two properties govern progression direction of adjacent areas on the page:
[[1] - [reference-orientation]=
[[2] - defines the direction of the top edge of a reference area relative to containing reference area
 [2] - positive (counter-clockwise) or negative multiples of 90 degrees
][1] - [writing-mode]=
[[2] - defines inline-progression-direction "-" block-progression-direction relative to the top of the reference area
 [2] - lr-tb or lr = left-to-right for inline, top-to-bottom for block
[[3] - as characterized by Western European writing systems
][2] - rl-tb or rl = right-to-left for inline, top-to-bottom for block
[[3] - as characterized by Hebrew and Arabic writing systems
][2] - tb-rl or tb = top-to-bottom for inline, right-to-left for block
[[3] - as characterized by traditional Japanese and Chinese writing systems
]][1] - combination can be used on other objects to define other direction-related traits
[[2] - e.g. placement and orientation of perimeter regions within pages
 [2] - e.g. placement of columns within body region
 [2] - e.g. placement and orientation of rows and columns within tables
 [2] - can be changed within paginated content and static content in a region
[[3] - e.g. by using <[block-container]> objects at the block level
 [3] - e.g. by using <[inline-container]> objects at the inline level
]][1] - can only be specified for reference areas
]
Bi-directional writing is inherently supported by XSL-FO processors:
[[1] - one of the most powerful features of XSL-FO is that the stylesheet writer need not be aware of the writing direction of the characters used in the XML documents being formatted
[[2] - e.g. right-to-left characters can be intermixed with left-to-right characters
][1] - the formatter automatically accommodates bi-directional writing based upon the inherent properties of the Unicode characters in the content
[[2] - makes the job easier for the stylesheet writer in that the directions of the individual characters do not need to be detected and accommodated
][1] - <[bidi-override]> object only used when direction inferred by the Unicode character is not as desired
[[2] - a common misconception is that this must be used to support bi-directionality when, in fact, it is used only when the bi-directionality needs to be embedded or overridden
]]
4.1.3 Margins, spaces and positioning
[> 4.1.4][> 4.2][> 5.][< 4.1.2][^][^^][^^^]
Areas are positioned by specifying the spaces around them
[[1] - areas that are flowed adjacent to each other are separated by their spacing specifications
 [1] - floats and footnotes are positioned out-of-line as defined by the Recommendation
 [1] - only a <[block-container]> can be positioned arbitrarily on the page
[[2] - indicated using [absolute-position]=
[[3] - by a relative distance from its siblings
[[4] - as if it were a simple block ("auto")
][3] - by an absolute distance from an ancestor
[[4] - from the parent area boundaries ("absolute")
 [4] - from the page area boundaries ("fixed")
]][2] - distances from ancestral area edges are specified using [top]=, [bottom]=, [left]=, [right]=
]]
Spaces and non-page margins define the same values, but from different perspectives
[[1] - space-*= specifications are relative to the writing direction
[[2] - [space-before]=, [space-after]=, [space-start]=, [space-end]=
][1] - margin-*= specifications are relative to the reference orientation
[[2] - [margin-top]=, [margin-bottom]=, [margin-left]=, [margin-right]=
]]
Page margins
[[1] - margins of page regions are fixed to the page boundaries and physical orientation
[[2] - [margin-top]=, [margin-bottom]=, [margin-left]=, [margin-right]=
]]
Discarding space
[[1] - a space specification can have a property of being discarded when the area it is associated with is the first or last in a reference-area
]
4.1.4 Length values for widths and spacing
[> 4.1.5][> 4.2][> 5.][< 4.1.3][^][^^][^^^]
Lengths can be specified in both absolute and relative terms:
[[1] - cm - centimeter
 [1] - mm - millimeter
 [1] - in - inch = 2.54cm
 [1] - pc - pica = 12pt = 1/6in
 [1] - pt - point = 1/72in
 [1] - px - pixel = 1 device dot (nominally 1/90" or .28mm)
 [1] - em - current font size (only relative unit of measure)
[[2] - use em-based values for spacing to protect relative appearance from changes in font size (e.g. "2em" is twice the current font size)
][1] - note that there is no "ex" measurement
[[2] - sometimes used in formatting specifications as the relative height of a lower case letter in the current font size
 [2] - this is not a concept easily interpreted in all international character repertoires
 [2] - this is used in XSL-FO in the definition of one of the baselines for those scripts that have an ex value
]]
Lengths have a number of components
[[1] - minimum, maximum and optimum
[[2] - preferred at optimum but no less than minimum nor more than maximum
][1] - conditionality
[[2] - "retain" or "discard" controls whether the space-specification is preserved at the beginning or termination of a reference-area
][1] - precedence
[[2] - "force" or an integer value controls which of the space-specifications is in play after constraint calculation resolution
[[3] - adjacent sibling space-specifications interact
[[4] - sizes and precedence determine rendered amount of space
 [4] - detailed at [Spacing, conditionality and precedence - Section 10.4.1]
]]]]
Some properties can be specified using a percentage
[[1] - when inherited, percentages are relative to their inherited value
[[2] - e.g. font-size="150%"
][1] - when not inherited, percentages are relative to a reference rectangle
[[2] - content-rectangle for XSL-defined properties
 [2] - closest non-line-area content-rectangle for CSS-defined properties
 [2] - exceptions exist for out-of-line constructs and the regions in which they are used (detailed in Recommendation section [7.3])
]]
4.1.5 Area types
[> 4.1.6][> 4.2][> 5.][< 4.1.4][^][^^][^^^]
Different areas are characterized by their different purposes and uses:
[[1] - reference-area - an area that can have different reference-related properties than its parent area
[[2] - by changing reference orientation and/or writing mode
 [2] - also has special behaviors for first and last space specifications
][1] - viewport-area - the clipping/scrolling visible portion of a reference area
 [1] - allocation-area - the basis of positioning and alignment of content within parent
[[2] - defines the mechanics of how the stacking works
][1] - block-area - a collection of lines in the block-progression-direction
[[2] - creates a new set of lines, even if block has a zero dimension
][1] - line-area - a collection of inline constructs in a block
 [1] - inline-area - atomic construct or collection of glyph constructs in the inline-progression-direction
 [1] - glyph-area - single text character
]
4.1.6 Stacking area and rectangle relationships
[> 4.1.7][> 4.2][> 5.][< 4.1.5][^][^^][^^^]
Areas stack in either the block-progression-direction or the inline-progression-direction using rectangles
[[1] - the parent area's content-rectangle constrains the position of the child areas therein
 [1] - the child areas can only stack in one direction relative to the parent reference orientation
[[2] - one set of opposing edges of child co-incident with the parent content-rectangle
 [2] - other set of opposing edges of child co-incident with the adjacent content-rectangle
[[3] - or with parent content-rectangle if first or last in the stack
]]]
Areas that are stacked adjacent to their siblings are considered "normal"
[[1] - other areas are considered "non-normal" and stack elsewhere in the area tree
[[2] - e.g. floats to the before, start, or end sides of the body region
 [2] - e.g. footnote bodies to the after edge of the body region
 [2] - e.g. absolutely positioned block containers to arbitrary locations
]]
Property initial values are for "common sense" formatting
[[1] - a lot of work can be done without changing initial values
 [1] - a lot of finesse can be accomplished by specifying available alternatives
]
An area is stacked within its parent's content-rectangle using spacing extents:
[[1] - names of extents are suffixed using the names of the edges from which they extend
[[2] - allows each edge of the spaces, border or padding to have individual values
 [2] - shorthand properties are available to set all extents in one specification
][1] - reference areas can have a different location of "top" than their parent area
]
[Figure 4.4: Nested rectangles in stacked block areas
A large bordered box represents a reference area's content rectangle. The top of the area is towards the top of the figure and is labeled "Top; assuming l-r writing mode)." The top, left, bottom and right edges are labeled, respectively, "Before edge," "Start edge," "After edge," and "End edge."
An area content rectangle is shown in middle of the reference area content, surrounded by the area padding rectangle, which in turn is surrounded by the area border rectangle.
The dimension of the area padding rectangle is measured by extents beyond the edges of the area content rectangle and indicated by the set of [padding-after]=, [padding-before]=, [padding-end]= and [padding-start]= properties.
The thickness of the area border rectangle is measured by [border-after-width]=, [border-before-width]=, [border-end-width]= and [border-start-width]=.
The dimension of the spacing rectangle is measured by [space-after]= and [space-before]=, or by [margin-bottom]=, [margin-left]=, [margin-right]= and [margin-top]=.
]
A block's child area without borders is simply positioned between siblings
[[1] - [space-before]= and [space-after]= between siblings
 [1] - [start-indent]= and [end-indent]= within parent
]
All child areas are contained within nested rectangles
[[1] - rigorous specification of formatting intent, spaced relative to directions of the parent area
 [1] - border-rectangle - positioned relative to parent or adjacent area using margin-*=, space-*= or *-indent= properties
[[2] - edges of border-rectangle identified by parent reference orientation
 [2] - [space-start]= and [space-end]= are ignored for block-level constructs
 [2] - [space-before]= and [space-after]= are ignored for inline-level constructs
 [2] - specified space results from [space-before]= and [space-after]=
 [2] - effective space results from [start-indent]= and [end-indent]=
][1] - padding-rectangle - positioned relative to border-rectangle using border-*= width properties
[[2] - edges of padding-rectangle identified by parent reference orientation
][1] - content-rectangle - positioned relative to padding-rectangle using padding-*= spacing properties
[[2] - edges of content-rectangle identified by child reference orientation
]]
The border rectangle is different than the spacing and padding rectangles
[[1] - spacing and padding rectangles and dimensions define invisible non-rendered areas
 [1] - the border rectangle and border width properties define the thickness of a visible rendered border
 [1] - not shown in the diagram are the *-top=, *-bottom=, *-left= and *-right= properties for padding-*= and border-*= which directly correspond to the writing direction dependent properties
]
Border and padding widths are sometimes ignored
[[1] - e.g. not applicable to regions, floats or footnote bodies
 [1] - [border-style]= value of "none" or "hidden" will set the border width to 0pt
 [1] - [border-before-width]= and [border-after-width]= have .conditionality component with the initial value of "discard"
[[2] - sets the .length component to 0pt if is, respectively, the first or last area in a reference area
 [2] - may be set to "retain" to preserve the .length component value
]]
An area's content-rectangle in turn contains the area's children
[[1] - the area's type governs what is allowed for the child areas
[[2] - only a reference-area's children can discard conditional spaces
 [2] - only when the area is a reference-area can the content-rectangle have a orientation properties different than itself
[[3] - orientation properties and traits are relative to the "top" of the area
 [3] - e.g.: [reference-orientation]=, block-progression-direction, etc.
][2] - an area's content-rectangle orientation properties are relative to the content's own reference orientation, not the area's reference orientation
][1] - proportional *-indent= and margin-*= specifications are calculated differently
[[2] - a proportional *-indent= specification is based on the ancestral reference-area
 [2] - a proportional margin-*= specification is based on the containing block
][1] - specifying conflicting values will over-constrain requirements
[[2] - margin-*= properties take precedence over *-indent= properties
[[3] - a specified [start-indent]= or [end-indent]= value is ignored if the corresponding margin-*= property within the indent value is specified
][2] - [start-indent]= and the content's specified inline-progression dimension take precedence over [end-indent]=
[[3] - e.g. [inline-progression-dimension]= on the object or specified for the objects children's sizes
 [3] - if the inline-progression dimension is not explicitly set for the object or its children, the [end-indent]= is respected
]]]
A small indent pushes the border outside of the parent area
[[1] - without a margin specified, the border and padding move outside of the start indent
]
[Figure 4.5: Borders and small indents
The border and padding around an area's content are drawn. The start indent for the area content is less than the sum of the border and padding on the start side, and the end indent for the area content is less than the sum of the border and padding on the end side. The border and padding are shown to go beyond the bounds of the parent area.
]
Specifying a margin property changes the drawing of the border
[[1] - with a margin specified, the border and padding start inside the parent area
]
In the following the middle block on the left has no margin specified, while the middle block on the right has a margin of 0pt specified:
[Figure 4.6: Impact of specifying margins
Two groups of three blocks are shown next to each other. Each line of each block has a gray background. The middle block of each is bordered. The border for the middle block on the left extends wider than the gray background of the above and below lines, while the border for the middle block on the right aligns with the gray background of the above and below lines.
]
[[1] - note how the letters "T" are aligned on their start side when no margin is specified
]
4.1.7 Allocation rectangles and alignment
[> 4.1.8][> 4.2][> 5.][< 4.1.6][^][^^][^^^]
A child area's allocation-rectangle describes constraints of position within parent
[[1] - defines the mechanics of the stacking of adjacent areas
 [1] - dimension based on either the parent, border or content edges
[[2] - block and inline areas use different edges
 [2] - inline areas of two different types (normal and large) use different edges
][1] - orientation based on parent area
[[2] - may be different than content area
][1] - the start edge of an inline area's allocation-rectangle defines the alignment-point of the area
[[2] - used in glyph and other inline rendering
][1] - the space outside of the allocation rectangle can be discarded
[[2] - only when the space is the first or last in a reference area
 [2] - the space-*.conditionality default of "discard" can be overridden to be "retain"
]]
Block area stacking and allocation-rectangle definition:
[[1] - blocks are as wide as their parent area
[[2] - this forces the stacking in the block-progression direction
][1] - all block areas are defined with the same relationship between sibling block areas
]
[Figure 4.7: Block area allocation-rectangle
A block-level area is shown with its border-, padding- and content-rectangles within the parent content-rectangle.
The allocation rectangle boundaries are indicated along the parent content-rectangle on the start-edge and end-edge, and the border-rectangle on the before-edge and end-edge.
]
Inline areas defined with a normal-allocation-rectangle:
[[1] - most inline areas are defined with the normal relationship between areas
 [1] - e.g. text
 [1] - note how the bordering of such an area will not influence the line stacking and may cause undesirable overwriting of content on the previous and following lines
]
[Figure 4.8: Normal inline area allocation-rectangle
An inline-level area is shown with its border-, padding- and content-rectangles within the parent line area.
The allocation rectangle boundaries are indicated along the border-rectangle on the start-edge and end-edge, and the content-rectangle on the before-edge and end-edge.
]
Inline areas defined with a large-allocation-rectangle:
[[1] - some inline areas are defined with an alternative relationship between areas
 [1] - e.g. inline-containers and graphic images
 [1] - note how the bordering of such an area will influence the line stacking and will not cause undesirable overwriting of content on the previous and following lines when the line-stacking strategy is based on the height of the content
]
[Figure 4.9: Large inline area allocation-rectangle
An inline-level area is shown with its border-, padding- and content-rectangles within the parent line area.
The allocation rectangle boundaries are indicated along the border-rectangle edges.
]
4.1.8 Line areas
[> 4.1.9][> 4.2][> 5.][< 4.1.7][^][^^][^^^]
Line areas are special areas only created by creating a block area
[[1] - line area traits are specified in the block properties
 [1] - stack in the block-progression-direction
 [1] - no borders or padding
]
Line stacking strategy determines which rectangle describes the line
[[1] - "nominal-requested-line-rectangle" - based on font-height
[[2] - selected using [line-stacking-strategy]= of "font-height"
 [2] - above the text baseline by the text altitude
 [2] - below the text baseline by the text depth
 [2] - provides constant baseline-to-baseline spacing
][1] - "maximum-line-rectangle" - (initial) based on inline objects within line
[[2] - selected using [line-stacking-strategy]= of "max-height"
 [2] - maximum of the allocation-rectangle of all contained inline objects and the nominal-requested-line-rectangle
 [2] - provides constant space between line areas
][1] - "per-inline-height-rectangle" - based on leading
[[2] - selected using [line-stacking-strategy]= of "line-height"
 [2] - provides CSS-style line box stacking when using zero space-before and space-after
]]
Sometimes the only changes to line height are a result of using [baseline-shift]=:
[[1] - e.g. superscript and subscripted text
 [1] - using [line-height-shift-adjustment]= value of "disregard-shifts" will allow the line stacking strategy to only consider other constructs on and situations regarding the line
]
Leading is calculated as difference between line height and font size
[[1] - leading is the space found between the lines of a block
 [1] - the half-leading trait is used by the formatter before and after lines
[[2] - the use of half-leading accommodates adjacent lines with vastly different font sizes without having to decide which line's leading should apply
 [2] - both lines' half-leading trait applies in the gap between lines
][1] - initial value of [line-height]= is "normal"
[[2] - processor can implement any "reasonable" (sic) value based on font size
 [2] - value from "1.0" to "1.2" is recommended
 [2] - when not specified, different initial values in different processors will yield different area trees and resulting formatting
[[3] - important portability issue
]][1] - can override "normal" by specifying a number (e.g. "1" or "1.1") or a percentage factor of current font size
[[2] - a scaling factor number is inherited and applies to descendent font sizes
 [2] - a percentage value is calculated where specified and the calculation result is inherited (not the percentage)
][1] - can also specify absolute length value
]
Geometric font characteristics are based on the em box
[[1] - relative measure of the height of the glyphs in the font
 [1] - a box that is 1 em by 1 em in dimension is called the design space
[[2] - note that creating an <[inline-container]> with a square dimension of 1em, aligned on the after-edge of the line and with a visible border will render a check-box without having to use a graphic image
][1] - design space origin (dominant baseline) is different for each of ideographic, Indic, and the group of all other scripts (e.g. alphabetic and syllabic)
]
Inline constructs align along one of many baselines defined at the same time as detailed in Area Alignment Properties ([7.13]):
[[1] - when not specified, the automatic dominant baseline is based on the current font
 [1] - alphabetic
[[2] - used for most alphabetic and syllabic scripts
[[3] - e.g. Western, Southern Indic, non-ideographic Southeast Asian, etc.
]][1] - ideographic
[[2] - used by ideographic scripts for the bottom of the ideographic em box
][1] - hanging
[[2] - used for certain Indic scripts
][1] - mathematical
[[2] - used for mathematical symbols
][1] - after-edge
[[2] - after-edge of the reference area after accommodating line contents
][1] - before-edge
[[2] - before-edge of the reference area after accommodating line contents
][1] - central
[[2] - computed center of the em box
][1] - middle
[[2] - center of the ex box sitting on the alphabetic baseline
 [2] - approximated by "central" when the script doesn't have "x-height"
 [2] - use [vertical-align]= when the graphic is taller than the line
][1] - text-after-edge
[[2] - equal to the ideographic baseline for ideographic scripts
 [2] - equal to the bottom of the space for descending characters for non-ideographic scripts
[[3] - often slightly after than the ideographic baseline
]][1] - text-before-edge
[[2] - 1em before the text-after-edge
]]
Consider the samp/align.fo example, modifying values for [alignment-baseline]=:
[Figure 4.10: Alignment of inline constructs
Five tests are illustrated as described in the text of the book.
]
[[1] 1 a bordered block with simple text along the dominant baseline with descending letters
 [1] 2 a graphic image sitting on the dominant baseline (default)
[[2] - without manipulating [alignment-baseline]=, the graphic sits "high" on the line
][1] 3 a square inline-container of size 1em sitting on the dominant baseline (default; alphabetic in this example)
[[2] - without manipulating [alignment-baseline]=, the container sits "high" on the line
][1] 4 a graphic image aligned to the after-edge baseline
[[2] - this often looks more appealing by having a common edge with the text
][1] 5 a container aligned to the after-edge baseline
[[2] - this effect aligns all with the "bottom" of the text box
 [2] - this often looks more appealing by not going above the top of the text characters
][1] 6 a graphic image aligned to the middle baseline
[[2] - the center line of the graphic is centered to the "middle" of the text box
][1] 7 a container aligned to the middle baseline
[[2] - the center line of the inline container is centered to the "middle" of the text box
][1] 8 turning off the leading by using [line-height]="1"
[[2] - this shows the before/after edges of the inline container touching the inside edges of the parent line area
 [2] - the half-leading seen in the previous example both above and below the inline container has been removed by adjusting the line height
]]
4.1.9 Superscript and subscript
[> 4.1.10][> 4.2][> 5.][< 4.1.8][^][^^][^^^]
There is often the requirement to subscript or superscript text
[[1] - use [baseline-shift]= to shift a character's baseline in a direction perpendicular to the flow
 [1] - positive values move up when writing in the left-to-write direction
 [1] - percentages are based on the line height of the parent area
]
By default, the movement of a character affects the line height of the line
[[1] - will produce incongruous results causing the leading to appear different only on the lines with superscripts or subscripts
 [1] - the leading of the entire line can be protected when using the [line-height-shift-adjustment]= property to disregard the shifts
]
Be careful of apparent line height when using fonts for superscripts and subscripts
[[1] - in one real-world example a Greek letter was needed for a subscript and [line-height-shift-adjustment]= was set to disregard the shifts, yet the one line of the block appeared to have the incorrect leading
 [1] - it turned out the stylesheet writer used a larger font for just the Greek character to get the desired appearance in relation to the other text, not realizing that the use of the one larger font character changed the maximum height of objects on the line, thus triggering the difference in line height for the entire line
 [1] - the fix was to change the [line-stacking-strategy]= to be "line-height", thus basing the line spacing on the leading
]
4.1.10 References in the area tree
[> 4.2][> 5.][< 4.1.9][^][^^][^^^]
First normally-flowed area created by an object with a specified [id]= property will have the value as a trait
[[1] - recall the area tree produced by interpreting the objects in [Processing model of formatting - Section 3.2.1]
 [1] - the application generating the XSL-FO instance is responsible for the uniqueness of [id]= values
 [1] - first area with identifier found in the area tree is used (it is not an error to have multiple uses of the same identifier)
]
Objects can refer to other objects in the tree creating a reference to the area produced
[[1] - page number citations using [ref-id]=
 [1] - hyperlink targets using [internal-destination]=
 [1] - when more than one object has the same identifier, references are resolved to the first area in the area tree created by the first object with the identifier
 [1] - when no object has the required identifier, the formatter signals an error of being unable to meet the requirements
]
Note it is unsafe to use XML ID and IDREF constructs directly in an XSL-FO instance when combining XML source documents for aggregation
[[1] - each document has independent value spaces for unique ID values
 [1] - using the ID values from multiple documents in a single XSL-FO document can introduce value conflicts
[[2] - the same ID may have been used in two documents and will result in being doubly used in the XSL-FO document
]]
It is safest when using XSLT to convert every ID and corresponding IDREF to the generate-id() value for the node for the element with the ID
[[1] - the value space for generate-id() is guaranteed to be unique for every node of all node trees used in a single transformation process
 [1] - for the element with the ID identifier, use the generated identifier of the element
[[2] - e.g. id="{generate-id(.)}"
][1] - for the reference with the IDREF identifier, use the generated identifier of the element referenced
[[2] - e.g. ref-id="{generate-id(id(@idref))}"
 [2] - e.g. internal-destination="{generate-id(id(@idref))}"
]]
Also the safest when synthesizing relationships where ID/IDREF is not used
[[1] - e.g. using generate-id() for automatically generated tables of content
]
4.2 Block and inline basics
[> 4.3][< 4.1.10][^^][^^^]
4.2.1 Simple block and inline objects
[> 4.2.2][> 4.3][> 5.][< 4.1.10][^^][^^^]
The <[wrapper]> object is a semantic-free container used by other objects or for inherited properties
[[1] - does not generate any areas itself
[[2] - returns the areas generated by its descendants
][1] - used by <[multi-properties]> as a wrapper of objects to which the multiple properties apply
 [1] - introduces a branch in flowed content in the formatting object tree from which descendent objects can obtain inherited property settings (see [Processing model of formatting - Section 3.2.1])
]
Only allowed to be positioned where its children are allowed to be positioned
[[1] - cannot be used as a short cut to avoid the rules of parentage, such as for inline constructs
]
Only way to create line areas on a page is to create a block of lines
[[1] - <[block]>
[[2] - one property for the first line in the block
[[3] - [text-indent]=
[[4] - a positive value incurs into the block (indent)
 [4] - a negative value hangs outside the block (outdent)
]][2] - two properties for the last line in the block
[[3] - [last-line-end-indent]=
[[4] - a positive value incurs into the block (indent)
 [4] - a negative value hangs outside the block (outdent)
][3] - [text-align-last]=
[[4] - the alignment of only the last line in the block
 [4] - also impacts lines ending with preserved linefeed characters
]][2] - a number of properties for all lines in the block (including first and last)
[[3] - note for [text-align]= the value "justify" doesn't apply to the last line of the block
]][1] - <[initial-property-set]/>
[[2] - solely a container of properties applicable to the first line
[[3] - only the formatter can determine how much of the flowed information in the block will end up on the first line of the block
 [3] - neither XSLT nor any other XSL-FO generation process can know ahead of time how much will be formatted on the first line of a block
][2] - must be a child of the block defining the lines to be influenced
][1] - the line of a single-line block is considered to be both the first line and the last line of the block
]
Inline constructs are placed by default on the dominant baseline
[[1] - for non-ideographic fonts results in unexpectedly shifted visual results for graphics and inline containers
 [1] - can be adjusted to other baselines using [alignment-baseline]= and [vertical-align]=
]
Constructs designed to be used only inline can be rendered on their own line
[[1] - e.g. graphics needed to be rendered between paragraphs
 [1] - e.g. a rule-styled leader needed to be rendered between paragraphs
 [1] - to render an inline construct as a block it must be placed within its own block
]
Inline areas can have non-inheritable properties set for the area contents
[[1] - <[inline]>
[[2] - distinct from <[wrapper]> in that it creates an area in the area tree
 [2] - necessary for non-inherited properties such as [baseline-shift]= for doing superscript and subscript of the contained text
]]
The formatter can supply characters to be rendered in a line
[[1] - <[page-number-citation]/> is replaced with the first page number for the areas created by the cited formatting object
[[2] - [ref-id]= points to the encompassing formatting object for the areas in question with an [id]=
 [2] - the choice of characters is dictated by the page sequence for the cited area
 [2] - e.g. consider a book with the front matter numbered in lower-case roman numerals and the book body in digits
[[3] - citing a page of the body when in the front matter returns the digits as used in the body
 [3] - citing a page of the front matter when in the body returns the roman numerals as used in the front matter
]]]
[F1.1]Generating a total page count
[[1] - [F1.1]<[page-number-citation-last]> is replaced with the last page number for the areas created by the cited formatting object
[[2] - the areas may be created by descendants of the formatting object or by the influence of neighboring formatting objects
[[3] - a page is blank if conditions cause the formatter to create a page without any flowed content (see [Forced blank pages - Section 8.4.4] for details)
][2] - [ref-id]= points to the encompassing formatting object for the areas in question with an [id]=
[[3] - e.g. for the page count of the entire book, pointing to the <[root]> would suffice
 [3] - e.g. for the last page of a chapter, pointing to the chapter's <[page-sequence]> would suffice
][2] - [page-citation-strategy]= indicates which last page of the object is used
[[3] - "all" (default)
[[4] - the last of all pages for the formatting object
][3] - "normal"
[[4] - the last page not including any trailing out-of-line constructs (e.g. floats and footnotes) or blank pages
][3] - "not-blank"
[[4] - the last page not including any trailing blank pages
]]]]
[F1.0]Generating a total page count in XSL-FO 1.0
[[1] - citing the page number of the last page of the document gives the total page count
 [1] - an empty block with an area with zero dimension can be flowed on the last page
[[2] - not robust for all possible documents, but this works for most documents and is the only way possible in XSL-FO 1.0
[[3] - nuances of interaction with floats, float separator sub-regions and discarded space specifications prevent guaranteed page numbering
]][1] - for the last page of a chapter, an empty block can be flowed at the end of the chapter and then cited
]
Tip when using XSLT to guarantee uniqueness of the root node or the last block identifier:
[[1] - use id="{generate-id(/)}" as an identifier not in conflict with ID/IDREF
[[2] - [F1.1]identify the encompassing root node
 [2] - [F1.0]identify the last block of the document
 [2] - the root node of the source node tree cannot be referenced by IDREF
 [2] - guaranteed to be unique from all source documents' use of IDREF when all identifiers are translated using the generate-id() function
]]
4.2.2 <wrapper> Object
[> 4.2.3][> 4.3][> 5.][< 4.2.1][^][^^][^^^]
Purpose:
[[1] - a neutral container construct for specifying inherited properties for descendent constructs
]
Content:
[[1] - ([6.13.4]) (#PCDATA|[​%inline;]|[​%block;])*
 [1] - Child objects (alphabetical):
[[2] - [%block;]([6.2];[Section 3.4.2 Block-level objects])
 [2] - [%inline;]([6.2];[Section 3.4.3 Inline-level objects])
][1] - Referring object:
[[2] - <[multi-properties]>([6.9.6];[Section 12.1.2 <multi-properties> Object])
]]
[[1] - may begin with any number of <[marker]> children
]
Optional properties:
[id=]([7.30.8];[Section D.3.3 Property summary])
[F1.1][index-class=]([7.24.1];[Section D.3.3 Property summary])
[F1.1][index-key=]([7.24.2];[Section D.3.3 Property summary])
4.2.3 <block> Object
[> 4.2.4][> 4.3][> 5.][< 4.2.2][^][^^][^^^]
Purpose:
[[1] - the description of a new set of lines distinct from preceding area content
]
Content:
[[1] - ([6.5.2]) (#PCDATA|[​%inline;]|[​%block;])*
 [1] - Child objects (alphabetical):
[[2] - [%block;]([6.2];[Section 3.4.2 Block-level objects])
 [2] - [%inline;]([6.2];[Section 3.4.3 Inline-level objects])
]]
[[1] - may begin with (in the following order):
[[2] - zero or more <[marker]> objects
 [2] - at most one <[initial-property-set]> object
]]
Property sets:
[[1] - [Common Accessibility Properties]([7.5];[Section D.1.2 Common Accessibility Properties])
 [1] - [Common Aural Properties]([7.7];[Section D.1.3 Common Aural Properties])
 [1] - [Common Border, Padding, and Background Properties]([7.8];[Section D.1.4 Common Border, Padding, and Background Properties])
 [1] - [Common Font Properties]([7.9];[Section D.1.5 Common Font Properties])
 [1] - [Common Hyphenation Properties]([7.10];[Section D.1.6 Common Hyphenation Properties])
 [1] - [Common Margin Properties-Block]([7.11];[Section D.1.7 Common Margin Properties-Block])
 [1] - [Common Relative Position Properties]([7.13];[Section D.1.9 Common Relative Position Properties])
]
Other optional properties:
[break-after=]([7.20.1];[Section D.3.3 Property summary])
[break-before=]([7.20.2];[Section D.3.3 Property summary])
[clear=]([7.19.1];[Section D.3.3 Property summary])
[color=]([7.18.1];[Section D.3.3 Property summary])
[hyphenation-keep=]([7.16.1];[Section D.3.3 Property summary])
[hyphenation-ladder-count=]([7.16.2];[Section D.3.3 Property summary])
[id=]([7.30.8];[Section D.3.3 Property summary])
[F1.1][index-class=]([7.24.1];[Section D.3.3 Property summary])
[F1.1][index-key=]([7.24.2];[Section D.3.3 Property summary])
[intrusion-displace=]([7.19.3];[Section D.3.3 Property summary])
[keep-together=]([7.20.3];[Section D.3.3 Property summary])
[keep-with-next=]([7.20.4];[Section D.3.3 Property summary])
[keep-with-previous=]([7.20.5];[Section D.3.3 Property summary])
[last-line-end-indent=]([7.16.3];[Section D.3.3 Property summary])
[line-height=]([7.16.4];[Section D.3.3 Property summary])
[line-height-shift-adjustment=]([7.16.5];[Section D.3.3 Property summary])
[line-stacking-strategy=]([7.16.6];[Section D.3.3 Property summary])
[linefeed-treatment=]([7.16.7];[Section D.3.3 Property summary])
[orphans=]([7.20.6];[Section D.3.3 Property summary])
[span=]([7.21.4];[Section D.3.3 Property summary])
[text-align=]([7.16.9];[Section D.3.3 Property summary])
[text-align-last=]([7.16.10];[Section D.3.3 Property summary])
[text-altitude=]([7.29.4];[Section D.3.3 Property summary])
[text-depth=]([7.29.5];[Section D.3.3 Property summary])
[text-indent=]([7.16.11];[Section D.3.3 Property summary])
[visibility=]([7.30.17];[Section D.3.3 Property summary])
[white-space-collapse=]([7.16.12];[Section D.3.3 Property summary])
[white-space-treatment=]([7.16.8];[Section D.3.3 Property summary])
[widows=]([7.20.7];[Section D.3.3 Property summary])
[wrap-option=]([7.16.13];[Section D.3.3 Property summary])
Shorthands influencing the above properties:
[font=]([7.31.13];[Section D.3.3 Property summary])
[page-break-after=]([7.31.16];[Section D.3.3 Property summary])
[page-break-before=]([7.31.17];[Section D.3.3 Property summary])
[page-break-inside=]([7.31.18];[Section D.3.3 Property summary])
4.2.4 Preserving white space
[> 4.2.5][> 4.3][> 5.][< 4.2.3][^][^^][^^^]
Default properties collapse input white space
[[1] - physical lines of text in an XSL-FO instance are streamed along line areas of the page
 [1] - line ends from the input by default are treated as spaces
]
Often necessary to preserve the exact text content of an element
[[1] - see example on [Training material example - Section 2.2.3]
 [1] - program listings
 [1] - markup listings
 [1] - text drawings
]
Combination of properties required to ensure all text is preserved:
[[1] - [linefeed-treatment]="preserve"
[[2] - to preserve linefeed characters during refined formatting object tree generation
][1] - [white-space-treatment]="preserve"
[[2] - to preserve white space around linefeed characters during refined formatting object tree generation
][1] - [white-space-collapse]="false"
[[2] - to preserve consecutive white space during area tree generation
]]
Optionally, one could also specify the behavior of content too long for a line:
[[1] - [wrap-option]="no-wrap"
[[2] - to clip the line and trigger an overflow error for lines that are too long
]]
Note that all four properties can be manipulated using the [white-space]= shorthand
[[1] - remember that shorthand properties are not required to be supported by a processor
]
4.2.5 <initial-property-set> Object
[> 4.2.6][> 4.3][> 5.][< 4.2.4][^][^^][^^^]
Purpose:
[[1] - an auxiliary construct for specifying properties applied to the first line of the parent block
[[2] - the information to which the properties applies is determined by the formatter and not by the generation of the block
]]
Content:
[[1] - ([6.6.4]) EMPTY
]
Property sets:
[[1] - [Common Accessibility Properties]([7.5];[Section D.1.2 Common Accessibility Properties])
 [1] - [Common Aural Properties]([7.7];[Section D.1.3 Common Aural Properties])
 [1] - [Common Border, Padding, and Background Properties]([7.8];[Section D.1.4 Common Border, Padding, and Background Properties])
 [1] - [Common Font Properties]([7.9];[Section D.1.5 Common Font Properties])
 [1] - [Common Relative Position Properties]([7.13];[Section D.1.9 Common Relative Position Properties])
]
Other optional properties:
[color=]([7.18.1];[Section D.3.3 Property summary])
[letter-spacing=]([7.17.2];[Section D.3.3 Property summary])
[line-height=]([7.16.4];[Section D.3.3 Property summary])
[score-spaces=]([7.30.15];[Section D.3.3 Property summary])
[text-decoration=]([7.17.4];[Section D.3.3 Property summary])
[text-shadow=]([7.17.5];[Section D.3.3 Property summary])
[text-transform=]([7.17.6];[Section D.3.3 Property summary])
[word-spacing=]([7.17.8];[Section D.3.3 Property summary])
Shorthand influencing the above properties:
[font=]([7.31.13];[Section D.3.3 Property summary])
4.2.6 <inline> Object
[> 4.2.7][> 4.3][> 5.][< 4.2.5][^][^^][^^^]
Purpose:
[[1] - the specification of inherited and non-inherited properties for content within a line generated in a block
]
Content:
[[1] - ([6.6.7]) (#PCDATA|[​%inline;]|[​%block;])*
 [1] - Child objects (alphabetical):
[[2] - [%block;]([6.2];[Section 3.4.2 Block-level objects])
 [2] - [%inline;]([6.2];[Section 3.4.3 Inline-level objects])
][1] - Referring object:
[[2] - <[footnote]>([6.12.3];[Section 7.3.2 <footnote> Object])
]]
[[1] - may begin with any number of <[marker]> children
]
Property sets:
[[1] - [Common Accessibility Properties]([7.5];[Section D.1.2 Common Accessibility Properties])
 [1] - [Common Aural Properties]([7.7];[Section D.1.3 Common Aural Properties])
 [1] - [Common Border, Padding, and Background Properties]([7.8];[Section D.1.4 Common Border, Padding, and Background Properties])
 [1] - [Common Font Properties]([7.9];[Section D.1.5 Common Font Properties])
 [1] - [Common Margin Properties-Inline]([7.12];[Section D.1.8 Common Margin Properties-Inline])
 [1] - [Common Relative Position Properties]([7.13];[Section D.1.9 Common Relative Position Properties])
]
Other optional properties:
[alignment-adjust=]([7.14.1];[Section D.3.3 Property summary])
[alignment-baseline=]([7.14.2];[Section D.3.3 Property summary])
[baseline-shift=]([7.14.3];[Section D.3.3 Property summary])
[block-progression-dimension=]([7.15.3];[Section D.3.3 Property summary])
[color=]([7.18.1];[Section D.3.3 Property summary])
[dominant-baseline=]([7.14.5];[Section D.3.3 Property summary])
[height=]([7.15.6];[Section D.3.3 Property summary])
[id=]([7.30.8];[Section D.3.3 Property summary])
[F1.1][index-class=]([7.24.1];[Section D.3.3 Property summary])
[F1.1][index-key=]([7.24.2];[Section D.3.3 Property summary])
[inline-progression-dimension=]([7.15.7];[Section D.3.3 Property summary])
[keep-together=]([7.20.3];[Section D.3.3 Property summary])
[keep-with-next=]([7.20.4];[Section D.3.3 Property summary])
[keep-with-previous=]([7.20.5];[Section D.3.3 Property summary])
[line-height=]([7.16.4];[Section D.3.3 Property summary])
[text-decoration=]([7.17.4];[Section D.3.3 Property summary])
[visibility=]([7.30.17];[Section D.3.3 Property summary])
[width=]([7.15.14];[Section D.3.3 Property summary])
[wrap-option=]([7.16.13];[Section D.3.3 Property summary])
Shorthands influencing the above properties:
[font=]([7.31.13];[Section D.3.3 Property summary])
[page-break-after=]([7.31.16];[Section D.3.3 Property summary])
[page-break-before=]([7.31.17];[Section D.3.3 Property summary])
[page-break-inside=]([7.31.18];[Section D.3.3 Property summary])
[vertical-align=]([7.31.22];[Section D.3.3 Property summary])
Properties of interest:
[[1] - [baseline-shift]= used for subscripting and superscripting
 [1] - [text-decoration]= used for underscored text
 [1] - [font-style]= used for italicized text
 [1] - [font-weight]= used for boldfaced text
]
4.2.7 <page-number-citation> Object
[> 4.2.8][> 4.3][> 5.][< 4.2.6][^][^^][^^^]
Purpose:
[[1] - an inline-level placeholder replaced with the page number of the first normal area of cited formatting object
]
Content:
[[1] - ([6.6.11]) EMPTY
]
Property sets:
[[1] - [Common Accessibility Properties]([7.5];[Section D.1.2 Common Accessibility Properties])
 [1] - [Common Aural Properties]([7.7];[Section D.1.3 Common Aural Properties])
 [1] - [Common Border, Padding, and Background Properties]([7.8];[Section D.1.4 Common Border, Padding, and Background Properties])
 [1] - [Common Font Properties]([7.9];[Section D.1.5 Common Font Properties])
 [1] - [Common Margin Properties-Inline]([7.12];[Section D.1.8 Common Margin Properties-Inline])
 [1] - [Common Relative Position Properties]([7.13];[Section D.1.9 Common Relative Position Properties])
]
Other required property:
[ref-id=]([7.30.13];[Section D.3.3 Property summary])
Other optional properties:
[alignment-adjust=]([7.14.1];[Section D.3.3 Property summary])
[alignment-baseline=]([7.14.2];[Section D.3.3 Property summary])
[baseline-shift=]([7.14.3];[Section D.3.3 Property summary])
[dominant-baseline=]([7.14.5];[Section D.3.3 Property summary])
[id=]([7.30.8];[Section D.3.3 Property summary])
[F1.1][index-class=]([7.24.1];[Section D.3.3 Property summary])
[F1.1][index-key=]([7.24.2];[Section D.3.3 Property summary])
[keep-with-next=]([7.20.4];[Section D.3.3 Property summary])
[keep-with-previous=]([7.20.5];[Section D.3.3 Property summary])
[letter-spacing=]([7.17.2];[Section D.3.3 Property summary])
[line-height=]([7.16.4];[Section D.3.3 Property summary])
[score-spaces=]([7.30.15];[Section D.3.3 Property summary])
[text-altitude=]([7.29.4];[Section D.3.3 Property summary])
[text-decoration=]([7.17.4];[Section D.3.3 Property summary])
[text-depth=]([7.29.5];[Section D.3.3 Property summary])
[text-shadow=]([7.17.5];[Section D.3.3 Property summary])
[text-transform=]([7.17.6];[Section D.3.3 Property summary])
[visibility=]([7.30.17];[Section D.3.3 Property summary])
[word-spacing=]([7.17.8];[Section D.3.3 Property summary])
[wrap-option=]([7.16.13];[Section D.3.3 Property summary])
Shorthands influencing the above properties:
[font=]([7.31.13];[Section D.3.3 Property summary])
[page-break-after=]([7.31.16];[Section D.3.3 Property summary])
[page-break-before=]([7.31.17];[Section D.3.3 Property summary])
[vertical-align=]([7.31.22];[Section D.3.3 Property summary])
Property of interest:
[[1] - [ref-id]= must point to an area with an identifier on the desired page
]
Of note:
[[1] - the formatter supplies to the flow the characters as <[character]> objects
[[2] - the characters used by the formatter are specified by the [format]= property of the <[page-sequence]> for the cited page
]]
4.2.8 <page-number-citation-last> Object
[> 4.3][> 5.][< 4.2.7][^][^^][^^^]
Purpose:
[[1] - an inline-level placeholder replaced with the page number of the last normal area of cited formatting object, consistent with the indicated citation strategy
]
Content:
[[1] - [F1.1]([6.6.12]) EMPTY
]
Property sets:
[[1] - [Common Accessibility Properties]([7.5];[Section D.1.2 Common Accessibility Properties])
 [1] - [Common Aural Properties]([7.7];[Section D.1.3 Common Aural Properties])
 [1] - [Common Border, Padding, and Background Properties]([7.8];[Section D.1.4 Common Border, Padding, and Background Properties])
 [1] - [Common Font Properties]([7.9];[Section D.1.5 Common Font Properties])
 [1] - [Common Margin Properties-Inline]([7.12];[Section D.1.8 Common Margin Properties-Inline])
 [1] - [Common Relative Position Properties]([7.13];[Section D.1.9 Common Relative Position Properties])
]
Other required property:
[ref-id=]([7.30.13];[Section D.3.3 Property summary])
Other optional properties:
[alignment-adjust=]([7.14.1];[Section D.3.3 Property summary])
[alignment-baseline=]([7.14.2];[Section D.3.3 Property summary])
[baseline-shift=]([7.14.3];[Section D.3.3 Property summary])
[dominant-baseline=]([7.14.5];[Section D.3.3 Property summary])
[id=]([7.30.8];[Section D.3.3 Property summary])
[F1.1][index-class=]([7.24.1];[Section D.3.3 Property summary])
[F1.1][index-key=]([7.24.2];[Section D.3.3 Property summary])
[keep-with-next=]([7.20.4];[Section D.3.3 Property summary])
[keep-with-previous=]([7.20.5];[Section D.3.3 Property summary])
[letter-spacing=]([7.17.2];[Section D.3.3 Property summary])
[line-height=]([7.16.4];[Section D.3.3 Property summary])
[F1.1][page-citation-strategy=]([7.30.10];[Section D.3.3 Property summary])
[score-spaces=]([7.30.15];[Section D.3.3 Property summary])
[text-altitude=]([7.29.4];[Section D.3.3 Property summary])
[text-decoration=]([7.17.4];[Section D.3.3 Property summary])
[text-depth=]([7.29.5];[Section D.3.3 Property summary])
[text-shadow=]([7.17.5];[Section D.3.3 Property summary])
[text-transform=]([7.17.6];[Section D.3.3 Property summary])
[visibility=]([7.30.17];[Section D.3.3 Property summary])
[word-spacing=]([7.17.8];[Section D.3.3 Property summary])
[wrap-option=]([7.16.13];[Section D.3.3 Property summary])
Shorthands influencing the above properties:
[font=]([7.31.13];[Section D.3.3 Property summary])
[page-break-after=]([7.31.16];[Section D.3.3 Property summary])
[page-break-before=]([7.31.17];[Section D.3.3 Property summary])
[vertical-align=]([7.31.22];[Section D.3.3 Property summary])
Properties of interest:
[[1] - [ref-id]= must point to an area with an identifier on the desired page
 [1] - [page-citation-strategy]= is either "all", "normal" or "non-blank"
]
Of note:
[[1] - the formatter supplies to the flow the characters as <[character]> objects
[[2] - the characters used by the formatter are specified by the [format]= property of the <[page-sequence]> for the cited page
]]
4.3 Page definition and sequencing basics
[> 5.][< 4.2.8][^^][^^^]
4.3.1 Simple page layout definition
[> 4.3.2][> 5.][< 4.2.8][^^][^^^]
Every different page layout needed to be rendered must be described separately
[[1] - <[simple-page-master]>
[[2] - must be named using the [master-name]= property
][1] - differences in reference orientations of regions
 [1] - differences in column progression directions
[[2] - changes from defaults are specified by explicitly setting the [writing-mode]= property
][1] - differences in geometry
[[2] - page dimensions
 [2] - region dimensions
]]
A page's page-viewport-area's content-rectangle is the page dimensions
[[1] - the page's page-reference-area's content-rectangle is within page margin boundaries
 [1] - the body region's region-viewport-area is the page-reference-area's content-rectangle
]
Every page layout has at least one "middle" body region (see [Figure 4.2])
[[1] - <[region-body]/>
[[2] - may be named differently than the default "xsl-region-body" name
[[3] - typically explicitly named to distinguish regions in sequenced pages
 [3] - where the same name is used on more than one page master, all uses of the name must be for the same kind of region
][2] - defines the main-reference-area that accepts paginated content
[[3] - the main-reference-area will shrink in the presence of before-floats and footnotes
][2] - [F1.0]limited to only one body region in XSL-FO 1.0
 [2] - [F1.1]unlimited number of body regions in XSL-FO 1.1
][1] - distinct from optional perimeter regions in their definition but not in the page areas they occupy
]
Perimeter regions cut into the body region
[[1] - may be named differently than the default names by using [region-name]=
[[2] - renaming regions promotes good maintenance practice
 [2] - <[region-before]/> named "xsl-region-before"
 [2] - <[region-after]/> named "xsl-region-after"
 [2] - <[region-start]/> named "xsl-region-start"
 [2] - <[region-end]/> named "xsl-region-end"
][1] - if the body region doesn't have margins then the perimeter region content will overlap the body content
[[2] - perimeter regions do not automatically shrink the size of the content-rectangle of the body region
][1] - before and after regions can indicate they have precedence over the start and end regions
]
Regions may have different reference orientations and writing modes
[[1] - common need to have a landscape body region orientation inside of a portrait page geometry with portrait before and after regions
]
Important region name constraints on multiple page masters
[[1] - once a given custom name is used, it must be used for the same region position wherever else it used on other page masters
 [1] - the reserved names cannot be used regions other than what is already used by the Recommendation
 [1] - e.g. the region name "myheader" when used for a region-before can only be used for a region-before in other page masters
]
4.3.2 Spans and columns in simple page geometry
[> 4.3.3][> 5.][< 4.3.1][^][^^][^^^]
Hierarchy of reference areas within includes spans and columns
[[1] - each body region contains one main-reference-area
[[2] - area occupies entire region width
 [2] - area sits between before-float-reference-area and footnote-reference-area
][1] - main-reference-area contains span-reference-area areas
[[2] - groups of columns with the same number of columns spanned
 [2] - groups are stacked in the block-progression-direction
][1] - span-reference-area contains normal-flow-reference-areas (columns)
[[2] - the normally-flowed blocks of information in the flow are flowed into the columns
 [2] - columns are stacked in the inline-progression-direction
]]
Only equal-width evenly-spaced columns are allowed
[[1] - only column count and column gap can be specified
 [1] - fixed column specification for entire page
[[2] - cannot change column-count within a page other than spanning all columns
]]
Only main-reference-area-wide spans are allowed
[[1] - a block can span all columns or only one column
 [1] - a spanned block must be at the top of the flow (an immediate child of <[flow]>)
]
Columns are balanced within each span-reference-area
[[1] - a given span-reference-area accepts blocks in its normal-flow-reference-area areas until the number of columns spanned by a block changes
[[2] - a new span-reference-area is then introduced on the page
 [2] - all blocks flowed in the interrupted span-reference-area are re-flowed across all columns
 [2] - the balancing happens not based on the count of blocks but on the content of each block and the contained lines
][1] - all blocks flowed into the last span-reference-area of the main-reference-area are balanced across all columns
]
Consider a before/after situation of a formatter flowing a mixture of spanned and un-spanned blocks:
[[1] - six un-spanned blocks flow into a normal-flow-reference-area as normal blocks
 [1] - a seventh block spans all columns and triggers the generation of a new span-reference-area
 [1] - the content of the first six blocks is flowed across all normal-flow-reference-area areas of the first span-reference-area based on the length of the content in the sum total of the six blocks
[[2] - the count of blocks is irrelevant
 [2] - the total length of all blocks is balanced across the columns while accommodating keeps, widows and orphans
]]
[Figure 4.11: Hierarchy of span areas
The before and after situation of a given region-body is shown as two diagrams. On the left, the body's entire content is made up of one main-reference-area with one span-reference-area with two normal-flow-reference-area columns. Six blocks with a span= property of "none"have been flowed into the left column with plenty of room remaining below in the column.
On the right, three span-reference-area areas are shown, stacked in the block-progression-direction. In the top span-reference-area are two normal-flow-reference-area columns, containing all six blocks balanced based on their size.
The middle span-reference-area extends to the full width of the main-reference-area. Inside is a normal-flow-reference-area also extending the full width. Inside are four blocks numbered "7" through "10". Each block has a span= property of "all". The flowing of the seventh block triggered the creation of the second span area and the rebalancing of the content in the first span area.
In the bottom span-reference-area are two normal-flow-reference-area columns containing blocks that have a span= property of "none". The flowing of the eleventh block triggered the creation of the third span area.
]
4.3.3 <simple-page-master> Object
[> 4.3.4][> 5.][< 4.3.2][^][^^][^^^]
Purpose:
[[1] - the specification of a given page's physical geometry
]
Content:
[[1] - [F1.0]([6.4.12]) ([​region-body],[​region-before]?,[​region-after]?,[​region-start]?,[​region-end]?)
 [1] - [F1.1]([6.4.13]) ([​region-body]+,[​region-before]?,[​region-after]?,[​region-start]?,[​region-end]?)
 [1] - Child objects (alphabetical):
[[2] - <[region-after]>([6.4.16];[Section 8.1.3 <region-after> Object])
 [2] - <[region-before]>([6.4.15];[Section 8.1.2 <region-before> Object])
 [2] - <[region-body]>([6.4.14];[Section 4.3.4 <region-body> Object])
 [2] - <[region-end]>([6.4.18];[Section 8.1.5 <region-end> Object])
 [2] - <[region-start]>([6.4.17];[Section 8.1.4 <region-start> Object])
][1] - Referring object:
[[2] - <[layout-master-set]>([6.4.7];[Section 3.3.9 <layout-master-set> Object])
]]
Property sets:
[[1] - [Common Margin Properties-Block]([7.11];[Section D.1.7 Common Margin Properties-Block])
]
Other required property:
[master-name=]([7.27.8];[Section D.3.3 Property summary])
Other optional properties:
[page-height=]([7.27.13];[Section D.3.3 Property summary])
[page-width=]([7.27.15];[Section D.3.3 Property summary])
[reference-orientation=]([7.21.3];[Section D.3.3 Property summary])
[writing-mode=]([7.29.7];[Section D.3.3 Property summary])
Shorthand influencing the above properties:
[size=]([7.31.21];[Section D.3.3 Property summary])
[Example 4-1: The document element The XSL-FO page description element:
01  <?xml version="1.0" encoding="utf-8"?>
02  <root xmlns="http://www.w3.org/1999/XSL/Format" font-size="16pt">
03   <layout-master-set>
04   <simple-page-master master-name="bookpage"
05   page-height="297mm" page-width="210mm"
06   margin-top="15mm" margin-bottom="15mm"
07   margin-left="15mm" margin-right="15mm">
08   <region-body region-name="bookpage-body"
09   margin-top="5mm" margin-bottom="5mm"/>
10   </simple-page-master>
11   </layout-master-set>
12   <page-sequence master-reference="bookpage">
13   <title>Hello world example</title>
14   <flow flow-name="bookpage-body">
15   <block>Hello XSL-FO!</block>
16   </flow>
17   </page-sequence>
18  </root>
]
4.3.4 <region-body> Object
[> 4.3.5][> 5.][< 4.3.3][^][^^][^^^]
Purpose:
[[1] - the definition of the middle area inside all perimeter regions defined for the page
]
Content:
[[1] - ([6.4.14]) EMPTY
 [1] - Referring object:
[[2] - <[simple-page-master]>([6.4.13];[Section 4.3.3 <simple-page-master> Object])
]]
Property sets:
[[1] - [Common Border, Padding, and Background Properties]([7.8];[Section D.1.4 Common Border, Padding, and Background Properties])
 [1] - [Common Margin Properties-Block]([7.11];[Section D.1.7 Common Margin Properties-Block])
]
Other required property:
[region-name=]([7.27.17];[Section D.3.3 Property summary])
Other optional properties:
[clip=]([7.21.1];[Section D.3.3 Property summary])
[column-count=]([7.27.2];[Section D.3.3 Property summary])
[column-gap=]([7.27.3];[Section D.3.3 Property summary])
[display-align=]([7.14.4];[Section D.3.3 Property summary])
[overflow=]([7.21.2];[Section D.3.3 Property summary])
[reference-orientation=]([7.21.3];[Section D.3.3 Property summary])
[writing-mode=]([7.29.7];[Section D.3.3 Property summary])
Properties of note:
[[1] - the [region-name]= property is required but the default name of "xsl-region-body" is used as this required property if a name is not supplied in the XSL-FO instance
 [1] - even though [padding]= and [border-width]= properties are indicated as available indirectly through the common property set, these values are fixed at "0pt" in XSL-FO 1.0
 [1] - [display-align]= is used to keep the information in the region snug against the before edge, snug against the after edge, or centered in the middle of the two in the block progression direction
]
The placement of this region is illustrated in [Figure 4.2]
[Example 4-2: The document element The page body description element:
01  <?xml version="1.0" encoding="utf-8"?>
02  <root xmlns="http://www.w3.org/1999/XSL/Format" font-size="16pt">
03   <layout-master-set>
04   <simple-page-master master-name="bookpage"
05   page-height="297mm" page-width="210mm"
06   margin-top="15mm" margin-bottom="15mm"
07   margin-left="15mm" margin-right="15mm">
08   <region-body region-name="bookpage-body"
09   margin-top="5mm" margin-bottom="5mm"/>
10   </simple-page-master>
11   </layout-master-set>
12   <page-sequence master-reference="bookpage">
13   <title>Hello world example</title>
14   <flow flow-name="bookpage-body">
15   <block>Hello XSL-FO!</block>
16   </flow>
17   </page-sequence>
18  </root>
]
4.3.5 Page sequence titling
[> 4.3.6][> 5.][< 4.3.4][^][^^][^^^]
A sequence of pages can be assigned a title
[[1] - presented to the user by the formatter in an implementation dependent fashion
[[2] - the formatter may choose to render the title on the result canvas
[[3] - once per page sequence
 [3] - once per page
][2] - an interactive user agents could display in the title bar of a screen window
 [2] - the title may be suppressed altogether by the formatter
]]
Portability issue with respect to development
[[1] - a stylesheet writer may be using a formatter that presents the title information outside of the page canvas
 [1] - the user of a stylesheet may be using a formatter that presents the title information on the page canvas
[[2] - the result may not be as desired by the stylesheet writer
]]
4.3.6 <title> Object
[> 5.][< 4.3.5][^][^^][^^^]
Purpose:
[[1] - a page sequence's ancillary description not rendered on the page canvas
]
Content:
[[1] - ([6.4.21]) (#PCDATA|[​%inline;])*
 [1] - Child object:
[[2] - [%inline;]([6.2];[Section 3.4.3 Inline-level objects])
][1] - Referring object:
[[2] - <[page-sequence]>([6.4.5];[Section 3.3.10 <page-sequence> Object])
]]
[[1] - must not have a marker or out-of-line descendant:
[[2] - <[marker]>
 [2] - <[float]>
 [2] - <[footnote]>
 [2] - <[block-container]> with an absolute position specification
]]
Property sets:
[[1] - [Common Accessibility Properties]([7.5];[Section D.1.2 Common Accessibility Properties])
 [1] - [Common Aural Properties]([7.7];[Section D.1.3 Common Aural Properties])
 [1] - [Common Border, Padding, and Background Properties]([7.8];[Section D.1.4 Common Border, Padding, and Background Properties])
 [1] - [Common Font Properties]([7.9];[Section D.1.5 Common Font Properties])
 [1] - [Common Margin Properties-Inline]([7.12];[Section D.1.8 Common Margin Properties-Inline])
]
Other optional properties:
[color=]([7.18.1];[Section D.3.3 Property summary])
[line-height=]([7.16.4];[Section D.3.3 Property summary])
[visibility=]([7.30.17];[Section D.3.3 Property summary])
Shorthand influencing the above properties:
[font=]([7.31.13];[Section D.3.3 Property summary])
[Example 4-3: The document element The XSL-FO page body description element:
01  <?xml version="1.0" encoding="utf-8"?>
02  <root xmlns="http://www.w3.org/1999/XSL/Format" font-size="16pt">
03   <layout-master-set>
04   <simple-page-master master-name="bookpage"
05   page-height="297mm" page-width="210mm"
06   margin-top="15mm" margin-bottom="15mm"
07   margin-left="15mm" margin-right="15mm">
08   <region-body region-name="bookpage-body"
09   margin-top="5mm" margin-bottom="5mm"/>
10   </simple-page-master>
11   </layout-master-set>
12   <page-sequence master-reference="bookpage">
13   <title>Hello world example</title>
14   <flow flow-name="bookpage-body">
15   <block>Hello XSL-FO!</block>
16   </flow>
17   </page-sequence>
18  </root>
]


This is an accessible version of Crane's commercial training material. The content has been specifically designed to assist screen reader software in viewing the entire textual content. Figures are replaced with text narratives.

Navigation hints are in square brackets:
[Tx.x] and [Fx.x] are textual representations of the applicability icons;
[digit] indicates list depth for nested lists;
[link [URL]] indicates the URL of a hyperlink if different than link;
[EXAMPLE] indicates an example listing of code;
[FIGURE] indicates the presence of a figure replaced by its description;
[>] jumps forward;
[<] jumps backward;
[^] jumps to start of the section;
[^^] jumps to the start of the chapter;
[^^^] jumps to the table of contents.
Suggestions for improvement are welcome: [info@CraneSoftwrights.com]
Book sales: [http://www.CraneSoftwrights.com/links/trn-acc.htm]
Information: [http://www.CraneSoftwrights.com/links/info-acc.htm]
This content is protected by copyright and, as there are no means to protect this accessible version from plagiarism, please do not make any commercial edition available to others.

+//ISBN 978-1-894049::CSL::Courses::PFUX//DOCUMENT Practical Formatting Using XSL-FO 2008-01-27 17:30UTC//EN
Practical Formatting Using XSL-FO
Seventh Edition - 2008-01-27
ISBN 978-1-894049-19-1
Copyright © Crane Softwrights Ltd.