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

13. Where XSL-FO 1 falls short
[> A.][< 12.2.4][^^^]
13.0 What is missing in XSL-FO 1?
[> 13.1][> A.][< 13.][^^][^^^]
Important note: this section is conjecture on the part of the author and does not represent any official (or even unofficial) comments from the development committee.
Of course the designers of XSL-FO 1 could not put everything into the specification and ever consider their work "complete", but what is available is very useful
[[1] - measured amount of functionality to ensure successful implementation and deployment
 [1] - need real-world experience with first definition to ensure design principles are sound
 [1] - a number of features are already addressed in XSL-FO 1.1
]
Indications are in XSL-FO 1 of more complex functionality to follow
[[1] - the <[simple-page-master]> construct name implies perhaps a more complete page geometry definition is planned for the future
 [1] - property set collections of only a single property
[[2] - if not planning for the future, why not just list the property instead of putting it alone in a set?
]]
Some important functionality needed by compositors is left to a future version
[[1] - page-related formatting requirements
 [1] - geometry-related formatting requirements
 [1] - alignment of areas
]
Many vendors offer a wide range of extra features
[[1] - new nuance
 [1] - new functionality
]
13.1 Page-related formatting requirements
[> 13.2][< 13.0][^^][^^^]
13.1.1 Arbitrating between retrieved content
[> 13.1.2][> 13.2][> A.][< 13.0][^^][^^^]
A page may have many candidate markers for retrieval where only a subset is needed
[[1] - e.g. a page in a document may have separate areas marked with "Confidential", "Secret" and "Top Secret"
 [1] - the objective is to choose from the available markers in scope only the "highest" or any particular one of those found
]
Retrieved content cannot be compared for algorithmic inclusion or rejection
[[1] - one would need to be able to express criteria for choosing between available markers
 [1] - the XSL-FO 1.0 expression language doesn't have comparative operators
 [1] - one future approach might be the assignment of priority to markers in a class and the retrieval of the marker in scope of a specific or highest priority
]
Other limitations exist on retrieving markers found on a page
[[1] - one cannot count the markers and express the number found
 [1] - one cannot work with other than the first or last marker on a page
[[2] - the number of markers between the first and last, if any, is irrelevant
]]
Work around is to render each retrieved content in place with opaque backgrounds
[[1] - use <[block-container]> with an absolute position and a different value of [z-index]= for each retrieved content
 [1] - utilize the identical position for each absolutely positioned container
 [1] - assign the higher index numbers to the "more important" containers
 [1] - use an opaque white background to obscure any other value present at the location
 [1] - retrieve the words desired from the marker into each container
 [1] - only the "top-most" container will be visible, obscuring the containers that are behind
 [1] - this strategy was conceived by Eliot Kimber
]
From the marker-arb.fo example:
[Example 13-1: Overlaid block containers
01    <static-content flow-name="frame-before">
02   <block-container z-index="1" absolute-position="absolute"
03   height="12pt" width="3cm" right="0cm">
04   <block background-color="white" text-align="end"
05   font-family="Courier" font-size="12pt">
06   <retrieve-marker retrieve-class-name="classified"
07   retrieve-boundary="page"/>
08   </block>
09   </block-container>
10   <block-container z-index="2" absolute-position="absolute"
11   height="12pt" width="3cm" right="0cm">
12   <block background-color="white" text-align="end"
13   font-family="Courier" font-size="12pt">
14   <retrieve-marker retrieve-class-name="secret"
15   retrieve-boundary="page"/>
16   </block>
17   </block-container>
18   <block-container z-index="3" absolute-position="absolute"
19   height="12pt" width="3cm" right="0cm">
20   <block background-color="white" text-align="end"
21   font-family="Courier" font-size="12pt">
22   <retrieve-marker retrieve-class-name="topsecret"
23   retrieve-boundary="page"/>
24   </block>
25   </block-container>
26   </static-content>
27  ...
28   <block space-before="4em">
29   <marker marker-class-name="classified">classified</marker>
30   This is a classified test</block>
31   <block space-before="4em">This is a test</block>
32   <block space-before="4em">
33   <marker marker-class-name="secret">secret</marker>
34   This is a secret test</block>
35   <block space-before="4em">This is a test</block>
36   <block space-before="4em">
37   <marker marker-class-name="topsecret">top secret</marker>
38   This is a top secret test</block>
39   <block space-before="4em">This is a test</block>
]
13.1.2 Retrieving markers into the body
[> 13.1.3][> 13.2][> A.][< 13.1.1][^][^^][^^^]
[F1.0]No way to retrieve a marker anywhere except in static content
[[1] - e.g. table caption changes with "continued..." when table overflows a page
[[2] - conditionally putting an indication that the table continues on the next page
]]
[F1.1]XSL-FO 1.1 allows retrieval into table headers and footers
[[1] - but not elsewhere in the body
]
Work-around is to put the string in the static content.
13.1.3 Line numbering
[> 13.1.4][> 13.2][> A.][< 13.1.2][^][^^][^^^]
No way to indicate that lines on the page are to be numbered
[[1] - often necessary to count lines within a block, a page, a page sequence or the entire document
 [1] - useful during the editing practice for citing where the focus of discussion is in a document
]
The formatter is responsible for creating lines based on the content flowed into a block
[[1] - the stylesheet doesn't know where the formatter will break lines
 [1] - no defined area of the line is reserved for containing line numbers
]
Work around is for the stylesheet to produce as many blocks as required for the lines
[[1] - generate line numbers in the stylesheet for each line
[[2] - prefix each block with a line number in a fixed width
 [2] - pair a block the line number with the block with the line content by using a <[list-block]> construct
][1] - may wish to turn off the wrapping of the content in the line to prevent an overflowed line from disrupting the line numbering and apparent spacing
]
Work around is to paint the background with line numbers
[[1] - can use a graphic with line numbers
 [1] - can extend perimeter region behind body region and flow line numbers into background
 [1] - problem that there is no guarantee the line numbers will line up because of any [space-before]= or [space-after]= or other formatting objects of arbitrary size
]
13.1.4 Footnotes
[> 13.1.5][> 13.2][> A.][< 13.1.3][^][^^][^^^]
Page-based footnote citations
[[1] - it is often desired to restart the numbering of footnotes on each page that has footnotes
 [1] - only the formatter knows which pages on which content will be placed
 [1] - the stylesheet is responsible for all footnote citations
 [1] - the stylesheet can never know when to restart the numbering of footnotes
]
Column-wide footnote rendering
[[1] - a number of users ask for footnotes to grow from the bottom of a column
 [1] - this is available as a vendor extension in a number of products
]
Inline footnote rendering
[[1] - a number of users ask for footnote bodies to be flowed inline in the blocks of the footnote reference area
 [1] - many short footnotes as block-level constructs will leave an exorbitant amount of white-space
 [1] - many short footnotes as inline-level constructs would make for very compact and efficient use of the footnote reference area
 [1] - this is being considered as a vendor extension in some products
]
Multiple references to the same footnote
[[1] - cannot cite the same footnote with two references expecting the footnote to be on the same page as both references
 [1] - using an empty footnote body for the second and subsequent footnotes will trigger unnecessary xsl-footnote-separator sub-regions when there are no other footnotes that would need such a region on the page
]
13.1.5 Determining the current formatted location
[> 13.2][> A.][< 13.1.4][^][^^][^^^]
A common request is to know the current running position on a page when transforming
[[1] - wanting to know the page number
 [1] - wanting to know the formatted location on the page
]
The two-phase arms-length architecture of XSL does not permit detection of the current formatted position
[[1] - XSLT produces a standalone transformation result before an XSL-FO engine can act on it
 [1] - cannot predetermine the location of the formatted position when doing the transformation
[[2] - different implementations can have different interpretations based on built-in defaults
]]
Work-around is to include in the XSL-FO instance as many contingencies as possible
[[1] - the XSL-FO engine can only work with the information found within the expression of formatting intent
]
13.2 Geometry-related formatting requirements
[> 13.3][< 13.1.5][^^][^^^]
13.2.1 Choosing page geometry based on page content
[> 13.3][> A.][< 13.1.5][^^][^^^]
It is not possible in native XSL-FO to alternate page geometries based on content in the middle of a page sequence
[[1] - may wish to select an alternative page geometry based on the formatted result
[[2] - e.g. use an alternative reference orientation for a table that is "too wide"
][1] - may wish to select an alternative page geometry (e.g. with wider margins) to avoid breaking a keep condition
]
A workaround is the freely available PSMI semantic (see [Figure 8.8])
[[1] - not a formatter-managed solution so some nuances cannot be addressed
[[2] - e.g. cannot choose which page master to use based on the retrieved dimensions of a rendered graphic
 [2] - e.g. cannot choose based on the rendered width of a table
][1] - viable workaround only when the stylesheet can make the decision to use an alternative geometry
]
13.3 Alignment of areas
[> A.][< 13.2.1][^^][^^^]
13.3.1 Aligning flows and marks
[> A.][< 13.2.1][^^][^^^]
It is a common need to align parallel streams of content in actual or virtual columns on the page
[[1] - e.g. line numbers to the edge of a block of lines
 [1] - e.g. marginalia associated with content found in the middle of a block of lines
 [1] - e.g. aligned blocks or table rows across face-to-face pages
]
[F1.0]No support of change bars
[F1.1]Change bars supported
A work around may be to use tables with invisible borders
[[1] - turn on border edges to mimic change bars
 [1] - problem at all times because one is unable to judge in the transformation the extent of the formatted result determined by the formatter
 [1] - hidden rows align content in sister columns
]


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.