| <?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 |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| <!-- $Id$ --> |
| <testcase> |
| <info> |
| <p> |
| This test checks markers, especially the retrieval of markers |
| belonging to a preceding page -- nested areas. |
| </p> |
| </info> |
| <fo> |
| <fo:root |
| xmlns:fo="http://www.w3.org/1999/XSL/Format" |
| xmlns:fox="http://xml.apache.org/fop/extensions" |
| xmlns:svg="http://www.w3.org/2000/svg"> |
| <fo:layout-master-set> |
| <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> |
| <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:simple-page-master> |
| <fo:page-sequence-master master-name="odd-even"> |
| <fo:repeatable-page-master-alternatives> |
| <fo:conditional-page-master-reference |
| master-reference="odd" |
| page-position="any" |
| odd-or-even="odd" /> |
| <fo:conditional-page-master-reference |
| master-reference="even" |
| page-position="any" |
| odd-or-even="even" /> |
| </fo:repeatable-page-master-alternatives> |
| </fo:page-sequence-master> |
| </fo:layout-master-set> |
| |
| <fo:page-sequence master-reference="odd-even"> |
| <fo:static-content flow-name="before-odd"> |
| <fo:block> |
| <fo:retrieve-marker retrieve-class-name="chapter" |
| retrieve-boundary="page-sequence" |
| retrieve-position="first-including-carryover"/> |
| <fo:leader leader-length.minimum="12pt" |
| leader-length.optimum="80pt" |
| leader-length.maximum="100%" leader-pattern="space"> |
| </fo:leader>page <fo:page-number/></fo:block> |
| <fo:block> |
| <fo:retrieve-marker retrieve-class-name="chapter" |
| retrieve-boundary="page-sequence" |
| retrieve-position="first-starting-within-page"/> |
| </fo:block> |
| </fo:static-content> |
| <fo:static-content flow-name="before-even"> |
| <fo:block> |
| <fo:retrieve-marker retrieve-class-name="section" |
| retrieve-boundary="page-sequence" |
| retrieve-position="first-including-carryover"/> |
| <fo:leader leader-length.minimum="12pt" |
| leader-length.optimum="80pt" |
| leader-length.maximum="100%" leader-pattern="space"> |
| </fo:leader>page <fo:page-number/> |
| </fo:block> |
| <fo:block> |
| <fo:retrieve-marker retrieve-class-name="chapter" |
| retrieve-boundary="page-sequence" |
| retrieve-position="first-starting-within-page"/> |
| </fo:block> |
| </fo:static-content> |
| <fo:static-content flow-name="after-odd"> |
| <fo:block text-align="end"> |
| <fo:retrieve-marker retrieve-class-name="chapter" |
| retrieve-boundary="page-sequence" |
| retrieve-position="last-starting-within-page"/> |
| </fo:block> |
| <fo:block text-align="end"> |
| <fo:retrieve-marker retrieve-class-name="chapter" |
| retrieve-boundary="page-sequence" |
| retrieve-position="last-ending-within-page"/> |
| </fo:block> |
| </fo:static-content> |
| <fo:static-content flow-name="after-even"> |
| <fo:block text-align="end"> |
| <fo:retrieve-marker retrieve-class-name="section" |
| retrieve-boundary="page-sequence" |
| retrieve-position="last-starting-within-page"/> |
| </fo:block> |
| <fo:block text-align="end"> |
| <fo:retrieve-marker retrieve-class-name="section" |
| retrieve-boundary="page-sequence" |
| retrieve-position="last-ending-within-page"/> |
| </fo:block> |
| </fo:static-content> |
| |
| <fo:flow flow-name="xsl-region-body"> |
| <fo:block 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> |
| <fo:block space-before="6pt" space-after="6pt" font-weight="bold"> |
| 5 Property Refinement / Resolution |
| </fo:block> |
| <fo:block> |
| 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> |
| <fo:block id="sect5-1" background-color="#DD1"> |
| <fo:marker marker-class-name="section">5.1 Specified, Computed, and Actual Values, and Inheritance</fo:marker> |
| <fo:block space-before="6pt" space-after="6pt" font-weight="bold"> |
| 5.1 Specified, Computed, and Actual Values, and Inheritance |
| </fo:block> |
| <fo:block> |
| 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> |
| </fo:block> |
| <fo:block id="sect5-2" background-color="#DD1"> |
| <fo:marker marker-class-name="section">5.2 Specified Values</fo:marker> |
| <fo:block space-before="6pt" space-after="6pt" font-weight="bold"> |
| 5.2 Specified Values |
| </fo:block> |
| <fo:block> |
| The specified value of a property is determined using the |
| following mechanisms (in order of precedence) |
| </fo:block> |
| <fo:block> |
| 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". |
| </fo:block> |
| <fo:block> |
| 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> |
| </fo:block> |
| </fo:block> |
| <fo:block 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> |
| <fo:block space-before="6pt" space-after="6pt" font-weight="bold"> |
| 6 Shorthand Expansion |
| </fo:block> |
| <fo:block> |
| 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> |
| <fo:block id="sect6-1" background-color="#DD6"> |
| <fo:marker marker-class-name="section">6.1 Actual Values</fo:marker> |
| <fo:block space-before="6pt" space-after="6pt" font-weight="bold"> |
| 6.1 Actual Values |
| </fo:block> |
| <fo:block> |
| 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". |
| </fo:block> |
| </fo:block> |
| </fo:block> |
| |
| <fo:block id="ch7" background-color="#EEE"> |
| <fo:block> |
| 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 |
| properties". |
| </fo:block> |
| <fo:block> |
| 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]. |
| </fo:block> |
| <fo:block> |
| 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. |
| </fo:block> |
| <fo:block> |
| 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 |
| applied. |
| </fo:block> |
| <fo:block> |
| 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. |
| </fo:block> |
| </fo:block> |
| |
| </fo:flow> |
| </fo:page-sequence> |
| </fo:root> |
| </fo> |
| <checks> |
| <!-- page 1 --> |
| <true xpath="starts-with(//pageViewport[@nr=1]//regionBefore/block[1],'5 ')"/> |
| <true xpath="starts-with(//pageViewport[@nr=1]//regionBefore/block[2],'5 ')"/> |
| <true xpath="starts-with(//pageViewport[@nr=1]//regionAfter/block[1],'5 ')"/> |
| <true xpath="starts-with(//pageViewport[@nr=1]//regionAfter/block[2],'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/block[1],'5 ')"/> |
| <true xpath="starts-with(//pageViewport[@nr=2]//regionBefore/block[2],'6 ')"/> |
| <true xpath="starts-with(//pageViewport[@nr=2]//regionAfter/block[1],'6.1 ')"/> |
| <true xpath="starts-with(//pageViewport[@nr=2]//regionAfter/block[2],'5 ')"/> |
| <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/block[1],'6 ')"/> |
| <true xpath="starts-with(//pageViewport[@nr=3]//regionBefore/block[2],'6 ')"/> |
| <true xpath="starts-with(//pageViewport[@nr=3]//regionAfter/block[1],'6 ')"/> |
| <true xpath="starts-with(//pageViewport[@nr=3]//regionAfter/block[2],'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/block[1],'6 ')"/> |
| <true xpath="starts-with(//pageViewport[@nr=4]//regionBefore/block[2],'6 ')"/> |
| <true xpath="starts-with(//pageViewport[@nr=4]//regionAfter/block[1],'6 ')"/> |
| <true xpath="starts-with(//pageViewport[@nr=4]//regionAfter/block[2],'6 ')"/> |
| <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/block[1],'6 ')"/> |
| <true xpath="starts-with(//pageViewport[@nr=5]//regionBefore/block[2],'6 ')"/> |
| <true xpath="starts-with(//pageViewport[@nr=5]//regionAfter/block[1],'6 ')"/> |
| <true xpath="starts-with(//pageViewport[@nr=5]//regionAfter/block[2],'6 ')"/> |
| <true xpath="not(//pageViewport[@nr=5]//regionBody//block[starts-with(.,'6 ')])"/> |
| <true xpath="not(//pageViewport[@nr=5]//regionBody//block[starts-with(.,'6.1 ')])"/> |
| </checks> |
| </testcase> |