blob: 8f7a0509d34b396d8860740216ef8f8d7f6ccb4e [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
See the License for the specific language governing permissions and
limitations under the License.
<!-- $Id$ -->
This test checks markers, especially the retrieval of markers
belonging to a preceding page.
<fo:simple-page-master master-name="odd"
page-width="5in" page-height="5in">
<fo:region-body margin="0.5in 0in"/>
<fo:region-before extent="0.5in" region-name="before-odd"/>
<fo:region-after extent="0.5in" region-name="after-odd"/>
<fo:simple-page-master master-name="even"
page-width="5in" page-height="5in">
<fo:region-body margin="0.5in 0in"/>
<fo:region-before extent="0.5in" region-name="before-even"/>
<fo:region-after extent="0.5in" region-name="after-even"/>
<fo:page-sequence-master master-name="odd-even">
odd-or-even="odd" />
odd-or-even="even" />
<fo:page-sequence master-reference="odd-even">
<fo:static-content flow-name="before-odd">
<fo:retrieve-marker retrieve-class-name="chapter"
<fo:leader leader-length.minimum="12pt"
leader-length.maximum="100%" leader-pattern="space">
</fo:leader>page <fo:page-number/></fo:block>
<fo:static-content flow-name="before-even">
<fo:retrieve-marker retrieve-class-name="section"
<fo:leader leader-length.minimum="12pt"
leader-length.maximum="100%" leader-pattern="space">
</fo:leader>page <fo:page-number/>
<fo:static-content flow-name="after-odd">
<fo:block text-align="end">
<fo:retrieve-marker retrieve-class-name="chapter"
<fo:static-content flow-name="after-even">
<fo:block text-align="end">
<fo:retrieve-marker retrieve-class-name="section"
<fo:flow flow-name="xsl-region-body">
<fo:block space-before="6pt" space-after="6pt"
font-weight="bold" id="ch5" background-color="#EE1">
<fo:marker marker-class-name="chapter">5 Property Refinement / Resolution</fo:marker>
<fo:marker marker-class-name="section">5 Property Refinement / Resolution</fo:marker>5 Property Refinement / Resolution
During refinement the set of properties that apply to a
formatting object is transformed into a set of traits that define
constraints on the result of formatting. For many traits there is a
one-to-one correspondence with a property; for other traits the
transformation is more complex. Details on the transformation are
described below.
<fo:block space-before="6pt" space-after="6pt"
font-weight="bold" id="sect5-1" background-color="#DD1">
<fo:marker marker-class-name="section">5.1 Specified, Computed, and Actual Values, and Inheritance</fo:marker>5.1 Specified,
Computed, and Actual Values, and Inheritance
For every property that is applicable to a given
formatting object, it is necessary to determine the value of the
property. Three variants of the property value are distinguished: the
specified value, the computed value, and the actual value.
<fo:block space-before="6pt" space-after="6pt"
font-weight="bold" id="sect5-2" background-color="#DD1">
<fo:marker marker-class-name="section">5.2 Specified Values</fo:marker>5.2 Specified Values
The specified value of a property is determined using the
following mechanisms (in order of precedence)
If the tree-construction process placed the property on
the formatting object, use the value of that property as the specified
value. This is called "explicit specification".
Otherwise, if the property is inheritable, use the value
of that property from the parent formatting object, generally the
computed value (see below).
<fo:block space-before="6pt" space-after="6pt"
font-weight="bold" id="ch6" background-color="#EE6">
<fo:marker marker-class-name="chapter">6 Shorthand Expansion</fo:marker>
<fo:marker marker-class-name="section">6 Shorthand Expansion</fo:marker>6 Shorthand Expansion
In XSL there are two kinds of shorthand properties; those
originating from CSS, such as "border", and those that arise from
breaking apart and/or combining CSS properties, such as
"page-break-inside". In XSL both types of shorthands are handled in
the same way.
<fo:block space-before="6pt" space-after="6pt"
font-weight="bold" id="sect6-1" background-color="#DD6">
<fo:marker marker-class-name="section">6.1 Actual Values</fo:marker>6.1 Actual Values
Specified values may be absolute (i.e., they are not
specified relative to another value, as in "red" or "2mm") or relative
(i.e., they are specified relative to another value, as in "auto",
"2em", and "12%"), or they may be expressions. For most absolute
values, no computation is needed to find the computed value. Relative
values, on the other hand, must be transformed into computed values:
percentages must be multiplied by a reference value (each property
defines which value that is), values with a relative unit (em) must be
made absolute by multiplying with the appropriate font size, "auto"
values must be computed by the formulas given with each property,
certain property values ("smaller", "bolder") must be replaced
according to their definitions. The computed value of any property
that controls a border width where the style of the border is "none"
is forced to be "0pt".
Some properties have more than one way in which the
property value can be specified. The simplest example of such
properties are those which can be specified either in terms of a
direction relative to the writing-mode (e.g., padding-before) or a
direction in terms of the absolute geometric orientation of the
viewport (e.g., padding-top). These two properties are called the
relative property and the absolute property,
respectively. Collectively, they are called "corresponding
Specifying a value for one property determines both a computed
value for the specified property and a computed value for the
corresponding property. Which relative property corresponds to which
absolute property depends on the writing-mode. For example, if the
"writing-mode" at the top level of a document is "lr-tb", then
"padding-start" corresponds to "padding-left", but if the
"writing-mode" is "rl-tb", then "padding-start" corresponds to
"padding-right". The exact specification of how to compute the values
of corresponding properties is given in [5.3 Computing the Values of
Corresponding Properties].
In most cases, elements inherit computed values. However,
there are some properties whose specified value may be inherited
(e.g., some values for the "line-height" property). In the cases where
child elements do not inherit the computed value, this is described in
the property definition.
A computed value is in principle ready to be used, but a
user agent may not be able to make use of the value in a given
environment. For example, a user agent may only be able to render
borders with integer pixel widths and may, therefore, have to adjust
the computed width to an integral number of media pixels. The actual
value is the computed value after any such adjustments have been
Some of the properties applicable to formatting objects
are "inheritable." Such properties are so identified in the property
description. The inheritable properties can be placed on any
formatting object. The inheritable properties are propagated down the
formatting object tree from a parent to each child. (These properties
are given their initial value at the root of the result tree.) For a
given inheritable property, if that property is present on a child,
then that value of the property is used for that child (and its
descendants until explicitly re-set in a lower descendant); otherwise,
the specified value of that property on the child is the computed
value of that property on the parent formatting object. Hence there is
always a specified value defined for every inheritable property for
every formatting object.
<!-- page 1 -->
<true xpath="starts-with(//pageViewport[@nr=1]//regionBefore,'5 ')"/>
<true xpath="starts-with(//pageViewport[@nr=1]//regionAfter,'5 ')"/>
<true xpath="//pageViewport[@nr=1]//regionBody//block[starts-with(.,'5 ')]"/>
<true xpath="//pageViewport[@nr=1]//regionBody//block[starts-with(.,'5.1 ')]"/>
<true xpath="//pageViewport[@nr=1]//regionBody//block[starts-with(.,'5.2 ')]"/>
<!-- page 2 -->
<true xpath="starts-with(//pageViewport[@nr=2]//regionBefore,'6 ')"/>
<true xpath="starts-with(//pageViewport[@nr=2]//regionAfter,'6.1 ')"/>
<true xpath="//pageViewport[@nr=2]//regionBody//block[starts-with(.,'6 ')]"/>
<true xpath="//pageViewport[@nr=2]//regionBody//block[starts-with(.,'6.1 ')]"/>
<!-- page 3 -->
<true xpath="starts-with(//pageViewport[@nr=3]//regionBefore,'6 ')"/>
<true xpath="starts-with(//pageViewport[@nr=3]//regionAfter,'6 ')"/>
<true xpath="not(//pageViewport[@nr=3]//regionBody//block[starts-with(.,'6 ')])"/>
<true xpath="not(//pageViewport[@nr=3]//regionBody//block[starts-with(.,'6.1 ')])"/>
<!-- page 4 -->
<true xpath="starts-with(//pageViewport[@nr=4]//regionBefore,'6.1 ')"/>
<true xpath="starts-with(//pageViewport[@nr=4]//regionAfter,'6.1 ')"/>
<true xpath="not(//pageViewport[@nr=4]//regionBody//block[starts-with(.,'6 ')])"/>
<true xpath="not(//pageViewport[@nr=4]//regionBody//block[starts-with(.,'6.1 ')])"/>
<!-- page 5 -->
<true xpath="starts-with(//pageViewport[@nr=5]//regionBefore,'6 ')"/>
<true xpath="starts-with(//pageViewport[@nr=5]//regionAfter,'6 ')"/>
<true xpath="not(//pageViewport[@nr=5]//regionBody//block[starts-with(.,'6 ')])"/>
<true xpath="not(//pageViewport[@nr=5]//regionBody//block[starts-with(.,'6.1 ')])"/>