<?xml version="1.0" encoding="utf-8"?>


<!-- example for a simple fo file. At the beginning the page layout is set.
Below fo:root there is always
- a single fo:layout-master-set which defines one or more page layouts
- an optional fo:declarations,
- and a sequence of one or more fo:page-sequences containing the text and formatting instructions -->

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

  <fo:layout-master-set>
  <!-- fo:layout-master-set defines in its children the page layout:
       the pagination and layout specifications
       - page-masters: have the role of describing the intended subdivisions
                       of a page and the geometry of these subdivisions
       - page-sequence-masters: have the role of describing the sequence
                                of page-masters that will be used to generate
                                pages during the formatting of an fo:page-sequence

  -->

    <!-- layout for the first page -->
    <fo:simple-page-master master-name="first"
                  page-height="29.7cm"
                  page-width="21cm"
                  margin-top="1cm"
                  margin-bottom="2cm"
                  margin-left="2.0cm + 0.5cm"
                  margin-right="(5cm * 1cm) div 2cm">
      <fo:region-body margin-top="3cm"/>
      <fo:region-before extent="3cm"/>
      <fo:region-after extent="1.5cm"/>
    </fo:simple-page-master>

    <!-- layout for the other pages -->
    <fo:simple-page-master master-name="rest"
                  page-height="abs(-30cm + .3cm)"
                  page-width="(10cm * 2) + 1cm"
                  margin-top="round(.5) * 1cm"
                  margin-bottom="round(2.4) * 1cm"
                  margin-left="2.5 * 1cm"
                  margin-right="5.5cm - 3cm">
      <fo:region-body margin-top="2.5cm"/>
      <fo:region-before extent="2.5cm"/>
      <fo:region-after extent="1.5cm"/>
    </fo:simple-page-master>

<fo:page-sequence-master master-name="basicPSM" >
  <fo:repeatable-page-master-alternatives>
    <fo:conditional-page-master-reference master-reference="first"
      page-position="first" />
    <fo:conditional-page-master-reference master-reference="rest"
      page-position="rest" />
    <!-- recommended fallback procedure -->
    <fo:conditional-page-master-reference master-reference="rest" />
  </fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>

  </fo:layout-master-set>
  <!-- end: defines page layout -->

  <!-- actual layout -->
  <fo:page-sequence master-reference="basicPSM">

    <!-- header -->
    <fo:static-content flow-name="xsl-region-before">
      <fo:block text-align="end"
            font-size="10pt"
            font-family="serif"
            line-height="1em + 4pt" >
        Property Function Tests - p. <fo:page-number/>
      </fo:block>
    </fo:static-content>

    <fo:flow flow-name="xsl-region-body">

      <!-- defines text title level 1-->
      <fo:block font-size="min(18pt,20pt)"
            font-family="sans-serif"
            line-height="max(24pt,18pt)"
            space-after.optimum="5 mod 3 * 7.5pt"
            background-color="rgb(0,0,255)"
            color="rgb(255,255,255)"
            text-align="center"
            padding-top="3pt">
        Property Function Tests
      </fo:block>

      <!-- defines text title level 2-->
      <fo:block font-size="floor(16.3) * 1pt"
            font-family="sans-serif"
            line-height="2pt * ceiling(9.3)"
            space-before.optimum="10pt"
            space-after.optimum="10pt"
            text-align="start"
      keep-with-next.within-page="always"
      keep-together.within-page="always"
            padding-top="3pt">
  Function: object from-parent( <fo:inline font-weight='bold'>NCName</fo:inline>)
      </fo:block>

      <!-- Normal text -->
      <fo:block font-size="12pt"
                font-family="sans-serif"
                line-height="1.25em"
                space-after="3pt"
          keep-together="auto"
                text-align="start">
The from-parent function returns a computed value of the property
whose name matches the argument specified. The value returned is that
for the parent of the formatting object for which the expression is
evaluated. If there is no parent, the value returned is the initial
value. If the argument specifies a shorthand property and if the
expression only consists of the from-parent function with an argument
matching the property being computed, it is interpreted as an
expansion of the shorthand with each property into which the shorthand
expands, each having a value of from-parent with an argument matching
the property. It is an error if arguments matching a shorthand
property are used in any other way.
        <fo:block font-size="from-parent(font-size) - 2pt"
                font-family="sans-serif"
    space-before="from-parent(space-after)"
                text-align="center">
     Here is a nested block with font-size =
from-parent(font-size) - 2pt.
Since its parent has font-size=12pt, that should mean 10pt. It should
keep the line height of 1.25em, which means 12.5pt leading. It's
space-before value is set to the space-after value from its
parent. Note that neither of these are inheritable. Does it look right?
        </fo:block>
        <fo:block font-size="from-parent(font-size) + 2pt"
          space-before="2pt"
          space-after="from-parent(space-after)"
                font-family="sans-serif"
    start-indent="from-parent(start-indent) + 1cm"
    end-indent="from-parent(end-indent) + 1cm"
                text-align="end"
    background-color="black" color="rgb(50%,50%,50%)">
Here is a nested block with text 2pt larger than its parent (that
should be 14pt). This parent is indented 1cm on both start and end
directions with respect to the values from its parent (which aren't
specified, so they default to 0.0). The color is set to 50% (using the
rgb function with % arguements, and the background color for this
block is black (specified as a keyword). In this block, we'll put an
<fo:inline color='inherited-property-value(background-color)'
background-color='inherited-property-value(color)'>inline object</fo:inline>
whose background and foreground colors invert those of its containing
block. This uses the <fo:inline
font-style='oblique'>inherited-property-value</fo:inline>
function. Here's an <fo:inline color='black' background-color='white'>inline
object</fo:inline> with fixed colors (black on white). That doesn't
work either. Guess it's not my problem... So let's try it with font
sizes. In this block, we'll put an
<fo:inline font-size='inherited-property-value(font-size)+2pt'>inline
object whose font-size is 2 pt bigger than its parent's font-size.</fo:inline></fo:block>
      </fo:block>
      <fo:block font-size="12pt"
          space-before="6pt"
    line-height="1em + 2pt"
                font-family="sans-serif"
                text-align="start"
    background-color="rgb(50%,50%,50%)">
  An outer block with 12 pt text on 14 pt leading, default color
and 50% grey background color. Test inherited color changes with
nested blocks.
      <fo:block  color='from-parent(background-color)'
  background-color='from-parent(color)'>
  Interchange color and background color using from-parent function.
        </fo:block>
      </fo:block>

    </fo:flow>
  </fo:page-sequence>
</fo:root>
