Updated: 2019-10-21T07:27Z

Orphans test

Tests that the orphans property works as expected.

orphans-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Orphans test</dc:title>
    <dc:description>Tests that the orphans property works as expected.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block margin-top="4">⠤⠤</block>
    <block orphans="1">⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
  </sequence>
  <sequence master="body">
    <block margin-top="4">⠤⠤</block>
    <block orphans="2">⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
  </sequence>
</obfl>

orphans-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-10-06</dc:date>
      <dc:title>Orphans test</dc:title>
      <dc:description>Tests that the orphans property works as expected.</dc:description>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row/>
          <row/>
          <row/>
          <row/>
          <row>⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row/>
          <row/>
          <row/>
          <row/>
          <row>⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Field text style test

Tests that text styles can be used with fields.

field-style-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Field text style test</dc:title>
    <dc:description>Tests that text styles can be used with fields.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="6" inner-margin="0" outer-margin="0" row-spacing="1" duplex="true">
    <default-template>
      <header>
        <field text-style="strong">
          <string value="page "/>
          <current-page text-style="em"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main" initial-page-number="1">
    <block>⠤⠤⠤</block>
  </sequence>
</obfl>

field-style-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-10-12</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="20" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠨⠨⠏⠁⠛⠑⠀⠠⠄⠼⠁⠱</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Avoid last line hyphenation

Tests avoid last line hyphenation (simplex)

hyphenate/hyphenate-last-line3-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Avoid last line hyphenation</dc:title>
    <dc:description>Tests avoid last line hyphenation (simplex)</dc:description>
  </meta>
  <layout-master name="a" duplex="false" page-width="9" page-height="6">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="2">
    <pre-content/>
    <post-content/>
  </volume-template>
  <sequence master="a">
    <block>
		⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸
		⠸­⠸
		</block>
    <block break-before="page">⠸⠸</block>
  </sequence>
</obfl>

hyphenate/hyphenate-last-line3-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="9" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
        </page>
        <page>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠀⠸⠸</row>
        </page>
      </section>
    </volume>
    <volume cols="9" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠸⠸</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Hyphenation test

Tests that the hyphenation property works.

hyphenate/hyphenate-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Hyphenation test</dc:title>
    <dc:description>Tests that the hyphenation property works.</dc:description>
  </meta>
  <layout-master name="body" page-width="8" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body" hyphenate="true">
    <block>hyphenation</block>
    <block hyphenate="false">hyphenation
			
      <block hyphenate="">hyphenation</block>
    </block>
  </sequence>
</obfl>

hyphenate/hyphenate-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-09-16</dc:date>
      <dc:title>Hyphenation test</dc:title>
      <dc:description>Tests that the hyphenation property works.</dc:description>
    </meta>
  </head>
  <body>
    <volume cols="8" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠓⠽⠏⠓⠑⠝⠁⠤</row>
          <row>⠞⠊⠕⠝</row>
          <row>⠓⠽⠏⠓⠑⠝⠁⠞</row>
          <row>⠊⠕⠝</row>
          <row>⠓⠽⠏⠓⠑⠝⠁⠤</row>
          <row>⠞⠊⠕⠝</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Avoid last line hyphenation

Tests avoid last line hyphenation (simplex)

hyphenate/hyphenate-last-line2-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Avoid last line hyphenation</dc:title>
    <dc:description>Tests avoid last line hyphenation (simplex)</dc:description>
  </meta>
  <layout-master name="a" duplex="false" page-width="9" page-height="6">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="2">
    <pre-content/>
    <post-content/>
  </volume-template>
  <sequence master="a">
    <block>
		⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸
		⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸
		⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸
		</block>
  </sequence>
</obfl>

hyphenate/hyphenate-last-line2-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2017-12-14</dc:date>
      <dc:title>Avoid last line hyphenation</dc:title>
      <dc:description>Tests avoid last line hyphenation (simplex)</dc:description>
    </meta>
  </head>
  <body>
    <volume cols="9" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
        </page>
        <page>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸</row>
        </page>
      </section>
    </volume>
    <volume cols="9" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠸⠸⠸⠸⠸⠀⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
        </page>
        <page>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸</row>
        </page>
      </section>
    </volume>
    <volume cols="9" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠸⠸⠸⠸⠸⠀⠸⠸⠤</row>
          <row>⠸⠸</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Avoid last line hyphenation

Tests avoid last line hyphenation (duplex)

hyphenate/hyphenate-last-line-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Avoid last line hyphenation</dc:title>
    <dc:description>Tests avoid last line hyphenation (duplex)</dc:description>
  </meta>
  <layout-master name="a" duplex="true" page-width="9" page-height="6">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="2">
    <pre-content/>
    <post-content/>
  </volume-template>
  <sequence master="a">
    <block>
		⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸
		⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸­⠸­⠸­⠸
		⠸­⠸
		⠸­⠸­⠸­⠸­⠸
		⠸­⠸­⠸­⠸
		</block>
  </sequence>
</obfl>

hyphenate/hyphenate-last-line-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="9" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
        </page>
        <page>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
        </page>
        <page>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
        </page>
        <page>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸</row>
        </page>
      </section>
    </volume>
    <volume cols="9" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠸⠸⠸⠸⠸⠀⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
        </page>
        <page>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
        </page>
        <page>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
        </page>
        <page>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸⠸⠸⠸⠤</row>
          <row>⠸⠸⠀⠸⠸</row>
        </page>
      </section>
    </volume>
    <volume cols="9" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠸⠸⠸⠸⠸⠀⠸⠸⠤</row>
          <row>⠸⠸</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Border inner test

Tests border alignment.

border/border-inner-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Border inner test</dc:title>
    <dc:description>Tests border alignment.</dc:description>
  </meta>
  <layout-master name="main" page-width="40" page-height="29" inner-margin="0" outer-margin="0" row-spacing="1" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main">
    <block border-style="solid" border-width="1" border-align="inner">⠤</block>
  </sequence>
</obfl>

border/border-inner-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-09-10</dc:date>
      <dc:title>Border inner test</dc:title>
      <dc:description>Tests border alignment.</dc:description>
    </meta>
  </head>
  <body>
    <volume cols="40" rows="29" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠠⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠄</row>
          <row>⠸⠤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠇</row>
          <row>⠈⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠁</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Border outer test

Tests border alignment.

border/border-outer-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Border outer test</dc:title>
    <dc:description>Tests border alignment.</dc:description>
  </meta>
  <layout-master name="main" page-width="40" page-height="29" inner-margin="0" outer-margin="0" row-spacing="1" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main">
    <block border-style="solid" border-width="1" border-align="outer">⠤</block>
  </sequence>
</obfl>

border/border-outer-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-09-10</dc:date>
      <dc:title>Border outer test</dc:title>
      <dc:description>Tests border alignment.</dc:description>
    </meta>
  </head>
  <body>
    <volume cols="40" rows="29" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠏⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠹</row>
          <row>⠇⠤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸</row>
          <row>⠧⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠼</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

nested-blocks-with-borders

Tests nested blocks with borders and margins.

border/nested-blocks-with-borders-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>nested-blocks-with-borders</dc:title>
    <dc:description>Tests nested blocks with borders and margins.</dc:description>
  </meta>
  <layout-master name="body" page-width="20" page-height="10" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block margin-left="1" margin-right="1" border-left-style="solid" border-left-align="outer" border-right-style="solid" border-right-align="outer" border-top-style="solid" border-top-align="inner" border-bottom-style="solid" border-bottom-align="inner">
      <block margin-left="2" margin-right="2" margin-top="1" margin-bottom="1" border-left-style="solid" border-left-align="outer" border-right-style="solid" border-right-align="outer" border-top-style="solid" border-top-align="inner" border-bottom-style="solid" border-bottom-align="inner">
        <block margin-left="1" margin-right="1" margin-top="1" margin-bottom="1" align="center">⠿⠿⠿⠿
                  </block>
      </block>
    </block>
  </sequence>
</obfl>

border/nested-blocks-with-borders-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>nested-blocks-with-borders</dc:title>
      <dc:description>Tests nested blocks with borders and margins.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="10" cols="20" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠇⠀⠀⠀⠿⠿⠿⠿⠀⠀⠀⠸⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀</row>
          <row>⠀⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Border center test

Tests border alignment.

border/border-center-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Border center test</dc:title>
    <dc:description>Tests border alignment.</dc:description>
  </meta>
  <layout-master name="main" page-width="40" page-height="29" inner-margin="0" outer-margin="0" row-spacing="1" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main">
    <block border-style="solid" border-width="1" border-align="center">⠤</block>
  </sequence>
</obfl>

border/border-center-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-09-10</dc:date>
      <dc:title>Nested borders margin test</dc:title>
      <dc:description>Tests margins with multiple borders. This test verifies that margins that are separated by borders aren't collapsed.</dc:description>
    </meta>
  </head>
  <body>
    <volume cols="40" rows="29" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠖⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠲</row>
          <row>⠇⠤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸</row>
          <row>⠓⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠚</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

border-align-center

Tests top and bottom borders with align="center".

border/border-align-center-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>border-align-center</dc:title>
    <dc:description>Tests top and bottom borders with align="center".</dc:description>
  </meta>
  <layout-master name="body" page-width="20" page-height="10" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block border-left-style="solid" border-left-align="outer" border-right-style="solid" border-right-align="outer" border-top-style="solid" border-top-align="center" border-bottom-style="solid" border-bottom-align="center" align="center">⠿⠿⠿⠿
              </block>
  </sequence>
</obfl>

border/border-align-center-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>border-align-center</dc:title>
      <dc:description>Tests top and bottom borders with align="center".</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="20" rows="10" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠖⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠲</row>
          <row>⠇⠀⠀⠀⠀⠀⠀⠀⠿⠿⠿⠿⠀⠀⠀⠀⠀⠀⠀⠸</row>
          <row>⠓⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠚</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Volume keep with previous test

Tests that keep-with-previous-sheets work. In this test, 7 sheets in each volume is optimal. The maximum is set to 10 sheets in each volume, which (by the current configuration of the implementation) allows for 2 pages deviation. This is sufficient to shift the balance by 1 page to accommodate keep-with-previous-sheets.

volume-break/volume-breaks-keep-previous-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Volume keep with previous test</dc:title>
    <dc:description>Tests that keep-with-previous-sheets work. In this test, 7 sheets in each volume is optimal.
		The maximum is set to 10 sheets in each volume, which (by the current configuration of the implementation)
		allows for 2 pages deviation. This is sufficient to shift the balance by 1 page to accommodate
		keep-with-previous-sheets.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="10">
    <pre-content/>
    <post-content/>
  </volume-template>
  <sequence master="body">
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block keep-with-previous-sheets="1">⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
  </sequence>
</obfl>

volume-break/volume-breaks-keep-previous-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2016-06-17</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Uneven volume size test

Tests that uneven sized volumes work.

volume-break/volume-breaks-uneven-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Uneven volume size test</dc:title>
    <dc:description>Tests that uneven sized volumes work.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="3" use-when="(= $volume 1)">
    <pre-content/>
    <post-content/>
  </volume-template>
  <volume-template sheets-in-volume-max="2" use-when="(= $volume 2)">
    <pre-content/>
    <post-content/>
  </volume-template>
  <volume-template sheets-in-volume-max="4" use-when="(= $volume 3)">
    <pre-content/>
    <post-content/>
  </volume-template>
  <sequence master="body">
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
  </sequence>
</obfl>

volume-break/volume-breaks-uneven-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2016-06-10</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Several break before volume test

Tests that break-before volume works when the number of volumes is increased.

volume-break/volume-breaks-advanced3-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Several break before volume test</dc:title>
    <dc:description>Tests that break-before volume works when the number of volumes is increased.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="3">
    <pre-content/>
    <post-content/>
  </volume-template>
  <volume-transition range="sheet">
    <sequence-interrupted>
      <block>⠿⠿⠿</block>
    </sequence-interrupted>
  </volume-transition>
  <sequence master="body">
    <block volume-keep-priority="9">
      <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block volume-keep-priority="1">
        <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
        <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
        <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
        <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
        <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
        <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
        <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
        <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      </block>
    </block>
  </sequence>
</obfl>

volume-break/volume-breaks-advanced3-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠿⠿⠿</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠿⠿⠿</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Several break before volume test

Tests that break-before volume works when the number of volumes is increased.

volume-break/volume-breaks-advanced4-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Several break before volume test</dc:title>
    <dc:description>Tests that break-before volume works when the number of volumes is increased.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="4">
    <pre-content/>
    <post-content/>
  </volume-template>
  <volume-transition range="page">
    <any-interrupted>
      <block>⠸⠤⠸⠤⠸⠤⠸⠤⠸</block>
    </any-interrupted>
    <any-resumed>
      <block>⠸⠸⠸⠤⠸⠸⠤⠸⠸⠸</block>
    </any-resumed>
  </volume-transition>
  <sequence master="body">
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
  </sequence>
  <sequence master="body">
    <block>⠸⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠸⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ </block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠸</block>
  </sequence>
  <sequence master="body">
    <block>⠸⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠸⠸⠸⠤⠸⠤⠸⠸⠸</block>
  </sequence>
</obfl>

volume-break/volume-breaks-advanced4-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2018-09-21</dc:date>
      <dc:title>Several break before volume test</dc:title>
      <dc:description>Tests that break-before volume works when the number of volumes is increased.</dc:description>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠸⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠸⠤⠸⠤⠸⠤⠸⠤⠸</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠸⠸⠸⠤⠸⠸⠤⠸⠸⠸</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠸⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠸</row>
          <row>⠸⠤⠸⠤⠸⠤⠸⠤⠸</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠸⠸⠸⠤⠸⠸⠤⠸⠸⠸</row>
          <row>⠸⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠸⠸⠸⠤⠸⠤⠸⠸⠸</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Several break before volume test

Tests that break-before volume works when the number of volumes is increased.

volume-break/volume-breaks-advanced2-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Several break before volume test</dc:title>
    <dc:description>Tests that break-before volume works when the number of volumes is increased.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="10">
    <pre-content/>
    <post-content/>
  </volume-template>
  <volume-transition range="page"/>
  <sequence master="body">
    <block volume-keep-priority="1">
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤  ⠤⠿</block>
    </block>
    <block volume-keep-priority="1">
      <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    </block>
  </sequence>
</obfl>

volume-break/volume-breaks-advanced2-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Several break before volume test

Tests that break-before volume works when the number of volumes is increased.

volume-break/volume-breaks-advanced-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Several break before volume test</dc:title>
    <dc:description>Tests that break-before volume works when the number of volumes is increased.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="4">
    <pre-content/>
    <post-content/>
  </volume-template>
  <volume-transition range="page">
    <sequence-interrupted>
      <block>⠸⠤⠸⠤⠸⠤⠸⠤⠸</block>
    </sequence-interrupted>
    <sequence-resumed>
      <block>⠸⠸⠸⠤⠸⠸⠤⠸⠸⠸</block>
    </sequence-resumed>
  </volume-transition>
  <sequence master="body">
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
  </sequence>
  <sequence master="body">
    <block>⠸⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠸⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠸</block>
  </sequence>
  <sequence master="body">
    <block>⠸⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
  </sequence>
</obfl>

volume-break/volume-breaks-advanced-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠸⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠸⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠸⠤⠸⠤⠸⠤⠸⠤⠸</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠸⠸⠸⠤⠸⠸⠤⠸⠸⠸</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠸</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠸⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Volume-keep-priority/page numbering test

Tests page numbering combined with volume-keep-priority, a long sequence and sheet range volume transition.

volume-break/volume-breaks-priority3-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Volume-keep-priority/page numbering test</dc:title>
    <dc:description>Tests page numbering combined with volume-keep-priority, a long sequence and sheet range volume transition.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="7" duplex="true">
    <default-template>
      <header>
        <field>
          <current-page/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="2">
    <pre-content/>
    <post-content/>
  </volume-template>
  <volume-transition range="sheet"></volume-transition>
  <sequence master="body">
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block volume-keep-priority="1">
      <block>⠿⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    </block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block volume-keep-priority="1">
      <block>⠿⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    </block>
  </sequence>
</obfl>

volume-break/volume-breaks-priority3-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="7" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠼⠃</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠼⠉</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="7" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠑</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠼⠋</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠼⠛</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="7" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠊</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠼⠁⠚</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Break before volume test

Tests that break-before volume works.

volume-break/volume-breaks1-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Break before volume test</dc:title>
    <dc:description>Tests that break-before volume works.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>⠤⠤</block>
  </sequence>
  <sequence master="body" break-before="volume">
    <block>⠤⠤</block>
  </sequence>
</obfl>

volume-break/volume-breaks1-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2016-06-09</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Several break before volume test

Tests that break-before volume works when the number of volumes is increased.

volume-break/volume-breaks2-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Several break before volume test</dc:title>
    <dc:description>Tests that break-before volume works when the number of volumes is increased.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="4">
    <pre-content/>
    <post-content/>
  </volume-template>
  <sequence master="body">
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
  </sequence>
  <sequence master="body" break-before="volume">
    <block>⠸⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
  </sequence>
  <sequence master="body" break-before="volume">
    <block>⠸⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
  </sequence>
  <sequence master="body" break-before="volume">
    <block>⠸⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
  </sequence>
</obfl>

volume-break/volume-breaks2-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2016-10-18</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠸⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠸⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠸⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Volume keep priority test

Tests that volume keep priority works. In this test, 7 sheets in each volume is optimal. The maximum is set to 10 sheets in each volume, which (by the current configuration of the implementation) allows for 2 pages deviation. This is sufficient to shift the balance by 1 page to accommodate the volume-keep-priority.

volume-break/volume-breaks-priority-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Volume keep priority test</dc:title>
    <dc:description>Tests that volume keep priority works. In this test, 7 sheets in each volume is optimal.
		The maximum is set to 10 sheets in each volume, which (by the current configuration of the implementation)
		allows for 2 pages deviation. This is sufficient to shift the balance by 1 page to accommodate the
		volume-keep-priority.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="10">
    <pre-content/>
    <post-content/>
  </volume-template>
  <sequence master="body">
    <block volume-keep-priority="7">
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    </block>
    <block volume-keep-priority="7">
      <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
      <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    </block>
  </sequence>
</obfl>

volume-break/volume-breaks-priority-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2016-06-15</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Volume keep priority test

Tests that volume keep priority works. In this test, 7 sheets in each volume is optimal. The maximum is set to 10 sheets in each volume, which (by the current configuration of the implementation) allows for 2 pages deviation. This is sufficient to shift the balance by 1 page to accommodate the volume-keep-priority.

volume-break/volume-breaks-priority2-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Volume keep priority test</dc:title>
    <dc:description>Tests that volume keep priority works. In this test, 7 sheets in each volume is optimal.
		The maximum is set to 10 sheets in each volume, which (by the current configuration of the implementation)
		allows for 2 pages deviation. This is sufficient to shift the balance by 1 page to accommodate the
		volume-keep-priority.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="10">
    <pre-content/>
    <post-content/>
  </volume-template>
  <sequence master="body">
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block volume-keep-priority="7">⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
  </sequence>
</obfl>

volume-break/volume-breaks-priority2-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2016-06-17</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Volume keep priority test

Tests that keep-with-next-sheets work. In this test, 7 sheets in each volume is optimal. The maximum is set to 10 sheets in each volume, which (by the current configuration of the implementation) allows for 2 pages deviation. This is sufficient to shift the balance by 1 page to accommodate keep-with-next-sheets.

volume-break/volume-breaks-keep-next-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Volume keep priority test</dc:title>
    <dc:description>Tests that keep-with-next-sheets work. In this test, 7 sheets in each volume is optimal.
		The maximum is set to 10 sheets in each volume, which (by the current configuration of the implementation)
		allows for 2 pages deviation. This is sufficient to shift the balance by 1 page to accommodate
		keep-with-next-sheets.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="10">
    <pre-content/>
    <post-content/>
  </volume-template>
  <sequence master="body">
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block keep-with-next-sheets="1">⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
  </sequence>
</obfl>

volume-break/volume-breaks-keep-next-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2016-06-17</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Vertical position test: Double line spacing

Tests the vertical position property together with double line spacing.

vertical-position/vertical-position-dls-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Vertical position test: Double line spacing</dc:title>
    <dc:description>Tests the vertical position property together with double line spacing.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="10" duplex="false" row-spacing="2.0">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block vertical-position="2" vertical-align="after">⠤⠤⠤</block>
  </sequence>
</obfl>

vertical-position/vertical-position-dls-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-08-20</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="10" rowgap="4" duplex="false">
      <section>
        <page>
          <row/>
          <row rowgap="0">⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

vertical-position-first-block

Tests that vertical-position works on the first block of the sequence.

vertical-position/vertical-position-first-block-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>vertical-position-first-block</dc:title>
    <dc:description>Tests that vertical-position works on the first block of the sequence.</dc:description>
  </meta>
  <layout-master name="master" page-width="10" page-height="20">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="master">
    <block>
      <block vertical-position="4">⠿⠿⠿</block>
      <block vertical-position="8">⠿⠿⠿</block>
    </block>
  </sequence>
</obfl>

vertical-position/vertical-position-first-block-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="20" rowgap="0" duplex="true">
      <section>
        <page>
          <row/>
          <row/>
          <row/>
          <row/>
          <row>⠿⠿⠿</row>
          <row/>
          <row/>
          <row/>
          <row>⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Vertical position test: Before alignment

Tests the vertical position property with "before" alignment and both padding, margin and border.

vertical-position/vertical-position-before-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Vertical position test: Before alignment</dc:title>
    <dc:description>Tests the vertical position property with "before" alignment and both padding, margin and border.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="10" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block vertical-position="100%" vertical-align="before" padding-top="1" padding-bottom="1" margin-top="1" margin-bottom="1" border-top-style="solid" border-bottom-style="solid">⠤⠤⠤</block>
  </sequence>
</obfl>

vertical-position/vertical-position-before-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-08-20</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="10" rowgap="0" duplex="false">
      <section>
        <page>
          <row/>
          <row/>
          <row/>
          <row/>
          <row>⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉</row>
          <row/>
          <row>⠤⠤⠤</row>
          <row/>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row/>
        </page>
      </section>
    </volume>
  </body>
</pef>

vertical-position-first-block

Tests that a passed vertical-position is ignored.

vertical-position/vertical-position-passed-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>vertical-position-first-block</dc:title>
    <dc:description>Tests that a passed vertical-position is ignored.</dc:description>
  </meta>
  <layout-master name="master" page-width="10" page-height="20">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="master">
    <block>
      <block vertical-position="8">⠿⠿⠿</block>
      <block vertical-position="4">⠿⠿</block>
    </block>
  </sequence>
</obfl>

vertical-position/vertical-position-passed-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="20" rowgap="0" duplex="true">
      <section>
        <page>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row>⠿⠿⠿</row>
          <row>⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Vertical position test: Top border

Tests the vertical position property with a top border.

vertical-position/vertical-position-borders-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Vertical position test: Top border</dc:title>
    <dc:description>Tests the vertical position property with a top border.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block vertical-position="3" padding-top="1" vertical-align="after" border-top-style="solid">⠤⠤⠤</block>
  </sequence>
</obfl>

vertical-position/vertical-position-borders-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-08-20</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row/>
          <row/>
          <row/>
          <row>⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉</row>
          <row/>
          <row>⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Vertical position test

Tests the vertical position property.

vertical-position/vertical-position-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Vertical position test</dc:title>
    <dc:description>Tests the vertical position property.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block vertical-position="3" vertical-align="after">⠤⠤⠤</block>
  </sequence>
</obfl>

vertical-position/vertical-position-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-08-20</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row/>
          <row/>
          <row/>
          <row>⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

vertical-position-align-before-nested-blocks

Tests vertical-position and vertical-align="before" on a block with two nested blocks of one line each.

vertical-position/vertical-position-align-before-nested-blocks-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>vertical-position-align-before-nested-blocks</dc:title>
    <dc:description>Tests vertical-position and vertical-align="before" on a block with two nested blocks of one line each.</dc:description>
  </meta>
  <layout-master name="a" page-width="20" page-height="10" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block vertical-align="before" vertical-position="5">
      <block>⠤⠤⠤ </block>
      <block>⠤⠤⠤ </block>
    </block>
  </sequence>
</obfl>

vertical-position/vertical-position-align-before-nested-blocks-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>vertical-position-align-before-nested-blocks</dc:title>
      <dc:description>Tests vertical-position and vertical-align="before" on a block with two nested blocks of one line each.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="20" rows="10" rowgap="0" duplex="false">
      <section>
        <page>
          <row/>
          <row/>
          <row/>
          <row>⠤⠤⠤</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

vertical-position-align-before

Tests vertical-position and vertical-align="before" on a block with two lines separated by a <br/>.

vertical-position/vertical-position-align-before-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>vertical-position-align-before</dc:title>
    <dc:description>Tests vertical-position and vertical-align="before" on a block with two lines separated by a <br/>.</dc:description>
  </meta>
  <layout-master name="a" page-width="20" page-height="10" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block vertical-align="before" vertical-position="5">⠤⠤⠤
      <br/>
              ⠤⠤⠤
            
    </block>
  </sequence>
</obfl>

vertical-position/vertical-position-align-before-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>vertical-position-align-before</dc:title>
      <dc:description>Tests vertical-position and vertical-align="before" on a block with two lines separated by a <br/>.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="20" rows="10" rowgap="0" duplex="false">
      <section>
        <page>
          <row/>
          <row/>
          <row/>
          <row>⠤⠤⠤</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Vertical position test: header

Tests the vertical position property on a page with a header.

vertical-position/vertical-position-header-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Vertical position test: header</dc:title>
    <dc:description>Tests the vertical position property on a page with a header.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header>
        <field>
          <string value="⠉⠉⠉⠉"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block vertical-position="3" vertical-align="after">⠤⠤⠤</block>
  </sequence>
  <sequence master="body">
    <block>⠤⠤⠤</block>
    <block vertical-position="3" vertical-align="after">⠤⠤⠤</block>
  </sequence>
</obfl>

vertical-position/vertical-position-header-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-08-20</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠉⠉⠉⠉</row>
          <row/>
          <row/>
          <row/>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠉⠉⠉⠉</row>
          <row>⠤⠤⠤</row>
          <row/>
          <row/>
          <row>⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Margin region indicators test

Tests that margin region indicators work.

marker-indicator2-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Margin region indicators test</dc:title>
    <dc:description>Tests that margin region indicators work.</dc:description>
  </meta>
  <layout-master name="body" page-width="20" page-height="6" duplex="true" inner-margin="2" outer-margin="2">
    <template use-when="(= (% $page 2) 0)">
      <header/>
      <footer/>
      <margin-region align="left" width="3">
        <indicators>
          <marker-indicator markers="pages" indicator="⠿"/>
        </indicators>
      </margin-region>
      <margin-region align="right" width="2">
        <indicators>
          <marker-indicator markers="sections" indicator="⠤"/>
        </indicators>
      </margin-region>
    </template>
    <default-template>
      <header/>
      <footer/>
      <margin-region align="left" width="2">
        <indicators>
          <marker-indicator markers="sections" indicator="⠤"/>
        </indicators>
      </margin-region>
      <margin-region align="right" width="3">
        <indicators>
          <marker-indicator markers="pages" indicator="⠿"/>
        </indicators>
      </margin-region>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>
      <marker class="sections" value="1"/>
      <marker class="pages" value="1"/>⠶­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­
      <marker class="pages" value="2"/>⠶­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤
    </block>
    <block>
      <marker class="sections" value="2"/>⠶­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­
      <marker class="pages" value="3"/>⠶­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­
    </block>
  </sequence>
</obfl>

marker-indicator2-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="20" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠀⠀⠤⠀⠶⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠀⠿</row>
          <row>⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠤⠤⠤⠶⠤⠤⠤⠤⠤⠤⠤⠀⠀⠿</row>
          <row>⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠀⠶⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠤</row>
          <row>⠀⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠿⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠶⠤⠤</row>
          <row>⠀⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Translation test

Tests that the translate property works. Note that this test uses an implementation specific translation mode, which isn't in the OBFL-specification. Also, because of this the generated PEF-file is invalid, but it proves that the translator property works.

translate-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Translation test</dc:title>
    <dc:description>Tests that the translate property works. Note that this test uses an
		implementation specific translation mode, which isn't in the OBFL-specification. Also,
		because of this the generated PEF-file is invalid, but it proves that the translator 
		property works.</dc:description>
  </meta>
  <layout-master name="body" page-width="20" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>Translation</block>
    <block translate="bypass">no translation</block>
  </sequence>
</obfl>

translate-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-10-28</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="20" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠠⠞⠗⠁⠝⠎⠇⠁⠞⠊⠕⠝</row>
          <row>no translation</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Keep test

Tests the keep property

keep-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Keep test</dc:title>
    <dc:description>Tests the keep property</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block break-before="page">
      <block>⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
      <block keep="page">⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤ </block>
    </block>
    <block break-before="page">
      <block>⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
      <block keep="page" keep-with-next="1">⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
    </block>
  </sequence>
</obfl>

keep-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-05-09</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠤⠤⠤</row>
          <row>⠤⠤⠤</row>
          <row>⠤⠤⠤</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠤⠤⠤⠀⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤</row>
          <row>⠤⠤⠤</row>
          <row>⠤⠤⠤</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Tests page variable

Tests that variable page returns the current page number inside blocks.

current-page2-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Tests page variable</dc:title>
    <dc:description>Tests that variable page returns the current page number inside blocks.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="6" inner-margin="0" outer-margin="0" row-spacing="1" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main" initial-page-number="1">
    <block>
      <evaluate expression="$page"/>
    </block>
    <block>
      <evaluate expression="$page"/>
    </block>
    <block>
      <evaluate expression="$page"/>
    </block>
    <block>
      <evaluate expression="$page"/>
    </block>
    <block>
      <evaluate expression="$page"/>
    </block>
    <block>
      <evaluate expression="$page"/>
      <br/>
      <evaluate expression="$page"/>
    </block>
    <block>
      <evaluate expression="$page"/>
    </block>
    <block>
      <evaluate expression="$page"/>
    </block>
    <block>
      <evaluate expression="$page"/>
    </block>
    <block>
      <evaluate expression="$page"/>
    </block>
    <block>
      <evaluate expression="$page"/>
    </block>
  </sequence>
</obfl>

current-page2-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="20" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁</row>
          <row>⠼⠁</row>
          <row>⠼⠁</row>
          <row>⠼⠁</row>
          <row>⠼⠁</row>
          <row>⠼⠁</row>
        </page>
        <page>
          <row>⠼⠃</row>
          <row>⠼⠃</row>
          <row>⠼⠃</row>
          <row>⠼⠃</row>
          <row>⠼⠃</row>
          <row>⠼⠃</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Margin region indicators with header test

Tests margin region indicators together with header.

marker-indicator3-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Margin region indicators with header test</dc:title>
    <dc:description>Tests margin region indicators together with header.</dc:description>
  </meta>
  <layout-master name="body" page-width="20" page-height="7" duplex="true" inner-margin="2" outer-margin="2">
    <template use-when="(= (% $page 2) 0)">
      <header>
        <field>
          <string value="⠭"/>
        </field>
        <field>
          <string value="⠽"/>
        </field>
      </header>
      <footer/>
      <margin-region align="left" width="3">
        <indicators>
          <marker-indicator markers="pages" indicator="⠿"/>
        </indicators>
      </margin-region>
      <margin-region align="right" width="2">
        <indicators>
          <marker-indicator markers="sections" indicator="⠤"/>
        </indicators>
      </margin-region>
    </template>
    <default-template>
      <header>
        <field>
          <string value="⠭"/>
        </field>
        <field>
          <string value="⠽"/>
        </field>
      </header>
      <footer/>
      <margin-region align="left" width="2">
        <indicators>
          <marker-indicator markers="sections" indicator="⠤"/>
        </indicators>
      </margin-region>
      <margin-region align="right" width="3">
        <indicators>
          <marker-indicator markers="pages" indicator="⠿"/>
        </indicators>
      </margin-region>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>
      <marker class="sections" value="1"/>
      <marker class="pages" value="1"/>⠶­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­
      <marker class="pages" value="2"/>⠶­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤
    </block>
    <block>
      <marker class="sections" value="2"/>⠶­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­
      <marker class="pages" value="3"/>⠶­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­
    </block>
  </sequence>
</obfl>

marker-indicator3-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="20" rows="7" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠀⠀⠭⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠽</row>
          <row>⠀⠀⠤⠀⠶⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠀⠿</row>
          <row>⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠤⠤⠤⠶⠤⠤⠤⠤⠤⠤⠤⠀⠀⠿</row>
          <row>⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠀⠀⠭⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠽</row>
          <row>⠀⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠀⠶⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠤</row>
          <row>⠀⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠿⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠶⠤⠤</row>
          <row>⠀⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Margin region indicators test

Tests that margin region indicators work.

marker-indicator-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Margin region indicators test</dc:title>
    <dc:description>Tests that margin region indicators work.</dc:description>
  </meta>
  <layout-master name="body" page-width="20" page-height="6" duplex="false" inner-margin="2" outer-margin="2">
    <default-template>
      <header/>
      <footer/>
      <margin-region align="left" width="2">
        <indicators>
          <marker-indicator markers="pages" indicator="⠿"/>
          <marker-indicator markers="sections" indicator="⠿"/>
        </indicators>
      </margin-region>
      <margin-region align="right" width="2">
        <indicators>
          <marker-indicator markers="pages sections" indicator="⠿"/>
        </indicators>
      </margin-region>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>
      <marker class="sections" value="1"/>⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­
      <marker class="pages" value="1"/>⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤
    </block>
  </sequence>
</obfl>

marker-indicator-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-12-08</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="20" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠀⠀⠿⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠿</row>
          <row>⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠿⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠿</row>
          <row>⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Padding with borders on sides test

Tests padding with borders only on the sides

padding-sides-only-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Padding with borders on sides test</dc:title>
    <dc:description>Tests padding with borders only on the sides</dc:description>
  </meta>
  <layout-master name="body" page-width="14" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block border-left-style="solid" border-right-style="solid" border-width="1" margin-left="2" margin-right="2" padding-left="2" padding-right="2" padding-top="1" padding-bottom="1">
      <block>⠤​⠤​⠤​⠤​⠤​⠤</block>
    </block>
  </sequence>
</obfl>

padding-sides-only-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-07-06</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="14" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠀⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠇⠀⠀⠤⠤⠤⠤⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠇⠀⠀⠤⠤⠀⠀⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀⠀</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Single empty style

Tests an empty style element

style-empty-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Single empty style</dc:title>
    <dc:description>Tests an empty style element</dc:description>
  </meta>
  <layout-master name="a" duplex="false" page-width="10" page-height="25">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>
      <style name="table-cell-continued"/>
    </block>
  </sequence>
</obfl>

style-empty-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="25" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠻⠻</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Ordered list test

Tests continuing ordered lists

list/list-continue-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Ordered list test</dc:title>
    <dc:description>Tests continuing ordered lists</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block list-type="ol" block-indent="3">
      <block>⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
    </block>
    <block list-type="ol" block-indent="3">
      <block list-item-label="4">⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
    </block>
  </sequence>
</obfl>

list/list-continue-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠼⠁⠀⠤⠤⠤</row>
          <row>⠼⠃⠀⠤⠤⠤</row>
          <row>⠼⠉⠀⠤⠤⠤</row>
          <row>⠼⠙⠀⠤⠤⠤</row>
          <row>⠼⠑⠀⠤⠤⠤</row>
          <row>⠼⠋⠀⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Ordered list test

Tests custom symbol in a list item

list/list-custom-symbol-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Ordered list test</dc:title>
    <dc:description>Tests custom symbol in a list item</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block list-type="ul" block-indent="3">
      <block>⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
      <block list-item-label="⠤">⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
    </block>
  </sequence>
</obfl>

list/list-custom-symbol-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠿⠀⠀⠤⠤⠤</row>
          <row>⠿⠀⠀⠤⠤⠤</row>
          <row>⠤⠀⠀⠤⠤⠤</row>
          <row>⠿⠀⠀⠤⠤⠤</row>
          <row>⠿⠀⠀⠤⠤⠤</row>
          <row>⠿⠀⠀⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Ordered list test

Tests custom list symbol

list/list-custom-symbol2-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Ordered list test</dc:title>
    <dc:description>Tests custom list symbol</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block list-type="ul" list-style="⠤" block-indent="3">
      <block>⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
    </block>
  </sequence>
</obfl>

list/list-custom-symbol2-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠤⠀⠀⠤⠤⠤</row>
          <row>⠤⠀⠀⠤⠤⠤</row>
          <row>⠤⠀⠀⠤⠤⠤</row>
          <row>⠤⠀⠀⠤⠤⠤</row>
          <row>⠤⠀⠀⠤⠤⠤</row>
          <row>⠤⠀⠀⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Ordered list test

Tests alpha-numerical lists

list/list-alpha-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Ordered list test</dc:title>
    <dc:description>Tests alpha-numerical lists</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block list-type="ol" list-style="a" block-indent="3">
      <block>⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
      <block>⠤⠤⠤</block>
    </block>
  </sequence>
</obfl>

list/list-alpha-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠁⠀⠀⠤⠤⠤</row>
          <row>⠃⠀⠀⠤⠤⠤</row>
          <row>⠉⠀⠀⠤⠤⠤</row>
          <row>⠙⠀⠀⠤⠤⠤</row>
          <row>⠑⠀⠀⠤⠤⠤</row>
          <row>⠋⠀⠀⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Multiple leaders test

Tests multiple right aligned leaders on the same row

leader-right-multiple-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Multiple leaders test</dc:title>
    <dc:description>Tests multiple right aligned leaders on the same row</dc:description>
  </meta>
  <layout-master name="a" duplex="false" page-width="10" page-height="25">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block id="chapter_1">⠤</block>
    <block>
      <leader pattern="⠄" position="30%" align="right"/>1
      <leader pattern="⠄" position="60%" align="right"/>2
      <leader pattern="⠄" position="100%" align="right"/>3
    </block>
  </sequence>
</obfl>

leader-right-multiple-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-05-09</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="25" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠤</row>
          <row>⠄⠼⠁⠄⠼⠃⠄⠄⠼⠉</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Single leader test

Tests a single right aligned leader with two items after (space and page number)

leader-right-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Single leader test</dc:title>
    <dc:description>Tests a single right aligned leader with two items after (space and page number)</dc:description>
  </meta>
  <layout-master name="a" duplex="false" page-width="10" page-height="25">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block id="chapter_1">⠤</block>
    <block>
      <leader pattern="⠄" position="100%" align="right"/>
      <page-number ref-id="chapter_1" number-format="default"/>
    </block>
  </sequence>
</obfl>

leader-right-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-05-09</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="25" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠤</row>
          <row>⠄⠄⠄⠄⠄⠄⠄⠀⠼⠁</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Multi line footer test

Tests that multiple footers work.

multi-line-footer-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Multi line footer test</dc:title>
    <dc:description>Tests that multiple footers work.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer>
        <field>
          <string value="⠤⠤"/>
        </field>
        <field>
          <string value=""/>
        </field>
      </footer>
      <footer>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value="⠤⠤"/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>⠤⠤</block>
  </sequence>
</obfl>

multi-line-footer-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-07-07</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠤⠤</row>
          <row/>
          <row/>
          <row/>
          <row>⠤⠤⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Multi line header test

Tests that multiple headers work.

multi-line-header-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Multi line header test</dc:title>
    <dc:description>Tests that multiple headers work.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header>
        <field>
          <string value="⠤⠤"/>
        </field>
        <field>
          <string value=""/>
        </field>
      </header>
      <header>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value="⠤⠤"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>⠤⠤</block>
  </sequence>
</obfl>

multi-line-header-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-07-07</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠤⠤⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠤⠤</row>
          <row>⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Padding test

Tests the padding property

padding-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Padding test</dc:title>
    <dc:description>Tests the padding property</dc:description>
  </meta>
  <layout-master name="body" page-width="14" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block border-style="solid" border-width="1" margin-left="2" margin-right="2" padding-left="2" padding-right="2" padding-top="1" padding-bottom="1">
      <block>⠤​⠤​⠤​⠤​⠤​⠤</block>
    </block>
  </sequence>
</obfl>

padding-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-07-06</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="14" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠀⠀⠏⠉⠉⠉⠉⠉⠉⠉⠉⠹</row>
          <row>⠀⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠇⠀⠀⠤⠤⠤⠤⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠇⠀⠀⠤⠤⠀⠀⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠧⠤⠤⠤⠤⠤⠤⠤⠤⠼</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Continue page number counter in post content

Tests that the page number counter continues in post content

page/page-number8-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Continue page number counter in post content</dc:title>
    <dc:description>Tests that the page number counter continues in post content</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header>
        <field>
          <current-page/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <layout-master name="front" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="5">
    <pre-content>
      <sequence master="front">
        <block>⠞⠊⠞⠇⠑</block>
      </sequence>
    </pre-content>
    <post-content>
      <sequence master="body" page-number-counter="A">
        <block>⠏⠕⠎⠞</block>
      </sequence>
    </post-content>
  </volume-template>
  <sequence master="body" page-number-counter="A">
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
  </sequence>
</obfl>

page/page-number8-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠞⠊⠞⠇⠑</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠁</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠃</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠉</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠙</row>
          <row>⠏⠕⠎⠞</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠞⠊⠞⠇⠑</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠑</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠋</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠛</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠓</row>
          <row>⠏⠕⠎⠞</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠞⠊⠞⠇⠑</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠊</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠁⠚</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠁⠁</row>
          <row>⠏⠕⠎⠞</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠞⠊⠞⠇⠑</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠁⠃</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠁⠉</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠁⠙</row>
          <row>⠏⠕⠎⠞</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Page number counter in pre/post content

Tests that the page number counter works with pre/post content.

page/page-number2-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Page number counter in pre/post content</dc:title>
    <dc:description>Tests that the page number counter works with pre/post content.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header>
        <field>
          <current-page/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="5">
    <pre-content>
      <sequence master="body" page-number-counter="A">
        <block>pre content</block>
      </sequence>
    </pre-content>
    <post-content>
      <sequence master="body" page-number-counter="A">
        <block>post content</block>
      </sequence>
    </post-content>
  </volume-template>
  <sequence master="body" page-number-counter="A">
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
  </sequence>
  <sequence master="body" page-number-counter="A">
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
  </sequence>
  <sequence master="body" page-number-counter="A">
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
  </sequence>
</obfl>

page/page-number2-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠼⠁</row>
          <row>⠏⠗⠑⠀⠉⠕⠝⠤</row>
          <row>⠞⠑⠝⠞</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠃</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠉</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠙</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠑</row>
          <row>⠏⠕⠎⠞⠀⠉⠕⠝⠤</row>
          <row>⠞⠑⠝⠞</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠼⠋</row>
          <row>⠏⠗⠑⠀⠉⠕⠝⠤</row>
          <row>⠞⠑⠝⠞</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠛</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠓</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠊</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠁⠚</row>
          <row>⠏⠕⠎⠞⠀⠉⠕⠝⠤</row>
          <row>⠞⠑⠝⠞</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠼⠁⠁</row>
          <row>⠏⠗⠑⠀⠉⠕⠝⠤</row>
          <row>⠞⠑⠝⠞</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠁⠃</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠁⠉</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠁⠙</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠁⠑</row>
          <row>⠏⠕⠎⠞⠀⠉⠕⠝⠤</row>
          <row>⠞⠑⠝⠞</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Page number counter with alternating counter

Tests the page number counter with duplex and an alternating separate counter.

page/page-number4-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Page number counter with alternating counter</dc:title>
    <dc:description>Tests the page number counter with duplex and an alternating separate counter.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="true">
    <default-template>
      <header>
        <field>
          <current-page/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <layout-master name="insert" page-width="10" page-height="6" duplex="true">
    <default-template>
      <header>
        <field>
          <string value="I"/>
          <current-page/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
  </sequence>
  <sequence master="insert" page-number-counter="insert">
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
  </sequence>
  <sequence master="body">
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
  </sequence>
  <sequence master="insert" page-number-counter="insert">
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
  </sequence>
</obfl>

page/page-number4-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠃</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠉</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠠⠊⠼⠁</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠠⠊⠼⠃</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠑</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠋</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠛</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠠⠊⠼⠉</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠠⠊⠼⠙</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Page number counter duplex

Tests the page number counter with duplex and a separate counter.

page/page-number5-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Page number counter duplex</dc:title>
    <dc:description>Tests the page number counter with duplex and a separate counter.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="true">
    <default-template>
      <header>
        <field>
          <current-page/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <layout-master name="insert" page-width="10" page-height="6" duplex="true">
    <default-template>
      <header>
        <field>
          <string value="I"/>
          <current-page/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
  </sequence>
  <sequence master="insert" page-number-counter="insert">
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
  </sequence>
  <sequence master="body">
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
  </sequence>
</obfl>

page/page-number5-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠃</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠉</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠠⠊⠼⠁</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠠⠊⠼⠃</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠑</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠋</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠛</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Page number counter test

Tests the page number counter with duplex, pre/post content and a separate counter.

page/page-number6-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Page number counter test</dc:title>
    <dc:description>Tests the page number counter with duplex, pre/post content and a separate counter.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="true">
    <default-template>
      <header>
        <field>
          <current-page/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <layout-master name="insert" page-width="10" page-height="6" duplex="true">
    <default-template>
      <header>
        <field>
          <string value="I"/>
          <current-page/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="5">
    <pre-content>
      <sequence master="body" page-number-counter="A">
        <block>pre content</block>
      </sequence>
    </pre-content>
    <post-content>
      <sequence master="body" page-number-counter="A">
        <block>post content</block>
      </sequence>
    </post-content>
  </volume-template>
  <sequence master="body" page-number-counter="A">
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
  </sequence>
  <sequence master="insert" page-number-counter="insert">
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
  </sequence>
  <sequence master="body" page-number-counter="A">
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
  </sequence>
</obfl>

page/page-number6-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁</row>
          <row>⠏⠗⠑⠀⠉⠕⠝⠤</row>
          <row>⠞⠑⠝⠞</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠉</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠙</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠑</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠠⠊⠼⠁</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠠⠊⠼⠃</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠛</row>
          <row>⠏⠕⠎⠞⠀⠉⠕⠝⠤</row>
          <row>⠞⠑⠝⠞</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠊</row>
          <row>⠏⠗⠑⠀⠉⠕⠝⠤</row>
          <row>⠞⠑⠝⠞</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠁⠁</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠁⠃</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠁⠉</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠁⠑</row>
          <row>⠏⠕⠎⠞⠀⠉⠕⠝⠤</row>
          <row>⠞⠑⠝⠞</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Page number counter

Tests the page number counter with an insert.

page/page-number-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Page number counter</dc:title>
    <dc:description>Tests the page number counter with an insert.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header>
        <field>
          <current-page/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <layout-master name="insert" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header>
        <field>
          <current-page number-format="lower-alpha"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
  </sequence>
  <sequence master="insert" page-number-counter="insert">
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
  </sequence>
  <sequence master="body">
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
  </sequence>
</obfl>

page/page-number-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠼⠁</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠃</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠉</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠁</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠃</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠉</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠙</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠙</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠑</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠋</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Page number counter reset each volume

Tests the page number counter reset.

page/page-number7-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Page number counter reset each volume</dc:title>
    <dc:description>Tests the page number counter reset.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header>
        <field>
          <current-page/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="5">
    <pre-content>
      <sequence master="body" page-number-counter="A" initial-page-number="1">
        <block>pre content</block>
      </sequence>
    </pre-content>
    <post-content>
      <sequence master="body" page-number-counter="A">
        <block>post content</block>
      </sequence>
    </post-content>
  </volume-template>
  <sequence master="body" page-number-counter="A">
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
  </sequence>
  <sequence master="body" page-number-counter="A">
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
  </sequence>
</obfl>

page/page-number7-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠼⠁</row>
          <row>⠏⠗⠑⠀⠉⠕⠝⠤</row>
          <row>⠞⠑⠝⠞</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠃</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠉</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠙</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠑</row>
          <row>⠏⠕⠎⠞⠀⠉⠕⠝⠤</row>
          <row>⠞⠑⠝⠞</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠼⠁</row>
          <row>⠏⠗⠑⠀⠉⠕⠝⠤</row>
          <row>⠞⠑⠝⠞</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠃</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠉</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠙</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠑</row>
          <row>⠏⠕⠎⠞⠀⠉⠕⠝⠤</row>
          <row>⠞⠑⠝⠞</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Page number counter with dynamic sequences

Tests that the page number counter works with pre/post content.

page/page-number3-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Page number counter with dynamic sequences</dc:title>
    <dc:description>Tests that the page number counter works with pre/post content.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header>
        <field>
          <current-page/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <table-of-contents name="toc">
    <toc-entry ref-id="block-1">toc 1</toc-entry>
  </table-of-contents>
  <volume-template sheets-in-volume-max="5">
    <pre-content>
      <sequence master="body" page-number-counter="A">
        <block>pre content</block>
      </sequence>
      <dynamic-sequence master="body" page-number-counter="A">
        <list-of-references range="volume" collection="refs"/>
      </dynamic-sequence>
      <toc-sequence master="body" page-number-counter="A" toc="toc" range="volume"/>
    </pre-content>
    <post-content>
      <sequence master="body" page-number-counter="A">
        <block>post content</block>
      </sequence>
    </post-content>
  </volume-template>
  <collection name="refs">
    <item id="n1">item 1</item>
  </collection>
  <sequence master="body" page-number-counter="A">
    <block break-before="page" id="block-1">⠤⠤⠤</block>
    <block break-before="page">⠤1A⠤⠤</block>
    <block break-before="page">⠤1B⠤⠤</block>
  </sequence>
  <sequence master="body" page-number-counter="A">
    <block break-before="page">⠤2C⠤⠤</block>
    <block break-before="page">⠤2D⠤⠤
      <anchor item="n1"/>
    </block>
    <block break-before="page">⠤2E⠤⠤</block>
  </sequence>
  <sequence master="body" page-number-counter="A">
    <block break-before="page">⠤3F⠤⠤</block>
    <block break-before="page">⠤3G⠤⠤</block>
    <block break-before="page">⠤3H⠤⠤</block>
  </sequence>
</obfl>

page/page-number3-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠼⠁</row>
          <row>⠏⠗⠑⠀⠉⠕⠝⠤</row>
          <row>⠞⠑⠝⠞</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠃</row>
          <row>⠞⠕⠉⠀⠼⠁</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠉</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠙</row>
          <row>⠤⠼⠁⠠⠁⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠑</row>
          <row>⠏⠕⠎⠞⠀⠉⠕⠝⠤</row>
          <row>⠞⠑⠝⠞</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠼⠋</row>
          <row>⠏⠗⠑⠀⠉⠕⠝⠤</row>
          <row>⠞⠑⠝⠞</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠛</row>
          <row>⠤⠼⠁⠠⠃⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠓</row>
          <row>⠤⠼⠃⠠⠉⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠊</row>
          <row>⠏⠕⠎⠞⠀⠉⠕⠝⠤</row>
          <row>⠞⠑⠝⠞</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠼⠁⠚</row>
          <row>⠏⠗⠑⠀⠉⠕⠝⠤</row>
          <row>⠞⠑⠝⠞</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠁⠁</row>
          <row>⠊⠞⠑⠍⠀⠼⠁</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠁⠃</row>
          <row>⠤⠼⠃⠠⠙⠤⠤</row>
        </page>
        <page>
          <row>⠼⠁⠉</row>
          <row>⠤⠼⠃⠠⠑⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠁⠙</row>
          <row>⠏⠕⠎⠞⠀⠉⠕⠝⠤</row>
          <row>⠞⠑⠝⠞</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠼⠁⠑</row>
          <row>⠏⠗⠑⠀⠉⠕⠝⠤</row>
          <row>⠞⠑⠝⠞</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠁⠋</row>
          <row>⠤⠼⠉⠠⠋⠤⠤</row>
        </page>
        <page>
          <row>⠼⠁⠛</row>
          <row>⠤⠼⠉⠠⠛⠤⠤</row>
        </page>
        <page>
          <row>⠼⠁⠓</row>
          <row>⠤⠼⠉⠠⠓⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠁⠊</row>
          <row>⠏⠕⠎⠞⠀⠉⠕⠝⠤</row>
          <row>⠞⠑⠝⠞</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

manual-and-automatic-volume-breaking

Tests combination of manual and automatic volume breaking.

dp2/manual-and-automatic-volume-breaking-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>manual-and-automatic-volume-breaking</dc:title>
    <dc:description>Tests combination of manual and automatic volume breaking.</dc:description>
  </meta>
  <layout-master name="main" duplex="true" page-width="10" page-height="6">
    <default-template>
      <header/>
      <footer>
        <field>
          <current-page number-format="default"/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="3"/>
  <sequence master="main">
    <block>⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
            </block>
  </sequence>
  <sequence master="main" break-before="volume">
    <block>⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
            </block>
  </sequence>
  <sequence master="main" break-before="volume">
    <block>⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
            </block>
    <block volume-keep-priority="1">⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿
              ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿
              ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿
            </block>
    <block>⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
            </block>
  </sequence>
  <sequence master="main" break-before="volume">
    <block>⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
            </block>
  </sequence>
  <sequence master="main" break-before="volume">
    <block>⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
            </block>
  </sequence>
  <sequence master="main" break-before="volume">
    <block>⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
            </block>
  </sequence>
</obfl>

dp2/manual-and-automatic-volume-breaking-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>manual-and-automatic-volume-breaking</dc:title>
      <dc:description>Tests combination of manual and automatic volume breaking.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠼⠁</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row/>
          <row/>
          <row>⠼⠃</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠼⠉</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠼⠙</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠼⠑</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row/>
          <row/>
          <row/>
          <row/>
          <row>⠼⠋</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠼⠛</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠼⠓</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠼⠊</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠼⠁⠚</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠼⠁⠁</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠼⠁⠃</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠼⠁⠉</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠼⠁⠙</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠼⠁⠑</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row/>
          <row/>
          <row>⠼⠁⠋</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠼⠁⠛</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠼⠁⠓</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠼⠁⠊</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠼⠃⠚</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row/>
          <row>⠼⠃⠁</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠼⠃⠉</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠼⠃⠙</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠼⠃⠑</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row/>
          <row/>
          <row/>
          <row/>
          <row>⠼⠃⠋</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠼⠃⠛</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row/>
          <row/>
          <row>⠼⠃⠓</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

margin-region-and-borders

Tests block with border on page with left margin (using margin-region). Broken: the border extends into the left margin: see https://github.com/joeha480/dotify/issues/195.

dp2/margin-region-and-borders-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>margin-region-and-borders</dc:title>
    <dc:description>Tests block with border on page with left margin (using margin-region). Broken: the border extends into the left margin: see https://github.com/joeha480/dotify/issues/195.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
      <margin-region align="left" width="2">
        <indicators/>
      </margin-region>
    </default-template>
  </layout-master>
  <sequence master="main">
    <block border-top-style="solid" border-top-align="outer">⠿⠿⠿
              </block>
  </sequence>
</obfl>

dp2/margin-region-and-borders-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>margin-region-and-borders</dc:title>
      <dc:description>Tests block with border on page with left margin (using margin-region). Broken: the border extends into the left margin: see https://github.com/joeha480/dotify/issues/195.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="20" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠀⠀⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉</row>
          <row>⠀⠀⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

single-line-header-empty

Tests creating empty single-line top page margin using header.

dp2/single-line-header-empty-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>single-line-header-empty</dc:title>
    <dc:description>Tests creating empty single-line top page margin using header.</dc:description>
  </meta>
  <layout-master name="a" page-width="40" page-height="25" duplex="true" page-number-variable="page">
    <default-template>
      <header>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>⠿⠿⠿⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿⠿⠿⠿
            </block>
  </sequence>
</obfl>

dp2/single-line-header-empty-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>single-line-header-empty</dc:title>
      <dc:description>Tests creating empty single-line top page margin using header.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="25" cols="40" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠿⠿⠿⠿⠿⠿⠿⠿⠀⠿⠿⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

keep-several-blocks

Tests keeping several consecutive blocks together.

dp2/keep-several-blocks-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>keep-several-blocks</dc:title>
    <dc:description>Tests keeping several consecutive blocks together.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              </block>
    <block>
      <block keep="page" keep-with-next="1">⠤⠤⠤</block>
      <block keep="page" keep-with-next="1">⠤⠤⠤</block>
      <block keep="page" keep-with-next="1">⠤⠤⠤</block>
      <block keep="page">⠤⠤⠤</block>
    </block>
  </sequence>
</obfl>

dp2/keep-several-blocks-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>keep-several-blocks</dc:title>
      <dc:description>Tests keeping several consecutive blocks together.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="6" cols="10" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤</row>
          <row>⠤⠤⠤</row>
          <row>⠤⠤⠤</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

header-row-spacing

Tests creating empty two-line top page margin using row-spacing on header.

dp2/header-row-spacing-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>header-row-spacing</dc:title>
    <dc:description>Tests creating empty two-line top page margin using row-spacing on header.</dc:description>
  </meta>
  <layout-master name="a" page-width="40" page-height="25" duplex="false" page-number-variable="page">
    <template use-when="(= (% $page 2) 1)">
      <header>
        <field/>
      </header>
      <footer/>
    </template>
    <template use-when="(= (% $page 2) 0)">
      <header row-spacing="2.0">
        <field/>
      </header>
      <footer/>
    </template>
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>⠿
              </block>
    <block break-before="page">⠿
              </block>
  </sequence>
</obfl>

dp2/header-row-spacing-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>header-row-spacing</dc:title>
      <dc:description>Tests creating empty two-line top page margin using row-spacing on header.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="25" cols="40" rowgap="0" duplex="false">
      <section>
        <page>
          <row/>
          <row>⠿</row>
        </page>
        <page>
          <row rowgap="4"/>
          <row>⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

sheets-in-volume

Tests variable "sheets-in-volume".

dp2/sheets-in-volume-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>sheets-in-volume</dc:title>
    <dc:description>Tests variable "sheets-in-volume".</dc:description>
  </meta>
  <layout-master name="a" duplex="false" page-width="10" page-height="5">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="4">
    <pre-content>
      <sequence master="a">
        <block>
          <evaluate expression="(round $sheets-in-volume)"/>
        </block>
      </sequence>
    </pre-content>
  </volume-template>
  <sequence master="a">
    <block>⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
            </block>
  </sequence>
</obfl>

dp2/sheets-in-volume-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>sheets-in-volume</dc:title>
      <dc:description>Tests variable "sheets-in-volume".</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="5" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠼⠙</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="5" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠼⠙</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="5" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠼⠉</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

keep-with-following-sibling-of-parent

Tests keeping block with following sibling of parent block.

dp2/keep-with-following-sibling-of-parent-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>keep-with-following-sibling-of-parent</dc:title>
    <dc:description>Tests keeping block with following sibling of parent block.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              </block>
    <block>
      <block>⠤⠤⠤</block>
      <block keep="page" keep-with-next="1">⠤⠤⠤</block>
    </block>
    <block>⠤⠤⠤⠤⠤</block>
  </sequence>
</obfl>

dp2/keep-with-following-sibling-of-parent-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>keep-with-following-sibling-of-parent</dc:title>
      <dc:description>Tests keeping block with following sibling of parent block.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="6" cols="10" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

collapsing-margins-adjacent-blocks

Tests collapsing of margins of adjacent sibling blocks.

dp2/collapsing-margins-adjacent-blocks-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>collapsing-margins-adjacent-blocks</dc:title>
    <dc:description>Tests collapsing of margins of adjacent sibling blocks.</dc:description>
  </meta>
  <layout-master name="body" page-width="20" page-height="15" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block margin-bottom="1">⠿⠿⠿⠿
            </block>
    <block margin-top="1">⠿⠿⠿⠿
            </block>
  </sequence>
</obfl>

dp2/collapsing-margins-adjacent-blocks-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>collapsing-margins-adjacent-blocks</dc:title>
      <dc:description>Tests collapsing of margins of adjacent sibling blocks.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="15" cols="20" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿⠿</row>
          <row/>
          <row>⠿⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

single-line-header

Tests simple single-line header.

dp2/single-line-header-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>single-line-header</dc:title>
    <dc:description>Tests simple single-line header.</dc:description>
  </meta>
  <layout-master name="a" page-width="40" page-height="25" duplex="true" page-number-variable="page">
    <default-template>
      <header>
        <field>
          <string value="⠆"/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>⠿⠿⠿⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿⠿⠿⠿
            </block>
  </sequence>
</obfl>

dp2/single-line-header-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>single-line-header</dc:title>
      <dc:description>Tests simple single-line header.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="25" cols="40" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠿⠿⠿⠿⠿⠿⠿⠿⠀⠿⠿⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

white-space-normalization-around-marker

Tests white space normalisation near marker elements. Tests that white space at the beginning of a block or following a br element is stripped, also when it is followed directly by a marker element. Broken: see https://github.com/joeha480/dotify/issues/117. An additional normalisation step in DP2 fixes the issue at the beginning of a blocks, but not following br elements.

dp2/white-space-normalization-around-marker-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>white-space-normalization-around-marker</dc:title>
    <dc:description>Tests white space normalisation near marker elements. Tests that white space at the beginning of a block or following a br element is stripped, also when it is followed directly by a marker element. Broken: see https://github.com/joeha480/dotify/issues/117. An additional normalisation step in DP2 fixes the issue at the beginning of a blocks, but not following br elements.</dc:description>
  </meta>
  <layout-master name="body" page-width="15" page-height="10" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>
        ⠤⠤⠤
        ⠤⠤⠤
        ⠤⠤⠤
      </block>
    <block>
      <marker class="foo" value="x"/>
        ⠤⠤⠤
        ⠤⠤⠤
        ⠤⠤⠤
      
    </block>
    <block>
        ⠤⠤⠤
        ⠤⠤⠤
        
      <br/>
        ⠤⠤⠤
      
    </block>
    <block>
        ⠤⠤⠤
        ⠤⠤⠤
        
      <br/>
      <marker class="foo" value="x"/>
        ⠤⠤⠤
      
    </block>
  </sequence>
</obfl>

dp2/white-space-normalization-around-marker-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>white-space-normalization-around-marker</dc:title>
      <dc:description>Tests white space normalisation near marker elements. Tests that white space at the beginning of a block or following a br element is stripped, also when it is followed directly by a marker element. Broken: see https://github.com/joeha480/dotify/issues/117. An additional normalisation step in DP2 fixes the issue at the beginning of a blocks, but not following br elements.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="15" rows="10" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠤⠤⠤</row>
          <row>⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

page-number-reference-span

Tests page-number reference to span. Broken: "Failed to complete volume division": is this a bug?

dp2/page-number-reference-span-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>page-number-reference-span</dc:title>
    <dc:description>Tests page-number reference to span. Broken: "Failed to complete volume division": is this a bug?</dc:description>
  </meta>
  <layout-master name="body" page-width="14" page-height="8" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>
      <page-number ref-id="foo" number-format="default"/>
    </block>
    <block>⠤⠤⠤⠤
              
      <span id="foo">
                ⠿
              </span>
    </block>
    <block>⠤⠤⠤⠤
            </block>
  </sequence>
</obfl>

dp2/page-number-reference-span-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>page-number-reference-span</dc:title>
      <dc:description>Tests page-number reference to span. Broken: "Failed to complete volume division": is this a bug?</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="8" cols="14" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁</row>
          <row>⠤⠤⠤⠤⠀⠿</row>
          <row>⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

page-number-reference-other-sequence

Tests page-number in one sequence referencing a block in another sequence. Broken: see https://github.com/joeha480/dotify/issues/97.

dp2/page-number-reference-other-sequence-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>page-number-reference-other-sequence</dc:title>
    <dc:description>Tests page-number in one sequence referencing a block in another sequence. Broken: see https://github.com/joeha480/dotify/issues/97.</dc:description>
  </meta>
  <layout-master name="a" duplex="false" page-width="40" page-height="25">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>
      <page-number ref-id="x" number-format="default"/>
    </block>
  </sequence>
  <sequence>
    <block id="x">⠤⠤⠤
              </block>
  </sequence>
</obfl>

dp2/page-number-reference-other-sequence-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>page-number-reference-other-sequence</dc:title>
      <dc:description>Tests page-number in one sequence referencing a block in another sequence. Broken: see https://github.com/joeha480/dotify/issues/97.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="40" rows="25" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠼⠃</row>
        </page>
        <page>
          <row>⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

pre-content

Tests pre-content.

dp2/pre-content-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>pre-content</dc:title>
    <dc:description>Tests pre-content.</dc:description>
  </meta>
  <layout-master name="main" page-width="15" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="1000">
    <pre-content>
      <sequence master="main">
        <block>⠿⠿⠿
                </block>
      </sequence>
    </pre-content>
  </volume-template>
  <sequence master="main">
    <block>⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
            </block>
  </sequence>
</obfl>

dp2/pre-content-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>pre-content</dc:title>
      <dc:description>Tests pre-content.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="15" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

hanging-indentation

Tests hanging indentation (text-indent > first-line-indent).

dp2/hanging-indentation-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>hanging-indentation</dc:title>
    <dc:description>Tests hanging indentation (text-indent > first-line-indent).</dc:description>
  </meta>
  <layout-master name="body" page-width="15" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>
      <block first-line-indent="2" text-indent="4">⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
              </block>
    </block>
  </sequence>
</obfl>

dp2/hanging-indentation-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>hanging-indentation</dc:title>
      <dc:description>Tests hanging indentation (text-indent > first-line-indent).</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="15" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠤⠤⠤⠀⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

toc-sequence-in-post-content

Tests toc-sequence in post-content.

dp2/toc-sequence-in-post-content-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>toc-sequence-in-post-content</dc:title>
    <dc:description>Tests toc-sequence in post-content.</dc:description>
  </meta>
  <layout-master name="main" duplex="false" page-width="15" page-height="5">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <table-of-contents name="toc">
    <toc-entry ref-id="ch_1">
              ⠿⠿⠿ ⠄⠄⠄⠄⠄⠄⠄⠄ 
      <page-number ref-id="ch_1" number-format="default"/>
    </toc-entry>
    <toc-entry ref-id="ch_2">
              ⠿⠿⠿ ⠄⠄⠄⠄⠄⠄⠄⠄ 
      <page-number ref-id="ch_2" number-format="default"/>
    </toc-entry>
  </table-of-contents>
  <volume-template sheets-in-volume-max="100">
    <post-content>
      <toc-sequence toc="toc" master="main" range="volume"/>
    </post-content>
  </volume-template>
  <sequence master="main">
    <block id="ch_1" translate="">⠿⠿ </block>
    <block>⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
            </block>
    <block id="ch_2" translate="">⠿⠿ </block>
    <block>⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
            </block>
  </sequence>
</obfl>

dp2/toc-sequence-in-post-content-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>toc-sequence-in-post-content</dc:title>
      <dc:description>Tests toc-sequence in post-content.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="15" rows="5" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠿⠿</row>
          <row>⠤⠤⠤⠤⠤⠀⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤⠀⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤⠀⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤⠀⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠿⠿</row>
          <row>⠤⠤⠤⠤⠤⠀⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤⠀⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤⠀⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤⠀⠤⠤⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠀⠄⠄⠄⠄⠄⠄⠄⠄⠀⠼⠁</row>
          <row>⠿⠿⠿⠀⠄⠄⠄⠄⠄⠄⠄⠄⠀⠼⠃</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

simple-table

Tests simple table with no cell wrapping. The table takes up the space it needs to display the table data.

dp2/simple-table-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>simple-table</dc:title>
    <dc:description>Tests simple table with no cell wrapping. The table takes up the space it needs to display the table data.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main">
    <table preferred-empty-space="0">
      <tr>
        <td>⠤⠤⠤</td>
        <td>⠿⠿⠿⠿</td>
        <td>⠤⠤⠤</td>
      </tr>
      <tr>
        <td>⠿⠿⠿⠿</td>
        <td>⠤⠤⠤</td>
        <td>⠿⠿⠿</td>
      </tr>
      <tr>
        <td>⠤⠤⠤</td>
        <td>⠿⠿</td>
        <td>⠤⠤⠤</td>
      </tr>
    </table>
  </sequence>
</obfl>

dp2/simple-table-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>simple-table</dc:title>
      <dc:description>Tests simple table with no cell wrapping. The table takes up the space it needs to display the table data.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="20" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤⠀⠿⠿⠿⠿⠤⠤⠤</row>
          <row>⠿⠿⠿⠿⠤⠤⠤⠀⠿⠿⠿</row>
          <row>⠤⠤⠤⠀⠿⠿⠀⠀⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

table-header-underline

Tests simple table with no cell wrapping. Column spacing is set to 1. The table takes up the space it needs to display the table data and column spacing. Cells in the first row have a bottom border.

dp2/table-header-underline-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>table-header-underline</dc:title>
    <dc:description>Tests simple table with no cell wrapping. Column spacing is set to 1. The table takes up the space it needs to display the table data and column spacing. Cells in the first row have a bottom border.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main">
    <table table-col-spacing="1" preferred-empty-space="0">
      <tr>
        <td border-bottom-style="solid" border-bottom-width="1" border-bottom-align="center">⠿⠿⠿</td>
        <td border-bottom-style="solid" border-bottom-width="1" border-bottom-align="center">⠿⠿⠿⠿</td>
        <td border-bottom-style="solid" border-bottom-width="1" border-bottom-align="center">⠿⠿⠿</td>
      </tr>
      <tr>
        <td>⠿⠿⠿⠿</td>
        <td>⠿⠿⠿</td>
        <td>⠿⠿⠿</td>
      </tr>
      <tr>
        <td>⠿⠿⠿</td>
        <td>⠿⠿</td>
        <td>⠿⠿⠿</td>
      </tr>
    </table>
  </sequence>
</obfl>

dp2/table-header-underline-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>table-header-underline</dc:title>
      <dc:description>Tests simple table with no cell wrapping. Column spacing is set to 1. The table takes up the space it needs to display the table data and column spacing. Cells in the first row have a bottom border.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="20" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿⠀⠀⠿⠿⠿⠿⠀⠿⠿⠿</row>
          <row>⠒⠒⠒⠒⠀⠒⠒⠒⠒⠀⠒⠒⠒</row>
          <row>⠿⠿⠿⠿⠀⠿⠿⠿⠀⠀⠿⠿⠿</row>
          <row>⠿⠿⠿⠀⠀⠿⠿⠀⠀⠀⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

empty-margin-region

Tests empty left margin with margin-region.

dp2/empty-margin-region2-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>empty-margin-region</dc:title>
    <dc:description>Tests empty left margin with margin-region.</dc:description>
  </meta>
  <layout-master name="body" page-width="15" page-height="5" duplex="true">
    <default-template>
      <header/>
      <footer/>
      <margin-region align="left" width="2"/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
              </block>
  </sequence>
</obfl>

dp2/empty-margin-region2-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>empty-margin-region</dc:title>
      <dc:description>Tests empty left margin with margin-region.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="15" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
        </page>
        <page>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

multi-line-header-empty

Tests creating empty two-line top page margin using multiple headers.

dp2/multi-line-header-empty-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>multi-line-header-empty</dc:title>
    <dc:description>Tests creating empty two-line top page margin using multiple headers.</dc:description>
  </meta>
  <layout-master name="a" page-width="40" page-height="25" duplex="true" page-number-variable="page">
    <default-template>
      <header>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
      </header>
      <header>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>⠿⠿⠿⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿⠿⠿⠿
            </block>
  </sequence>
</obfl>

dp2/multi-line-header-empty-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>multi-line-header-empty</dc:title>
      <dc:description>Tests creating empty two-line top page margin using multiple headers.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="25" cols="40" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠿⠿⠿⠿⠿⠿⠿⠿⠀⠿⠿⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

volume-breaking-between-words

Tests allowsEndingVolumeOnHyphen(false) when a volume-transition element is present. The test passes if the volume-transition element is removed from the OBFL.

dp2/volume-breaking-between-words-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>volume-breaking-between-words</dc:title>
    <dc:description>Tests allowsEndingVolumeOnHyphen(false) when a volume-transition element is present. The test passes if the volume-transition element is removed from the OBFL.</dc:description>
  </meta>
  <layout-master name="main" duplex="true" page-number-variable="page" page-width="10" page-height="5">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="3"/>
  <volume-transition range="sheet"/>
  <sequence master="main">
    <block>⠁⠁⠁⠁⠁
              ⠁⠁⠁⠁⠁ ⠁⠁⠁⠁⠁ ⠁⠁⠁⠁⠁ ⠁⠁⠁⠁⠁ ⠿⠿­⠿⠿⠿⠿⠿
              ⠁⠁⠁⠁⠁ ⠁⠁⠁⠁⠁ ⠁⠁⠁⠁⠁ ⠁⠁⠁⠁⠁ ⠿⠿­⠿⠿⠿⠿⠿
              ⠁⠁⠁⠁⠁ ⠁⠁⠁⠁⠁ ⠁⠁⠁⠁⠁ ⠁⠁⠁⠁⠁ ⠿⠿­⠿⠿⠿⠿⠿
              ⠁⠁⠁⠁⠁ ⠁⠁⠁⠁⠁ ⠁⠁⠁⠁⠁ ⠁⠁⠁⠁⠁ ⠿⠿­⠿⠿⠿⠿⠿
              ⠁⠁⠁⠁⠁ ⠁⠁⠁⠁⠁ ⠁⠁⠁⠁⠁ ⠁⠁⠁⠁⠁ ⠿⠿­⠿⠿⠿⠿⠿
              ⠁⠁⠁⠁⠁ ⠁⠁⠁⠁⠁ ⠁⠁⠁⠁⠁ ⠁⠁⠁⠁⠁ ⠿⠿­⠿⠿⠿⠿⠿
              ⠁⠁⠁⠁⠁ ⠁⠁⠁⠁⠁ ⠁⠁⠁⠁⠁ ⠁⠁⠁⠁⠁ ⠿⠿
            </block>
  </sequence>
</obfl>

dp2/volume-breaking-between-words-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:identifier>identifier?</dc:identifier>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁⠀⠿⠿⠤</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁⠀⠿⠿⠤</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁⠀⠿⠿⠤</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿⠿</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁⠀⠿⠿⠤</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁⠀⠿⠿⠤</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁⠀⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

marker-indicator

Tests margin-region with marker-indicator.

dp2/marker-indicator-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>marker-indicator</dc:title>
    <dc:description>Tests margin-region with marker-indicator.</dc:description>
  </meta>
  <layout-master name="body" page-width="15" page-height="5" duplex="true">
    <default-template>
      <header/>
      <footer/>
      <margin-region align="left" width="2">
        <indicators>
          <marker-indicator markers="indicator/pagenum" indicator="⠿"/>
        </indicators>
      </margin-region>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>
      <marker class="indicator/pagenum" value="x"/>⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                
      <marker class="indicator/pagenum" value="x"/>
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                ⠤⠤⠤
                
      <marker class="indicator/pagenum" value="x"/>
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                ⠤⠤⠤
                
      <marker class="indicator/pagenum" value="x"/>
                ⠤⠤⠤
                
      <marker class="indicator/pagenum" value="x"/>
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                
      <marker class="indicator/pagenum" value="x"/>
    </block>
  </sequence>
</obfl>

dp2/marker-indicator-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>marker-indicator</dc:title>
      <dc:description>Tests margin-region with marker-indicator.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="15" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠿⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠿⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
        </page>
        <page>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠿⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠿⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

table-col-spacing

Tests simple table with no cell wrapping. Column spacing is set to 1. The table takes up the space it needs to display the table data and column spacing.

dp2/table-col-spacing-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>table-col-spacing</dc:title>
    <dc:description>Tests simple table with no cell wrapping. Column spacing is set to 1. The table takes up the space it needs to display the table data and column spacing.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main">
    <table table-col-spacing="1" preferred-empty-space="0">
      <tr>
        <td>⠿⠿⠿</td>
        <td>⠿⠿⠿⠿</td>
        <td>⠿⠿⠿</td>
      </tr>
      <tr>
        <td>⠿⠿⠿⠿</td>
        <td>⠿⠿⠿</td>
        <td>⠿⠿⠿</td>
      </tr>
      <tr>
        <td>⠿⠿⠿</td>
        <td>⠿⠿</td>
        <td>⠿⠿⠿</td>
      </tr>
    </table>
  </sequence>
</obfl>

dp2/table-col-spacing-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>table-col-spacing</dc:title>
      <dc:description>Tests simple table with no cell wrapping. Column spacing is set to 1. The table takes up the space it needs to display the table data and column spacing.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="20" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿⠀⠀⠿⠿⠿⠿⠀⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠀⠿⠿⠿⠀⠀⠿⠿⠿</row>
          <row>⠿⠿⠿⠀⠀⠿⠿⠀⠀⠀⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

table-colspan

Tests a table cell spanning multiple columns.

dp2/table-colspan-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>table-colspan</dc:title>
    <dc:description>Tests a table cell spanning multiple columns.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main">
    <table table-col-spacing="1" preferred-empty-space="2">
      <tr>
        <td>⠿⠿⠿⠿</td>
        <td col-span="2">⠿⠿⠿⠿⠿⠿⠿⠿⠿</td>
        <td>⠿⠿⠿⠿</td>
      </tr>
      <tr>
        <td>⠿⠿</td>
        <td>⠿⠿</td>
        <td>⠿⠿</td>
        <td>⠿⠿</td>
      </tr>
      <tr>
        <td>⠿⠿</td>
        <td>⠿⠿</td>
        <td>⠿⠿</td>
        <td>⠿⠿</td>
      </tr>
    </table>
  </sequence>
</obfl>

dp2/table-colspan-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>table-colspan</dc:title>
      <dc:description>Tests a table cell spanning multiple columns.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="20" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿⠿⠀⠿⠿⠿⠿⠿⠿⠿⠿⠿⠀⠿⠿⠿⠿</row>
          <row>⠿⠿⠀⠀⠀⠿⠿⠀⠀⠀⠿⠿⠀⠀⠀⠿⠿</row>
          <row>⠿⠿⠀⠀⠀⠿⠿⠀⠀⠀⠿⠿⠀⠀⠀⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

various-page-widths

Tests two layout-masters with different page-width.

dp2/various-page-widths-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>various-page-widths</dc:title>
    <dc:description>Tests two layout-masters with different page-width.</dc:description>
  </meta>
  <layout-master name="a" page-width="30" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <layout-master name="b" page-width="15" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>⠤⠤⠤
            </block>
  </sequence>
  <sequence master="b">
    <block>⠤⠤⠤
            </block>
  </sequence>
  <sequence master="a">
    <block>⠤⠤⠤
            </block>
  </sequence>
</obfl>

dp2/various-page-widths-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>various-page-widths</dc:title>
      <dc:description>Tests two layout-masters with different page-width.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="30" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section cols="15">
        <page>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

row-spacing-and-margins

Tests combinations of row-spacing and (non-collapsed) top/bottom margins, including on nested blocks with different row-spacing.

dp2/row-spacing-and-margins-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>row-spacing-and-margins</dc:title>
    <dc:description>Tests combinations of row-spacing and (non-collapsed) top/bottom margins, including on nested blocks with different row-spacing.</dc:description>
  </meta>
  <layout-master name="a" duplex="true" page-width="40" page-height="75">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block margin-top="1" margin-bottom="1" row-spacing="2.0">⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁
      <br/>
                ⠁
      <br/>
                ⠁
      <br/>
                ⠁
      <br/>
                ⠁
              
    </block>
    <block>⠒⠒⠒</block>
    <block margin-top="0" margin-bottom="1" row-spacing="2.0">⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁
      <br/>
                ⠁
      <br/>
                ⠁
      <br/>
                ⠁
      <br/>
                ⠁
              
    </block>
    <block>⠒⠒⠒</block>
    <block margin-top="0" margin-bottom="0" row-spacing="2.0">⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁
      <br/>
                ⠁
      <br/>
                ⠁
      <br/>
                ⠁
      <br/>
                ⠁
              
    </block>
    <block>⠒⠒⠒</block>
    <block margin-top="1" margin-bottom="0" row-spacing="2.0">⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁
      <br/>
                ⠁
      <br/>
                ⠁
      <br/>
                ⠁
      <br/>
                ⠁
              
    </block>
    <block>⠒⠒⠒</block>
    <block margin-top="1" row-spacing="1.0">
      <block margin-top="0" row-spacing="2.0">⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁
        <br/>
                  ⠁
        <br/>
                  ⠁
        <br/>
                  ⠁
        <br/>
                  ⠁
                
      </block>
      <block>⠒⠒⠒</block>
      <block margin-top="1" row-spacing="2.0">⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁
        <br/>
                  ⠁
        <br/>
                  ⠁
        <br/>
                  ⠁
        <br/>
                  ⠁
                
      </block>
    </block>
  </sequence>
</obfl>

dp2/row-spacing-and-margins-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>row-spacing-and-margins</dc:title>
      <dc:description>Tests combinations of row-spacing and (non-collapsed) top/bottom margins, including on nested blocks with different row-spacing.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="40" rows="75" rowgap="0" duplex="true">
      <section>
        <page>
          <row rowgap="4"/>
          <row rowgap="4">⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4"/>
          <row>⠒⠒⠒</row>
          <row rowgap="4">⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4"/>
          <row>⠒⠒⠒</row>
          <row rowgap="4">⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row>⠒⠒⠒</row>
          <row rowgap="4"/>
          <row rowgap="4">⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row>⠒⠒⠒</row>
          <row rowgap="0"/>
          <row rowgap="4">⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row>⠒⠒⠒</row>
          <row rowgap="4"/>
          <row rowgap="4">⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row>⠁</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

row-spacing-and-collapsing-margins

Tests combinations of row-spacing and collapsing top/bottom margins, including on nested blocks with different row-spacing.

dp2/row-spacing-and-collapsing-margins-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>row-spacing-and-collapsing-margins</dc:title>
    <dc:description>Tests combinations of row-spacing and collapsing top/bottom margins, including on nested blocks with different row-spacing.</dc:description>
  </meta>
  <layout-master name="a" duplex="true" page-width="40" page-height="35">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block margin-bottom="1" row-spacing="2.0">⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁
      <br/>
                ⠁
      <br/>
                ⠁
      <br/>
                ⠁
      <br/>
                ⠁
              
    </block>
    <block margin-top="1" margin-bottom="1" row-spacing="2.0">⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁
      <br/>
                ⠁
      <br/>
                ⠁
      <br/>
                ⠁
      <br/>
                ⠁
              
    </block>
    <block margin-top="1" row-spacing="1.0">
      <block margin-top="0" row-spacing="2.0">⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁
        <br/>
                  ⠁
        <br/>
                  ⠁
        <br/>
                  ⠁
        <br/>
                  ⠁
                
      </block>
    </block>
  </sequence>
</obfl>

dp2/row-spacing-and-collapsing-margins-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>row-spacing-and-collapsing-margins</dc:title>
      <dc:description>Tests combinations of row-spacing and collapsing top/bottom margins, including on nested blocks with different row-spacing.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="40" rows="35" rowgap="0" duplex="true">
      <section>
        <page>
          <row rowgap="4">⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4"/>
          <row rowgap="4">⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4"/>
          <row rowgap="4">⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row rowgap="4">⠁</row>
          <row>⠁</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

keep-content-with-border

Tests that pages are not broken between a border of a block and the content of that block. Tested with keep="page", orphans or widows on the block with the border. Also tested for two nested blocks with borders.

dp2/keep-content-with-border-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>keep-content-with-border</dc:title>
    <dc:description>Tests that pages are not broken between a border of a block and the content of that block. Tested with keep="page", orphans or widows on the block with the border. Also tested for two nested blocks with borders.</dc:description>
  </meta>
  <layout-master name="master" duplex="true" page-number-variable="page" page-width="10" page-height="5">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="master">
    <block>⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block border-top-style="solid">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block>⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block keep="page" border-top-style="solid">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block>⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block orphans="2" border-top-style="solid">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block>⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block widows="2" border-top-style="solid">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block>⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block border-bottom-style="solid">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block>⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block border-top-style="solid">
      <block border-top-style="solid">⠿⠿⠿⠿⠿⠿
                  ⠿⠿⠿⠿⠿⠿
                </block>
    </block>
  </sequence>
</obfl>

dp2/keep-content-with-border-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>keep-content-with-border</dc:title>
      <dc:description>Tests that pages are not broken between a border of a block and the content of that block. Tested with keep="page", orphans or widows on the block with the border. Also tested for two nested blocks with borders.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉</row>
          <row>⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

page-breaking-and-borders

Tests borders in combination with page break control. Tests two blocks following each other in various situations: with or without keep="page" on the first block, with or without a bottom border on the first block, and with keep="page", orphans or widows on the second block.

dp2/page-breaking-and-borders-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>page-breaking-and-borders</dc:title>
    <dc:description>Tests borders in combination with page break control. Tests two blocks following each other in various situations: with or without keep="page" on the first block, with or without a bottom border on the first block, and with keep="page", orphans or widows on the second block.</dc:description>
  </meta>
  <layout-master name="master" duplex="true" page-number-variable="page" page-width="10" page-height="6">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="master">
    <block>⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block keep="page">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block keep="page">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block keep="page">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block border-bottom-style="solid">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block keep="page">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block keep="page" border-bottom-style="solid">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block keep="page">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block>⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block orphans="2">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block keep="page">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block orphans="2">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block border-bottom-style="solid">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block orphans="2">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block keep="page" border-bottom-style="solid">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block orphans="2">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block>⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block widows="2">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block keep="page">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block widows="2">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block border-bottom-style="solid">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block widows="2">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block keep="page" border-bottom-style="solid">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block widows="2">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
</obfl>

dp2/page-breaking-and-borders-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>page-breaking-and-borders</dc:title>
      <dc:description>Tests borders in combination with page break control. Tests two blocks following each other in various situations: with or without keep="page" on the first block, with or without a bottom border on the first block, and with keep="page", orphans or widows on the second block.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

single-line-footer-empty

Tests creating empty bottom page margin using footer.

dp2/single-line-footer-empty-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>single-line-footer-empty</dc:title>
    <dc:description>Tests creating empty bottom page margin using footer.</dc:description>
  </meta>
  <layout-master name="a" page-width="15" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>⠿ </block>
    <block>⠿ </block>
    <block>⠿ </block>
    <block>⠿ </block>
    <block>⠿ </block>
    <block>⠿ </block>
  </sequence>
</obfl>

dp2/single-line-footer-empty-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>single-line-footer-empty</dc:title>
      <dc:description>Tests creating empty bottom page margin using footer.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="15" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿</row>
          <row>⠿</row>
          <row>⠿</row>
          <row>⠿</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠿</row>
          <row>⠿</row>
          <row/>
          <row/>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

current-page-various-positions

Tests current-page with different layout-masters. Sequences with different layout-masters, that each place current-page in a different position (header, footer or nowhere), follow each other. Also tests resetting page number with initial-page-number.

dp2/current-page-various-positions-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>current-page-various-positions</dc:title>
    <dc:description>Tests current-page with different layout-masters. Sequences with different layout-masters, that each place current-page in a different position (header, footer or nowhere), follow each other. Also tests resetting page number with initial-page-number.</dc:description>
  </meta>
  <layout-master name="a" page-width="15" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <current-page number-format="default"/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <layout-master name="b" page-width="15" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <layout-master name="c" page-width="15" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <current-page number-format="default"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>⠤⠤⠤
            </block>
  </sequence>
  <sequence master="b">
    <block>⠤⠤⠤
            </block>
  </sequence>
  <sequence master="a">
    <block>⠤⠤⠤
            </block>
  </sequence>
  <sequence master="a" initial-page-number="10">
    <block>⠤⠤⠤
            </block>
    <block break-before="page">⠤⠤⠤
            </block>
  </sequence>
  <sequence master="c">
    <block>⠤⠤⠤
            </block>
  </sequence>
</obfl>

dp2/current-page-various-positions-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>current-page-various-positions</dc:title>
      <dc:description>Tests current-page with different layout-masters. Sequences with different layout-masters, that each place current-page in a different position (header, footer or nowhere), follow each other. Also tests resetting page number with initial-page-number.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="15" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤</row>
          <row/>
          <row/>
          <row/>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠁</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠤⠤⠤</row>
          <row/>
          <row/>
          <row/>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠑</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠤⠤⠤</row>
          <row/>
          <row/>
          <row/>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠁⠚</row>
        </page>
        <page>
          <row>⠤⠤⠤</row>
          <row/>
          <row/>
          <row/>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠁⠁</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠁⠃</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

sheets-in-volume-max

Tests sheets-in-volume-max.

dp2/sheets-in-volume-max-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>sheets-in-volume-max</dc:title>
    <dc:description>Tests sheets-in-volume-max.</dc:description>
  </meta>
  <layout-master name="main" page-width="10" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="3"/>
  <sequence master="main">
    <block>⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
            </block>
  </sequence>
</obfl>

dp2/sheets-in-volume-max-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>sheets-in-volume-max</dc:title>
      <dc:description>Tests sheets-in-volume-max.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="10" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
    <volume rows="5" cols="10" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
    <volume rows="5" cols="10" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

empty-block

Tests empty blocks.

dp2/empty-block-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>empty-block</dc:title>
    <dc:description>Tests empty blocks.</dc:description>
  </meta>
  <layout-master name="a" page-width="40" page-height="25" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block/>
    <block>⠿</block>
    <block/>
    <block>⠿</block>
    <block> </block>
    <block>⠿ </block>
    <block/>
    <block>⠿</block>
    <block margin-bottom="1"/>
    <block>⠿</block>
  </sequence>
</obfl>

dp2/empty-block-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>empty-block</dc:title>
      <dc:description>Tests empty blocks.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="25" cols="40" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿</row>
          <row>⠿</row>
          <row>⠀</row>
          <row>⠿</row>
          <row>⠿</row>
          <row/>
          <row>⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

keep-all

Tests simple keep="page".

dp2/keep-all-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>keep-all</dc:title>
    <dc:description>Tests simple keep="page".</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              </block>
    <block keep="page">⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              </block>
  </sequence>
</obfl>

dp2/keep-all-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>keep-all</dc:title>
      <dc:description>Tests simple keep="page".</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="6" cols="10" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

pre-hyphenation

Tests (pre-)hyphenation.

dp2/pre-hyphenation-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>pre-hyphenation</dc:title>
    <dc:description>Tests (pre-)hyphenation.</dc:description>
  </meta>
  <layout-master name="a" page-width="12" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>⠿⠿⠿⠿⠿⠿ ⠿⠿⠿­⠿⠿⠿ ⠿⠿⠿⠿⠿⠿
            </block>
  </sequence>
</obfl>

dp2/pre-hyphenation-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>pre-hyphenation</dc:title>
      <dc:description>Tests (pre-)hyphenation.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="12" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿⠀⠿⠿⠿⠤</row>
          <row>⠿⠿⠿⠀⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

pre-and-post-content

Tests single volume with pre-content and post-content.

dp2/pre-and-post-content-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>pre-and-post-content</dc:title>
    <dc:description>Tests single volume with pre-content and post-content.</dc:description>
  </meta>
  <layout-master name="a" duplex="false" page-width="10" page-height="25">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="1000">
    <pre-content>
      <sequence master="a">
        <block>⠤⠤⠤⠤⠤⠤
                  </block>
      </sequence>
    </pre-content>
    <post-content>
      <sequence master="a">
        <block>⠤⠤⠤⠤⠤⠤
                  </block>
      </sequence>
    </post-content>
  </volume-template>
  <sequence master="a">
    <block>⠤⠤⠤
              </block>
  </sequence>
</obfl>

dp2/pre-and-post-content-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>pre-and-post-content</dc:title>
      <dc:description>Tests single volume with pre-content and post-content.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="25" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

page-number-backward-reference

Tests page-number referencing a previous block.

dp2/page-number-backward-reference-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>page-number-backward-reference</dc:title>
    <dc:description>Tests page-number referencing a previous block.</dc:description>
  </meta>
  <layout-master name="body" page-width="15" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <current-page number-format="default"/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>
      <block>⠿⠿⠿
              </block>
      <block id="x">⠤⠤⠤
              </block>
      <block>⠿⠿⠿
              </block>
      <block id="y">⠤⠤⠤
              </block>
      <block id="z">⠤⠤⠤
              </block>
    </block>
    <block break-before="page">
      <block>⠤⠤⠤
                
        <page-number ref-id="x" number-format="default"/>
      </block>
      <block>⠤⠤⠤
                
        <page-number ref-id="y" number-format="default"/>
      </block>
      <block>⠤⠤⠤
                
        <page-number ref-id="z" number-format="default"/>
      </block>
    </block>
  </sequence>
</obfl>

dp2/page-number-backward-reference-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>page-number-backward-reference</dc:title>
      <dc:description>Tests page-number referencing a previous block.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="15" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿</row>
          <row>⠤⠤⠤</row>
          <row>⠿⠿⠿</row>
          <row>⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠁</row>
        </page>
        <page>
          <row>⠤⠤⠤</row>
          <row/>
          <row/>
          <row/>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠃</row>
        </page>
        <page>
          <row>⠤⠤⠤⠀⠼⠁</row>
          <row>⠤⠤⠤⠀⠼⠁</row>
          <row>⠤⠤⠤⠀⠼⠃</row>
          <row/>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠉</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

block-underline

Tests underlining of blocks with various properties and contents.

dp2/block-underline-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>block-underline</dc:title>
    <dc:description>Tests underlining of blocks with various properties and contents.</dc:description>
  </meta>
  <layout-master name="main" duplex="false" page-width="15" page-height="50">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main">
    <block underline-style="solid">⠌⠌⠌⠌
            </block>
    <block underline-style="solid">⠌⠌⠌⠌⠌ ⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌
            </block>
    <block underline-style="solid">⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌ ⠌⠌⠌⠌⠌
            </block>
    <block underline-style="solid" padding-left="2">⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌ ⠌⠌⠌⠌⠌
            </block>
    <block underline-style="solid" margin-left="2">⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌ ⠌⠌⠌⠌⠌
            </block>
    <block underline-style="solid" align="center">⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌ ⠌⠌⠌⠌⠌
            </block>
    <block underline-style="solid" padding-right="2" align="center">⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌ ⠌⠌⠌⠌⠌
            </block>
    <block underline-style="solid" first-line-indent="2">⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌ ⠌⠌⠌⠌⠌
            </block>
    <block underline-style="solid" text-indent="2" first-line-indent="2">⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌ ⠌⠌⠌⠌⠌
            </block>
    <block underline-style="solid" text-indent="2" first-line-indent="0">⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌ ⠌⠌⠌⠌⠌
            </block>
    <block underline-style="solid" row-spacing="2">⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌ ⠌⠌⠌⠌⠌
            </block>
    <block underline-style="solid" margin-bottom="1">⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌ ⠌⠌⠌⠌⠌
            </block>
    <block underline-style="solid" padding-bottom="1">⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌ ⠌⠌⠌⠌⠌
            </block>
  </sequence>
</obfl>

dp2/block-underline-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>block-underline</dc:title>
      <dc:description>Tests underlining of blocks with various properties and contents.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="15" rows="50" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠌⠌⠌⠌</row>
          <row>⠤⠤⠤⠤</row>
          <row>⠌⠌⠌⠌⠌</row>
          <row>⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌</row>
          <row>⠌⠌⠌⠌⠌</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌</row>
          <row>⠀⠀⠌⠌⠌⠌⠌</row>
          <row>⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌</row>
          <row>⠀⠀⠌⠌⠌⠌⠌</row>
          <row>⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌</row>
          <row>⠀⠀⠀⠀⠀⠌⠌⠌⠌⠌</row>
          <row>⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌</row>
          <row>⠀⠀⠀⠀⠌⠌⠌⠌⠌</row>
          <row>⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌</row>
          <row>⠌⠌⠌⠌⠌</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌</row>
          <row>⠀⠀⠌⠌⠌⠌⠌</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌</row>
          <row>⠀⠀⠌⠌⠌⠌⠌</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row rowgap="4">⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌</row>
          <row rowgap="4">⠌⠌⠌⠌⠌</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌</row>
          <row>⠌⠌⠌⠌⠌</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row/>
          <row>⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌⠌</row>
          <row>⠌⠌⠌⠌⠌</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row/>
        </page>
      </section>
    </volume>
  </body>
</pef>

volume-breaking-between-blocks

Tests volume-transition element, which modifies the last sheet so that volume breaks occur between blocks.

dp2/volume-breaking-between-blocks-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>volume-breaking-between-blocks</dc:title>
    <dc:description>Tests volume-transition element, which modifies the last sheet so that volume breaks occur between blocks.</dc:description>
  </meta>
  <layout-master name="main" duplex="true" page-number-variable="page" page-width="10" page-height="5">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="3"/>
  <volume-transition range="sheet"/>
  <sequence master="main">
    <block>⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿
              ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿
              ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿
            </block>
    <block>⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
            </block>
    <block>⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿
              ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿
              ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿
            </block>
    <block>⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
            </block>
    <block>⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿
              ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿
              ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿
            </block>
  </sequence>
</obfl>

dp2/volume-breaking-between-blocks-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:identifier>identifier?</dc:identifier>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

table-auto-column-width-cell-wrapping

Tests table with data that can wrap multiple lines in a cell. The column widths are computed so that the total table width is equal to the specified width and the table height is minimized. Cells in the first row have a bottom border to indicate the column widths and spacing.

dp2/table-auto-column-width-cell-wrapping-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>table-auto-column-width-cell-wrapping</dc:title>
    <dc:description>Tests table with data that can wrap multiple lines in a cell. The column widths are computed so that the total table width is equal to the specified width and the table height is minimized. Cells in the first row have a bottom border to indicate the column widths and spacing.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main">
    <table col-spacing="1">
      <tr>
        <td border-bottom-style="solid" border-bottom-width="1" border-bottom-align="center">⠿⠿⠿</td>
        <td border-bottom-style="solid" border-bottom-width="1" border-bottom-align="center">⠿⠿⠿</td>
        <td border-bottom-style="solid" border-bottom-width="1" border-bottom-align="center">⠿⠿⠿</td>
      </tr>
      <tr>
        <td>⠿⠿⠿</td>
        <td>⠿⠿⠿⠿⠿⠿ ⠿⠿⠿</td>
        <td>⠿⠿⠿</td>
      </tr>
      <tr>
        <td>⠿⠿⠿</td>
        <td>⠿⠿⠿ ⠿⠿⠿</td>
        <td>⠿⠿⠿ ⠿⠿⠿</td>
      </tr>
    </table>
  </sequence>
</obfl>

dp2/table-auto-column-width-cell-wrapping-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>table-auto-column-width-cell-wrapping</dc:title>
      <dc:description>Tests table with data that can wrap multiple lines in a cell. The column widths are computed so that the total table width is equal to the specified width and the table height is minimized. Cells in the first row have a bottom border to indicate the column widths and spacing.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="20" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿⠀⠀⠿⠿⠿⠀⠀⠀⠀⠀⠿⠿⠿⠀⠀⠀⠀</row>
          <row>⠒⠒⠒⠒⠀⠒⠒⠒⠒⠒⠒⠒⠀⠒⠒⠒⠒⠒⠒⠒</row>
          <row>⠿⠿⠿⠀⠀⠿⠿⠿⠿⠿⠿⠀⠀⠿⠿⠿⠀⠿⠿⠿</row>
          <row>⠀⠀⠀⠀⠀⠿⠿⠿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠿⠿⠿⠀⠀⠿⠿⠿⠀⠀⠀⠀⠀⠿⠿⠿⠀⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

row-spacing-nested-blocks

Tests row-spacing on block nested in block with border bottom and default row-spacing.

dp2/row-spacing-nested-blocks-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>row-spacing-nested-blocks</dc:title>
    <dc:description>Tests row-spacing on block nested in block with border bottom and default row-spacing.</dc:description>
  </meta>
  <layout-master name="a" page-width="40" page-height="25" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block border-bottom-style="solid" border-bottom-align="center">
      <block row-spacing="2.0">⠿⠿⠿⠿⠿⠿⠿⠿ </block>
    </block>
    <block>⠿⠿⠿⠿⠿⠿⠿⠿ </block>
  </sequence>
</obfl>

dp2/row-spacing-nested-blocks-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>row-spacing-nested-blocks</dc:title>
      <dc:description>Tests row-spacing on block nested in block with border bottom and default row-spacing.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="40" rows="25" rowgap="0" duplex="true">
      <section>
        <page>
          <row rowgap="4">⠿⠿⠿⠿⠿⠿⠿⠿</row>
          <row>⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒⠒</row>
          <row>⠿⠿⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

header-vary-height-left-right-pages

Tests different height of header on left and right pages.

dp2/header-vary-height-left-right-pages-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>header-vary-height-left-right-pages</dc:title>
    <dc:description>Tests different height of header on left and right pages.</dc:description>
  </meta>
  <layout-master name="a" page-width="40" page-height="25" duplex="true" page-number-variable="page">
    <template use-when="(= (% $page 2) 1)">
      <header>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
      </header>
      <footer/>
    </template>
    <template use-when="(= (% $page 2) 0)">
      <header>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
      </header>
      <header>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
      </header>
      <footer/>
    </template>
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>⠿⠿⠿⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿⠿⠿⠿
            </block>
    <block break-before="page">⠿⠿⠿⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿⠿⠿⠿
            </block>
  </sequence>
</obfl>

dp2/header-vary-height-left-right-pages-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>header-vary-height-left-right-pages</dc:title>
      <dc:description>Tests different height of header on left and right pages.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="25" cols="40" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠿⠿⠿⠿⠿⠿⠿⠿⠀⠿⠿⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠿⠿⠿⠿⠿⠿⠿⠿⠀⠿⠿⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

block-underline-with-child-block

Tests underlining of a block with a child block.

dp2/block-underline-with-child-block-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>block-underline-with-child-block</dc:title>
    <dc:description>Tests underlining of a block with a child block.</dc:description>
  </meta>
  <layout-master name="main" duplex="false" page-width="15" page-height="15">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main">
    <block underline-style="solid">⠌⠌⠌⠌
              
      <block>⠌⠌⠌⠌
              </block>
    </block>
  </sequence>
</obfl>

dp2/block-underline-with-child-block-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>block-underline-with-child-block</dc:title>
      <dc:description>Tests underlining of a block with a child block.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="40" rows="25" rowgap="0" duplex="false">
      <section>
        <page>
          <row/>
        </page>
      </section>
    </volume>
  </body>
</pef>

pre-content-use-when

Tests two volume-templates with different pre-content.

dp2/pre-content-use-when-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>pre-content-use-when</dc:title>
    <dc:description>Tests two volume-templates with different pre-content.</dc:description>
  </meta>
  <layout-master name="a" duplex="false" page-width="10" page-height="5">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template use-when="(= $volume 1)" sheets-in-volume-max="3"/>
  <volume-template use-when="(> $volume 1)" sheets-in-volume-max="3">
    <pre-content>
      <sequence master="a">
        <block>⠿⠿⠿⠿</block>
      </sequence>
    </pre-content>
  </volume-template>
  <sequence master="a">
    <block>⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤
                ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤
                ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤
                ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤
                ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤
                ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤
              </block>
  </sequence>
</obfl>

dp2/pre-content-use-when-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>pre-content-use-when</dc:title>
      <dc:description>Tests two volume-templates with different pre-content.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="5" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="5" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="5" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

layout-master-row-spacing

Tests row-spacing on layout-master.

dp2/layout-master-row-spacing-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>layout-master-row-spacing</dc:title>
    <dc:description>Tests row-spacing on layout-master.</dc:description>
  </meta>
  <layout-master name="a" duplex="false" page-width="40" page-height="25" row-spacing="2.0">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>⠤⠤⠤⠤
      <br/>
                ⠤⠤⠤⠤
      <br/>
                ⠤⠤⠤⠤
      <br/>
                ⠤⠤⠤⠤
              
    </block>
  </sequence>
</obfl>

dp2/layout-master-row-spacing-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>layout-master-row-spacing</dc:title>
      <dc:description>Tests row-spacing on layout-master.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="40" rows="25" rowgap="4" duplex="false">
      <section>
        <page>
          <row>⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤</row>
          <row rowgap="0">⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

multi-line-footer-partly-empty

Tests creating single-line footer within two-line bottom page margin using multiple footers.

dp2/multi-line-footer-partly-empty-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>multi-line-footer-partly-empty</dc:title>
    <dc:description>Tests creating single-line footer within two-line bottom page margin using multiple footers.</dc:description>
  </meta>
  <layout-master name="a" page-width="15" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
      </footer>
      <footer>
        <field>
          <string value="⠆"/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>⠿ </block>
    <block>⠿ </block>
    <block>⠿ </block>
    <block>⠿ </block>
    <block>⠿ </block>
    <block>⠿ </block>
  </sequence>
</obfl>

dp2/multi-line-footer-partly-empty-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>multi-line-footer-partly-empty</dc:title>
      <dc:description>Tests creating single-line footer within two-line bottom page margin using multiple footers.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="15" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿</row>
          <row>⠿</row>
          <row>⠿</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠿</row>
          <row>⠿</row>
          <row>⠿</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

multi-line-footer

Tests multi-line footer.

dp2/multi-line-footer-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>multi-line-footer</dc:title>
    <dc:description>Tests multi-line footer.</dc:description>
  </meta>
  <layout-master name="a" page-width="15" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer>
        <field>
          <string value="⠆"/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
      </footer>
      <footer>
        <field>
          <string value="⠆⠆"/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>⠿ </block>
    <block>⠿ </block>
    <block>⠿ </block>
    <block>⠿ </block>
    <block>⠿ </block>
    <block>⠿ </block>
  </sequence>
</obfl>

dp2/multi-line-footer-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>multi-line-footer</dc:title>
      <dc:description>Tests multi-line footer.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="15" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿</row>
          <row>⠿</row>
          <row>⠿</row>
          <row>⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠆⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠿</row>
          <row>⠿</row>
          <row>⠿</row>
          <row>⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠆⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

table-leaders

Tests leaders within table cells.

dp2/table-leaders-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>table-leaders</dc:title>
    <dc:description>Tests leaders within table cells.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main">
    <table table-col-spacing="1" preferred-empty-space="0">
      <tr>
        <td>⠿⠿⠿⠿⠿</td>
        <td>⠿⠿⠿⠿⠿</td>
        <td>⠿⠿⠿⠿⠿</td>
      </tr>
      <tr>
        <td>⠿⠿ 
          <leader pattern="⠄" position="100%" align="right"/>
        </td>
        <td>⠿⠿⠿ 
          <leader pattern="⠄" position="100%" align="right"/>
        </td>
        <td>⠿⠿⠿</td>
      </tr>
      <tr>
        <td>⠿ 
          <leader pattern="⠄" position="100%" align="right"/>
        </td>
        <td>⠿ 
          <leader pattern="⠄" position="100%" align="right"/>
        </td>
        <td>⠿</td>
      </tr>
    </table>
  </sequence>
</obfl>

dp2/table-leaders-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>table-leaders</dc:title>
      <dc:description>Tests leaders within table cells.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="20" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠀⠿⠿⠿⠿⠿⠀⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠀⠄⠄⠀⠿⠿⠿⠀⠄⠀⠿⠿⠿</row>
          <row>⠿⠀⠄⠄⠄⠀⠿⠀⠄⠄⠄⠀⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

table-issue-147

see issue https://github.com/nlbdev/pipeline/issues/147

dp2/table-issue-147-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>table-issue-147</dc:title>
    <dc:description>see issue https://github.com/nlbdev/pipeline/issues/147</dc:description>
  </meta>
  <layout-master name="master" page-width="29" page-height="28">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="master">
    <table padding-left="2" border-left-style="solid" table-col-spacing="1">
      <tr>
        <td>⠿⠿⠿⠿⠿⠿⠿⠿⠿ ⠿⠿⠿ ⠿⠿⠿⠿⠿⠿</td>
        <td>⠿⠿⠿⠿⠿⠿ ⠿⠿</td>
      </tr>
      <tr>
        <td>⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿­⠿⠿⠿⠿⠿⠿⠿⠿</td>
        <td>⠿⠿⠿ ⠿⠿⠿⠿</td>
      </tr>
    </table>
  </sequence>
</obfl>

dp2/table-issue-147-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>table-issue-147</dc:title>
      <dc:description>see issue https://github.com/nlbdev/pipeline/issues/147</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="29" rows="28" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠇⠀⠀⠿⠿⠿⠿⠿⠿⠿⠿⠿⠀⠿⠿⠿⠀⠀⠀⠀⠀⠀⠿⠿⠿⠿⠿⠿</row>
          <row>⠇⠀⠀⠿⠿⠿⠿⠿⠿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿⠿</row>
          <row>⠇⠀⠀⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠀⠿⠿⠿</row>
          <row>⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

marker-indicator-before-block

Tests marker-indicator directly followed by a block. Broken: marker does not create an indicator: see https://github.com/joeha480/dotify/issues/194

dp2/marker-indicator-before-block-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>marker-indicator-before-block</dc:title>
    <dc:description>Tests marker-indicator directly followed by a block. Broken: marker does not create an indicator: see https://github.com/joeha480/dotify/issues/194</dc:description>
  </meta>
  <layout-master name="body" page-width="15" page-height="5" duplex="true">
    <default-template>
      <header/>
      <footer/>
      <margin-region align="left" width="2">
        <indicators>
          <marker-indicator markers="foo" indicator="⠿"/>
        </indicators>
      </margin-region>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>
      <marker class="foo" value="x"/>
      <block>⠤⠤⠤
                </block>
    </block>
  </sequence>
</obfl>

dp2/marker-indicator-before-block-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>marker-indicator-before-block</dc:title>
      <dc:description>Tests marker-indicator directly followed by a block. Broken: marker does not create an indicator: see https://github.com/joeha480/dotify/issues/194</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="15" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠀⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

list-of-references

Tests list-of-references.

dp2/list-of-references-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>list-of-references</dc:title>
    <dc:description>Tests list-of-references.</dc:description>
  </meta>
  <layout-master name="main" page-width="10" page-height="8" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="1000">
    <post-content>
      <dynamic-sequence master="main">
        <list-of-references collection="endnotes" range="volume"/>
      </dynamic-sequence>
    </post-content>
  </volume-template>
  <collection name="endnotes">
    <item id="a">
      <block>
        <page-number ref-id="I" number-format="default"/>
                ⠶
              
      </block>
    </item>
    <item id="b">
      <block>
        <page-number ref-id="I" number-format="default"/>
                ⠶⠶
              
      </block>
    </item>
    <item id="c">
      <block>
        <page-number ref-id="III" number-format="default"/>
                ⠶⠶⠶
              
      </block>
    </item>
  </collection>
  <sequence master="main">
    <block id="I">⠿⠿⠿
              
      <anchor item="a"/>
              ⠿⠿⠿
              
      <anchor item="b"/>
    </block>
    <block break-before="page">⠿⠿⠿
            </block>
    <block break-before="page" id="III">⠿⠿⠿
              
      <anchor item="c"/>
    </block>
  </sequence>
</obfl>

dp2/list-of-references-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>list-of-references</dc:title>
      <dc:description>Tests list-of-references.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="8" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿⠀⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠁⠀⠶</row>
          <row>⠼⠁⠀⠶⠶</row>
          <row>⠼⠉⠀⠶⠶⠶</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

block-underline-styles

Tests various combinations of underline-style, underline-align and underline-width.

dp2/block-underline-styles-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>block-underline-styles</dc:title>
    <dc:description>Tests various combinations of underline-style, underline-align and underline-width.</dc:description>
  </meta>
  <layout-master name="main" duplex="false" page-width="15" page-height="15">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main">
    <block underline-style="solid" underline-align="center">⠌⠌⠌⠌
            </block>
    <block underline-style="solid" underline-align="inner">⠌⠌⠌⠌
            </block>
    <block underline-style="solid" underline-align="outer">⠌⠌⠌⠌
            </block>
    <block underline-style="solid" underline-align="inner" underline-width="2">⠌⠌⠌⠌
            </block>
    <block underline-style="solid" underline-align="outer" underline-width="2">⠌⠌⠌⠌
            </block>
    <block underline-style="solid" underline-width="3">⠌⠌⠌⠌
            </block>
  </sequence>
</obfl>

dp2/block-underline-styles-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>block-underline-styles</dc:title>
      <dc:description>Tests various combinations of underline-style, underline-align and underline-width.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="15" rows="15" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠌⠌⠌⠌</row>
          <row>⠒⠒⠒⠒</row>
          <row>⠌⠌⠌⠌</row>
          <row>⠉⠉⠉⠉</row>
          <row>⠌⠌⠌⠌</row>
          <row>⠤⠤⠤⠤</row>
          <row>⠌⠌⠌⠌</row>
          <row>⠛⠛⠛⠛</row>
          <row>⠌⠌⠌⠌</row>
          <row>⠶⠶⠶⠶</row>
          <row>⠌⠌⠌⠌</row>
          <row>⠿⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

multi-line-header-partly-empty

Tests creating single-line header within two-line top page margin using multiple headers.

dp2/multi-line-header-partly-empty-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>multi-line-header-partly-empty</dc:title>
    <dc:description>Tests creating single-line header within two-line top page margin using multiple headers.</dc:description>
  </meta>
  <layout-master name="a" page-width="40" page-height="25" duplex="true" page-number-variable="page">
    <default-template>
      <header>
        <field>
          <string value="⠆"/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
      </header>
      <header>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>⠿⠿⠿⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿⠿⠿⠿
            </block>
  </sequence>
</obfl>

dp2/multi-line-header-partly-empty-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>multi-line-header-partly-empty</dc:title>
      <dc:description>Tests creating single-line header within two-line top page margin using multiple headers.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="25" cols="40" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠿⠿⠿⠿⠿⠿⠿⠿⠀⠿⠿⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

footer-middle-field-centering

Tests position of middle field in footer when left field is empty and right field is non-empty. The middle field is positioned slightly more towards the left.

dp2/footer-middle-field-centering-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>footer-middle-field-centering</dc:title>
    <dc:description>Tests position of middle field in footer when left field is empty and right field is non-empty. The middle field is positioned slightly more towards the left.</dc:description>
  </meta>
  <layout-master name="a" page-width="20" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value="⠤⠤⠤⠤⠤⠤⠤⠤"/>
        </field>
        <field>
          <string value="⠿⠿⠿⠿"/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>⠤⠤⠤
            </block>
  </sequence>
</obfl>

dp2/footer-middle-field-centering-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>footer-middle-field-centering</dc:title>
      <dc:description>Tests position of middle field in footer when left field is empty and right field is non-empty. The middle field is positioned slightly more towards the left.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="20" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤</row>
          <row/>
          <row/>
          <row/>
          <row>⠀⠀⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠀⠀⠿⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

table-colspan-fill

Tests a table cell spanning multiple columns. The cell text is centered and the remaining space in the cell filled with a pattern.

dp2/table-colspan-fill-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>table-colspan-fill</dc:title>
    <dc:description>Tests a table cell spanning multiple columns. The cell text is centered and the remaining space in the cell filled with a pattern.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main">
    <table col-spacing="1">
      <tr>
        <td>⠿⠿⠿⠿</td>
        <td col-span="4">
                  ⠸
          <leader pattern="⠒" position="50%" align="center"/>
                  ⠿⠿⠿⠿⠿
                  
          <leader pattern="⠒" position="50%" align="center"/>⠇
                
        </td>
      </tr>
      <tr>
        <td>⠿⠿⠿</td>
        <td>⠿⠿⠿</td>
        <td>⠿⠿⠿</td>
        <td>⠿⠿⠿</td>
        <td>⠿⠿⠿</td>
      </tr>
      <tr>
        <td>⠿⠿⠿</td>
        <td>⠿⠿⠿</td>
        <td>⠿⠿⠿</td>
        <td>⠿⠿⠿</td>
        <td>⠿⠿⠿</td>
      </tr>
    </table>
  </sequence>
</obfl>

dp2/table-colspan-fill-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>table-colspan-fill</dc:title>
      <dc:description>Tests a table cell spanning multiple columns. The cell text is centered and the remaining space in the cell filled with a pattern.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="20" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿⠿⠀⠸⠒⠒⠒⠀⠿⠿⠿⠿⠿⠀⠒⠒⠒⠇</row>
          <row>⠿⠿⠿⠀⠀⠿⠿⠿⠀⠿⠿⠿⠀⠿⠿⠿⠀⠿⠿⠿</row>
          <row>⠿⠿⠿⠀⠀⠿⠿⠿⠀⠿⠿⠿⠀⠿⠿⠿⠀⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

table-auto-column-width

Tests simple table with no cell wrapping. Column spacing is set to 1. The column widths are computed so that the total table width is equal to the specified width and the spacing between cell data is optimal. Cells in the first row have a bottom border to indicate the column widths and spacing.

dp2/table-auto-column-width-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>table-auto-column-width</dc:title>
    <dc:description>Tests simple table with no cell wrapping. Column spacing is set to 1. The column widths are computed so that the total table width is equal to the specified width and the spacing between cell data is optimal. Cells in the first row have a bottom border to indicate the column widths and spacing.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main">
    <table table-col-spacing="1">
      <tr>
        <td border-bottom-style="solid" border-bottom-width="1" border-bottom-align="center">⠿⠿⠿</td>
        <td border-bottom-style="solid" border-bottom-width="1" border-bottom-align="center">⠿⠿⠿</td>
        <td border-bottom-style="solid" border-bottom-width="1" border-bottom-align="center">⠿⠿⠿</td>
      </tr>
      <tr>
        <td>⠿⠿⠿</td>
        <td>⠿⠿⠿⠿⠿⠿⠿</td>
        <td>⠿⠿⠿</td>
      </tr>
      <tr>
        <td>⠿⠿⠿</td>
        <td>⠿⠿⠿</td>
        <td>⠿⠿⠿</td>
      </tr>
    </table>
  </sequence>
</obfl>

dp2/table-auto-column-width-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>table-auto-column-width</dc:title>
      <dc:description>Tests simple table with no cell wrapping. Column spacing is set to 1. The column widths are computed so that the total table width is equal to the specified width and the spacing between cell data is optimal. Cells in the first row have a bottom border to indicate the column widths and spacing.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="20" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿⠀⠀⠀⠿⠿⠿⠀⠀⠀⠀⠀⠿⠿⠿</row>
          <row>⠒⠒⠒⠒⠒⠀⠒⠒⠒⠒⠒⠒⠒⠀⠒⠒⠒⠒⠒</row>
          <row>⠿⠿⠿⠀⠀⠀⠿⠿⠿⠿⠿⠿⠿⠀⠿⠿⠿</row>
          <row>⠿⠿⠿⠀⠀⠀⠿⠿⠿⠀⠀⠀⠀⠀⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

page-number

Tests simple page-number.

dp2/page-number-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>page-number</dc:title>
    <dc:description>Tests simple page-number.</dc:description>
  </meta>
  <layout-master name="a" duplex="false" page-width="40" page-height="25">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>
      <page-number ref-id="x" number-format="default"/>
    </block>
    <block break-before="page" id="x">⠤⠤⠤
              </block>
  </sequence>
</obfl>

dp2/page-number-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>page-number</dc:title>
      <dc:description>Tests simple page-number.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="40" rows="25" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠼⠃</row>
        </page>
        <page>
          <row>⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

current-page-various-number-formats

Tests current-page with different number-formats.

dp2/current-page-various-number-formats-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>current-page-various-number-formats</dc:title>
    <dc:description>Tests current-page with different number-formats.</dc:description>
  </meta>
  <layout-master name="front" page-width="15" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value="⠏"/>
          <current-page number-format="default"/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <layout-master name="body" page-width="15" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <current-page number-format="default"/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <layout-master name="rear" page-width="15" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <current-page number-format="lower-roman"/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="front">
    <block>⠤⠤⠤
            </block>
  </sequence>
  <sequence master="body">
    <block>⠤⠤⠤
            </block>
  </sequence>
  <sequence master="rear" initial-page-number="1">
    <block>⠤⠤⠤
            </block>
  </sequence>
</obfl>

dp2/current-page-various-number-formats-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>current-page-various-number-formats</dc:title>
      <dc:description>Tests current-page with different number-formats.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="15" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤</row>
          <row/>
          <row/>
          <row/>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠏⠼⠁</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠤⠤⠤</row>
          <row/>
          <row/>
          <row/>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠉</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠤⠤⠤</row>
          <row/>
          <row/>
          <row/>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠊</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

block-row-spacing

Tests row-spacing on blocks.

dp2/block-row-spacing-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>block-row-spacing</dc:title>
    <dc:description>Tests row-spacing on blocks.</dc:description>
  </meta>
  <layout-master name="a" duplex="false" page-width="40" page-height="25">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block row-spacing="2.0">⠁⠁⠁⠁⠁⠁⠁
      <br/>
                ⠂⠂⠂⠂⠂
      <br/>
      <br/>
                ⠯⠗⠼⠜⠌⠄
              
    </block>
    <block>⠒⠒⠒</block>
    <block row-spacing="2.0">⠤⠤⠤⠤
      <br/>
                ⠤⠤⠤⠤
      <br/>
                ⠤⠤⠤⠤
      <br/>
                ⠤⠤⠤⠤
              
    </block>
  </sequence>
</obfl>

dp2/block-row-spacing-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>block-row-spacing</dc:title>
      <dc:description>Tests row-spacing on blocks.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="40" rows="25" rowgap="0" duplex="false">
      <section>
        <page>
          <row rowgap="4">⠁⠁⠁⠁⠁⠁⠁</row>
          <row rowgap="4">⠂⠂⠂⠂⠂</row>
          <row rowgap="4"/>
          <row rowgap="4">⠯⠗⠼⠜⠌⠄</row>
          <row>⠒⠒⠒</row>
          <row rowgap="4">⠤⠤⠤⠤</row>
          <row rowgap="4">⠤⠤⠤⠤</row>
          <row rowgap="4">⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

keep-with-next

Tests simple keep-with-next.

dp2/keep-with-next-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>keep-with-next</dc:title>
    <dc:description>Tests simple keep-with-next.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              </block>
    <block keep="page" keep-with-next="1">⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              </block>
    <block>⠤⠤⠤⠤⠤
              </block>
  </sequence>
</obfl>

dp2/keep-with-next-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>keep-with-next</dc:title>
      <dc:description>Tests simple keep-with-next.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="6" cols="10" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

comment-in-white-space

Tests presence of a comment surrounded by white space. Broken: white space is dropped.

dp2/comment-in-white-space-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>comment-in-white-space</dc:title>
    <dc:description>Tests presence of a comment surrounded by white space. Broken: white space is dropped.</dc:description>
  </meta>
  <layout-master name="a" page-width="10" page-height="1" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>⠁⠁⠁  ⠁⠁⠁
              </block>
  </sequence>
</obfl>

dp2/comment-in-white-space-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>comment-in-white-space</dc:title>
      <dc:description>Tests presence of a comment surrounded by white space. Broken: white space is dropped.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="1" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠁⠁⠁⠀⠁⠁⠁</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

table-header-repeat

Tests repeating of table header rows on each page.

dp2/table-header-repeat-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>table-header-repeat</dc:title>
    <dc:description>Tests repeating of table header rows on each page.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main">
    <table col-spacing="1">
      <tr>
        <td>⠿⠿⠿⠿⠿</td>
        <td>⠿⠿⠿⠿⠿</td>
        <td>⠿⠿⠿⠿⠿</td>
      </tr>
      <tr>
        <td>⠿⠿</td>
        <td>⠿⠿</td>
        <td>⠿⠿</td>
      </tr>
      <tr>
        <td>⠿⠿</td>
        <td>⠿⠿</td>
        <td>⠿⠿</td>
      </tr>
      <tr>
        <td>⠿⠿</td>
        <td>⠿⠿</td>
        <td>⠿⠿</td>
      </tr>
      <tr>
        <td>⠿⠿</td>
        <td>⠿⠿</td>
        <td>⠿⠿</td>
      </tr>
      <tr>
        <td>⠿⠿</td>
        <td>⠿⠿</td>
        <td>⠿⠿</td>
      </tr>
    </table>
  </sequence>
</obfl>

dp2/table-header-repeat-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>table-header-repeat</dc:title>
      <dc:description>Tests repeating of table header rows on each page.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="20" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠀⠿⠿⠿⠿⠿⠀⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠀⠀⠀⠀⠿⠿⠀⠀⠀⠀⠿⠿⠀⠀⠀</row>
          <row>⠿⠿⠀⠀⠀⠀⠿⠿⠀⠀⠀⠀⠿⠿⠀⠀⠀</row>
          <row>⠿⠿⠀⠀⠀⠀⠿⠿⠀⠀⠀⠀⠿⠿⠀⠀⠀</row>
          <row>⠿⠿⠀⠀⠀⠀⠿⠿⠀⠀⠀⠀⠿⠿⠀⠀⠀</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿⠀⠿⠿⠿⠿⠿⠀⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠀⠀⠀⠀⠿⠿⠀⠀⠀⠀⠿⠿⠀⠀⠀</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

volume-template-various-sheets-in-volume-max

Tests two volume-templates (first and rest) with different sheets-in-volume-max.

dp2/volume-template-various-sheets-in-volume-max-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>volume-template-various-sheets-in-volume-max</dc:title>
    <dc:description>Tests two volume-templates (first and rest) with different sheets-in-volume-max.</dc:description>
  </meta>
  <layout-master name="main" page-width="10" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template use-when="(! (= $volume 1))" sheets-in-volume-max="3"/>
  <volume-template use-when="(= $volume 1)" sheets-in-volume-max="1"/>
  <sequence master="main">
    <block>⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤ ⠤⠤⠤⠤⠤
            </block>
  </sequence>
</obfl>

dp2/volume-template-various-sheets-in-volume-max-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>volume-template-various-sheets-in-volume-max</dc:title>
      <dc:description>Tests two volume-templates (first and rest) with different sheets-in-volume-max.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="10" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
    <volume rows="5" cols="10" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
    <volume rows="5" cols="10" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

list-of-references-document-range

Tests list-of-references with range="document" and on-volume-start.

dp2/list-of-references-document-range-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>list-of-references-document-range</dc:title>
    <dc:description>Tests list-of-references with range="document" and on-volume-start.</dc:description>
  </meta>
  <layout-master name="main" page-width="10" page-height="8" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="1000" use-when="(! (= $volume $volumes))"/>
  <volume-template sheets-in-volume-max="1000" use-when="(= $volume $volumes)">
    <post-content>
      <dynamic-sequence master="main">
        <list-of-references collection="endnotes" range="document">
          <on-volume-start>
            <block border-bottom-style="solid" border-bottom-align="outer">
              <evaluate expression="(round $started-volume-number)"/>
            </block>
          </on-volume-start>
        </list-of-references>
      </dynamic-sequence>
    </post-content>
  </volume-template>
  <collection name="endnotes">
    <item id="a">
      <block>
        <page-number ref-id="I" number-format="default"/>
                ⠶
              
      </block>
    </item>
    <item id="b">
      <block>
        <page-number ref-id="I" number-format="default"/>
                ⠶⠶
              
      </block>
    </item>
    <item id="c">
      <block>
        <page-number ref-id="III" number-format="default"/>
                ⠶⠶⠶
              
      </block>
    </item>
  </collection>
  <sequence master="main">
    <block id="I">⠿⠿⠿
              
      <anchor item="a"/>
              ⠿⠿⠿
              
      <anchor item="b"/>
    </block>
    <block break-before="page">⠿⠿⠿
            </block>
  </sequence>
  <sequence master="main" break-before="volume">
    <block id="III">⠿⠿⠿
              
      <anchor item="c"/>
    </block>
  </sequence>
</obfl>

dp2/list-of-references-document-range-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>list-of-references-document-range</dc:title>
      <dc:description>Tests list-of-references with range="document" and on-volume-start.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="8" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿⠀⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="8" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠁</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠼⠁⠀⠶</row>
          <row>⠼⠁⠀⠶⠶</row>
          <row>⠼⠃</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠼⠉⠀⠶⠶⠶</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

empty-margin-region

Tests empty left margin with margin-region.

dp2/empty-margin-region-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>empty-margin-region</dc:title>
    <dc:description>Tests empty left margin with margin-region.</dc:description>
  </meta>
  <layout-master name="body" page-width="15" page-height="5" duplex="true">
    <default-template>
      <header/>
      <footer/>
      <margin-region align="left" width="2">
        <indicators/>
      </margin-region>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
                ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
              </block>
  </sequence>
</obfl>

dp2/empty-margin-region-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>empty-margin-region</dc:title>
      <dc:description>Tests empty left margin with margin-region.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="15" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
        </page>
        <page>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

single-line-footer

Tests simple single-line footer.

dp2/single-line-footer-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>single-line-footer</dc:title>
    <dc:description>Tests simple single-line footer.</dc:description>
  </meta>
  <layout-master name="a" page-width="15" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer>
        <field>
          <string value="⠆"/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>⠿ </block>
    <block>⠿ </block>
    <block>⠿ </block>
    <block>⠿ </block>
    <block>⠿ </block>
    <block>⠿ </block>
  </sequence>
</obfl>

dp2/single-line-footer-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>single-line-footer</dc:title>
      <dc:description>Tests simple single-line footer.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="15" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿</row>
          <row>⠿</row>
          <row>⠿</row>
          <row>⠿</row>
          <row>⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠿</row>
          <row>⠿</row>
          <row/>
          <row/>
          <row>⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

empty-block-border

Tests empty blocks with border.

dp2/empty-block-border-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>empty-block-border</dc:title>
    <dc:description>Tests empty blocks with border.</dc:description>
  </meta>
  <layout-master name="a" page-width="40" page-height="25" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block border-bottom-style="solid" border-bottom-align="outer"/>
    <block border-bottom-style="solid" border-bottom-align="outer"/>
    <block border-bottom-style="solid" border-bottom-align="outer">  </block>
  </sequence>
</obfl>

dp2/empty-block-border-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>empty-block-border</dc:title>
      <dc:description>Tests empty blocks with border.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="25" cols="40" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

margin-region-and-border

Tests combination of a left aligned margin-region and a border.

dp2/margin-region-and-border-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>margin-region-and-border</dc:title>
    <dc:description>Tests combination of a left aligned margin-region and a border.</dc:description>
  </meta>
  <layout-master name="master" duplex="true" page-width="19" page-height="5">
    <default-template>
      <header/>
      <footer/>
      <margin-region align="left" width="2">
        <indicators/>
      </margin-region>
    </default-template>
  </layout-master>
  <sequence master="master">
    <block border-left-style="solid" border-left-align="outer" border-right-style="solid" border-right-align="outer" border-top-style="solid" border-top-align="outer" border-bottom-style="solid" border-bottom-align="outer" align="center">⠿⠿⠿⠿⠿
            </block>
  </sequence>
</obfl>

dp2/margin-region-and-border-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>margin-region-and-border</dc:title>
      <dc:description>Tests combination of a left aligned margin-region and a border.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="19" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠀⠀⠏⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠹</row>
          <row>⠀⠀⠇⠀⠀⠀⠀⠀⠿⠿⠿⠿⠿⠀⠀⠀⠀⠀⠸</row>
          <row>⠀⠀⠧⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠼</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

page-number-follows-leader

Tests leader followed by page-number.

dp2/page-number-follows-leader-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>page-number-follows-leader</dc:title>
    <dc:description>Tests leader followed by page-number.</dc:description>
  </meta>
  <layout-master name="a" duplex="false" page-width="10" page-height="25">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block id="chapter_1">⠤</block>
    <block>
      <leader pattern="⠄" position="100%" align="right"/>⠀
      <page-number ref-id="chapter_1" number-format="default"/>
    </block>
  </sequence>
</obfl>

dp2/page-number-follows-leader-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>page-number-follows-leader</dc:title>
      <dc:description>Tests leader followed by page-number.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="25" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠤</row>
          <row>⠄⠄⠄⠄⠄⠄⠄⠀⠼⠁</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

break-before-sheet

Tests break-before="sheet".

dp2/break-before-sheet-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>break-before-sheet</dc:title>
    <dc:description>Tests break-before="sheet".</dc:description>
  </meta>
  <layout-master name="a" duplex="true" page-width="10" page-height="10">
    <default-template>
      <header>
        <field>
          <string value="⠇"/>
        </field>
        <field>
          <string value=""/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>⠛⠛⠛</block>
    <block break-before="sheet">⠤⠤⠤</block>
  </sequence>
</obfl>

dp2/break-before-sheet-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>break-before-sheet</dc:title>
      <dc:description>Tests break-before="sheet".</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="10" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠛⠛⠛</row>
        </page>
        <page>
          <row>⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

collapsing-margins-empty-block

Tests collapsing of margins of three adjacent sibling blocks, the middle one being empty.

dp2/collapsing-margins-empty-block-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>collapsing-margins-empty-block</dc:title>
    <dc:description>Tests collapsing of margins of three adjacent sibling blocks, the middle one being empty.</dc:description>
  </meta>
  <layout-master name="a" page-width="40" page-height="25" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block margin-bottom="1">⠿ </block>
    <block margin-bottom="1"/>
    <block margin-bottom="1">
      <evaluate expression=""""/>
    </block>
    <block margin-top="1">⠿ </block>
  </sequence>
</obfl>

dp2/collapsing-margins-empty-block-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>collapsing-margins-empty-block</dc:title>
      <dc:description>Tests collapsing of margins of three adjacent sibling blocks, the middle one being empty.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="25" cols="40" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿</row>
          <row/>
          <row>⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

orphans-widows-counting-and-borders

Tests that counting of orphan and widow lines does not include borders.

dp2/orphans-widows-counting-and-borders-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>orphans-widows-counting-and-borders</dc:title>
    <dc:description>Tests that counting of orphan and widow lines does not include borders.</dc:description>
  </meta>
  <layout-master name="master" duplex="true" page-number-variable="page" page-width="10" page-height="5">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="master">
    <block>⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block orphans="2">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block>⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block orphans="2">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block>⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block orphans="2" border-top-style="solid">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block>⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block orphans="2" border-top-style="solid">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block>⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block widows="2">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block>⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block widows="2">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block>⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block widows="2" border-bottom-style="solid">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
  <sequence master="master">
    <block>⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
    <block widows="2" border-bottom-style="solid">⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
                ⠿⠿⠿⠿⠿⠿
              </block>
  </sequence>
</obfl>

dp2/orphans-widows-counting-and-borders-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>orphans-widows-counting-and-borders</dc:title>
      <dc:description>Tests that counting of orphan and widow lines does not include borders.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

row-spacing-and-footer

Tests row spacing combined with footer. The last row of a page before the footer has no rowgap. If a gap is desired an empty footer line must be inserted.

dp2/row-spacing-and-footer-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>row-spacing-and-footer</dc:title>
    <dc:description>Tests row spacing combined with footer. The last row of a page before the footer has no rowgap. If a gap is desired an empty footer line must be inserted.</dc:description>
  </meta>
  <layout-master name="a" duplex="true" page-width="10" page-height="10">
    <default-template>
      <header/>
      <footer>
        <field>
          <current-page number-format="default"/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <layout-master name="b" duplex="true" page-width="10" page-height="10">
    <default-template>
      <header/>
      <footer>
        <field>
          <string value=""/>
        </field>
      </footer>
      <footer>
        <field>
          <current-page number-format="default"/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block row-spacing="2.0">⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿
              ⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿
              ⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿
            </block>
  </sequence>
  <sequence master="b" initial-page-number="1">
    <block row-spacing="2.0">⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿
              ⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿
              ⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿ ⠿⠿⠿⠿
            </block>
  </sequence>
</obfl>

dp2/row-spacing-and-footer-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>row-spacing-and-footer</dc:title>
      <dc:description>Tests row spacing combined with footer. The last row of a page before the footer has no rowgap. If a gap is desired an empty footer line must be inserted.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="10" rowgap="0" duplex="true">
      <section>
        <page>
          <row rowgap="4">⠿⠿⠿⠿⠀⠿⠿⠿⠿</row>
          <row rowgap="4">⠿⠿⠿⠿⠀⠿⠿⠿⠿</row>
          <row rowgap="4">⠿⠿⠿⠿⠀⠿⠿⠿⠿</row>
          <row rowgap="4">⠿⠿⠿⠿⠀⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠀⠿⠿⠿⠿</row>
          <row>⠼⠁</row>
        </page>
        <page>
          <row rowgap="4">⠿⠿⠿⠿⠀⠿⠿⠿⠿</row>
          <row rowgap="4">⠿⠿⠿⠿⠀⠿⠿⠿⠿</row>
          <row rowgap="4">⠿⠿⠿⠿⠀⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠀⠿⠿⠿⠿</row>
          <row/>
          <row/>
          <row>⠼⠃</row>
        </page>
      </section>
      <section>
        <page>
          <row rowgap="4">⠿⠿⠿⠿⠀⠿⠿⠿⠿</row>
          <row rowgap="4">⠿⠿⠿⠿⠀⠿⠿⠿⠿</row>
          <row rowgap="4">⠿⠿⠿⠿⠀⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠀⠿⠿⠿⠿</row>
          <row/>
          <row/>
          <row>⠼⠁</row>
        </page>
        <page>
          <row rowgap="4">⠿⠿⠿⠿⠀⠿⠿⠿⠿</row>
          <row rowgap="4">⠿⠿⠿⠿⠀⠿⠿⠿⠿</row>
          <row rowgap="4">⠿⠿⠿⠿⠀⠿⠿⠿⠿</row>
          <row>⠿⠿⠿⠿⠀⠿⠿⠿⠿</row>
          <row/>
          <row/>
          <row>⠼⠃</row>
        </page>
        <page>
          <row>⠿⠿⠿⠿⠀⠿⠿⠿⠿</row>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row>⠼⠉</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

manual-volume-breaking-toc

Tests manual volume breaking in combination with table of contents.

dp2/manual-volume-breaking-toc-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>manual-volume-breaking-toc</dc:title>
    <dc:description>Tests manual volume breaking in combination with table of contents.</dc:description>
  </meta>
  <layout-master name="master" page-width="15" page-height="15">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <table-of-contents name="toc">
    <toc-entry ref-id="a">
      <page-number ref-id="a" number-format="default"/>
    </toc-entry>
    <toc-entry ref-id="b">
      <page-number ref-id="b" number-format="default"/>
    </toc-entry>
  </table-of-contents>
  <volume-template sheets-in-volume-max="10">
    <pre-content>
      <toc-sequence master="master" range="volume" toc="toc"/>
    </pre-content>
    <post-content/>
  </volume-template>
  <sequence master="master">
    <block id="a">⠿⠿⠿⠿⠿</block>
  </sequence>
  <sequence master="master" break-before="volume">
    <block id="b">⠿⠿⠿⠿⠿</block>
  </sequence>
</obfl>

dp2/manual-volume-breaking-toc-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>manual-volume-breaking-toc</dc:title>
      <dc:description>Tests manual volume breaking in combination with table of contents.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="15" rows="15" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿</row>
        </page>
      </section>
    </volume>
    <volume cols="15" rows="15" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠉</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠿⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

sheet-calculation-initial-page-number

Tests that calculation of sheets is not influenced by initial-page-number.

dp2/sheet-calculation-initial-page-number-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>sheet-calculation-initial-page-number</dc:title>
    <dc:description>Tests that calculation of sheets is not influenced by initial-page-number.</dc:description>
  </meta>
  <layout-master name="a" page-width="10" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header>
        <field>
          <current-page number-format="default"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a" initial-page-number="2">
    <block>⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤
            </block>
  </sequence>
  <sequence master="a">
    <block>⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤
              ⠤⠤⠤⠤⠤
            </block>
  </sequence>
</obfl>

dp2/sheet-calculation-initial-page-number-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>sheet-calculation-initial-page-number</dc:title>
      <dc:description>Tests that calculation of sheets is not influenced by initial-page-number.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="10" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠃</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠉</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠙</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠑</row>
          <row>⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

table-fixed-width

Tests simple table with no cell wrapping. Column spacing is set to 1. The column widths are computed so that the total table width is equal to the specified width. All cells have similar content, therefore all columns are equally wide. Cells in the first row have a bottom border to indicate the column widths and spacing.

dp2/table-fixed-width-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>table-fixed-width</dc:title>
    <dc:description>Tests simple table with no cell wrapping. Column spacing is set to 1. The column widths are computed so that the total table width is equal to the specified width. All cells have similar content, therefore all columns are equally wide. Cells in the first row have a bottom border to indicate the column widths and spacing.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main">
    <table table-col-spacing="1" preferred-empty-space="3">
      <tr>
        <td border-bottom-style="solid" border-bottom-width="1" border-bottom-align="center">⠿⠿⠿</td>
        <td border-bottom-style="solid" border-bottom-width="1" border-bottom-align="center">⠿⠿⠿</td>
        <td border-bottom-style="solid" border-bottom-width="1" border-bottom-align="center">⠿⠿⠿</td>
      </tr>
      <tr>
        <td>⠿⠿⠿</td>
        <td>⠿⠿⠿</td>
        <td>⠿⠿⠿</td>
      </tr>
      <tr>
        <td>⠿⠿⠿</td>
        <td>⠿⠿⠿</td>
        <td>⠿⠿⠿</td>
      </tr>
    </table>
  </sequence>
</obfl>

dp2/table-fixed-width-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>table-fixed-width</dc:title>
      <dc:description>Tests simple table with no cell wrapping. Column spacing is set to 1. The column widths are computed so that the total table width is equal to the specified width. All cells have similar content, therefore all columns are equally wide. Cells in the first row have a bottom border to indicate the column widths and spacing.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="20" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿⠿⠿⠀⠀⠀⠀⠿⠿⠿⠀⠀⠀⠀⠿⠿⠿</row>
          <row>⠒⠒⠒⠒⠒⠒⠀⠒⠒⠒⠒⠒⠒⠀⠒⠒⠒⠒⠒⠒</row>
          <row>⠿⠿⠿⠀⠀⠀⠀⠿⠿⠿⠀⠀⠀⠀⠿⠿⠿</row>
          <row>⠿⠿⠿⠀⠀⠀⠀⠿⠿⠿⠀⠀⠀⠀⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

multi-line-footer-empty

Tests creating empty two-line bottom page margin using multiple footers.

dp2/multi-line-footer-empty-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>multi-line-footer-empty</dc:title>
    <dc:description>Tests creating empty two-line bottom page margin using multiple footers.</dc:description>
  </meta>
  <layout-master name="a" page-width="15" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
      </footer>
      <footer>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
        <field>
          <string value=""/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>⠿ </block>
    <block>⠿ </block>
    <block>⠿ </block>
    <block>⠿ </block>
    <block>⠿ </block>
    <block>⠿ </block>
  </sequence>
</obfl>

dp2/multi-line-footer-empty-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>multi-line-footer-empty</dc:title>
      <dc:description>Tests creating empty two-line bottom page margin using multiple footers.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="15" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠿</row>
          <row>⠿</row>
          <row>⠿</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠿</row>
          <row>⠿</row>
          <row>⠿</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

first-line-indent

Tests first-line-indent.

dp2/first-line-indent-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>first-line-indent</dc:title>
    <dc:description>Tests first-line-indent.</dc:description>
  </meta>
  <layout-master name="body" page-width="15" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block first-line-indent="2">⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤ ⠤⠤⠤
            </block>
  </sequence>
</obfl>

dp2/first-line-indent-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>first-line-indent</dc:title>
      <dc:description>Tests first-line-indent.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="5" cols="15" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠀⠀⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠤⠤⠤⠀⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Table inside block test

Tests table inside blocks.

table/table-in-block-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Table inside block test</dc:title>
    <dc:description>Tests table inside blocks.</dc:description>
  </meta>
  <layout-master name="body" page-width="20" page-height="15" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block align="center" margin-left="1" margin-right="1" margin-top="1" margin-bottom="1" border-left-style="solid" border-left-align="outer" border-right-style="solid" border-right-align="outer" border-top-style="solid" border-top-align="inner" border-bottom-style="solid" border-bottom-align="inner">
      <block align="center" margin-top="1" margin-bottom="1" margin-left="1" margin-right="1">
        <table preferred-empty-space="20">
          <tr>
            <td align="center">⠿⠿⠿⠿</td>
          </tr>
        </table>
      </block>
    </block>
    <block align="center" margin-left="1" margin-right="1" margin-top="1" margin-bottom="1" border-left-style="solid" border-left-align="outer" border-right-style="solid" border-right-align="outer" border-top-style="solid" border-top-align="inner" border-bottom-style="solid" border-bottom-align="inner" break-before="page">
      <block align="center" margin-top="1" margin-bottom="1">
        <block align="center" margin-left="2" margin-right="2" border-left-style="solid" border-left-align="outer" border-right-style="solid" border-right-align="outer" border-top-style="solid" border-top-align="inner" border-bottom-style="solid" border-bottom-align="inner">
          <block align="center" margin-top="1" margin-bottom="1" margin-left="1" margin-right="1">
            <table preferred-empty-space="20">
              <tr>
                <td align="center">⠿⠿⠿⠿</td>
              </tr>
            </table>
          </block>
        </block>
      </block>
    </block>
  </sequence>
</obfl>

table/table-in-block-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="15" cols="20" rowgap="0" duplex="false">
      <section>
        <page>
          <row/>
          <row>⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠀⠀⠀⠀⠿⠿⠿⠿⠀⠀⠀⠀⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀</row>
          <row>⠀⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉</row>
          <row/>
        </page>
        <page>
          <row/>
          <row>⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠇⠀⠀⠀⠿⠿⠿⠿⠀⠀⠀⠸⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀</row>
          <row>⠀⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉</row>
          <row/>
        </page>
      </section>
    </volume>
  </body>
</pef>

Tables test

Tests that tables works as expected.

table/tables-keep-row-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Tables test</dc:title>
    <dc:description>Tests that tables works as expected.</dc:description>
  </meta>
  <layout-master name="body" page-width="12" page-height="3" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <table>
      <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
      </tr>
      <tr>
        <td>4</td>
        <td>5</td>
        <td>6</td>
      </tr>
      <tr>
        <td>⠤⠤⠤⠤
          <br/>⠤⠤⠤⠤
        </td>
        <td>8</td>
        <td>9</td>
      </tr>
      <tr>
        <td>7</td>
        <td>8</td>
        <td>9</td>
      </tr>
    </table>
  </sequence>
</obfl>

table/tables-keep-row-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="12" rows="3" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠼⠃⠀⠀⠼⠉</row>
          <row>⠼⠙⠀⠀⠼⠑⠀⠀⠼⠋</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠼⠓⠀⠀⠼⠊</row>
          <row>⠤⠤⠤⠤⠀⠀⠀⠀</row>
          <row>⠼⠛⠀⠀⠼⠓⠀⠀⠼⠊</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Tables test

Tests that tables works as expected.

table/tables-missing-cell4-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Tables test</dc:title>
    <dc:description>Tests that tables works as expected.</dc:description>
  </meta>
  <layout-master name="body" page-width="12" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <table>
      <tr>
        <td>1</td>
        <td>2</td>
        <td row-span="3">3</td>
      </tr>
      <tr>
        <td>4</td>
        <td>5</td>
      </tr>
      <tr>
        <td>7</td>
      </tr>
    </table>
  </sequence>
</obfl>

table/tables-missing-cell4-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="12" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠼⠃⠀⠀⠼⠉</row>
          <row>⠼⠙⠀⠀⠼⠑⠀⠀</row>
          <row>⠼⠛⠀⠀</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Tables with colspan test

Tests that tables with colspan works as expected. Note that multiline cells do not count towards preferred-empty-space, that's why the first column is bigger than the second.

table/tables-rowspan-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Tables with colspan test</dc:title>
    <dc:description>Tests that tables with colspan works as expected. Note that multiline cells do not count towards
						preferred-empty-space, that's why the first column is bigger than the second.</dc:description>
  </meta>
  <layout-master name="body" page-width="12" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <table>
      <tr>
        <td row-span="2">1
          <br/>3
        </td>
        <td>2</td>
      </tr>
      <tr>
        <td>4</td>
      </tr>
    </table>
  </sequence>
</obfl>

table/tables-rowspan-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="12" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠼⠃</row>
          <row>⠼⠉⠀⠀⠀⠀⠀⠀⠼⠙</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Table with leader test

Tests that tables with leaders works as expected.

table/tables-leader2-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Table with leader test</dc:title>
    <dc:description>Tests that tables with leaders works as expected.</dc:description>
  </meta>
  <layout-master name="body" page-width="14" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <table preferred-empty-space="0" table-col-spacing="1">
      <tr>
        <td>⠁⠁⠁⠁</td>
        <td>⠁⠁⠁⠁⠁⠁</td>
      </tr>
      <tr>
        <td>⠁⠁⠁⠁</td>
        <td>
          <leader position="50%" pattern="⠤" align="center"/>⠁⠁
          <leader position="100%" pattern="⠤" align="right"/>
        </td>
      </tr>
    </table>
  </sequence>
</obfl>

table/tables-leader2-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="14" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠁⠁⠁⠁⠀⠁⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠀⠤⠤⠁⠁⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Table with leader test

Tests that tables with leaders works as expected.

table/tables-leader3-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Table with leader test</dc:title>
    <dc:description>Tests that tables with leaders works as expected.</dc:description>
  </meta>
  <layout-master name="body" page-width="14" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <table preferred-empty-space="0" table-col-spacing="1">
      <tr>
        <td>⠁⠁⠁⠁⠁⠁</td>
        <td>⠁⠁⠁⠁</td>
      </tr>
      <tr>
        <td>
          <leader position="50%" pattern="⠤" align="center"/>⠁⠁
          <leader position="100%" pattern="⠤" align="right"/>
        </td>
        <td>⠁⠁⠁⠁</td>
      </tr>
    </table>
  </sequence>
</obfl>

table/tables-leader3-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="14" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠁⠁⠁⠁⠁⠁⠀⠁⠁⠁⠁</row>
          <row>⠤⠤⠁⠁⠤⠤⠀⠁⠁⠁⠁</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Tables border, margin and padding test

Tests that tables can have borders, margins and paddings.

table/tables-borders-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Tables border, margin and padding test</dc:title>
    <dc:description>Tests that tables can have borders, margins and paddings.</dc:description>
  </meta>
  <layout-master name="body" page-width="18" page-height="12" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <table border-style="solid" border-align="outer" margin-left="1" margin-right="1" margin-top="1" margin-bottom="1" padding-left="1" padding-right="1" padding-top="1" padding-bottom="1">
      <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
      </tr>
      <tr>
        <td>4</td>
        <td>5</td>
        <td>6</td>
      </tr>
      <tr>
        <td>7</td>
        <td>8</td>
        <td>9</td>
      </tr>
    </table>
  </sequence>
</obfl>

table/tables-borders-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="18" rows="12" rowgap="0" duplex="true">
      <section>
        <page>
          <row/>
          <row>⠀⠏⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠹</row>
          <row>⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠼⠁⠀⠀⠼⠃⠀⠀⠼⠉⠀⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠼⠙⠀⠀⠼⠑⠀⠀⠼⠋⠀⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠼⠛⠀⠀⠼⠓⠀⠀⠼⠊⠀⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀</row>
          <row>⠀⠧⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠼</row>
          <row/>
        </page>
      </section>
    </volume>
  </body>
</pef>

Tables markers test

Tests that tables with markers works as expected.

table/tables-marker-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Tables markers test</dc:title>
    <dc:description>Tests that tables with markers works as expected.</dc:description>
  </meta>
  <layout-master name="body" page-width="12" page-height="6" duplex="true">
    <default-template>
      <header>
        <field>
          <marker-reference marker="pagenum" direction="forward" scope="sequence"/>
        </field>
        <field>
          <string value="⠀"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <table>
      <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
      </tr>
      <tr>
        <td>4</td>
        <td>5
          <marker class="pagenum" value="1"/>
        </td>
        <td>6</td>
      </tr>
      <tr>
        <td>7</td>
        <td>8</td>
        <td>9</td>
      </tr>
    </table>
  </sequence>
</obfl>

table/tables-marker-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="12" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠼⠁⠀⠀⠼⠃⠀⠀⠼⠉</row>
          <row>⠼⠙⠀⠀⠼⠑⠀⠀⠼⠋</row>
          <row>⠼⠛⠀⠀⠼⠓⠀⠀⠼⠊</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Tables test

Tests that tables works as expected.

table/tables-row-spacing-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Tables test</dc:title>
    <dc:description>Tests that tables works as expected.</dc:description>
  </meta>
  <layout-master name="body" page-width="12" page-height="12" duplex="true" row-spacing="2.0">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <table>
      <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
      </tr>
      <tr>
        <td>4</td>
        <td>5</td>
        <td>6</td>
      </tr>
      <tr>
        <td>7</td>
        <td>8</td>
        <td>9</td>
      </tr>
    </table>
    <table row-spacing="1.0">
      <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
      </tr>
      <tr>
        <td>4</td>
        <td>5</td>
        <td>6</td>
      </tr>
      <tr>
        <td>7</td>
        <td>8</td>
        <td>9</td>
      </tr>
    </table>
  </sequence>
</obfl>

table/tables-row-spacing-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="12" rows="12" rowgap="4" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠼⠃⠀⠀⠼⠉</row>
          <row>⠼⠙⠀⠀⠼⠑⠀⠀⠼⠋</row>
          <row>⠼⠛⠀⠀⠼⠓⠀⠀⠼⠊</row>
          <row rowgap="0">⠼⠁⠀⠀⠼⠃⠀⠀⠼⠉</row>
          <row rowgap="0">⠼⠙⠀⠀⠼⠑⠀⠀⠼⠋</row>
          <row rowgap="0">⠼⠛⠀⠀⠼⠓⠀⠀⠼⠊</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Tables test

Tests that tables works as expected.

table/tables-missing-cell2-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Tables test</dc:title>
    <dc:description>Tests that tables works as expected.</dc:description>
  </meta>
  <layout-master name="body" page-width="12" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <table>
      <tr>
        <td>1</td>
        <td>2</td>
        <td row-span="2">3</td>
      </tr>
      <tr>
        <td row-span="2">4</td>
        <td row-span="2">5</td>
      </tr>
    </table>
  </sequence>
</obfl>

table/tables-missing-cell2-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="12" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠼⠃⠀⠀⠼⠉</row>
          <row>⠼⠙⠀⠀⠼⠑⠀⠀</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Tables test

Tests that tables works as expected.

table/tables-col-spacing-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Tables test</dc:title>
    <dc:description>Tests that tables works as expected.</dc:description>
  </meta>
  <layout-master name="body" page-width="11" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <table table-col-spacing="1">
      <tr>
        <td>⠤⠤⠤</td>
        <td>⠤⠤⠤</td>
        <td>⠤⠤⠤</td>
      </tr>
      <tr>
        <td>⠤​⠤​⠤​⠤​⠤​⠤​</td>
        <td>⠤​⠤​⠤​⠤​⠤​⠤​</td>
        <td>⠤​⠤​⠤​⠤​⠤​⠤​</td>
      </tr>
    </table>
  </sequence>
</obfl>

table/tables-col-spacing-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="11" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
          <row>⠤⠤⠤⠀⠤⠤⠤⠀⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Tables test

Tests that tables can complete layout even if a solution crashes.

table/tables-shrink2-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Tables test</dc:title>
    <dc:description>Tests that tables can complete layout even if a solution crashes.</dc:description>
  </meta>
  <layout-master name="body" page-width="12" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <table>
      <tr>
        <td col-span="1" row-span="1">1</td>
        <td col-span="1" row-span="1">PROBLEM</td>
        <td col-span="1" row-span="1">overcome</td>
        <td col-span="1" row-span="1">to manage a problem successfully</td>
      </tr>
    </table>
  </sequence>
</obfl>

table/tables-shrink2-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="12" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠠⠠⠕⠧⠞⠕⠀⠍⠁⠝⠤</row>
          <row>⠁⠏⠗⠑⠗⠁⠛⠑⠀⠁</row>
          <row>⠀⠕⠃⠤⠀⠏⠗⠕⠃⠇⠑⠍</row>
          <row>⠀⠤⠀⠉⠕⠎⠥⠉⠤</row>
          <row>⠀⠇⠑⠍⠑⠉⠑⠎⠎⠤</row>
          <row>⠀⠍⠀⠀⠀⠋⠥⠇⠇⠽</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Tables test

Tests that tables works as expected.

table/tables-missing-cell5-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Tables test</dc:title>
    <dc:description>Tests that tables works as expected.</dc:description>
  </meta>
  <layout-master name="body" page-width="12" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <table>
      <tr>
        <td>1</td>
        <td>2</td>
        <td row-span="2">3</td>
      </tr>
      <tr>
        <td>4</td>
        <td>5</td>
      </tr>
    </table>
  </sequence>
</obfl>

table/tables-missing-cell5-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="12" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠼⠃⠀⠀⠼⠉</row>
          <row>⠼⠙⠀⠀⠼⠑⠀⠀</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Tables with borders test

Tests that tables with borders works as expected.

table/tables-border-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Tables with borders test</dc:title>
    <dc:description>Tests that tables with borders works as expected.</dc:description>
  </meta>
  <layout-master name="body" page-width="14" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <table>
      <tr>
        <td>1</td>
        <td border-left-style="solid">2</td>
        <td border-left-style="solid">3</td>
      </tr>
      <tr>
        <td>4</td>
        <td>5</td>
        <td>6</td>
      </tr>
      <tr>
        <td>7</td>
        <td border-left-style="solid">8</td>
        <td border-left-style="solid">9</td>
      </tr>
    </table>
  </sequence>
</obfl>

table/tables-border-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="14" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠇⠼⠃⠀⠀⠇⠼⠉</row>
          <row>⠼⠙⠀⠀⠀⠼⠑⠀⠀⠀⠼⠋</row>
          <row>⠼⠛⠀⠀⠇⠼⠓⠀⠀⠇⠼⠊</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Tables test

Tests that tables works as expected.

table/tables-shrink-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Tables test</dc:title>
    <dc:description>Tests that tables works as expected.</dc:description>
  </meta>
  <layout-master name="body" page-width="12" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <table preferred-empty-space="0">
      <tr>
        <td>1</td>
        <td>123</td>
        <td>3</td>
      </tr>
      <tr>
        <td>4</td>
        <td>5</td>
        <td>6</td>
      </tr>
      <tr>
        <td>7</td>
        <td>8</td>
        <td>9</td>
      </tr>
    </table>
  </sequence>
</obfl>

table/tables-shrink-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="12" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠼⠁⠃⠉⠼⠉</row>
          <row>⠼⠙⠼⠑⠀⠀⠼⠋</row>
          <row>⠼⠛⠼⠓⠀⠀⠼⠊</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Table with leader test

Tests that tables with leaders works as expected. The leader doesn't interfere with preferred-empty-space (which would be zero if included).

table/tables-leader-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Table with leader test</dc:title>
    <dc:description>Tests that tables with leaders works as expected. The leader doesn't interfere with 
		preferred-empty-space (which would be zero if included).</dc:description>
  </meta>
  <layout-master name="body" page-width="12" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <table preferred-empty-space="12">
      <tr>
        <td>⠁⠁</td>
        <td>
          <leader position="50%" pattern="⠤" align="center"/>⠁⠁
          <leader position="100%" pattern="⠤" align="right"/>
        </td>
      </tr>
    </table>
  </sequence>
</obfl>

table/tables-leader-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="12" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠁⠁⠀⠀⠀⠀⠤⠤⠁⠁⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Tables test

Tests that tables works as expected.

table/tables-missing-cell3-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Tables test</dc:title>
    <dc:description>Tests that tables works as expected.</dc:description>
  </meta>
  <layout-master name="body" page-width="12" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <table>
      <tr>
        <td>1</td>
        <td row-span="2">2</td>
      </tr>
      <tr/>
    </table>
  </sequence>
</obfl>

table/tables-missing-cell3-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="12" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠀⠀⠼⠃⠀⠀⠀⠀</row>
          <row>⠀⠀⠀⠀⠀⠀</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Tables test

Tests that tables works as expected.

table/tables-missing-cell-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Tables test</dc:title>
    <dc:description>Tests that tables works as expected.</dc:description>
  </meta>
  <layout-master name="body" page-width="12" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <table>
      <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
      </tr>
      <tr>
        <td>4</td>
        <td>5</td>
        <td>6</td>
      </tr>
      <tr>
        <td>7</td>
        <td>8</td>
      </tr>
    </table>
  </sequence>
</obfl>

table/tables-missing-cell-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="12" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠼⠃⠀⠀⠼⠉</row>
          <row>⠼⠙⠀⠀⠼⠑⠀⠀⠼⠋</row>
          <row>⠼⠛⠀⠀⠼⠓⠀⠀</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Tables with multiple row cells test

Tests that tables with multiple row cells works as expected.

table/tables-multiline-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Tables with multiple row cells test</dc:title>
    <dc:description>Tests that tables with multiple row cells works as expected.</dc:description>
  </meta>
  <layout-master name="body" page-width="12" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <table>
      <tr>
        <td>⠤​⠤​⠤​⠤​⠤​⠤​⠤​⠤​</td>
        <td>2</td>
        <td>⠤​⠤​⠤​⠤​⠤​⠤​⠤​⠤​</td>
      </tr>
      <tr>
        <td>4</td>
        <td>⠤​⠤​⠤​⠤​⠤​⠤​⠤​⠤​</td>
        <td>6</td>
      </tr>
      <tr>
        <td>7</td>
        <td>8</td>
        <td>⠤​⠤​⠤​⠤​⠤​⠤​⠤​⠤​</td>
      </tr>
    </table>
  </sequence>
</obfl>

table/tables-multiline-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="12" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠼⠃⠀⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠀⠀⠀⠤⠤⠤⠤</row>
          <row>⠼⠙⠀⠀⠤⠤⠤⠤⠼⠋</row>
          <row>⠀⠀⠀⠀⠤⠤⠤⠤</row>
          <row>⠼⠛⠀⠀⠼⠓⠀⠀⠤⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Tables with colspan test

Tests that tables with colspan works as expected.

table/tables-colspan-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Tables with colspan test</dc:title>
    <dc:description>Tests that tables with colspan works as expected.</dc:description>
  </meta>
  <layout-master name="body" page-width="12" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <table preferred-empty-space="12">
      <tr>
        <td col-span="2">1</td>
        <td>3</td>
      </tr>
      <tr>
        <td>4</td>
        <td col-span="2">5</td>
      </tr>
      <tr>
        <td col-span="3">7</td>
      </tr>
    </table>
  </sequence>
</obfl>

table/tables-colspan-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="12" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠀⠀⠼⠉</row>
          <row>⠼⠙⠀⠀⠀⠀⠼⠑</row>
          <row>⠼⠛</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Tables test

Tests that tables works as expected.

table/tables-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Tables test</dc:title>
    <dc:description>Tests that tables works as expected.</dc:description>
  </meta>
  <layout-master name="body" page-width="12" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <table>
      <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
      </tr>
      <tr>
        <td>4</td>
        <td>5</td>
        <td>6</td>
      </tr>
      <tr>
        <td>7</td>
        <td>8</td>
        <td>9</td>
      </tr>
    </table>
  </sequence>
</obfl>

table/tables-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="12" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠼⠃⠀⠀⠼⠉</row>
          <row>⠼⠙⠀⠀⠼⠑⠀⠀⠼⠋</row>
          <row>⠼⠛⠀⠀⠼⠓⠀⠀⠼⠊</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Tables with borders test

Tests that tables with borders works as expected.

table/tables-border2-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Tables with borders test</dc:title>
    <dc:description>Tests that tables with borders works as expected.</dc:description>
  </meta>
  <layout-master name="body" page-width="14" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <table table-col-spacing="1">
      <tr>
        <td border-bottom-style="solid" border-bottom-align="inner">1</td>
        <td border-bottom-style="solid" border-bottom-align="inner">2</td>
        <td border-bottom-style="solid" border-bottom-align="inner">3</td>
      </tr>
      <tr>
        <td>4</td>
        <td>5</td>
        <td>6</td>
      </tr>
      <tr>
        <td>7</td>
        <td>8</td>
        <td>9</td>
      </tr>
    </table>
  </sequence>
</obfl>

table/tables-border2-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="14" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠀⠼⠃⠀⠀⠀⠼⠉</row>
          <row>⠉⠉⠉⠉⠀⠉⠉⠉⠉⠀⠉⠉⠉⠉</row>
          <row>⠼⠙⠀⠀⠀⠼⠑⠀⠀⠀⠼⠋</row>
          <row>⠼⠛⠀⠀⠀⠼⠓⠀⠀⠀⠼⠊</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Table align test

Tests that table align works as expected.

table/tables-align-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Table align test</dc:title>
    <dc:description>Tests that table align works as expected.</dc:description>
  </meta>
  <layout-master name="body" page-width="12" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <table>
      <tr>
        <td align="left">⠤⠤ ⠤⠤⠤</td>
        <td align="center">⠤⠤ ⠤⠤⠤</td>
        <td align="right">⠤⠤ ⠤⠤⠤</td>
      </tr>
    </table>
  </sequence>
</obfl>

table/tables-align-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="12" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠀⠀⠀⠤⠤⠀⠀⠀⠤⠤</row>
          <row>⠤⠤⠤⠀⠤⠤⠤⠀⠀⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Tables anchor test

Tests that tables with anchors works as expected.

table/tables-anchor-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Tables anchor test</dc:title>
    <dc:description>Tests that tables with anchors works as expected.</dc:description>
  </meta>
  <layout-master name="body" page-width="12" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
    <page-area collection="footnotes" max-height="10"/>
  </layout-master>
  <collection name="footnotes">
    <item id="note-1">1</item>
  </collection>
  <sequence master="body">
    <table>
      <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
      </tr>
      <tr>
        <td>4</td>
        <td>5
          <anchor item="note-1"/>
        </td>
        <td>6</td>
      </tr>
      <tr>
        <td>7</td>
        <td>8</td>
        <td>9</td>
      </tr>
    </table>
  </sequence>
</obfl>

table/tables-anchor-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="12" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠼⠃⠀⠀⠼⠉</row>
          <row>⠼⠙⠀⠀⠼⠑⠀⠀⠼⠋</row>
          <row>⠼⠛⠀⠀⠼⠓⠀⠀⠼⠊</row>
          <row/>
          <row/>
          <row>⠼⠁</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Page border test

Tests the page border

page-border-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Page border test</dc:title>
    <dc:description>Tests the page border</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false" border-style="solid">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block/>
  </sequence>
</obfl>

page-border-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2017-07-06</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠏⠉⠉⠉⠉⠉⠉⠉⠉⠹</row>
          <row>⠇⠀⠀⠀⠀⠀⠀⠀⠀⠸</row>
          <row>⠇⠀⠀⠀⠀⠀⠀⠀⠀⠸</row>
          <row>⠇⠀⠀⠀⠀⠀⠀⠀⠀⠸</row>
          <row>⠇⠀⠀⠀⠀⠀⠀⠀⠀⠸</row>
          <row>⠧⠤⠤⠤⠤⠤⠤⠤⠤⠼</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Uneven margins test

Tests uneven margins.

margin/margin-uneven-input.obfl

<obfl version="2011-1" xml:lang="und">
  <meta>
    <dc:title>Uneven margins test</dc:title>
    <dc:description>Tests uneven margins.</dc:description>
  </meta>
  <layout-master name="duplex" page-width="10" page-height="6" inner-margin="2" outer-margin="1" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <layout-master name="simplex" page-width="10" page-height="6" inner-margin="2" outer-margin="1" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="duplex">
    <block>
      <leader pattern="⠤" position="100%"/>
    </block>
    <block break-before="page">
      <leader pattern="⠤" position="100%"/>
    </block>
  </sequence>
  <sequence master="simplex">
    <block>
      <leader pattern="⠤" position="100%"/>
    </block>
    <block break-before="page">
      <leader pattern="⠤" position="100%"/>
    </block>
  </sequence>
</obfl>

margin/margin-uneven-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠀⠀⠤⠤⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠀⠤⠤⠤⠤⠤⠤⠤</row>
        </page>
      </section>
      <section duplex="false">
        <page>
          <row>⠀⠀⠤⠤⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠀⠀⠤⠤⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Collapsing margins test

Tests that margins collapse properly.

margin/margin-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Collapsing margins test</dc:title>
    <dc:description>Tests that margins collapse properly.</dc:description>
  </meta>
  <layout-master name="body" page-width="14" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block margin-top="3" margin-bottom="2">
      <block margin-top="2" margin-bottom="3">⠤⠤</block>
    </block>
    <block margin-top="2" margin-bottom="2">⠤⠤</block>
  </sequence>
</obfl>

margin/margin-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-07-07</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="14" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row/>
          <row/>
          <row/>
          <row>⠤⠤</row>
        </page>
        <page>
          <row/>
          <row/>
          <row>⠤⠤</row>
          <row/>
          <row/>
        </page>
      </section>
    </volume>
  </body>
</pef>

Collapsing margins test

Tests that empty blocks collapse properly.

margin/margin3-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Collapsing margins test</dc:title>
    <dc:description>Tests that empty blocks collapse properly.</dc:description>
  </meta>
  <layout-master name="body" page-width="14" page-height="6" duplex="false">
    <default-template>
      <header>
        <field>
          <marker-reference marker="foo" direction="forward" scope="page"/>
        </field>
        <field>
          <marker-reference marker="foo" direction="forward" scope="page-content"/>
        </field>
        <field>
          <marker-reference marker="foo" direction="backward" scope="page"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block margin-bottom="1"/>
    <block/>
    <block>⠤⠤</block>
  </sequence>
  <sequence master="body">
    <block/>
    <block margin-bottom="1"/>
    <block>⠤⠤</block>
  </sequence>
  <sequence master="body">
    <block margin-bottom="1"/>
    <block>
      <marker class="foo" value="⠿"/>
    </block>
    <block>⠤⠤</block>
  </sequence>
  <sequence master="body">
    <block>
      <marker class="foo" value="⠿"/>
    </block>
    <block margin-bottom="1"/>
    <block>⠤⠤</block>
  </sequence>
  <sequence master="body">
    <block margin-bottom="1"/>
    <block>
      <marker class="foo" value="⠿"/>
    </block>
    <block>⠤⠤</block>
    <block margin-bottom="1"/>
    <block>
      <marker class="foo" value="⠿⠿"/>
    </block>
    <block>⠤⠤</block>
    <block>
      <marker class="foo" value="⠿⠿⠿"/>
    </block>
    <block>⠤⠤</block>
  </sequence>
</obfl>

margin/margin3-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2019-04-02</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="14" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿</row>
          <row>⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿</row>
          <row>⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠿⠀⠀⠀⠀⠿⠿⠀⠀⠀⠀⠿⠿⠿</row>
          <row>⠤⠤</row>
          <row/>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Nested borders margin test

Tests margins with multiple borders.

margin/margin-nested2-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Nested borders margin test</dc:title>
    <dc:description>Tests margins with multiple borders.</dc:description>
  </meta>
  <layout-master name="body" page-width="20" page-height="15" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block align="center" margin-left="1" margin-right="1" margin-top="1" margin-bottom="1" border-left-style="solid" border-left-align="outer" border-right-style="solid" border-right-align="outer" border-top-style="solid" border-top-align="inner" border-bottom-style="solid" border-bottom-align="inner">
      <block align="center" margin-top="1" margin-bottom="1" margin-left="1" margin-right="1">⠿⠿⠿⠿</block>
    </block>
    <block align="center" margin-left="1" margin-right="1" margin-top="1" margin-bottom="1" border-left-style="solid" border-left-align="outer" border-right-style="solid" border-right-align="outer" border-top-style="solid" border-top-align="inner" border-bottom-style="solid" border-bottom-align="inner" break-before="page">
      <block align="center" margin-top="1" margin-bottom="1">
        <block align="center" margin-left="2" margin-right="2" border-left-style="solid" border-left-align="outer" border-right-style="solid" border-right-align="outer" border-top-style="solid" border-top-align="inner" border-bottom-style="solid" border-bottom-align="inner">
          <block align="center" margin-top="1" margin-bottom="1" margin-left="1" margin-right="1">⠿⠿⠿⠿</block>
        </block>
      </block>
    </block>
  </sequence>
</obfl>

margin/margin-nested2-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume rows="15" cols="20" rowgap="0" duplex="false">
      <section>
        <page>
          <row/>
          <row>⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠀⠀⠀⠀⠿⠿⠿⠿⠀⠀⠀⠀⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀</row>
          <row>⠀⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉</row>
          <row/>
        </page>
        <page>
          <row/>
          <row>⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠇⠀⠀⠀⠿⠿⠿⠿⠀⠀⠀⠸⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠀⠀⠸⠀</row>
          <row>⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀</row>
          <row>⠀⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉</row>
          <row/>
        </page>
      </section>
    </volume>
  </body>
</pef>

Nested borders margin test

Tests margins with multiple borders. This test verifies that margins that are separated by borders aren't collapsed.

margin/margin-nested-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Nested borders margin test</dc:title>
    <dc:description>Tests margins with multiple borders. This test verifies that margins that are separated by
		borders aren't collapsed.</dc:description>
  </meta>
  <layout-master name="body" page-width="18" page-height="10" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block border-style="solid" border-width="1" margin-left="2" margin-right="2">
      <block border-style="solid" border-width="1" margin-left="2" margin-right="2" margin-top="1" margin-bottom="1">
        <block margin-left="1" margin-right="1" margin-top="1" margin-bottom="1">⠤​⠤​⠤​⠤​⠤​⠤</block>
      </block>
    </block>
  </sequence>
</obfl>

margin/margin-nested-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-07-06</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="18" rows="10" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠀⠀⠏⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠹</row>
          <row>⠀⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠇⠀⠀⠏⠉⠉⠉⠉⠉⠉⠹⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠇⠀⠀⠇⠀⠀⠀⠀⠀⠀⠸⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠇⠀⠀⠇⠀⠤⠤⠤⠤⠀⠸⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠇⠀⠀⠇⠀⠤⠤⠀⠀⠀⠸⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠇⠀⠀⠇⠀⠀⠀⠀⠀⠀⠸⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠇⠀⠀⠧⠤⠤⠤⠤⠤⠤⠼⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠧⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠼</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

margin/margin2-input.obfl

<obfl version="2011-1" xml:lang="en">
  <layout-master name="body" page-width="20" page-height="15" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block margin-bottom="1">⠿⠿⠿⠿</block>
    <block margin-top="1">⠿⠿⠿⠿</block>
  </sequence>
</obfl>

margin/margin2-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier/>
    </meta>
  </head>
  <body>
    <volume rows="15" cols="20" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠿⠿⠿⠿</row>
          <row/>
          <row>⠿⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Nested borders padding test

Tests padding with multiple borders

padding-nested-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Nested borders padding test</dc:title>
    <dc:description>Tests padding with multiple borders</dc:description>
  </meta>
  <layout-master name="body" page-width="18" page-height="10" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block border-style="solid" border-width="1" margin-left="2" margin-right="2" padding-left="2" padding-right="2" padding-top="1" padding-bottom="1">
      <block border-style="solid" border-width="1" padding-left="1" padding-right="1" padding-top="1" padding-bottom="1">
        <block>⠤​⠤​⠤​⠤​⠤​⠤</block>
      </block>
    </block>
  </sequence>
</obfl>

padding-nested-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-07-06</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="18" rows="10" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠀⠀⠏⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠹</row>
          <row>⠀⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠇⠀⠀⠏⠉⠉⠉⠉⠉⠉⠹⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠇⠀⠀⠇⠀⠀⠀⠀⠀⠀⠸⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠇⠀⠀⠇⠀⠤⠤⠤⠤⠀⠸⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠇⠀⠀⠇⠀⠤⠤⠀⠀⠀⠸⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠇⠀⠀⠇⠀⠀⠀⠀⠀⠀⠸⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠇⠀⠀⠧⠤⠤⠤⠤⠤⠤⠼⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠀⠀</row>
          <row>⠀⠀⠧⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠼</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Row spacing test

Tests collapsing margins of blocks with different row spacing.

row-spacing-input.obfl

<obfl version="2011-1" xml:lang="sv">
  <meta>
    <dc:title>Row spacing test</dc:title>
    <dc:description>Tests collapsing margins of blocks with different row spacing.</dc:description>
  </meta>
  <layout-master name="a" page-width="40" page-height="25" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block margin-bottom="1">
      <block row-spacing="2.0">⠿⠿⠿⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿⠿⠿⠿</block>
    </block>
    <block margin-top="1" margin-bottom="1">
      <block row-spacing="2.0">⠿⠿⠿⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿⠿⠿⠿</block>
    </block>
    <block margin-top="1">
      <block row-spacing="2.0">⠿⠿⠿⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿⠿⠿⠿</block>
    </block>
  </sequence>
</obfl>

row-spacing-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-09-22</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="40" rows="25" rowgap="0" duplex="false">
      <section>
        <page>
          <row rowgap="4">⠿⠿⠿⠿⠿⠿⠿⠿⠀⠿⠿⠿⠿⠿⠿⠿⠿</row>
          <row/>
          <row rowgap="4">⠿⠿⠿⠿⠿⠿⠿⠿⠀⠿⠿⠿⠿⠿⠿⠿⠿</row>
          <row/>
          <row>⠿⠿⠿⠿⠿⠿⠿⠿⠀⠿⠿⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Widows test

Tests that the widows property works as expected.

widows-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Widows test</dc:title>
    <dc:description>Tests that the widows property works as expected.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>⠤⠤</block>
    <block widows="1">⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
  </sequence>
  <sequence master="body">
    <block>⠤⠤</block>
    <block widows="2">⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
  </sequence>
</obfl>

widows-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-10-06</dc:date>
      <dc:title>Widows test</dc:title>
      <dc:description>Tests that the widows property works as expected.</dc:description>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Simple leader test

Tests a single right aligned leader with a only one item after

leader-right-simple-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Simple leader test</dc:title>
    <dc:description>Tests a single right aligned leader with a only one item after</dc:description>
  </meta>
  <layout-master name="a" duplex="false" page-width="10" page-height="25">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block id="chapter_1">⠤</block>
    <block>
      <leader pattern="⠄" position="100%" align="right"/>
      <page-number ref-id="chapter_1" number-format="default"/>
    </block>
  </sequence>
</obfl>

leader-right-simple-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-05-09</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="25" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠤</row>
          <row>⠄⠄⠄⠄⠄⠄⠄⠄⠼⠁</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

marker-reference-page-start-workaround

Tests (hypothetical) marker-reference type that corresponds with 'page-start' in CSS. This type is not directly supported in OBFL. As a workaround I do a forward page search for the marker 'foo/prev' (rendered top left corner), and if that does not return a value, a backward sequence search for the marker 'foo' (top right corner). At any position in the OBFL the value of the preceding marker of class 'foo' matches the value of the following marker of class 'foo/prev'. In addition, tests marker-reference with scope page and direction backward, which corresponds more or less with 'page-last-except-start' in CSS (bottom left corner). Tested with markers at the beginning of the sequence, in the middle of a page, at a soft page break within a block, at a soft page break between two blocks, and at a hard page break.

marker-ref/marker-reference-page-start-workaround-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>marker-reference-page-start-workaround</dc:title>
    <dc:description>Tests (hypothetical) marker-reference type that corresponds with 'page-start' in CSS. This type is not directly supported in OBFL. As a workaround I do a forward page search for the marker 'foo/prev' (rendered top left corner), and if that does not return a value, a backward sequence search for the marker 'foo' (top right corner). At any position in the OBFL the value of the preceding marker of class 'foo' matches the value of the following marker of class 'foo/prev'. In addition, tests marker-reference with scope page and direction backward, which corresponds more or less with 'page-last-except-start' in CSS (bottom left corner). Tested with markers at the beginning of the sequence, in the middle of a page, at a soft page break within a block, at a soft page break between two blocks, and at a hard page break.</dc:description>
  </meta>
  <layout-master name="a" page-width="10" page-height="6" duplex="true" page-number-variable="page">
    <default-template>
      <header>
        <field>
          <marker-reference marker="foo/prev" direction="forward" scope="page-content"/>
        </field>
        <field/>
        <field>
          <marker-reference marker="foo" direction="backward" scope="sequence"/>
        </field>
      </header>
      <footer>
        <field>
          <marker-reference marker="foo" direction="backward" scope="page"/>
        </field>
        <field/>
        <field/>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>
      <block>
        <marker class="foo" value="1"/>
      </block>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ​
                ⠁⠁⠁⠁⠁
                
      <marker class="foo/prev" value="1"/>
      <marker class="foo" value="2"/>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                
      <marker class="foo/prev" value="3"/>
      <marker class="foo" value="3"/>
                ​
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                
      <br/>
      <marker class="foo/prev" value="3"/>
      <marker class="foo" value="4"/>⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
              
    </block>
    <block>
      <block>
        <marker class="foo/prev" value="4"/>
        <marker class="foo" value="5"/>
      </block>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
              
    </block>
    <block break-before="page">
      <block>
        <marker class="foo/prev" value="5"/>
        <marker class="foo" value="6"/>
      </block>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
              
    </block>
  </sequence>
</obfl>

marker-ref/marker-reference-page-start-workaround-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>marker-reference-page-start-workaround</dc:title>
      <dc:description>Tests (hypothetical) marker-reference type that corresponds with 'page-start' in CSS. This type is not directly supported in OBFL. As a workaround I do a forward page search for the marker 'foo/prev' (rendered top left corner), and if that does not return a value, a backward sequence search for the marker 'foo' (top right corner). At any position in the OBFL the value of the preceding marker of class 'foo' matches the value of the following marker of class 'foo/prev'. In addition, tests marker-reference with scope page and direction backward, which corresponds more or less with 'page-last-except-start' in CSS (bottom left corner). Tested with markers at the beginning of the sequence, in the middle of a page, at a soft page break within a block, at a soft page break between two blocks, and at a hard page break.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠼⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠼⠉</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠼⠉⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠼⠉</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠼⠉⠀⠀⠀⠀⠀⠀⠼⠙</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠼⠙⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠼⠑</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row/>
          <row/>
          <row>⠼⠑⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠼⠋</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row/>
          <row/>
          <row>⠼⠋⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Marker reference spread search test

Tests marker references within a spread, but across different sequences. Note that fields are different on left/right hand sides due to the fact that the scope does not effect the starting point of the search. The starting point is always the current page.

marker-ref/marker-ref-spread-sequence-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Marker reference spread search test</dc:title>
    <dc:description>Tests marker references within a spread, but across different sequences. Note that fields are different on left/right hand sides
		due to the fact that the scope does not effect the starting point of the search. The starting point is always the
		current page.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="6" inner-margin="0" outer-margin="0" row-spacing="1" duplex="true">
    <template use-when="(= (% $page 2) 0)">
      <header>
        <field>
          <marker-reference marker="pagenum" direction="forward" scope="spread"/>
        </field>
        <field>
          <marker-reference marker="pagenum" direction="backward" scope="spread" start-offset="1"/>
        </field>
      </header>
      <footer/>
    </template>
    <default-template>
      <header>
        <field>
          <marker-reference marker="pagenum" direction="forward" scope="spread" start-offset="-1"/>
        </field>
        <field>
          <marker-reference marker="pagenum" direction="backward" scope="spread"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main" initial-page-number="1">
    <block break-before="page">⠤⠤
      <marker class="pagenum" value="1"/>⠤⠤
      <marker class="pagenum" value="2"/>⠤⠤
      <marker class="pagenum" value="3"/>
    </block>
    <block break-before="page">⠤⠤
      <marker class="pagenum" value="4"/>⠤⠤
      <marker class="pagenum" value="5"/>⠤⠤
      <marker class="pagenum" value="6"/>
    </block>
  </sequence>
  <sequence master="main">
    <block break-before="page">⠤⠤
      <marker class="pagenum" value="7"/>⠤⠤
      <marker class="pagenum" value="8"/>⠤⠤
      <marker class="pagenum" value="9"/>
    </block>
    <block break-before="page">⠤⠤
      <marker class="pagenum" value="10"/>⠤⠤
      <marker class="pagenum" value="11"/>⠤⠤
      <marker class="pagenum" value="12"/>
    </block>
  </sequence>
</obfl>

marker-ref/marker-ref-spread-sequence-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-10-21</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="20" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠉</row>
          <row>⠤⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠙⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠊</row>
          <row>⠤⠤⠤⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠼⠙⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠊</row>
          <row>⠤⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠁⠚⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠁⠃</row>
          <row>⠤⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

marker-reference-page-forward-backward

Tests marker-reference with scope page. Tested with both forward and backward direction. Tested with markers at the beginning of the sequence, in the middle of a page, at a soft page break within a block, at a soft page break between two blocks, and at a hard page break.

marker-ref/marker-reference-page-forward-backward-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>marker-reference-page-forward-backward</dc:title>
    <dc:description>Tests marker-reference with scope page. Tested with both forward and backward direction. Tested with markers at the beginning of the sequence, in the middle of a page, at a soft page break within a block, at a soft page break between two blocks, and at a hard page break.</dc:description>
  </meta>
  <layout-master name="a" page-width="10" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header>
        <field>
          <marker-reference marker="foo" direction="forward" scope="page"/>
        </field>
        <field/>
        <field>
          <marker-reference marker="foo" direction="backward" scope="page"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>
      <marker class="foo" value="1"/>⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ​
                ⠁⠁⠁⠁⠁
                
      <marker class="foo" value="2"/>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ​
      <marker class="foo" value="3"/>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                
      <br/>
      <marker class="foo" value="4"/>⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
              
    </block>
    <block>
      <marker class="foo" value="5"/>⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
              
    </block>
    <block break-before="page">
      <marker class="foo" value="6"/>⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
              
    </block>
  </sequence>
</obfl>

marker-ref/marker-reference-page-forward-backward-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>marker-reference-page-forward-backward</dc:title>
      <dc:description>Tests marker-reference with scope page. Tested with both forward and backward direction. Tested with markers at the beginning of the sequence, in the middle of a page, at a soft page break within a block, at a soft page break between two blocks, and at a hard page break.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠼⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠼⠃⠀⠀⠀⠀⠀⠀⠼⠉</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠼⠙⠀⠀⠀⠀⠀⠀⠼⠙</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠼⠑⠀⠀⠀⠀⠀⠀⠼⠑</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠼⠋⠀⠀⠀⠀⠀⠀⠼⠋</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

marker-reference-page-content-forward-backward

Tests marker-reference with scope page-content. Tested with both forward and backward direction. Tested with markers at the beginning of the sequence, in the middle of a page, at a soft page break within a block, at a soft page break between two blocks, and at a hard page break.

marker-ref/marker-reference-page-content-forward-backward-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>marker-reference-page-content-forward-backward</dc:title>
    <dc:description>Tests marker-reference with scope page-content. Tested with both forward and backward direction. Tested with markers at the beginning of the sequence, in the middle of a page, at a soft page break within a block, at a soft page break between two blocks, and at a hard page break.</dc:description>
  </meta>
  <layout-master name="a" page-width="10" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header>
        <field>
          <marker-reference marker="foo" direction="forward" scope="page-content"/>
        </field>
        <field/>
        <field>
          <marker-reference marker="foo" direction="backward" scope="page-content"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>
      <block>
        <marker class="foo" value="1"/>
      </block>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ​
                ⠁⠁⠁⠁⠁
                
      <marker class="foo" value="2"/>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ​
      <marker class="foo" value="3"/>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                
      <br/>
      <marker class="foo" value="4"/>⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
              
    </block>
    <block>
      <block>
        <marker class="foo" value="5"/>
      </block>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
              
    </block>
    <block break-before="page">
      <block>
        <marker class="foo" value="6"/>
      </block>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
              
    </block>
    <block break-before="page" padding-top="1">
      <block>
        <marker class="foo" value="7"/>
      </block>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
              
    </block>
    <block break-before="page">
      <block>
        <block>
          <marker class="foo" value="8"/>
        </block>
                  ⠁⠁⠁⠁⠁
                
      </block>
                ⠁⠁⠁⠁⠁
              
    </block>
    <block break-before="page">
      <block padding-top="1">
        <block>
          <marker class="foo" value="9"/>
        </block>
                  ⠁⠁⠁⠁⠁
                
      </block>
                ⠁⠁⠁⠁⠁
              
    </block>
  </sequence>
</obfl>

marker-ref/marker-reference-page-content-forward-backward-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>marker-reference-page-content-forward-backward</dc:title>
      <dc:description>Tests marker-reference with scope page-content. Tested with both forward and backward direction. Tested with markers at the beginning of the sequence, in the middle of a page, at a soft page break within a block, at a soft page break between two blocks, and at a hard page break.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠼⠃⠀⠀⠀⠀⠀⠀⠼⠉</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠼⠙⠀⠀⠀⠀⠀⠀⠼⠙</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠼⠛⠀⠀⠀⠀⠀⠀⠼⠛</row>
          <row/>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠼⠊⠀⠀⠀⠀⠀⠀⠼⠊</row>
          <row/>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Marker reference spread search test

Tests marker references within a spread. Note that fields are different on left/right hand sides due to the fact that the scope does not effect the starting point of the search. The starting point is always the current page.

marker-ref/marker-ref-spread-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Marker reference spread search test</dc:title>
    <dc:description>Tests marker references within a spread. Note that fields are different on left/right hand sides
		due to the fact that the scope does not effect the starting point of the search. The starting point is always the
		current page.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="6" inner-margin="0" outer-margin="0" row-spacing="1" duplex="true">
    <template use-when="(= (% $page 2) 0)">
      <header>
        <field>
          <marker-reference marker="pagenum" direction="forward" scope="spread"/>
        </field>
        <field>
          <marker-reference marker="pagenum" direction="backward" scope="spread" start-offset="1"/>
        </field>
      </header>
      <footer/>
    </template>
    <default-template>
      <header>
        <field>
          <marker-reference marker="pagenum" direction="forward" scope="spread" start-offset="-1"/>
        </field>
        <field>
          <marker-reference marker="pagenum" direction="backward" scope="spread"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main" initial-page-number="1">
    <block break-before="page">⠤⠤
      <marker class="pagenum" value="1"/>⠤⠤
      <marker class="pagenum" value="2"/>⠤⠤
      <marker class="pagenum" value="3"/>
    </block>
    <block break-before="page">⠤⠤
      <marker class="pagenum" value="4"/>⠤⠤
      <marker class="pagenum" value="5"/>⠤⠤
      <marker class="pagenum" value="6"/>
    </block>
    <block break-before="page">⠤⠤
      <marker class="pagenum" value="7"/>⠤⠤
      <marker class="pagenum" value="8"/>⠤⠤
      <marker class="pagenum" value="9"/>
    </block>
    <block break-before="page">⠤⠤
      <marker class="pagenum" value="10"/>⠤⠤
      <marker class="pagenum" value="11"/>⠤⠤
      <marker class="pagenum" value="12"/>
    </block>
  </sequence>
</obfl>

marker-ref/marker-ref-spread-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-10-21</dc:date>
      <dc:title>Marker reference search test</dc:title>
      <dc:description>Tests marker references within a page.</dc:description>
    </meta>
  </head>
  <body>
    <volume cols="20" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠉</row>
          <row>⠤⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠙⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠊</row>
          <row>⠤⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠙⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠊</row>
          <row>⠤⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠁⠚⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠁⠃</row>
          <row>⠤⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Marker reference page-content search test

Tests marker references within a page.

marker-ref/marker-ref-page-content-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Marker reference page-content search test</dc:title>
    <dc:description>Tests marker references within a page.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="6" inner-margin="0" outer-margin="0" row-spacing="1" duplex="true">
    <default-template>
      <header>
        <field>
          <marker-reference marker="pagenum" direction="forward" scope="page-content"/>
        </field>
        <field>
          <marker-reference marker="pagenum" direction="backward" scope="page-content"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main" initial-page-number="1">
    <block>
      <marker class="pagenum" value="1"/>
      <marker class="pagenum" value="2"/>
    </block>
    <block>⠤⠤
      <marker class="pagenum" value="3"/>⠤⠤
      <marker class="pagenum" value="4"/>
    </block>
  </sequence>
</obfl>

marker-ref/marker-ref-page-content-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-10-21</dc:date>
      <dc:title>Marker reference search test</dc:title>
      <dc:description>Tests marker references within a page.</dc:description>
    </meta>
  </head>
  <body>
    <volume cols="20" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠙</row>
          <row>⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Marker reference sheet search test

Tests marker references within a sheet. Note that fields are different on left/right hand sides due to the fact that the scope does not effect the starting point of the search. The starting point is always the current page.

marker-ref/marker-ref-sheet-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Marker reference sheet search test</dc:title>
    <dc:description>Tests marker references within a sheet. Note that fields are different on left/right hand sides
		due to the fact that the scope does not effect the starting point of the search. The starting point is always the
		current page.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="6" inner-margin="0" outer-margin="0" row-spacing="1" duplex="true">
    <template use-when="(= (% $page 2) 1)">
      <header>
        <field>
          <marker-reference marker="pagenum" direction="forward" scope="sheet"/>
        </field>
        <field>
          <marker-reference marker="pagenum" direction="backward" scope="sheet" start-offset="1"/>
        </field>
      </header>
      <footer/>
    </template>
    <default-template>
      <header>
        <field>
          <marker-reference marker="pagenum" direction="forward" scope="sheet" start-offset="-1"/>
        </field>
        <field>
          <marker-reference marker="pagenum" direction="backward" scope="sheet"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main" initial-page-number="1">
    <block break-before="page">⠤⠤
      <marker class="pagenum" value="1"/>⠤⠤
      <marker class="pagenum" value="2"/>⠤⠤
      <marker class="pagenum" value="3"/>
    </block>
    <block break-before="page">⠤⠤
      <marker class="pagenum" value="4"/>⠤⠤
      <marker class="pagenum" value="5"/>⠤⠤
      <marker class="pagenum" value="6"/>
    </block>
    <block break-before="page">⠤⠤
      <marker class="pagenum" value="7"/>⠤⠤
      <marker class="pagenum" value="8"/>⠤⠤
      <marker class="pagenum" value="9"/>
    </block>
    <block break-before="page">⠤⠤
      <marker class="pagenum" value="10"/>⠤⠤
      <marker class="pagenum" value="11"/>⠤⠤
      <marker class="pagenum" value="12"/>
    </block>
  </sequence>
</obfl>

marker-ref/marker-ref-sheet-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-10-21</dc:date>
      <dc:title>Marker reference search test</dc:title>
      <dc:description>Tests marker references within a page.</dc:description>
    </meta>
  </head>
  <body>
    <volume cols="20" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠋</row>
          <row>⠤⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠋</row>
          <row>⠤⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠁⠃</row>
          <row>⠤⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠁⠃</row>
          <row>⠤⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

marker-reference-spread-across-sequence

Tests that marker-reference with scope spread searches beyond sequence boundaries, i.e. a search on the first page of a new sequence includes assignments made on the last page of the previous sequence if that last page is a left-hand page.

marker-ref/marker-reference-spread-across-sequence-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>marker-reference-spread-across-sequence</dc:title>
    <dc:description>Tests that marker-reference with scope spread searches beyond sequence boundaries, i.e. a search on the first page of a new sequence includes assignments made on the last page of the previous sequence if that last page is a left-hand page.</dc:description>
  </meta>
  <layout-master name="a" page-width="10" page-height="5" duplex="true" page-number-variable="page">
    <template use-when="(= (% $page 2) 1)">
      <header/>
      <footer>
        <field>
          <marker-reference marker="foo" direction="backward" scope="spread"/>
        </field>
        <field/>
        <field/>
      </footer>
    </template>
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ​
                ⠁⠁⠁⠁⠁
                
      <marker class="foo" value="1"/>
                ⠁⠁⠁⠁⠁
              
    </block>
    <block break-before="page">​
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ​
                ⠁⠁⠁⠁⠁
                
      <marker class="foo" value="2"/>
                ⠁⠁⠁⠁⠁
              
    </block>
  </sequence>
  <sequence master="a">
    <block>⠁⠁⠁⠁⠁
              </block>
  </sequence>
</obfl>

marker-ref/marker-reference-spread-across-sequence-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>marker-reference-spread-across-sequence</dc:title>
      <dc:description>Tests that marker-reference with scope spread searches beyond sequence boundaries, i.e. a search on the first page of a new sequence includes assignments made on the last page of the previous sequence if that last page is a left-hand page.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠁⠁⠁⠁⠁</row>
          <row/>
          <row/>
          <row/>
          <row>⠼⠃⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

marker-reference-start-offset-first-page

Tests marker-reference with scope page and start-offset -1 on first page of document. Expected is that the search does not return anything. See https://github.com/joeha480/dotify/issues/144.

marker-ref/marker-reference-start-offset-first-page-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>marker-reference-start-offset-first-page</dc:title>
    <dc:description>Tests marker-reference with scope page and start-offset -1 on first page of document. Expected is that the search does not return anything. See https://github.com/joeha480/dotify/issues/144.</dc:description>
  </meta>
  <layout-master name="a" page-width="10" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer>
        <field>
          <marker-reference marker="foo" direction="forward" scope="page" start-offset="-1"/>
        </field>
        <field/>
        <field/>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>⠁⠁⠁⠁⠁
                
      <marker class="foo" value="1"/>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
              
    </block>
  </sequence>
</obfl>

marker-ref/marker-reference-start-offset-first-page-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>marker-reference-start-offset-first-page</dc:title>
      <dc:description>Tests marker-reference with scope page and start-offset -1 on first page of document. Expected is that the search does not return anything. See https://github.com/joeha480/dotify/issues/144.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠁⠁⠁⠁⠁</row>
          <row/>
          <row/>
          <row/>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Marker reference page search test

Tests marker references forward in the document.

marker-ref/marker-ref-sequence-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Marker reference page search test</dc:title>
    <dc:description>Tests marker references forward in the document.</dc:description>
  </meta>
  <layout-master name="main" page-width="10" page-height="7" inner-margin="0" outer-margin="0" row-spacing="1" duplex="false">
    <default-template>
      <header>
        <field>
          <marker-reference marker="chapter" direction="forward" scope="sequence"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main" initial-page-number="1">
    <block>⠿⠤
      <marker class="chapter" value="⠿"/> ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿
    </block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤
      <marker class="chapter" value="⠤"/> ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿
    </block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
  </sequence>
</obfl>

marker-ref/marker-ref-sequence-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2017-02-06</dc:date>
      <dc:title>Marker reference page search test</dc:title>
      <dc:description>Tests marker references forward in the document.</dc:description>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="7" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠿</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠤</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠤</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠤</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠤</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠤</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠤</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠤</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠤</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠤</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠤</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row/>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Marker reference page search test

Tests marker references within a page.

marker-ref/marker-ref-sequence-vol-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Marker reference page search test</dc:title>
    <dc:description>Tests marker references within a page.</dc:description>
  </meta>
  <layout-master name="main" page-width="10" page-height="7" inner-margin="0" outer-margin="0" row-spacing="1" duplex="false">
    <default-template>
      <header>
        <field>
          <marker-reference marker="chapter" direction="forward" scope="sequence"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="10" use-when="(= $volume 1)">
    <pre-content>
      <sequence master="main" initial-page-number="1">
        <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
        <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
        <block>
          <marker class="chapter" value="⠤"/>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿
        </block>
      </sequence>
    </pre-content>
    <post-content/>
  </volume-template>
  <volume-template sheets-in-volume-max="10" use-when="(> $volume 1)">
    <pre-content>
      <sequence master="main" initial-page-number="1">
        <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
        <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
        <block>
          <marker class="chapter" value="⠿"/>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿
        </block>
      </sequence>
    </pre-content>
    <post-content/>
  </volume-template>
  <sequence master="main" initial-page-number="1">
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
  </sequence>
</obfl>

marker-ref/marker-ref-sequence-vol-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2017-02-06</dc:date>
      <dc:title>Marker reference page search test</dc:title>
      <dc:description>Tests marker references within a page.</dc:description>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="7" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠤</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠤</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠤</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row/>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row/>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row/>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row/>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row/>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row/>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="7" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠿</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠿</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row/>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row/>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row/>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row/>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row/>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row/>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

marker-reference-page-first-workaround

Tests (hypothetical) marker-reference type that corresponds with 'page-first' in CSS. This type is not yet directly supported in OBFL. As a workaround I do a forward page search (left corner in this test), and if that does not return a value, a backward sequence search (right corner). Tested with markers at the beginning of the sequence, in the middle of a page, at a soft page break within a block, at a soft page break between two blocks, and at a hard page break.

marker-ref/marker-reference-page-first-workaround-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>marker-reference-page-first-workaround</dc:title>
    <dc:description>Tests (hypothetical) marker-reference type that corresponds with 'page-first' in CSS. This type is not yet directly supported in OBFL. As a workaround I do a forward page search (left corner in this test), and if that does not return a value, a backward sequence search (right corner). Tested with markers at the beginning of the sequence, in the middle of a page, at a soft page break within a block, at a soft page break between two blocks, and at a hard page break.</dc:description>
  </meta>
  <layout-master name="a" page-width="10" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header>
        <field>
          <marker-reference marker="foo" direction="forward" scope="page"/>
        </field>
        <field/>
        <field>
          <marker-reference marker="foo" direction="backward" scope="sequence"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>
      <marker class="foo" value="1"/>⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ​
                ⠁⠁⠁⠁⠁
                
      <marker class="foo" value="2"/>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ​
      <marker class="foo" value="3"/>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                
      <br/>
      <marker class="foo" value="4"/>⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
              
    </block>
    <block>
      <marker class="foo" value="5"/>⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
              
    </block>
    <block break-before="page">
      <marker class="foo" value="6"/>⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
              
    </block>
  </sequence>
</obfl>

marker-ref/marker-reference-page-first-workaround-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>marker-reference-page-first-workaround</dc:title>
      <dc:description>Tests (hypothetical) marker-reference type that corresponds with 'page-first' in CSS. This type is not yet directly supported in OBFL. As a workaround I do a forward page search (left corner in this test), and if that does not return a value, a backward sequence search (right corner). Tested with markers at the beginning of the sequence, in the middle of a page, at a soft page break within a block, at a soft page break between two blocks, and at a hard page break.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠼⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠼⠃⠀⠀⠀⠀⠀⠀⠼⠉</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠼⠉</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠼⠙⠀⠀⠀⠀⠀⠀⠼⠙</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠼⠑⠀⠀⠀⠀⠀⠀⠼⠑</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠼⠋⠀⠀⠀⠀⠀⠀⠼⠋</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

marker-reference-spread-start-workaround

Tests (hypothetical) marker-reference type that corresponds with 'spread-start' in CSS. This type is not directly supported in OBFL. As a workaround I do a forward spread search for the marker 'foo/prev' starting on the left page (rendered top left corner), and if that does not return a value, a backward sequence search for the marker 'foo' starting on the right page (top right corner). At any position in the OBFL the value of the preceding marker of class 'foo' matches the value of the following marker of class 'foo/prev'. In addition, tests marker-reference with scope spread and direction backward, starting on the right page, which corresponds more or less with 'spread-last-except-start' in CSS (bottom left corner). Everything tested on both left- and right-hand pages. Tested with markers at the beginning of the sequence, in the middle of a page, at a soft page break within a block, at a soft page break between two blocks, and at a hard page break.

marker-ref/marker-reference-spread-start-workaround-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>marker-reference-spread-start-workaround</dc:title>
    <dc:description>Tests (hypothetical) marker-reference type that corresponds with 'spread-start' in CSS. This type is not directly supported in OBFL. As a workaround I do a forward spread search for the marker 'foo/prev' starting on the left page (rendered top left corner), and if that does not return a value, a backward sequence search for the marker 'foo' starting on the right page (top right corner). At any position in the OBFL the value of the preceding marker of class 'foo' matches the value of the following marker of class 'foo/prev'. In addition, tests marker-reference with scope spread and direction backward, starting on the right page, which corresponds more or less with 'spread-last-except-start' in CSS (bottom left corner). Everything tested on both left- and right-hand pages. Tested with markers at the beginning of the sequence, in the middle of a page, at a soft page break within a block, at a soft page break between two blocks, and at a hard page break.</dc:description>
  </meta>
  <layout-master name="a" page-width="10" page-height="6" duplex="true" page-number-variable="page">
    <template use-when="(= (% $page 2) 1)">
      <header>
        <field>
          <marker-reference marker="foo/prev" direction="forward" scope="spread-content" start-offset="-1"/>
        </field>
        <field/>
        <field>
          <marker-reference marker="foo" direction="backward" scope="sequence"/>
        </field>
      </header>
      <footer>
        <field>
          <marker-reference marker="foo" direction="backward" scope="spread"/>
        </field>
        <field/>
        <field/>
      </footer>
    </template>
    <template use-when="(= (% $page 2) 0)">
      <header>
        <field>
          <marker-reference marker="foo/prev" direction="forward" scope="spread-content"/>
        </field>
        <field/>
        <field>
          <marker-reference marker="foo" direction="backward" scope="sequence" start-offset="1"/>
        </field>
      </header>
      <footer>
        <field>
          <marker-reference marker="foo" direction="backward" scope="spread" start-offset="1"/>
        </field>
        <field/>
        <field/>
      </footer>
    </template>
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>
      <block>
        <marker class="foo" value="0"/>
      </block>
                ⠁⠁⠁⠁⠁
                
      <marker class="foo/prev" value="0"/>
      <marker class="foo" value="1"/>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ​
                ⠁⠁⠁⠁⠁
                
      <marker class="foo/prev" value="1"/>
      <marker class="foo" value="2"/>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ​
      <marker class="foo/prev" value="3"/>
      <marker class="foo" value="3"/>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                
      <br/>
      <marker class="foo/prev" value="3"/>
      <marker class="foo" value="4"/>⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
              
    </block>
    <block>
      <block>
        <marker class="foo/prev" value="4"/>
        <marker class="foo" value="5"/>
      </block>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
              
    </block>
    <block break-before="page">
      <block>
        <marker class="foo/prev" value="5"/>
        <marker class="foo" value="6"/>
      </block>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
              
    </block>
  </sequence>
</obfl>

marker-ref/marker-reference-spread-start-workaround-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>marker-reference-spread-start-workaround</dc:title>
      <dc:description>Tests (hypothetical) marker-reference type that corresponds with 'spread-start' in CSS. This type is not directly supported in OBFL. As a workaround I do a forward spread search for the marker 'foo/prev' starting on the left page (rendered top left corner), and if that does not return a value, a backward sequence search for the marker 'foo' starting on the right page (top right corner). At any position in the OBFL the value of the preceding marker of class 'foo' matches the value of the following marker of class 'foo/prev'. In addition, tests marker-reference with scope spread and direction backward, starting on the right page, which corresponds more or less with 'spread-last-except-start' in CSS (bottom left corner). Everything tested on both left- and right-hand pages. Tested with markers at the beginning of the sequence, in the middle of a page, at a soft page break within a block, at a soft page break between two blocks, and at a hard page break.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠚⠀⠀⠀⠀⠀⠀⠼⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠼⠉</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠼⠉⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠼⠉</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠼⠉⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠼⠉⠀⠀⠀⠀⠀⠀⠼⠑</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠼⠑⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠼⠉⠀⠀⠀⠀⠀⠀⠼⠑</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row/>
          <row/>
          <row>⠼⠑⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠼⠋</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row/>
          <row/>
          <row>⠼⠋⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

marker-reference-sequence-backward

Tests marker-reference with scope sequence and direction backward. Tested with markers at the beginning of the sequence, in the middle of a page, at a soft page break within a block, at a soft page break between two blocks, and at a hard page break.

marker-ref/marker-reference-sequence-backward-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>marker-reference-sequence-backward</dc:title>
    <dc:description>Tests marker-reference with scope sequence and direction backward. Tested with markers at the beginning of the sequence, in the middle of a page, at a soft page break within a block, at a soft page break between two blocks, and at a hard page break.</dc:description>
  </meta>
  <layout-master name="a" page-width="10" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header>
        <field>
          <marker-reference marker="foo" direction="backward" scope="sequence"/>
        </field>
        <field/>
        <field/>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>
      <marker class="foo" value="1"/>⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ​
                ⠁⠁⠁⠁⠁
                
      <marker class="foo" value="2"/>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ​
      <marker class="foo" value="3"/>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                
      <br/>
      <marker class="foo" value="4"/>⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
              
    </block>
    <block>
      <marker class="foo" value="5"/>⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
              
    </block>
    <block break-before="page">
      <marker class="foo" value="6"/>⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
              
    </block>
  </sequence>
</obfl>

marker-ref/marker-reference-sequence-backward-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>marker-reference-sequence-backward</dc:title>
      <dc:description>Tests marker-reference with scope sequence and direction backward. Tested with markers at the beginning of the sequence, in the middle of a page, at a soft page break within a block, at a soft page break between two blocks, and at a hard page break.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠼⠉⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠼⠉⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠼⠙⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠼⠑⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠼⠋⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

marker-reference-across-sequence-workaround

Tests marker-reference with multiple sequences. Currently marker-reference doesn't search across sequences. As a workaround I repeat markers at the start of a new sequence when needed.

marker-ref/marker-reference-across-sequence-workaround-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>marker-reference-across-sequence-workaround</dc:title>
    <dc:description>Tests marker-reference with multiple sequences. Currently marker-reference doesn't search across sequences. As a workaround I repeat markers at the start of a new sequence when needed.</dc:description>
  </meta>
  <layout-master name="a" page-width="10" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer>
        <field>
          <marker-reference marker="foo" direction="backward" scope="sequence"/>
        </field>
        <field/>
        <field>
          <marker-reference marker="foo/entry" direction="backward" scope="sequence"/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>
      <marker class="foo" value="1"/>⠁⠁⠁⠁⠁
              
    </block>
  </sequence>
  <sequence master="a">
    <block>
      <marker class="foo/entry" value="1"/>
    </block>
    <block>⠁⠁⠁⠁⠁
              </block>
  </sequence>
</obfl>

marker-ref/marker-reference-across-sequence-workaround-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>marker-reference-across-sequence-workaround</dc:title>
      <dc:description>Tests marker-reference with multiple sequences. Currently marker-reference doesn't search across sequences. As a workaround I repeat markers at the start of a new sequence when needed.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠁⠁⠁⠁⠁</row>
          <row/>
          <row/>
          <row/>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠁⠁⠁⠁⠁</row>
          <row/>
          <row/>
          <row/>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠼⠁</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

marker-reference-spread-across-volume

Tests that marker-reference with scope spread does not search beyond volume boundaries.

marker-ref/marker-reference-spread-across-volume-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>marker-reference-spread-across-volume</dc:title>
    <dc:description>Tests that marker-reference with scope spread does not search beyond volume boundaries.</dc:description>
  </meta>
  <layout-master name="a" page-width="10" page-height="5" duplex="true" page-number-variable="page">
    <template use-when="(= (% $page 2) 1)">
      <header/>
      <footer>
        <field>
          <marker-reference marker="foo" direction="backward" scope="spread"/>
        </field>
        <field/>
        <field/>
      </footer>
    </template>
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="2"/>
  <sequence master="a">
    <block>
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ​
                ⠁⠁⠁⠁⠁
                
      <marker class="foo" value="1"/>
                ⠁⠁⠁⠁⠁
              
    </block>
    <block break-before="page">​
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ⠁⠁⠁⠁⠁
                ​
                ⠁⠁⠁⠁⠁
                
      <marker class="foo" value="2"/>
                ⠁⠁⠁⠁⠁
              
    </block>
    <block break-before="page">​
                ⠁⠁⠁⠁⠁
              </block>
  </sequence>
</obfl>

marker-ref/marker-reference-spread-across-volume-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>marker-reference-spread-across-volume</dc:title>
      <dc:description>Tests that marker-reference with scope spread does not search beyond volume boundaries.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
        <page>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠁⠁⠁⠁⠁</row>
          <row/>
          <row/>
          <row/>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Marker reference sequence search test

Tests marker reference with direction="backward" and scope="sequence" combined with break-before="volume".

marker-ref/marker-reference-issue-39-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>Marker reference sequence search test</dc:title>
    <dc:description>Tests marker reference with direction="backward" and scope="sequence" combined with break-before="volume".</dc:description>
  </meta>
  <layout-master name="master" duplex="true" page-width="10" page-height="5">
    <default-template>
      <header/>
      <footer>
        <field>
          <marker-reference marker="foo" direction="backward" scope="sequence"/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="master">
    <block>
      <marker class="foo" value="1"/>
    </block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
  </sequence>
  <sequence master="master" break-before="volume">
    <block>
      <marker class="foo" value="1"/>
    </block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>
      <marker class="foo" value="2"/>
    </block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
    <block>⠤⠤⠤⠤⠤</block>
  </sequence>
</obfl>

marker-ref/marker-reference-issue-39-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠼⠁</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠼⠁</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠼⠁</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠼⠁</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠼⠁</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠼⠃</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤</row>
          <row/>
          <row>⠼⠃</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Marker reference spread-content search test

Tests marker references within a spread. Note that fields are different on left/right hand sides due to the fact that the scope does not effect the starting point of the search. The starting point is always the current page.

marker-ref/marker-ref-spread-content-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Marker reference spread-content search test</dc:title>
    <dc:description>Tests marker references within a spread. Note that fields are different on left/right hand sides
		due to the fact that the scope does not effect the starting point of the search. The starting point is always the
		current page.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="6" inner-margin="0" outer-margin="0" row-spacing="1" duplex="true">
    <template use-when="(= (% $page 2) 0)">
      <header>
        <field>
          <marker-reference marker="pagenum" direction="forward" scope="spread-content"/>
        </field>
        <field>
          <marker-reference marker="pagenum" direction="backward" scope="spread-content" start-offset="1"/>
        </field>
      </header>
      <footer/>
    </template>
    <default-template>
      <header>
        <field>
          <marker-reference marker="pagenum" direction="forward" scope="spread-content" start-offset="-1"/>
        </field>
        <field>
          <marker-reference marker="pagenum" direction="backward" scope="spread-content"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main" initial-page-number="1">
    <block break-before="page">
      <block>
        <marker class="pagenum" value="1"/>
      </block>
			⠤⠤
      <marker class="pagenum" value="2"/>⠤⠤
      <marker class="pagenum" value="3"/>
    </block>
    <block break-before="page">
      <block>
        <marker class="pagenum" value="4"/>
      </block>
			⠤⠤
      <marker class="pagenum" value="5"/>⠤⠤
      <marker class="pagenum" value="6"/>
    </block>
    <block break-before="page">
      <block>
        <marker class="pagenum" value="7"/>
      </block>
			⠤⠤
      <marker class="pagenum" value="8"/>⠤⠤
      <marker class="pagenum" value="9"/>
    </block>
    <block break-before="page">
      <block>
        <marker class="pagenum" value="10"/>
      </block>
			⠤⠤
      <marker class="pagenum" value="11"/>⠤⠤
      <marker class="pagenum" value="12"/>
    </block>
  </sequence>
</obfl>

marker-ref/marker-ref-spread-content-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-10-21</dc:date>
      <dc:title>Marker reference search test</dc:title>
      <dc:description>Tests marker references within a page.</dc:description>
    </meta>
  </head>
  <body>
    <volume cols="20" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠉</row>
          <row>⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠑⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠊</row>
          <row>⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠑⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠊</row>
          <row>⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠁⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠁⠃</row>
          <row>⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Marker reference after leader

Tests marker references after leader.

marker-ref/marker-ref-after-leader-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Marker reference after leader</dc:title>
    <dc:description>Tests marker references after leader.</dc:description>
  </meta>
  <layout-master name="main" page-width="6" page-height="6" inner-margin="0" outer-margin="0" row-spacing="1" duplex="true">
    <template use-when="(= (% $page 2) 1)">
      <header>
        <field>
          <marker-reference marker="pagenum" direction="forward" scope="sequence"/>
        </field>
      </header>
      <footer/>
    </template>
    <default-template>
      <header>
        <field>
          <marker-reference marker="pagenum" direction="forward" scope="sequence"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main" initial-page-number="1">
    <block>
      <marker class="pagenum" value="1"/>⠤⠤
      <br/>⠤⠤
      <br/>⠤⠤
      <br/>⠤⠤
      <br/>⠤⠤
      <leader position="100%" align="right"/>⠤⠤⠤⠤⠁
      <marker class="pagenum" value="2"/>⠤
    </block>
    <block>
      <marker class="pagenum" value="3"/>⠤⠤
    </block>
  </sequence>
</obfl>

marker-ref/marker-ref-after-leader-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2016-03-24</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="6" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁</row>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
        </page>
        <page>
          <row>⠼⠃</row>
          <row>⠤⠤⠤⠤⠁⠤</row>
          <row>⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Marker reference page search test

Tests marker references within a page.

marker-ref/marker-ref-page-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Marker reference page search test</dc:title>
    <dc:description>Tests marker references within a page.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="6" inner-margin="0" outer-margin="0" row-spacing="1" duplex="true">
    <default-template>
      <header>
        <field>
          <marker-reference marker="pagenum" direction="forward" scope="page"/>
        </field>
        <field>
          <marker-reference marker="pagenum" direction="backward" scope="page"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main" initial-page-number="1">
    <block>⠤⠤
      <marker class="pagenum" value="1"/>⠤⠤
      <marker class="pagenum" value="2"/>⠤⠤
      <marker class="pagenum" value="3"/>
    </block>
  </sequence>
</obfl>

marker-ref/marker-ref-page-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-10-21</dc:date>
      <dc:title>Marker reference search test</dc:title>
      <dc:description>Tests marker references within a page.</dc:description>
    </meta>
  </head>
  <body>
    <volume cols="20" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠉</row>
          <row>⠤⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

marker-reference-spread-initial-page-number

Tests that marker-reference with scope spread is not influenced by initial-page-number.

marker-ref/marker-reference-spread-initial-page-number-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <meta>
    <dc:title>marker-reference-spread-initial-page-number</dc:title>
    <dc:description>Tests that marker-reference with scope spread is not influenced by initial-page-number.</dc:description>
  </meta>
  <layout-master name="a" page-width="10" page-height="5" duplex="true" page-number-variable="page">
    <default-template>
      <header/>
      <footer>
        <field>
          <marker-reference marker="foo" direction="backward" scope="spread"/>
        </field>
        <field/>
        <field/>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="a" initial-page-number="2">
    <block>
              ⠁⠁⠁⠁⠁
              ⠁⠁⠁⠁⠁
              ⠁⠁⠁⠁⠁
              ⠁⠁⠁⠁⠁
              ​
              ⠁⠁⠁⠁⠁
              
      <marker class="foo" value="1"/>
              ⠁⠁⠁⠁⠁
            
    </block>
    <block break-before="page">​
            ⠁⠁⠁⠁⠁
            ⠁⠁⠁⠁⠁
            ⠁⠁⠁⠁⠁
            ⠁⠁⠁⠁⠁
            ​
            ⠁⠁⠁⠁⠁
            
      <marker class="foo" value="2"/>
            ⠁⠁⠁⠁⠁
            
    </block>
    <block break-before="page">​
            ⠁⠁⠁⠁⠁
            </block>
  </sequence>
</obfl>

marker-ref/marker-reference-spread-initial-page-number-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:title>marker-reference-spread-initial-page-number</dc:title>
      <dc:description>Tests that marker-reference with scope spread is not influenced by initial-page-number.</dc:description>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="5" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row/>
          <row/>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠁⠁⠁⠁⠁</row>
          <row>⠁⠁⠁⠁⠁</row>
          <row/>
          <row/>
          <row>⠼⠃⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
        <page>
          <row>⠁⠁⠁⠁⠁</row>
          <row/>
          <row/>
          <row/>
          <row>⠼⠃⠀⠀⠀⠀⠀⠀⠀⠀</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Marker reference page search test

Tests marker references within a page.

marker-ref/marker-ref-page-vol-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Marker reference page search test</dc:title>
    <dc:description>Tests marker references within a page.</dc:description>
  </meta>
  <layout-master name="main" page-width="10" page-height="7" inner-margin="0" outer-margin="0" row-spacing="1" duplex="false">
    <default-template>
      <header>
        <field>
          <marker-reference marker="pagenum" direction="forward" scope="page"/>
        </field>
        <field>
          <marker-reference marker="pagenum" direction="backward" scope="page"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="10" use-when="(= $volume 1)">
    <pre-content>
      <sequence master="main" initial-page-number="1">
        <block>⠿⠿
          <marker class="pagenum" value="1"/>⠿⠿
          <marker class="pagenum" value="2"/>⠿⠿
          <marker class="pagenum" value="3"/>
        </block>
      </sequence>
    </pre-content>
    <post-content/>
  </volume-template>
  <volume-template sheets-in-volume-max="10" use-when="(> $volume 1)">
    <pre-content>
      <sequence master="main" initial-page-number="1">
        <block>⠤⠤
          <marker class="pagenum" value="4"/>⠤⠤
          <marker class="pagenum" value="5"/>⠤⠤
          <marker class="pagenum" value="6"/>
        </block>
      </sequence>
    </pre-content>
    <post-content/>
  </volume-template>
  <sequence master="main" initial-page-number="1">
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
    <block>⠿⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠿</block>
  </sequence>
</obfl>

marker-ref/marker-ref-page-vol-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-10-21</dc:date>
      <dc:title>Marker reference search test</dc:title>
      <dc:description>Tests marker references within a page.</dc:description>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="7" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠼⠉</row>
          <row>⠿⠿⠿⠿⠿⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="7" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠼⠙⠀⠀⠀⠀⠀⠀⠼⠋</row>
          <row>⠤⠤⠤⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀</row>
          <row>⠿⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Marker reference spread search test

Tests marker references within a spread limited to volume boundaries. Note that fields are different on left/right hand sides due to the fact that the scope does not effect the starting point of the search. The starting point is always the current page.

marker-ref/marker-ref-spread-volume-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Marker reference spread search test</dc:title>
    <dc:description>Tests marker references within a spread limited to volume boundaries. Note that fields are different on left/right hand sides
		due to the fact that the scope does not effect the starting point of the search. The starting point is always the
		current page.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="6" inner-margin="0" outer-margin="0" row-spacing="1" duplex="true">
    <template use-when="(= (% $page 2) 0)">
      <header>
        <field>
          <marker-reference marker="pagenum" direction="forward" scope="spread"/>
        </field>
        <field>
          <marker-reference marker="pagenum" direction="backward" scope="spread" start-offset="1"/>
        </field>
      </header>
      <footer/>
    </template>
    <default-template>
      <header>
        <field>
          <marker-reference marker="pagenum" direction="forward" scope="spread" start-offset="-1"/>
        </field>
        <field>
          <marker-reference marker="pagenum" direction="backward" scope="spread"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="1">
    <pre-content/>
    <post-content/>
  </volume-template>
  <sequence master="main" initial-page-number="1">
    <block break-before="page">⠤⠤
      <marker class="pagenum" value="1"/>⠤⠤
      <marker class="pagenum" value="2"/>⠤⠤
      <marker class="pagenum" value="3"/>
    </block>
    <block break-before="page">⠤⠤
      <marker class="pagenum" value="4"/>⠤⠤
      <marker class="pagenum" value="5"/>⠤⠤
      <marker class="pagenum" value="6"/>
    </block>
  </sequence>
  <sequence master="main">
    <block break-before="page">⠤⠤
      <marker class="pagenum" value="7"/>⠤⠤
      <marker class="pagenum" value="8"/>⠤⠤
      <marker class="pagenum" value="9"/>
    </block>
    <block break-before="page">⠤⠤
      <marker class="pagenum" value="10"/>⠤⠤
      <marker class="pagenum" value="11"/>⠤⠤
      <marker class="pagenum" value="12"/>
    </block>
  </sequence>
</obfl>

marker-ref/marker-ref-spread-volume-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2015-12-16</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="20" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠉</row>
          <row>⠤⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠙⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠋</row>
          <row>⠤⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
    <volume cols="20" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠊</row>
          <row>⠤⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠼⠁⠚⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠁⠃</row>
          <row>⠤⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Marker overflow test

Tests that overflowing markers are on the correct page.

marker-ref/marker-ref-multiple-input.obfl

<obfl version="2011-1" hyphenate="true" xml:lang="sv">
  <meta>
    <dc:title>Marker overflow test</dc:title>
    <dc:description>Tests that overflowing markers are on the correct page.</dc:description>
  </meta>
  <layout-master name="main" page-width="10" page-height="6" row-spacing="1" duplex="true">
    <default-template>
      <header>
        <field>
          <marker-reference marker="pagenum-turn" direction="forward" scope="page-content"/>
          <marker-reference marker="pagenum" direction="backward" scope="sequence"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main" initial-page-number="1">
    <block>
      <marker class="pagenum" value="1"/>
      <block>⠤⠤</block>
      <block>⠤⠤</block>
      <block>⠤⠤</block>
      <block>⠤⠤</block>
      <block>⠤⠤</block>
      <marker class="pagenum" value="2"/>
      <marker class="pagenum-turn" value="1–"/>
      <marker class="pagenum" value="3"/>
      <marker class="pagenum-turn" value="2–"/>
      <marker class="pagenum" value="4"/>
      <marker class="pagenum-turn" value="3–"/>
    </block>
    <block>
      <marker class="pagenum" value="5"/>
      <marker class="pagenum-turn" value="4–"/>
      <block>⠿⠿</block>
    </block>
  </sequence>
</obfl>

marker-ref/marker-ref-multiple-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>dummy-id-ba3361b702f73</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁⠤⠤⠼⠙</row>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
        </page>
        <page>
          <row>⠼⠑</row>
          <row>⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Tests page variable

Tests that variable page returns the current page number.

current-page-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Tests page variable</dc:title>
    <dc:description>Tests that variable page returns the current page number.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="6" inner-margin="0" outer-margin="0" row-spacing="1" duplex="true">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="main" initial-page-number="1">
    <block>
      <evaluate expression="$page"/>
    </block>
    <block>
      <evaluate expression="$page"/>
    </block>
    <block>
      <evaluate expression="$page"/>
    </block>
    <block>
      <evaluate expression="$page"/>
    </block>
    <block>
      <evaluate expression="$page"/>
    </block>
    <block>
      <evaluate expression="$page"/>
    </block>
    <block>
      <evaluate expression="$page"/>
    </block>
    <block>
      <evaluate expression="$page"/>
    </block>
    <block>
      <evaluate expression="$page"/>
    </block>
    <block>
      <evaluate expression="$page"/>
    </block>
    <block>
      <evaluate expression="$page"/>
    </block>
    <block>
      <evaluate expression="$page"/>
    </block>
  </sequence>
</obfl>

current-page-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="20" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠼⠁</row>
          <row>⠼⠁</row>
          <row>⠼⠁</row>
          <row>⠼⠁</row>
          <row>⠼⠁</row>
          <row>⠼⠁</row>
        </page>
        <page>
          <row>⠼⠃</row>
          <row>⠼⠃</row>
          <row>⠼⠃</row>
          <row>⠼⠃</row>
          <row>⠼⠃</row>
          <row>⠼⠃</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Page number counter with text flow into header/footer test

Tests the page number counter combined with text flow into header/footer.

flow-in/flow-in-header-footer10-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Page number counter with text flow into header/footer test</dc:title>
    <dc:description>Tests the page number counter combined with text flow into header/footer.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header>
        <field allow-text-flow="true"/>
        <field>
          <current-page/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <layout-master name="insert" page-width="10" page-height="6" duplex="false">
    <default-template>
      <header>
        <field allow-text-flow="true"/>
        <field>
          <current-page number-format="lower-alpha"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
  </sequence>
  <sequence master="insert" page-number-counter="insert">
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
  </sequence>
  <sequence master="body">
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
    <block break-before="page">⠤⠤⠤</block>
  </sequence>
</obfl>

flow-in/flow-in-header-footer10-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠤⠤⠤⠀⠀⠀⠀⠀⠼⠁</row>
        </page>
        <page>
          <row>⠤⠤⠤⠀⠀⠀⠀⠀⠼⠃</row>
        </page>
        <page>
          <row>⠤⠤⠤⠀⠀⠀⠀⠀⠼⠉</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠤⠤⠤⠀⠀⠀⠀⠀⠀⠁</row>
        </page>
        <page>
          <row>⠤⠤⠤⠀⠀⠀⠀⠀⠀⠃</row>
        </page>
        <page>
          <row>⠤⠤⠤⠀⠀⠀⠀⠀⠀⠉</row>
        </page>
        <page>
          <row>⠤⠤⠤⠀⠀⠀⠀⠀⠀⠙</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠤⠤⠤⠀⠀⠀⠀⠀⠼⠙</row>
        </page>
        <page>
          <row>⠤⠤⠤⠀⠀⠀⠀⠀⠼⠑</row>
        </page>
        <page>
          <row>⠤⠤⠤⠀⠀⠀⠀⠀⠼⠋</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Vertical position with text flow in header/footer test

Tests vertical position combined with text flow into header/footer.

flow-in/flow-in-header-footer4-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Vertical position with text flow in header/footer test</dc:title>
    <dc:description>Tests vertical position combined with text flow into header/footer.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" inner-margin="0" outer-margin="0" row-spacing="1" duplex="true">
    <default-template>
      <header>
        <field allow-text-flow="true"/>
        <field>
          <string value="  ⠿"/>
        </field>
      </header>
      <header>
        <field allow-text-flow="true"/>
        <field>
          <string value="  ⠿"/>
        </field>
      </header>
      <footer>
        <field allow-text-flow="true"/>
        <field>
          <string value="  ⠿"/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block vertical-position="3" vertical-align="after">⠤⠤⠤</block>
  </sequence>
  <sequence master="body">
    <block>⠤⠤⠤</block>
    <block vertical-position="4" vertical-align="after">⠤⠤⠤</block>
  </sequence>
</obfl>

flow-in/flow-in-header-footer4-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿</row>
          <row/>
          <row>⠤⠤⠤</row>
          <row/>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠤⠤⠤⠀⠀⠀⠀⠀⠀⠿</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿</row>
          <row/>
          <row/>
          <row/>
          <row>⠤⠤⠤⠀⠀⠀⠀⠀⠀⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

XML data with text flow into header/footer test

Tests XML data combined with text flow into header/footer.

flow-in/flow-in-header-footer8-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>XML data with text flow into header/footer test</dc:title>
    <dc:description>Tests XML data combined with text flow into header/footer.</dc:description>
  </meta>
  <layout-master name="body" page-width="14" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer>
        <field allow-text-flow="true"/>
        <field>
          <string value="  ⠭"/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <xml-processor name="matrix">
    <xsl:stylesheet version="2.0">
      <xsl:template match="/">
        <xml-processor-result>
          <block margin-bottom="1">⠠⠍⠁⠞⠗⠊⠭</block>
          <xsl:copy-of select="*"/>
        </xml-processor-result>
      </xsl:template>
    </xsl:stylesheet>
  </xml-processor>
  <xml-processor name="staircase">
    <xsl:stylesheet version="2.0">
      <xsl:template match="obfl:table">
        <block>
          <xsl:apply-templates/>
        </block>
      </xsl:template>
      <xsl:template match="obfl:tr">
        <xsl:apply-templates select="obfl:td[1]"/>
      </xsl:template>
      <xsl:template match="obfl:td">
        <block margin-left="2">
          <xsl:value-of select="text()"/>
          <xsl:apply-templates select="following-sibling::*[1]"/>
        </block>
      </xsl:template>
    </xsl:stylesheet>
  </xml-processor>
  <renderer name="table-renderer">
    <rendering-scenario qualifier="count(/obfl:table)=1" processor="matrix" cost="(+ 1 $total-height)"/>
    <rendering-scenario qualifier="count(/obfl:table)=1" processor="staircase" cost="(+ 0 $total-height)"/>
  </renderer>
  <sequence master="body">
    <block>⠠⠞⠁⠃⠇⠑⠀⠼⠁</block>
    <xml-data renderer="table-renderer">
      <table>
        <tr>
          <td>⠤</td>
          <td>⠤</td>
          <td>⠤</td>
        </tr>
        <tr>
          <td>⠤</td>
          <td>⠤</td>
          <td>⠤</td>
        </tr>
        <tr>
          <td>⠤</td>
          <td>⠤</td>
          <td>⠤</td>
        </tr>
      </table>
    </xml-data>
    <block margin-top="1">⠠⠞⠁⠃⠇⠑⠀⠼⠃</block>
    <xml-data renderer="table-renderer">
      <table>
        <tr>
          <td>⠤⠤⠤⠤⠤⠤⠤</td>
          <td>⠤⠤⠤⠤⠤⠤⠤</td>
          <td>⠤⠤⠤⠤⠤⠤⠤</td>
        </tr>
        <tr>
          <td>⠤⠤⠤⠤⠤⠤⠤</td>
          <td>⠤⠤⠤⠤⠤⠤⠤</td>
          <td>⠤⠤⠤⠤⠤⠤⠤</td>
        </tr>
      </table>
    </xml-data>
  </sequence>
</obfl>

flow-in/flow-in-header-footer8-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="14" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠠⠞⠁⠃⠇⠑⠀⠼⠁</row>
          <row>⠠⠍⠁⠞⠗⠊⠭</row>
          <row/>
          <row>⠤⠀⠀⠤⠀⠀⠤</row>
          <row>⠤⠀⠀⠤⠀⠀⠤</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠭</row>
        </page>
        <page>
          <row>⠤⠀⠀⠤⠀⠀⠤</row>
          <row/>
          <row>⠠⠞⠁⠃⠇⠑⠀⠼⠃</row>
          <row>⠀⠀⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠀⠀⠤⠤⠤⠤⠤⠀⠀⠭</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠤⠤</row>
          <row>⠀⠀⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤</row>
          <row/>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠭</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Page border with text flow in header/footer test

Tests page border combined with text flow into header/footer.

flow-in/flow-in-header-footer2-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Page border with text flow in header/footer test</dc:title>
    <dc:description>Tests page border combined with text flow into header/footer.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="10" inner-margin="0" outer-margin="0" row-spacing="1" duplex="true" border-style="solid" border-width="1">
    <default-template>
      <header>
        <field allow-text-flow="true"/>
        <field>
          <string value="  ⠿"/>
        </field>
      </header>
      <header>
        <field allow-text-flow="true"/>
        <field>
          <string value="  ⠿"/>
        </field>
      </header>
      <footer>
        <field>
          <string value="⠿  "/>
        </field>
        <field allow-text-flow="true"/>
        <field>
          <string value="  ⠿"/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="main">
    <block>⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­</block>
  </sequence>
</obfl>

flow-in/flow-in-header-footer2-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="20" rows="10" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠏⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠹</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠀⠿⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠀⠿⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠿⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠀⠿⠸</row>
          <row>⠧⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠼</row>
        </page>
        <page>
          <row>⠏⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠹</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠀⠿⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠀⠿⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠿⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠀⠿⠸</row>
          <row>⠧⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠼</row>
        </page>
        <page>
          <row>⠏⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠹</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠀⠿⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠀⠿⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠀⠀⠀⠀⠀⠸</row>
          <row>⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸</row>
          <row>⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸</row>
          <row>⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸</row>
          <row>⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸</row>
          <row>⠇⠿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿⠸</row>
          <row>⠧⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠼</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Margin region with text flow into header/footer test

Tests margin region indicators combined with text flow into header/footer.

flow-in/flow-in-header-footer5-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Margin region with text flow into header/footer test</dc:title>
    <dc:description>Tests margin region indicators combined with text flow into header/footer.</dc:description>
  </meta>
  <layout-master name="body" page-width="20" page-height="6" duplex="false" inner-margin="2" outer-margin="2">
    <default-template>
      <header>
        <field allow-text-flow="true"/>
        <field>
          <string value="  ⠭"/>
        </field>
      </header>
      <footer/>
      <margin-region align="left" width="2">
        <indicators>
          <marker-indicator markers="pages" indicator="⠿"/>
          <marker-indicator markers="sections" indicator="⠿"/>
        </indicators>
      </margin-region>
      <margin-region align="right" width="2">
        <indicators>
          <marker-indicator markers="pages sections" indicator="⠿"/>
        </indicators>
      </margin-region>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>
      <marker class="sections" value="1"/>⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­
      <marker class="pages" value="1"/>⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤
    </block>
  </sequence>
</obfl>

flow-in/flow-in-header-footer5-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="20" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠀⠀⠿⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠀⠭⠀⠿</row>
          <row>⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠀⠀⠿⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠿</row>
          <row>⠀⠀⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠤⠤⠤⠤⠀⠀⠀⠀⠀⠀⠀⠭</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Volume transition with text flow into header/footer test

Tests volume transition combined with text flow into header/footer.

flow-in/flow-in-header-footer9-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Volume transition with text flow into header/footer test</dc:title>
    <dc:description>Tests volume transition combined with text flow into header/footer.</dc:description>
  </meta>
  <layout-master name="body" page-width="10" page-height="6" duplex="true">
    <default-template>
      <header>
        <field allow-text-flow="true"/>
        <field>
          <string value=" ⠭"/>
        </field>
      </header>
      <footer>
        <field allow-text-flow="true"/>
        <field>
          <string value=" ⠽"/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <volume-template sheets-in-volume-max="4">
    <pre-content/>
    <post-content/>
  </volume-template>
  <volume-transition range="page">
    <sequence-interrupted>
      <block>⠸⠤⠸</block>
    </sequence-interrupted>
    <sequence-resumed>
      <block>⠤⠸⠤</block>
    </sequence-resumed>
  </volume-transition>
  <sequence master="body">
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
  </sequence>
  <sequence master="body">
    <block>⠸⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠸⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤</block>
    <block>⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠤ ⠤⠸</block>
  </sequence>
</obfl>

flow-in/flow-in-header-footer9-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠭</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠽</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠭</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠽</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠭</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠽</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠭</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠽</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠸⠤⠀⠤⠤⠀⠤⠤⠀⠭</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠽</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠭</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠽</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠭</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠽</row>
        </page>
        <page>
          <row>⠸⠤⠀⠤⠤⠀⠤⠤⠀⠭</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠸⠤⠸⠀⠀⠀⠀⠀⠀⠽</row>
        </page>
      </section>
    </volume>
    <volume cols="10" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠸⠤⠀⠀⠀⠀⠀⠀⠭</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠽</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠭</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠽</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠭</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠽</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠭</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠽</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠭</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠽</row>
        </page>
        <page>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤⠀⠭</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠤</row>
          <row>⠤⠤⠀⠤⠤⠀⠤⠸⠀⠽</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Block border with text flow in header/footer test

Tests block border combined with text flow into header/footer.

flow-in/flow-in-header-footer3-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Block border with text flow in header/footer test</dc:title>
    <dc:description>Tests block border combined with text flow into header/footer.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="10" inner-margin="0" outer-margin="0" row-spacing="1" duplex="true">
    <default-template>
      <header>
        <field allow-text-flow="true"/>
        <field>
          <string value="  ⠿"/>
        </field>
      </header>
      <header>
        <field allow-text-flow="true"/>
        <field>
          <string value="  ⠿"/>
        </field>
      </header>
      <footer>
        <field>
          <string value="⠿  "/>
        </field>
        <field allow-text-flow="true"/>
        <field>
          <string value="  ⠿"/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="main">
    <block border-style="solid" border-width="1">⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­</block>
  </sequence>
</obfl>

flow-in/flow-in-header-footer3-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="20" rows="10" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿</row>
          <row>⠏⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠹</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠸</row>
          <row>⠇⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠀⠸</row>
          <row>⠧⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠼</row>
          <row/>
          <row/>
          <row>⠿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

flow-in/flow-in-footer-with-marker-reference-input.obfl

<obfl version="2011-1" hyphenate="true" xml:lang="sv">
  <layout-master name="main" page-width="15" page-height="10" duplex="false">
    <default-template>
      <header/>
      <footer>
        <field allow-text-flow="true"/>
        <field>
          <string value="   "/>
          <marker-reference marker="pagenum" direction="backward" scope="sequence"/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="main">
    <block>
      <marker class="pagenum" value="⠿⠿"/>
      <block>⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤</block>
      <block>⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤</block>
      <block>⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤</block>
      <block>⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤</block>
      <block>⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤</block>
      <block>⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤</block>
      <block>⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤</block>
      <block>⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤</block>
      <block>⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤</block>
      <block>⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤</block>
      <block>⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤</block>
      <block>⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤</block>
      <block>⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤</block>
      <block>⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤</block>
      <block>⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤</block>
      <block>⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤</block>
      <block>⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤</block>
      <block>⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤</block>
      <block>⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤</block>
      <block>⠤⠤⠤⠤ ⠤⠤⠤⠤ ⠤⠤⠤⠤</block>
    </block>
  </sequence>
</obfl>

flow-in/flow-in-footer-with-marker-reference-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
      <dc:date>2016-12-14</dc:date>
    </meta>
  </head>
  <body>
    <volume cols="15" rows="10" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤⠀⠀⠀⠀⠿⠿</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤⠀⠀⠀⠀⠿⠿</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠀⠤⠤⠤⠤⠀⠤⠤⠤⠤</row>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Table with text flow into header/footer test

Tests table combined with text flow into header/footer.

flow-in/flow-in-header-footer6-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Table with text flow into header/footer test</dc:title>
    <dc:description>Tests table combined with text flow into header/footer.</dc:description>
  </meta>
  <layout-master name="body" page-width="12" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer>
        <field allow-text-flow="true"/>
        <field>
          <string value="  ⠭"/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>⠤⠤</block>
    <block>⠤⠤</block>
    <block>⠤⠤</block>
    <table>
      <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
      </tr>
      <tr>
        <td>4</td>
        <td>5</td>
        <td>6</td>
      </tr>
      <tr>
        <td>7</td>
        <td>8</td>
        <td>9</td>
      </tr>
    </table>
  </sequence>
</obfl>

flow-in/flow-in-header-footer6-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="12" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
          <row>⠼⠁⠀⠀⠼⠃⠀⠀⠼⠉</row>
          <row>⠼⠙⠀⠀⠼⠑⠀⠀⠼⠋</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠭</row>
        </page>
        <page>
          <row>⠼⠛⠀⠀⠼⠓⠀⠀⠼⠊</row>
          <row/>
          <row/>
          <row/>
          <row/>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠭</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Text flow in header/footer test

Tests text flow into header/footer.

flow-in/flow-in-header-footer1-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Text flow in header/footer test</dc:title>
    <dc:description>Tests text flow into header/footer.</dc:description>
  </meta>
  <layout-master name="main" page-width="20" page-height="10" inner-margin="0" outer-margin="0" row-spacing="1" duplex="true">
    <default-template>
      <header>
        <field allow-text-flow="true"/>
        <field>
          <string value="  ⠿"/>
        </field>
      </header>
      <header>
        <field allow-text-flow="true"/>
        <field>
          <string value="  ⠿"/>
        </field>
      </header>
      <footer>
        <field>
          <string value="⠿  "/>
        </field>
        <field allow-text-flow="true"/>
        <field>
          <string value="  ⠿"/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="main">
    <block>⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­⠤­</block>
  </sequence>
</obfl>

flow-in/flow-in-header-footer1-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="20" rows="10" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠀⠿</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠀⠿</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠿⠀⠀⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠀⠿</row>
        </page>
        <page>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠀⠿</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠀⠀⠿</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠤⠤</row>
          <row/>
          <row/>
          <row>⠿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

flow-in/flow-in-header-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <layout-master name="a" duplex="false" page-width="10" page-height="5">
    <default-template>
      <header>
        <field allow-text-flow="true"/>
        <field>
          <string value="   "/>
          <current-page number-format="default"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <layout-master name="b" duplex="false" page-width="10" page-height="5">
    <default-template>
      <header>
        <field allow-text-flow="true"/>
        <field>
          <string value="  ⠿"/>
        </field>
      </header>
      <header>
        <field allow-text-flow="true"/>
        <field>
          <string value="  ⠿"/>
        </field>
      </header>
      <footer/>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>
         ⠁⠁⠁ ⠿⠿⠿ ⠠⠠⠠ ⠤⠤⠤
         ⠁⠁⠁ ⠿⠿⠿ ⠠⠠⠠ ⠤⠤⠤
         ⠁⠁⠁ ⠿⠿⠿ ⠠⠠⠠ ⠤⠤⠤
         ⠁⠁⠁ ⠿⠿⠿ ⠠⠠⠠ ⠤⠤⠤
         ⠁⠁⠁ ⠿⠿⠿ ⠠⠠⠠ ⠤⠤⠤
         ⠁⠁⠁ ⠿⠿⠿ ⠠⠠⠠ ⠤⠤⠤
      </block>
  </sequence>
  <sequence master="a">
    <block border-top-style="solid">
         ⠁⠁⠁
      </block>
  </sequence>
  <sequence master="b">
    <block border-bottom-style="solid">
         ⠁⠁⠁
      </block>
  </sequence>
</obfl>

flow-in/flow-in-header-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>???</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="5" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠁⠁⠁⠀⠀⠀⠀⠀⠼⠁</row>
          <row>⠿⠿⠿⠀⠠⠠⠠</row>
          <row>⠤⠤⠤⠀⠁⠁⠁</row>
          <row>⠿⠿⠿⠀⠠⠠⠠</row>
          <row>⠤⠤⠤⠀⠁⠁⠁</row>
        </page>
        <page>
          <row>⠿⠿⠿⠀⠀⠀⠀⠀⠼⠃</row>
          <row>⠠⠠⠠⠀⠤⠤⠤</row>
          <row>⠁⠁⠁⠀⠿⠿⠿</row>
          <row>⠠⠠⠠⠀⠤⠤⠤</row>
          <row>⠁⠁⠁⠀⠿⠿⠿</row>
        </page>
        <page>
          <row>⠠⠠⠠⠀⠀⠀⠀⠀⠼⠉</row>
          <row>⠤⠤⠤⠀⠁⠁⠁</row>
          <row>⠿⠿⠿⠀⠠⠠⠠</row>
          <row>⠤⠤⠤</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠼⠙</row>
          <row>⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉</row>
          <row>⠁⠁⠁</row>
        </page>
      </section>
      <section>
        <page>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿</row>
          <row>⠁⠁⠁</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

flow-in/flow-in-footer-input.obfl

<obfl version="2011-1" xml:lang="und" hyphenate="false">
  <layout-master name="a" duplex="false" page-width="10" page-height="5">
    <default-template>
      <header/>
      <footer>
        <field allow-text-flow="true"/>
        <field>
          <string value="   "/>
          <current-page number-format="default"/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="a">
    <block>
         ⠁⠁⠁ ⠁⠁⠁ ⠁⠁⠁ ⠁⠁⠁
      </block>
    <block border-bottom-style="solid">
         ⠁⠁⠁ ⠁⠁⠁ ⠁⠁⠁ ⠁⠁⠁
      </block>
    <block>
         ⠁⠁⠁ ⠁⠁⠁ ⠁⠁⠁ ⠁⠁⠁
         ⠁⠁⠁ ⠁⠁⠁ ⠁⠁⠁ ⠁⠁⠁
         ⠁⠁⠁ ⠁⠁⠁ ⠁⠁⠁ ⠁⠁⠁
         ⠁⠁⠁ ⠁⠁⠁ ⠁⠁⠁ ⠁⠁⠁
     </block>
  </sequence>
</obfl>

flow-in/flow-in-footer-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
    </meta>
  </head>
  <body>
    <volume cols="10" rows="5" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠁⠁⠁⠀⠁⠁⠁</row>
          <row>⠁⠁⠁⠀⠁⠁⠁</row>
          <row>⠁⠁⠁⠀⠁⠁⠁</row>
          <row/>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠼⠁</row>
        </page>
        <page>
          <row>⠁⠁⠁⠀⠁⠁⠁</row>
          <row>⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤</row>
          <row>⠁⠁⠁⠀⠁⠁⠁</row>
          <row>⠁⠁⠁⠀⠁⠁⠁</row>
          <row>⠁⠁⠁⠀⠀⠀⠀⠀⠼⠃</row>
        </page>
        <page>
          <row>⠁⠁⠁⠀⠁⠁⠁</row>
          <row>⠁⠁⠁⠀⠁⠁⠁</row>
          <row>⠁⠁⠁⠀⠁⠁⠁</row>
          <row>⠁⠁⠁⠀⠁⠁⠁</row>
          <row>⠁⠁⠁⠀⠀⠀⠀⠀⠼⠉</row>
        </page>
        <page>
          <row>⠁⠁⠁⠀⠁⠁⠁</row>
          <row/>
          <row/>
          <row/>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠼⠙</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Align/margin with text flow into header/footer test

Tests align/margin combined with text flow into header/footer.

flow-in/flow-in-header-footer7-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Align/margin with text flow into header/footer test</dc:title>
    <dc:description>Tests align/margin combined with text flow into header/footer.</dc:description>
  </meta>
  <layout-master name="body" page-width="12" page-height="6" duplex="true">
    <default-template>
      <header/>
      <footer>
        <field allow-text-flow="true"/>
        <field>
          <string value="  ⠭"/>
        </field>
      </footer>
    </default-template>
  </layout-master>
  <sequence master="body">
    <block>⠤⠤</block>
    <block>⠤⠤</block>
    <block>⠤⠤</block>
    <block>⠤⠤</block>
    <block>⠤⠤</block>
    <block align="center">⠤⠤</block>
    <block>⠤⠤</block>
    <block>⠤⠤</block>
    <block>⠤⠤</block>
    <block>⠤⠤</block>
    <block>⠤⠤</block>
    <block align="right">⠤⠤</block>
    <block>⠤⠤</block>
    <block>⠤⠤</block>
    <block>⠤⠤</block>
    <block>⠤⠤</block>
    <block>⠤⠤</block>
    <block margin-left="2">⠤⠤</block>
  </sequence>
</obfl>

flow-in/flow-in-header-footer7-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="12" rows="6" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
          <row>⠀⠀⠀⠤⠤⠀⠀⠀⠀⠀⠀⠭</row>
        </page>
        <page>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠤⠤⠀⠀⠭</row>
        </page>
        <page>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
          <row>⠤⠤</row>
          <row>⠀⠀⠤⠤⠀⠀⠀⠀⠀⠀⠀⠭</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

Page area with text flow in header/footer test

Tests page area combined with text flow into header/footer.

flow-in/flow-in-header-footer11-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>Page area with text flow in header/footer test</dc:title>
    <dc:description>Tests page area combined with text flow into header/footer.</dc:description>
  </meta>
  <layout-master name="main" page-width="40" page-height="29" inner-margin="0" outer-margin="0" row-spacing="1" duplex="true">
    <default-template>
      <footer>
        <field allow-text-flow="true"/>
        <field>
          <current-page/>
        </field>
      </footer>
    </default-template>
    <page-area align="bottom" max-height="10" collection="footnotes" fallback="endnotes">
      <before>... Footnotes 
        <leader position="100%" pattern="."/>
      </before>
      <after>
        <leader position="50%" pattern=" " align="center"/>--- END ---
      </after>
    </page-area>
  </layout-master>
  <volume-template sheets-in-volume-max="50">
    <pre-content/>
    <post-content>
      <dynamic-sequence master="main">
        <list-of-references collection="endnotes" range="volume">
          <on-collection-start>
            <block margin-top="3">Footnotes</block>
          </on-collection-start>
          <on-page-start>
            <block margin-top="1">
              <evaluate expression="(format "Page {0}" $started-page-number)"/>
            </block>
          </on-page-start>
          <on-collection-end>
            <block>End of footnotes.</block>
          </on-collection-end>
        </list-of-references>
      </dynamic-sequence>
    </post-content>
  </volume-template>
  <collection name="footnotes">
    <item id="note1" text-indent="4">1) This is a text from "THE HOUND OF THE BASKERVILLES" by A. Conan Doyle with meaningless footnotes added, to demonstrate this feature.</item>
    <item id="note2" text-indent="4">2) This note belongs to the second paragraph.</item>
    <item id="note3" text-indent="4">3) This is the third note.</item>
    <item id="note4" text-indent="4">4) This note is at the end of a long paragraph.</item>
    <item id="note5" text-indent="4">5) This note is further down the text, but the text is still fairly short.</item>
    <item id="note6" text-indent="4">6) This note is on the last page.</item>
    <item id="note7" text-indent="4">* This is a note that appears several times.</item>
  </collection>
  <sequence master="main">
    <block>Mr. Sherlock Holmes, who was usually very late in the mornings, save upon those not infrequent occasions when he was up all night, was seated at the breakfast table. I stood upon the hearth-rug and picked up the stick which our visitor had left behind him the night before. It was a fine, thick piece of wood, bulbous-headed, of the sort which is known as a "Penang lawyer." Just under the head was a broad silver band nearly an inch across. "To James Mortimer, M.R.C.S., from his friends of the C.C.H.," was engraved upon it, with the date "1884." It was just such a stick as the old-fashioned family practitioner used to carry—dignified, solid, and reassuring.
      <style name="sup">1</style>
      <anchor item="note1"/>
    </block>
    <block>"Well, Watson, what do you make of it?"
      <style name="sup">2</style>
      <anchor item="note2"/>
    </block>
    <block>Holmes was sitting with his back to me, and I had given him no sign of my occupation.
      <style name="sup">3</style>
      <anchor item="note3"/>
    </block>
    <block>"How did you know what I was doing? I believe you have eyes in the back of your head."</block>
    <block>"I have, at least, a well-polished, silver-plated coffee-pot in front of me," said he. "But, tell me, Watson, what do you make of our visitor's stick? Since we have been so unfortunate as to miss him and have no notion of his errand, this accidental souvenir becomes of importance. Let me hear you reconstruct the man by an examination of it."</block>
    <block>"I think," said I, following as far as I could the methods of my companion, "that Dr. Mortimer is a successful, elderly medical man, well-esteemed since those who know him give him this mark of their appreciation."
      <style name="sup">4</style>
      <anchor item="note4"/>
    </block>
    <block>"Good!" said Holmes. "Excellent!"</block>
    <block>"I think also that the probability is in favour of his being a country practitioner who does a great deal of his visiting on foot."</block>
    <block>"Why so?"</block>
    <block>"Because this stick, though originally a very handsome one has been so knocked about that I can hardly imagine a town practitioner carrying it. The thick-iron ferrule is worn down, so it is evident that he has done a great amount of walking with it."</block>
    <block>"Perfectly sound!" said Holmes.
      <style name="sup">*</style>
      <anchor item="note7"/>
    </block>
    <block>"And then again, there is the 'friends of the C.C.H.' I should guess that to be the Something Hunt, the local hunt to whose members he has possibly given some surgical assistance, and which has made him a small presentation in return."</block>
    <block>"Really, Watson, you excel yourself," said Holmes, pushing back his chair and lighting a cigarette. "I am bound to say that in all the accounts which you have been so good as to give of my own small achievements you have habitually underrated your own abilities. It may be that you are not yourself luminous, but you are a conductor of light. Some people without possessing genius have a remarkable power of stimulating it. I confess, my dear fellow, that I am very much in your debt."</block>
    <block>He had never said as much before, and I must admit that his words gave me keen pleasure, for I had often been piqued by his indifference to my admiration and to the attempts which I had made to give publicity to his methods.
      <style name="sup">5</style>
      <anchor item="note5"/> I was proud, too, to think that I had so far mastered his system as to apply it in a way which earned his approval. He now took the stick from my hands and examined it for a few minutes with his naked eyes. Then with an expression of interest he laid down his cigarette, and carrying the cane to the window, he looked over it again with a convex lens.
    </block>
    <block>"Interesting, though elementary," said he as he returned to his favourite corner of the settee. "There are certainly one or two indications upon the stick. It gives us the basis for several deductions."</block>
    <block>"Has anything escaped me?" I asked with some self-importance. "I trust that there is nothing of consequence which I have overlooked?"</block>
    <block>"I am afraid, my dear Watson, that most of your conclusions were erroneous. When I said that you stimulated me I meant, to be frank, that in noting your fallacies I was occasionally guided towards the truth. Not that you are entirely wrong in this instance. The man is certainly a country practitioner. And he walks a good deal."</block>
    <block>"Then I was right."</block>
    <block>"To that extent."
      <style name="sup">*</style>
      <anchor item="note7"/>
    </block>
    <block>"But that was all."
      <style name="sup">*</style>
      <anchor item="note7"/>
    </block>
    <block>"No, no, my dear Watson, not all—by no means all. I would suggest, for example, that a presentation to a doctor is more likely to come from a hospital than from a hunt, and that when the initials 'C.C.' are placed before that hospital the words 'Charing Cross' very naturally suggest themselves."</block>
    <block>"You may be right."
      <style name="sup">6</style>
      <anchor item="note6"/>
    </block>
  </sequence>
</obfl>

flow-in/flow-in-header-footer11-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="40" rows="29" rowgap="0" duplex="true">
      <section>
        <page>
          <row>⠠⠍⠗⠄⠀⠠⠎⠓⠑⠗⠇⠕⠉⠅⠀⠠⠓⠕⠇⠍⠑⠎⠂⠀⠺⠓⠕⠀⠺⠁⠎⠀⠥⠎⠥⠁⠇⠇⠽</row>
          <row>⠧⠑⠗⠽⠀⠇⠁⠞⠑⠀⠊⠝⠀⠞⠓⠑⠀⠍⠕⠗⠝⠊⠝⠛⠎⠂⠀⠎⠁⠧⠑⠀⠥⠏⠕⠝</row>
          <row>⠞⠓⠕⠎⠑⠀⠝⠕⠞⠀⠊⠝⠋⠗⠑⠟⠥⠑⠝⠞⠀⠕⠉⠉⠁⠎⠊⠕⠝⠎⠀⠺⠓⠑⠝⠀⠓⠑</row>
          <row>⠺⠁⠎⠀⠥⠏⠀⠁⠇⠇⠀⠝⠊⠛⠓⠞⠂⠀⠺⠁⠎⠀⠎⠑⠁⠞⠑⠙⠀⠁⠞⠀⠞⠓⠑</row>
          <row>⠃⠗⠑⠁⠅⠋⠁⠎⠞⠀⠞⠁⠃⠇⠑⠄⠀⠠⠊⠀⠎⠞⠕⠕⠙⠀⠥⠏⠕⠝⠀⠞⠓⠑</row>
          <row>⠓⠑⠁⠗⠞⠓⠤⠗⠥⠛⠀⠁⠝⠙⠀⠏⠊⠉⠅⠑⠙⠀⠥⠏⠀⠞⠓⠑⠀⠎⠞⠊⠉⠅⠀⠺⠓⠊⠉⠓</row>
          <row>⠕⠥⠗⠀⠧⠊⠎⠊⠞⠕⠗⠀⠓⠁⠙⠀⠇⠑⠋⠞⠀⠃⠑⠓⠊⠝⠙⠀⠓⠊⠍⠀⠞⠓⠑</row>
          <row>⠝⠊⠛⠓⠞⠀⠃⠑⠋⠕⠗⠑⠄⠀⠠⠊⠞⠀⠺⠁⠎⠀⠁⠀⠋⠊⠝⠑⠂⠀⠞⠓⠊⠉⠅</row>
          <row>⠏⠊⠑⠉⠑⠀⠕⠋⠀⠺⠕⠕⠙⠂⠀⠃⠥⠇⠃⠕⠥⠎⠤⠓⠑⠁⠙⠑⠙⠂⠀⠕⠋⠀⠞⠓⠑</row>
          <row>⠎⠕⠗⠞⠀⠺⠓⠊⠉⠓⠀⠊⠎⠀⠅⠝⠕⠺⠝⠀⠁⠎⠀⠁⠀⠰⠠⠏⠑⠝⠁⠝⠛⠀⠇⠁⠺⠤</row>
          <row>⠽⠑⠗⠄⠰⠀⠠⠚⠥⠎⠞⠀⠥⠝⠙⠑⠗⠀⠞⠓⠑⠀⠓⠑⠁⠙⠀⠺⠁⠎⠀⠁⠀⠃⠗⠕⠁⠙</row>
          <row>⠎⠊⠇⠧⠑⠗⠀⠃⠁⠝⠙⠀⠝⠑⠁⠗⠇⠽⠀⠁⠝⠀⠊⠝⠉⠓⠀⠁⠉⠗⠕⠎⠎⠄⠀⠰⠠⠞⠕</row>
          <row>⠠⠚⠁⠍⠑⠎⠀⠠⠍⠕⠗⠞⠊⠍⠑⠗⠂⠀⠠⠍⠄⠠⠗⠄⠠⠉⠄⠠⠎⠄⠂⠀⠋⠗⠕⠍⠀⠓⠊⠎</row>
          <row>⠋⠗⠊⠑⠝⠙⠎⠀⠕⠋⠀⠞⠓⠑⠀⠠⠉⠄⠠⠉⠄⠠⠓⠄⠂⠰⠀⠺⠁⠎⠀⠑⠝⠛⠗⠁⠧⠑⠙</row>
          <row>⠥⠏⠕⠝⠀⠊⠞⠂⠀⠺⠊⠞⠓⠀⠞⠓⠑⠀⠙⠁⠞⠑⠀⠰⠼⠁⠓⠓⠙⠄⠰⠀⠠⠊⠞⠀⠺⠁⠎</row>
          <row>⠚⠥⠎⠞⠀⠎⠥⠉⠓⠀⠁⠀⠎⠞⠊⠉⠅⠀⠁⠎⠀⠞⠓⠑⠀⠕⠇⠙⠤⠋⠁⠎⠓⠊⠕⠝⠑⠙</row>
          <row>⠋⠁⠍⠊⠇⠽⠀⠏⠗⠁⠉⠞⠊⠞⠊⠕⠝⠑⠗⠀⠥⠎⠑⠙⠀⠞⠕⠀⠉⠁⠗⠗⠽⠤⠤⠙⠊⠛⠤</row>
          <row>⠝⠊⠋⠊⠑⠙⠂⠀⠎⠕⠇⠊⠙⠂⠀⠁⠝⠙⠀⠗⠑⠁⠎⠎⠥⠗⠊⠝⠛⠄⠬⠼⠁</row>
          <row>⠰⠠⠺⠑⠇⠇⠂⠀⠠⠺⠁⠞⠎⠕⠝⠂⠀⠺⠓⠁⠞⠀⠙⠕⠀⠽⠕⠥⠀⠍⠁⠅⠑⠀⠕⠋</row>
          <row>⠊⠞⠢⠰⠬⠼⠃</row>
          <row>⠄⠄⠄⠀⠠⠋⠕⠕⠞⠝⠕⠞⠑⠎⠀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄</row>
          <row>⠼⠁⠴⠀⠠⠞⠓⠊⠎⠀⠊⠎⠀⠁⠀⠞⠑⠭⠞⠀⠋⠗⠕⠍⠀⠰⠠⠠⠠⠞⠓⠑⠀⠓⠕⠥⠝⠙</row>
          <row>⠀⠀⠀⠀⠕⠋⠀⠞⠓⠑⠀⠃⠁⠎⠅⠑⠗⠧⠊⠇⠇⠑⠎⠱⠰⠀⠃⠽⠀⠠⠁⠄⠀⠠⠉⠕⠝⠁⠝</row>
          <row>⠀⠀⠀⠀⠠⠙⠕⠽⠇⠑⠀⠺⠊⠞⠓⠀⠍⠑⠁⠝⠊⠝⠛⠇⠑⠎⠎⠀⠋⠕⠕⠞⠝⠕⠞⠑⠎</row>
          <row>⠀⠀⠀⠀⠁⠙⠙⠑⠙⠂⠀⠞⠕⠀⠙⠑⠍⠕⠝⠎⠞⠗⠁⠞⠑⠀⠞⠓⠊⠎⠀⠋⠑⠁⠞⠥⠗⠑⠄</row>
          <row>⠼⠃⠴⠀⠠⠞⠓⠊⠎⠀⠝⠕⠞⠑⠀⠃⠑⠇⠕⠝⠛⠎⠀⠞⠕⠀⠞⠓⠑⠀⠎⠑⠉⠕⠝⠙</row>
          <row>⠀⠀⠀⠀⠏⠁⠗⠁⠛⠗⠁⠏⠓⠄</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠤⠤⠤⠀⠠⠠⠑⠝⠙⠀⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠁</row>
        </page>
        <page>
          <row>⠠⠓⠕⠇⠍⠑⠎⠀⠺⠁⠎⠀⠎⠊⠞⠞⠊⠝⠛⠀⠺⠊⠞⠓⠀⠓⠊⠎⠀⠃⠁⠉⠅⠀⠞⠕⠀⠍⠑⠂</row>
          <row>⠁⠝⠙⠀⠠⠊⠀⠓⠁⠙⠀⠛⠊⠧⠑⠝⠀⠓⠊⠍⠀⠝⠕⠀⠎⠊⠛⠝⠀⠕⠋⠀⠍⠽⠀⠕⠉⠉⠥⠤</row>
          <row>⠏⠁⠞⠊⠕⠝⠄⠬⠼⠉</row>
          <row>⠰⠠⠓⠕⠺⠀⠙⠊⠙⠀⠽⠕⠥⠀⠅⠝⠕⠺⠀⠺⠓⠁⠞⠀⠠⠊⠀⠺⠁⠎⠀⠙⠕⠊⠝⠛⠢⠀⠠⠊</row>
          <row>⠃⠑⠇⠊⠑⠧⠑⠀⠽⠕⠥⠀⠓⠁⠧⠑⠀⠑⠽⠑⠎⠀⠊⠝⠀⠞⠓⠑⠀⠃⠁⠉⠅⠀⠕⠋</row>
          <row>⠽⠕⠥⠗⠀⠓⠑⠁⠙⠄⠰</row>
          <row>⠰⠠⠊⠀⠓⠁⠧⠑⠂⠀⠁⠞⠀⠇⠑⠁⠎⠞⠂⠀⠁⠀⠺⠑⠇⠇⠤⠏⠕⠇⠊⠎⠓⠑⠙⠂</row>
          <row>⠎⠊⠇⠧⠑⠗⠤⠏⠇⠁⠞⠑⠙⠀⠉⠕⠋⠋⠑⠑⠤⠏⠕⠞⠀⠊⠝⠀⠋⠗⠕⠝⠞⠀⠕⠋</row>
          <row>⠍⠑⠂⠰⠀⠎⠁⠊⠙⠀⠓⠑⠄⠀⠰⠠⠃⠥⠞⠂⠀⠞⠑⠇⠇⠀⠍⠑⠂⠀⠠⠺⠁⠞⠎⠕⠝⠂</row>
          <row>⠺⠓⠁⠞⠀⠙⠕⠀⠽⠕⠥⠀⠍⠁⠅⠑⠀⠕⠋⠀⠕⠥⠗⠀⠧⠊⠎⠊⠞⠕⠗⠐⠎⠀⠎⠞⠊⠉⠅⠢</row>
          <row>⠠⠎⠊⠝⠉⠑⠀⠺⠑⠀⠓⠁⠧⠑⠀⠃⠑⠑⠝⠀⠎⠕⠀⠥⠝⠋⠕⠗⠞⠥⠝⠁⠞⠑⠀⠁⠎⠀⠞⠕</row>
          <row>⠍⠊⠎⠎⠀⠓⠊⠍⠀⠁⠝⠙⠀⠓⠁⠧⠑⠀⠝⠕⠀⠝⠕⠞⠊⠕⠝⠀⠕⠋⠀⠓⠊⠎⠀⠑⠗⠤</row>
          <row>⠗⠁⠝⠙⠂⠀⠞⠓⠊⠎⠀⠁⠉⠉⠊⠙⠑⠝⠞⠁⠇⠀⠎⠕⠥⠧⠑⠝⠊⠗⠀⠃⠑⠉⠕⠍⠑⠎</row>
          <row>⠕⠋⠀⠊⠍⠏⠕⠗⠞⠁⠝⠉⠑⠄⠀⠠⠇⠑⠞⠀⠍⠑⠀⠓⠑⠁⠗⠀⠽⠕⠥⠀⠗⠑⠉⠕⠝⠤</row>
          <row>⠎⠞⠗⠥⠉⠞⠀⠞⠓⠑⠀⠍⠁⠝⠀⠃⠽⠀⠁⠝⠀⠑⠭⠁⠍⠊⠝⠁⠞⠊⠕⠝⠀⠕⠋⠀⠊⠞⠄⠰</row>
          <row>⠰⠠⠊⠀⠞⠓⠊⠝⠅⠂⠰⠀⠎⠁⠊⠙⠀⠠⠊⠂⠀⠋⠕⠇⠇⠕⠺⠊⠝⠛⠀⠁⠎⠀⠋⠁⠗⠀⠁⠎</row>
          <row>⠠⠊⠀⠉⠕⠥⠇⠙⠀⠞⠓⠑⠀⠍⠑⠞⠓⠕⠙⠎⠀⠕⠋⠀⠍⠽⠀⠉⠕⠍⠏⠁⠝⠊⠕⠝⠂</row>
          <row>⠰⠞⠓⠁⠞⠀⠠⠙⠗⠄⠀⠠⠍⠕⠗⠞⠊⠍⠑⠗⠀⠊⠎⠀⠁⠀⠎⠥⠉⠉⠑⠎⠎⠋⠥⠇⠂</row>
          <row>⠑⠇⠙⠑⠗⠇⠽⠀⠍⠑⠙⠊⠉⠁⠇⠀⠍⠁⠝⠂⠀⠺⠑⠇⠇⠤⠑⠎⠞⠑⠑⠍⠑⠙⠀⠎⠊⠝⠉⠑</row>
          <row>⠞⠓⠕⠎⠑⠀⠺⠓⠕⠀⠅⠝⠕⠺⠀⠓⠊⠍⠀⠛⠊⠧⠑⠀⠓⠊⠍⠀⠞⠓⠊⠎⠀⠍⠁⠗⠅⠀⠕⠋</row>
          <row>⠞⠓⠑⠊⠗⠀⠁⠏⠏⠗⠑⠉⠊⠁⠞⠊⠕⠝⠄⠰⠬⠼⠙</row>
          <row>⠰⠠⠛⠕⠕⠙⠖⠰⠀⠎⠁⠊⠙⠀⠠⠓⠕⠇⠍⠑⠎⠄⠀⠰⠠⠑⠭⠉⠑⠇⠇⠑⠝⠞⠖⠰</row>
          <row>⠰⠠⠊⠀⠞⠓⠊⠝⠅⠀⠁⠇⠎⠕⠀⠞⠓⠁⠞⠀⠞⠓⠑⠀⠏⠗⠕⠃⠁⠃⠊⠇⠊⠞⠽⠀⠊⠎</row>
          <row>⠄⠄⠄⠀⠠⠋⠕⠕⠞⠝⠕⠞⠑⠎⠀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄</row>
          <row>⠼⠉⠴⠀⠠⠞⠓⠊⠎⠀⠊⠎⠀⠞⠓⠑⠀⠞⠓⠊⠗⠙⠀⠝⠕⠞⠑⠄</row>
          <row>⠼⠙⠴⠀⠠⠞⠓⠊⠎⠀⠝⠕⠞⠑⠀⠊⠎⠀⠁⠞⠀⠞⠓⠑⠀⠑⠝⠙⠀⠕⠋⠀⠁⠀⠇⠕⠝⠛</row>
          <row>⠀⠀⠀⠀⠏⠁⠗⠁⠛⠗⠁⠏⠓⠄</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠤⠤⠤⠀⠠⠠⠑⠝⠙⠀⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠃</row>
        </page>
        <page>
          <row>⠊⠝⠀⠋⠁⠧⠕⠥⠗⠀⠕⠋⠀⠓⠊⠎⠀⠃⠑⠊⠝⠛⠀⠁⠀⠉⠕⠥⠝⠞⠗⠽⠀⠏⠗⠁⠉⠞⠊⠤</row>
          <row>⠞⠊⠕⠝⠑⠗⠀⠺⠓⠕⠀⠙⠕⠑⠎⠀⠁⠀⠛⠗⠑⠁⠞⠀⠙⠑⠁⠇⠀⠕⠋⠀⠓⠊⠎⠀⠧⠊⠎⠤</row>
          <row>⠊⠞⠊⠝⠛⠀⠕⠝⠀⠋⠕⠕⠞⠄⠰</row>
          <row>⠰⠠⠺⠓⠽⠀⠎⠕⠢⠰</row>
          <row>⠰⠠⠃⠑⠉⠁⠥⠎⠑⠀⠞⠓⠊⠎⠀⠎⠞⠊⠉⠅⠂⠀⠞⠓⠕⠥⠛⠓⠀⠕⠗⠊⠛⠊⠝⠁⠇⠇⠽</row>
          <row>⠁⠀⠧⠑⠗⠽⠀⠓⠁⠝⠙⠎⠕⠍⠑⠀⠕⠝⠑⠀⠓⠁⠎⠀⠃⠑⠑⠝⠀⠎⠕⠀⠅⠝⠕⠉⠅⠑⠙</row>
          <row>⠁⠃⠕⠥⠞⠀⠞⠓⠁⠞⠀⠠⠊⠀⠉⠁⠝⠀⠓⠁⠗⠙⠇⠽⠀⠊⠍⠁⠛⠊⠝⠑⠀⠁⠀⠞⠕⠺⠝</row>
          <row>⠏⠗⠁⠉⠞⠊⠞⠊⠕⠝⠑⠗⠀⠉⠁⠗⠗⠽⠊⠝⠛⠀⠊⠞⠄⠀⠠⠞⠓⠑⠀⠞⠓⠊⠉⠅⠤</row>
          <row>⠊⠗⠕⠝⠀⠋⠑⠗⠗⠥⠇⠑⠀⠊⠎⠀⠺⠕⠗⠝⠀⠙⠕⠺⠝⠂⠀⠎⠕⠀⠊⠞⠀⠊⠎</row>
          <row>⠑⠧⠊⠙⠑⠝⠞⠀⠞⠓⠁⠞⠀⠓⠑⠀⠓⠁⠎⠀⠙⠕⠝⠑⠀⠁⠀⠛⠗⠑⠁⠞⠀⠁⠍⠕⠥⠝⠞</row>
          <row>⠕⠋⠀⠺⠁⠇⠅⠊⠝⠛⠀⠺⠊⠞⠓⠀⠊⠞⠄⠰</row>
          <row>⠰⠠⠏⠑⠗⠋⠑⠉⠞⠇⠽⠀⠎⠕⠥⠝⠙⠖⠰⠀⠎⠁⠊⠙⠀⠠⠓⠕⠇⠍⠑⠎⠄⠔</row>
          <row>⠰⠠⠁⠝⠙⠀⠞⠓⠑⠝⠀⠁⠛⠁⠊⠝⠂⠀⠞⠓⠑⠗⠑⠀⠊⠎⠀⠞⠓⠑⠀⠐⠋⠗⠊⠑⠝⠙⠎</row>
          <row>⠕⠋⠀⠞⠓⠑⠀⠠⠉⠄⠠⠉⠄⠠⠓⠄⠐⠀⠠⠊⠀⠎⠓⠕⠥⠇⠙⠀⠛⠥⠑⠎⠎⠀⠞⠓⠁⠞</row>
          <row>⠞⠕⠀⠃⠑⠀⠞⠓⠑⠀⠠⠎⠕⠍⠑⠞⠓⠊⠝⠛⠀⠠⠓⠥⠝⠞⠂⠀⠞⠓⠑⠀⠇⠕⠉⠁⠇</row>
          <row>⠓⠥⠝⠞⠀⠞⠕⠀⠺⠓⠕⠎⠑⠀⠍⠑⠍⠃⠑⠗⠎⠀⠓⠑⠀⠓⠁⠎⠀⠏⠕⠎⠎⠊⠃⠇⠽</row>
          <row>⠛⠊⠧⠑⠝⠀⠎⠕⠍⠑⠀⠎⠥⠗⠛⠊⠉⠁⠇⠀⠁⠎⠎⠊⠎⠞⠁⠝⠉⠑⠂⠀⠁⠝⠙</row>
          <row>⠺⠓⠊⠉⠓⠀⠓⠁⠎⠀⠍⠁⠙⠑⠀⠓⠊⠍⠀⠁⠀⠎⠍⠁⠇⠇⠀⠏⠗⠑⠎⠑⠝⠞⠁⠞⠊⠕⠝</row>
          <row>⠊⠝⠀⠗⠑⠞⠥⠗⠝⠄⠰</row>
          <row>⠰⠠⠗⠑⠁⠇⠇⠽⠂⠀⠠⠺⠁⠞⠎⠕⠝⠂⠀⠽⠕⠥⠀⠑⠭⠉⠑⠇⠀⠽⠕⠥⠗⠎⠑⠇⠋⠂⠰</row>
          <row>⠎⠁⠊⠙⠀⠠⠓⠕⠇⠍⠑⠎⠂⠀⠏⠥⠎⠓⠊⠝⠛⠀⠃⠁⠉⠅⠀⠓⠊⠎⠀⠉⠓⠁⠊⠗⠀⠁⠝⠙</row>
          <row>⠇⠊⠛⠓⠞⠊⠝⠛⠀⠁⠀⠉⠊⠛⠁⠗⠑⠞⠞⠑⠄⠀⠰⠠⠊⠀⠁⠍⠀⠃⠕⠥⠝⠙⠀⠞⠕</row>
          <row>⠎⠁⠽⠀⠞⠓⠁⠞⠀⠊⠝⠀⠁⠇⠇⠀⠞⠓⠑⠀⠁⠉⠉⠕⠥⠝⠞⠎⠀⠺⠓⠊⠉⠓⠀⠽⠕⠥</row>
          <row>⠓⠁⠧⠑⠀⠃⠑⠑⠝⠀⠎⠕⠀⠛⠕⠕⠙⠀⠁⠎⠀⠞⠕⠀⠛⠊⠧⠑⠀⠕⠋⠀⠍⠽⠀⠕⠺⠝</row>
          <row>⠄⠄⠄⠀⠠⠋⠕⠕⠞⠝⠕⠞⠑⠎⠀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄</row>
          <row>⠔⠀⠠⠞⠓⠊⠎⠀⠊⠎⠀⠁⠀⠝⠕⠞⠑⠀⠞⠓⠁⠞⠀⠁⠏⠏⠑⠁⠗⠎⠀⠎⠑⠧⠑⠗⠁⠇</row>
          <row>⠀⠀⠀⠀⠞⠊⠍⠑⠎⠄</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠤⠤⠤⠀⠠⠠⠑⠝⠙⠀⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠉</row>
        </page>
        <page>
          <row>⠎⠍⠁⠇⠇⠀⠁⠉⠓⠊⠑⠧⠑⠍⠑⠝⠞⠎⠀⠽⠕⠥⠀⠓⠁⠧⠑⠀⠓⠁⠃⠊⠞⠥⠁⠇⠇⠽</row>
          <row>⠥⠝⠙⠑⠗⠗⠁⠞⠑⠙⠀⠽⠕⠥⠗⠀⠕⠺⠝⠀⠁⠃⠊⠇⠊⠞⠊⠑⠎⠄⠀⠠⠊⠞⠀⠍⠁⠽</row>
          <row>⠃⠑⠀⠞⠓⠁⠞⠀⠽⠕⠥⠀⠁⠗⠑⠀⠝⠕⠞⠀⠽⠕⠥⠗⠎⠑⠇⠋⠀⠇⠥⠍⠊⠝⠕⠥⠎⠂</row>
          <row>⠃⠥⠞⠀⠽⠕⠥⠀⠁⠗⠑⠀⠁⠀⠉⠕⠝⠙⠥⠉⠞⠕⠗⠀⠕⠋⠀⠇⠊⠛⠓⠞⠄⠀⠠⠎⠕⠍⠑</row>
          <row>⠏⠑⠕⠏⠇⠑⠀⠺⠊⠞⠓⠕⠥⠞⠀⠏⠕⠎⠎⠑⠎⠎⠊⠝⠛⠀⠛⠑⠝⠊⠥⠎⠀⠓⠁⠧⠑⠀⠁</row>
          <row>⠗⠑⠍⠁⠗⠅⠁⠃⠇⠑⠀⠏⠕⠺⠑⠗⠀⠕⠋⠀⠎⠞⠊⠍⠥⠇⠁⠞⠊⠝⠛⠀⠊⠞⠄⠀⠠⠊</row>
          <row>⠉⠕⠝⠋⠑⠎⠎⠂⠀⠍⠽⠀⠙⠑⠁⠗⠀⠋⠑⠇⠇⠕⠺⠂⠀⠞⠓⠁⠞⠀⠠⠊⠀⠁⠍⠀⠧⠑⠗⠽</row>
          <row>⠍⠥⠉⠓⠀⠊⠝⠀⠽⠕⠥⠗⠀⠙⠑⠃⠞⠄⠰</row>
          <row>⠠⠓⠑⠀⠓⠁⠙⠀⠝⠑⠧⠑⠗⠀⠎⠁⠊⠙⠀⠁⠎⠀⠍⠥⠉⠓⠀⠃⠑⠋⠕⠗⠑⠂⠀⠁⠝⠙</row>
          <row>⠠⠊⠀⠍⠥⠎⠞⠀⠁⠙⠍⠊⠞⠀⠞⠓⠁⠞⠀⠓⠊⠎⠀⠺⠕⠗⠙⠎⠀⠛⠁⠧⠑⠀⠍⠑</row>
          <row>⠅⠑⠑⠝⠀⠏⠇⠑⠁⠎⠥⠗⠑⠂⠀⠋⠕⠗⠀⠠⠊⠀⠓⠁⠙⠀⠕⠋⠞⠑⠝⠀⠃⠑⠑⠝</row>
          <row>⠏⠊⠟⠥⠑⠙⠀⠃⠽⠀⠓⠊⠎⠀⠊⠝⠙⠊⠋⠋⠑⠗⠑⠝⠉⠑⠀⠞⠕⠀⠍⠽⠀⠁⠙⠍⠊⠗⠁⠤</row>
          <row>⠞⠊⠕⠝⠀⠁⠝⠙⠀⠞⠕⠀⠞⠓⠑⠀⠁⠞⠞⠑⠍⠏⠞⠎⠀⠺⠓⠊⠉⠓⠀⠠⠊⠀⠓⠁⠙</row>
          <row>⠍⠁⠙⠑⠀⠞⠕⠀⠛⠊⠧⠑⠀⠏⠥⠃⠇⠊⠉⠊⠞⠽⠀⠞⠕⠀⠓⠊⠎⠀⠍⠑⠞⠓⠤</row>
          <row>⠕⠙⠎⠄⠬⠼⠑⠀⠠⠊⠀⠺⠁⠎⠀⠏⠗⠕⠥⠙⠂⠀⠞⠕⠕⠂⠀⠞⠕⠀⠞⠓⠊⠝⠅⠀⠞⠓⠁⠞</row>
          <row>⠠⠊⠀⠓⠁⠙⠀⠎⠕⠀⠋⠁⠗⠀⠍⠁⠎⠞⠑⠗⠑⠙⠀⠓⠊⠎⠀⠎⠽⠎⠞⠑⠍⠀⠁⠎⠀⠞⠕</row>
          <row>⠁⠏⠏⠇⠽⠀⠊⠞⠀⠊⠝⠀⠁⠀⠺⠁⠽⠀⠺⠓⠊⠉⠓⠀⠑⠁⠗⠝⠑⠙⠀⠓⠊⠎⠀⠁⠏⠤</row>
          <row>⠏⠗⠕⠧⠁⠇⠄⠀⠠⠓⠑⠀⠝⠕⠺⠀⠞⠕⠕⠅⠀⠞⠓⠑⠀⠎⠞⠊⠉⠅⠀⠋⠗⠕⠍⠀⠍⠽</row>
          <row>⠓⠁⠝⠙⠎⠀⠁⠝⠙⠀⠑⠭⠁⠍⠊⠝⠑⠙⠀⠊⠞⠀⠋⠕⠗⠀⠁⠀⠋⠑⠺⠀⠍⠊⠝⠥⠞⠑⠎</row>
          <row>⠺⠊⠞⠓⠀⠓⠊⠎⠀⠝⠁⠅⠑⠙⠀⠑⠽⠑⠎⠄⠀⠠⠞⠓⠑⠝⠀⠺⠊⠞⠓⠀⠁⠝⠀⠑⠭⠤</row>
          <row>⠏⠗⠑⠎⠎⠊⠕⠝⠀⠕⠋⠀⠊⠝⠞⠑⠗⠑⠎⠞⠀⠓⠑⠀⠇⠁⠊⠙⠀⠙⠕⠺⠝⠀⠓⠊⠎</row>
          <row>⠉⠊⠛⠁⠗⠑⠞⠞⠑⠂⠀⠁⠝⠙⠀⠉⠁⠗⠗⠽⠊⠝⠛⠀⠞⠓⠑⠀⠉⠁⠝⠑⠀⠞⠕⠀⠞⠓⠑</row>
          <row>⠺⠊⠝⠙⠕⠺⠂⠀⠓⠑⠀⠇⠕⠕⠅⠑⠙⠀⠕⠧⠑⠗⠀⠊⠞⠀⠁⠛⠁⠊⠝⠀⠺⠊⠞⠓⠀⠁</row>
          <row>⠉⠕⠝⠧⠑⠭⠀⠇⠑⠝⠎⠄</row>
          <row>⠄⠄⠄⠀⠠⠋⠕⠕⠞⠝⠕⠞⠑⠎⠀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄</row>
          <row>⠼⠑⠴⠀⠠⠞⠓⠊⠎⠀⠝⠕⠞⠑⠀⠊⠎⠀⠋⠥⠗⠞⠓⠑⠗⠀⠙⠕⠺⠝⠀⠞⠓⠑⠀⠞⠑⠭⠞⠂</row>
          <row>⠀⠀⠀⠀⠃⠥⠞⠀⠞⠓⠑⠀⠞⠑⠭⠞⠀⠊⠎⠀⠎⠞⠊⠇⠇⠀⠋⠁⠊⠗⠇⠽⠀⠎⠓⠕⠗⠞⠄</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠤⠤⠤⠀⠠⠠⠑⠝⠙⠀⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠙</row>
        </page>
        <page>
          <row>⠰⠠⠊⠝⠞⠑⠗⠑⠎⠞⠊⠝⠛⠂⠀⠞⠓⠕⠥⠛⠓⠀⠑⠇⠑⠍⠑⠝⠞⠁⠗⠽⠂⠰⠀⠎⠁⠊⠙</row>
          <row>⠓⠑⠀⠁⠎⠀⠓⠑⠀⠗⠑⠞⠥⠗⠝⠑⠙⠀⠞⠕⠀⠓⠊⠎⠀⠋⠁⠧⠕⠥⠗⠊⠞⠑</row>
          <row>⠉⠕⠗⠝⠑⠗⠀⠕⠋⠀⠞⠓⠑⠀⠎⠑⠞⠞⠑⠑⠄⠀⠰⠠⠞⠓⠑⠗⠑⠀⠁⠗⠑⠀⠉⠑⠗⠤</row>
          <row>⠞⠁⠊⠝⠇⠽⠀⠕⠝⠑⠀⠕⠗⠀⠞⠺⠕⠀⠊⠝⠙⠊⠉⠁⠞⠊⠕⠝⠎⠀⠥⠏⠕⠝⠀⠞⠓⠑</row>
          <row>⠎⠞⠊⠉⠅⠄⠀⠠⠊⠞⠀⠛⠊⠧⠑⠎⠀⠥⠎⠀⠞⠓⠑⠀⠃⠁⠎⠊⠎⠀⠋⠕⠗⠀⠎⠑⠧⠤</row>
          <row>⠑⠗⠁⠇⠀⠙⠑⠙⠥⠉⠞⠊⠕⠝⠎⠄⠰</row>
          <row>⠰⠠⠓⠁⠎⠀⠁⠝⠽⠞⠓⠊⠝⠛⠀⠑⠎⠉⠁⠏⠑⠙⠀⠍⠑⠢⠰⠀⠠⠊⠀⠁⠎⠅⠑⠙</row>
          <row>⠺⠊⠞⠓⠀⠎⠕⠍⠑⠀⠎⠑⠇⠋⠤⠊⠍⠏⠕⠗⠞⠁⠝⠉⠑⠄⠀⠰⠠⠊⠀⠞⠗⠥⠎⠞</row>
          <row>⠞⠓⠁⠞⠀⠞⠓⠑⠗⠑⠀⠊⠎⠀⠝⠕⠞⠓⠊⠝⠛⠀⠕⠋⠀⠉⠕⠝⠎⠑⠟⠥⠑⠝⠉⠑</row>
          <row>⠺⠓⠊⠉⠓⠀⠠⠊⠀⠓⠁⠧⠑⠀⠕⠧⠑⠗⠇⠕⠕⠅⠑⠙⠢⠰</row>
          <row>⠰⠠⠊⠀⠁⠍⠀⠁⠋⠗⠁⠊⠙⠂⠀⠍⠽⠀⠙⠑⠁⠗⠀⠠⠺⠁⠞⠎⠕⠝⠂⠀⠞⠓⠁⠞</row>
          <row>⠍⠕⠎⠞⠀⠕⠋⠀⠽⠕⠥⠗⠀⠉⠕⠝⠉⠇⠥⠎⠊⠕⠝⠎⠀⠺⠑⠗⠑⠀⠑⠗⠗⠕⠝⠑⠕⠥⠎⠄</row>
          <row>⠠⠺⠓⠑⠝⠀⠠⠊⠀⠎⠁⠊⠙⠀⠞⠓⠁⠞⠀⠽⠕⠥⠀⠎⠞⠊⠍⠥⠇⠁⠞⠑⠙⠀⠍⠑⠀⠠⠊</row>
          <row>⠍⠑⠁⠝⠞⠂⠀⠞⠕⠀⠃⠑⠀⠋⠗⠁⠝⠅⠂⠀⠞⠓⠁⠞⠀⠊⠝⠀⠝⠕⠞⠊⠝⠛⠀⠽⠕⠥⠗</row>
          <row>⠋⠁⠇⠇⠁⠉⠊⠑⠎⠀⠠⠊⠀⠺⠁⠎⠀⠕⠉⠉⠁⠎⠊⠕⠝⠁⠇⠇⠽⠀⠛⠥⠊⠙⠑⠙⠀⠞⠕⠤</row>
          <row>⠺⠁⠗⠙⠎⠀⠞⠓⠑⠀⠞⠗⠥⠞⠓⠄⠀⠠⠝⠕⠞⠀⠞⠓⠁⠞⠀⠽⠕⠥⠀⠁⠗⠑⠀⠑⠝⠤</row>
          <row>⠞⠊⠗⠑⠇⠽⠀⠺⠗⠕⠝⠛⠀⠊⠝⠀⠞⠓⠊⠎⠀⠊⠝⠎⠞⠁⠝⠉⠑⠄⠀⠠⠞⠓⠑⠀⠍⠁⠝</row>
          <row>⠊⠎⠀⠉⠑⠗⠞⠁⠊⠝⠇⠽⠀⠁⠀⠉⠕⠥⠝⠞⠗⠽⠀⠏⠗⠁⠉⠞⠊⠞⠊⠕⠝⠑⠗⠄</row>
          <row>⠠⠁⠝⠙⠀⠓⠑⠀⠺⠁⠇⠅⠎⠀⠁⠀⠛⠕⠕⠙⠀⠙⠑⠁⠇⠄⠰</row>
          <row>⠰⠠⠞⠓⠑⠝⠀⠠⠊⠀⠺⠁⠎⠀⠗⠊⠛⠓⠞⠄⠰</row>
          <row>⠰⠠⠞⠕⠀⠞⠓⠁⠞⠀⠑⠭⠞⠑⠝⠞⠄⠰⠔</row>
          <row>⠰⠠⠃⠥⠞⠀⠞⠓⠁⠞⠀⠺⠁⠎⠀⠁⠇⠇⠄⠰⠔</row>
          <row>⠰⠠⠝⠕⠂⠀⠝⠕⠂⠀⠍⠽⠀⠙⠑⠁⠗⠀⠠⠺⠁⠞⠎⠕⠝⠂⠀⠝⠕⠞⠀⠁⠇⠇⠤⠤⠃⠽</row>
          <row>⠝⠕⠀⠍⠑⠁⠝⠎⠀⠁⠇⠇⠄⠀⠠⠊⠀⠺⠕⠥⠇⠙⠀⠎⠥⠛⠛⠑⠎⠞⠂⠀⠋⠕⠗⠀⠑⠭⠤</row>
          <row>⠄⠄⠄⠀⠠⠋⠕⠕⠞⠝⠕⠞⠑⠎⠀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄</row>
          <row>⠔⠀⠠⠞⠓⠊⠎⠀⠊⠎⠀⠁⠀⠝⠕⠞⠑⠀⠞⠓⠁⠞⠀⠁⠏⠏⠑⠁⠗⠎⠀⠎⠑⠧⠑⠗⠁⠇</row>
          <row>⠀⠀⠀⠀⠞⠊⠍⠑⠎⠄</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠤⠤⠤⠀⠠⠠⠑⠝⠙⠀⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠑</row>
        </page>
        <page>
          <row>⠁⠍⠏⠇⠑⠂⠀⠞⠓⠁⠞⠀⠁⠀⠏⠗⠑⠎⠑⠝⠞⠁⠞⠊⠕⠝⠀⠞⠕⠀⠁⠀⠙⠕⠉⠞⠕⠗</row>
          <row>⠊⠎⠀⠍⠕⠗⠑⠀⠇⠊⠅⠑⠇⠽⠀⠞⠕⠀⠉⠕⠍⠑⠀⠋⠗⠕⠍⠀⠁⠀⠓⠕⠎⠏⠊⠞⠁⠇</row>
          <row>⠞⠓⠁⠝⠀⠋⠗⠕⠍⠀⠁⠀⠓⠥⠝⠞⠂⠀⠁⠝⠙⠀⠞⠓⠁⠞⠀⠺⠓⠑⠝⠀⠞⠓⠑⠀⠊⠝⠊⠤</row>
          <row>⠞⠊⠁⠇⠎⠀⠐⠠⠉⠄⠠⠉⠄⠐⠀⠁⠗⠑⠀⠏⠇⠁⠉⠑⠙⠀⠃⠑⠋⠕⠗⠑⠀⠞⠓⠁⠞</row>
          <row>⠓⠕⠎⠏⠊⠞⠁⠇⠀⠞⠓⠑⠀⠺⠕⠗⠙⠎⠀⠐⠠⠉⠓⠁⠗⠊⠝⠛⠀⠠⠉⠗⠕⠎⠎⠐</row>
          <row>⠧⠑⠗⠽⠀⠝⠁⠞⠥⠗⠁⠇⠇⠽⠀⠎⠥⠛⠛⠑⠎⠞⠀⠞⠓⠑⠍⠎⠑⠇⠧⠑⠎⠄⠰</row>
          <row>⠰⠠⠽⠕⠥⠀⠍⠁⠽⠀⠃⠑⠀⠗⠊⠛⠓⠞⠄⠰⠬⠼⠋</row>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row/>
          <row>⠄⠄⠄⠀⠠⠋⠕⠕⠞⠝⠕⠞⠑⠎⠀⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄</row>
          <row>⠼⠋⠴⠀⠠⠞⠓⠊⠎⠀⠝⠕⠞⠑⠀⠊⠎⠀⠕⠝⠀⠞⠓⠑⠀⠇⠁⠎⠞⠀⠏⠁⠛⠑⠄</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠤⠤⠤⠀⠠⠠⠑⠝⠙⠀⠤⠤⠤</row>
          <row>⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⠋</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

XML Data minimum block size with matrix table

Tests that the correct scenario is selected when the min-block-size variable is used to determine the cost in a matrix table. The first scenario would be selected if the cost were the same in both cases.

xml-data/xml-data5-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>XML Data minimum block size with matrix table</dc:title>
    <dc:description>Tests that the correct scenario is selected when the min-block-size variable
		is used to determine the cost in a matrix table. The first scenario would be selected if the
		cost were the same in both cases.</dc:description>
  </meta>
  <layout-master name="body" page-width="14" page-height="9" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <xml-processor name="copy">
    <xsl:stylesheet version="2.0">
      <xsl:template match="/">
        <xml-processor-result>
          <xsl:copy-of select="*"/>
        </xml-processor-result>
      </xsl:template>
    </xsl:stylesheet>
  </xml-processor>
  <xml-processor name="reverse">
    <xsl:stylesheet version="2.0" exclude-result-prefixes="obfl">
      <xsl:template match="/">
        <xml-processor-result>
          <xsl:apply-templates select="*"/>
        </xml-processor-result>
      </xsl:template>
      <xsl:template match="obfl:table">
        <table>
          <xsl:apply-templates select="." mode="inner"/>
        </table>
      </xsl:template>
      <xsl:template match="obfl:table" mode="inner">
        <xsl:param name="pos" select="1"/>
        <tr>
          <xsl:for-each select="obfl:tr">
            <xsl:copy-of select="obfl:td[$pos]"/>
          </xsl:for-each>
        </tr>
        <xsl:if test="obfl:tr/obfl:td[$pos+1]">
          <xsl:apply-templates select="." mode="inner">
            <xsl:with-param name="pos" select="$pos+1"/>
          </xsl:apply-templates>
        </xsl:if>
      </xsl:template>
    </xsl:stylesheet>
  </xml-processor>
  <renderer name="table-renderer">
    <rendering-scenario qualifier="count(/obfl:table)=1" processor="copy" cost="(- 14 $min-block-width)"/>
    <rendering-scenario qualifier="count(/obfl:table)=1" processor="reverse" cost="(- 14 $min-block-width)"/>
  </renderer>
  <sequence master="body">
    <xml-data renderer="table-renderer">
      <table>
        <tr>
          <td>1</td>
          <td>2</td>
          <td>3</td>
        </tr>
        <tr>
          <td>4</td>
          <td>5</td>
          <td>6</td>
        </tr>
      </table>
    </xml-data>
  </sequence>
</obfl>

xml-data/xml-data5-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="14" rows="9" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠼⠙</row>
          <row>⠼⠃⠀⠀⠼⠑</row>
          <row>⠼⠉⠀⠀⠼⠋</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

XML Processor file import example

Tests that xsl:include/xsl:import works in an xml-processor stylesheet.

xml-data/xml-data6-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>XML Processor file import example</dc:title>
    <dc:description>Tests that xsl:include/xsl:import works in an xml-processor stylesheet.</dc:description>
  </meta>
  <layout-master name="body" page-width="14" page-height="9" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <file-reference uri="import.xsl">
    <xsl:stylesheet version="2.0">
      <xsl:template match="text()">
        <xsl:value-of select="1"/>
      </xsl:template>
    </xsl:stylesheet>
  </file-reference>
  <xml-processor name="import">
    <xsl:stylesheet version="2.0" exclude-result-prefixes="obfl">
      <xsl:import href="import.xsl"/>
      <xsl:template match="/">
        <xml-processor-result>
          <xsl:apply-templates select="*"/>
        </xml-processor-result>
      </xsl:template>
      <xsl:template match="obfl:table|obfl:tr|obfl:td">
        <xsl:copy>
          <xsl:apply-templates/>
        </xsl:copy>
      </xsl:template>
    </xsl:stylesheet>
  </xml-processor>
  <renderer name="table-renderer">
    <rendering-scenario processor="import" cost="1"/>
  </renderer>
  <sequence master="body">
    <xml-data renderer="table-renderer">
      <table>
        <tr>
          <td>1</td>
          <td>2</td>
        </tr>
        <tr>
          <td>3</td>
          <td>4</td>
        </tr>
        <tr>
          <td>5</td>
          <td>6</td>
        </tr>
      </table>
    </xml-data>
  </sequence>
</obfl>

xml-data/xml-data6-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="14" rows="9" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠼⠁</row>
          <row>⠼⠁⠀⠀⠼⠁</row>
          <row>⠼⠁⠀⠀⠼⠁</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

XML Data 2

[add description]

xml-data/xml-data2-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>XML Data 2</dc:title>
    <dc:description>[add description]</dc:description>
  </meta>
  <layout-master name="body" page-width="14" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <xml-processor name="matrix">
    <xsl:stylesheet version="2.0">
      <xsl:template match="/">
        <xml-processor-result>
          <block margin-bottom="1">Matrix table: 
            <xsl:value-of select="count(/obfl:table/obfl:tr[1]/obfl:td)"/>x
            <xsl:value-of select="count(/obfl:table/obfl:tr)"/>
          </block>
          <xsl:copy-of select="*"/>
        </xml-processor-result>
      </xsl:template>
    </xsl:stylesheet>
  </xml-processor>
  <xml-processor name="staircase">
    <xsl:stylesheet version="2.0">
      <xsl:template match="obfl:table">
        <block>
          <xsl:apply-templates/>
        </block>
      </xsl:template>
      <xsl:template match="obfl:tr">
        <xsl:apply-templates select="obfl:td[1]"/>
      </xsl:template>
      <xsl:template match="obfl:td">
        <block margin-left="2">
          <xsl:value-of select="text()"/>
          <xsl:apply-templates select="following-sibling::*[1]"/>
        </block>
      </xsl:template>
    </xsl:stylesheet>
  </xml-processor>
  <renderer name="table-renderer">
    <rendering-scenario qualifier="count(/obfl:table)=1" processor="matrix" cost="(+ 1 $total-height)"/>
    <rendering-scenario qualifier="count(/obfl:table)=1" processor="staircase" cost="(+ 0 $total-height)"/>
  </renderer>
  <sequence master="body">
    <block>Table 1</block>
    <xml-data renderer="table-renderer">
      <table>
        <tr>
          <td>1</td>
          <td>2</td>
          <td>3</td>
        </tr>
        <tr>
          <td>4</td>
          <td>5</td>
          <td>6</td>
        </tr>
        <tr>
          <td>7</td>
          <td>8</td>
          <td>9</td>
        </tr>
      </table>
    </xml-data>
    <block>Table 2</block>
    <xml-data renderer="table-renderer">
      <table>
        <tr>
          <td>1234567</td>
          <td>1234567</td>
          <td>1234567</td>
        </tr>
        <tr>
          <td>1234567</td>
          <td>1234567</td>
          <td>1234567</td>
        </tr>
        <tr>
          <td>1234567</td>
          <td>1234567</td>
          <td>1234567</td>
        </tr>
      </table>
    </xml-data>
    <block>End</block>
  </sequence>
</obfl>

xml-data/xml-data2-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="14" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠠⠞⠁⠃⠇⠑⠀⠼⠁</row>
          <row>⠠⠍⠁⠞⠗⠊⠭</row>
          <row>⠞⠁⠃⠇⠑⠒⠼⠉⠭⠼⠉</row>
          <row/>
          <row>⠼⠁⠀⠀⠼⠃⠀⠀⠼⠉</row>
          <row>⠼⠙⠀⠀⠼⠑⠀⠀⠼⠋</row>
        </page>
        <page>
          <row>⠼⠛⠀⠀⠼⠓⠀⠀⠼⠊</row>
          <row>⠠⠞⠁⠃⠇⠑⠀⠼⠃</row>
          <row>⠀⠀⠼⠁⠃⠉⠙⠑⠋⠛</row>
          <row>⠀⠀⠀⠀⠼⠁⠃⠉⠙⠑⠋⠛</row>
          <row>⠀⠀⠀⠀⠀⠀⠼⠁⠃⠉⠙⠑⠋⠛</row>
          <row>⠀⠀⠼⠁⠃⠉⠙⠑⠋⠛</row>
        </page>
        <page>
          <row>⠀⠀⠀⠀⠼⠁⠃⠉⠙⠑⠋⠛</row>
          <row>⠀⠀⠀⠀⠀⠀⠼⠁⠃⠉⠙⠑⠋⠛</row>
          <row>⠀⠀⠼⠁⠃⠉⠙⠑⠋⠛</row>
          <row>⠀⠀⠀⠀⠼⠁⠃⠉⠙⠑⠋⠛</row>
          <row>⠀⠀⠀⠀⠀⠀⠼⠁⠃⠉⠙⠑⠋⠛</row>
          <row>⠠⠑⠝⠙</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

XML Data 1

[add description]

xml-data/xml-data-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>XML Data 1</dc:title>
    <dc:description>[add description]</dc:description>
  </meta>
  <layout-master name="body" page-width="14" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <xml-processor name="identity-processor">
    <xsl:stylesheet version="2.0">
      <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
      <xsl:template match="/">
        <xsl:copy-of select="*"/>
      </xsl:template>
    </xsl:stylesheet>
  </xml-processor>
  <renderer name="identity-renderer">
    <rendering-scenario qualifier="count(/obfl:block)=1" processor="identity-processor" cost="(+ (- 30 $min-block-width) $total-height)"/>
  </renderer>
  <sequence master="body">
    <xml-data renderer="identity-renderer">
      <block margin-bottom="1">
        <block row-spacing="2.0">⠿⠿⠿⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿⠿⠿⠿</block>
      </block>
    </xml-data>
  </sequence>
</obfl>

xml-data/xml-data-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="14" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row rowgap="4">⠿⠿⠿⠿⠿⠿⠿⠿</row>
          <row rowgap="4">⠿⠿⠿⠿⠿⠿⠿⠿</row>
          <row/>
        </page>
      </section>
    </volume>
  </body>
</pef>

XML Data 3

[add description]

xml-data/xml-data3-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>XML Data 3</dc:title>
    <dc:description>[add description]</dc:description>
  </meta>
  <layout-master name="body" page-width="14" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <xml-processor name="matrix">
    <xsl:stylesheet version="2.0">
      <xsl:template match="/">
        <xml-processor-result>
          <block margin-bottom="1">Matrix table: 
            <xsl:value-of select="count(/obfl:table/obfl:tr[1]/obfl:td)"/>x
            <xsl:value-of select="count(/obfl:table/obfl:tr)"/>
          </block>
          <xsl:copy-of select="*"/>
        </xml-processor-result>
      </xsl:template>
    </xsl:stylesheet>
  </xml-processor>
  <xml-processor name="staircase">
    <xsl:stylesheet version="2.0">
      <xsl:template match="obfl:table">
        <block>
          <xsl:apply-templates/>
        </block>
      </xsl:template>
      <xsl:template match="obfl:tr">
        <xsl:apply-templates select="obfl:td[1]"/>
      </xsl:template>
      <xsl:template match="obfl:td">
        <block margin-left="2">
          <xsl:value-of select="text()"/>
          <xsl:apply-templates select="following-sibling::*[1]"/>
        </block>
      </xsl:template>
    </xsl:stylesheet>
  </xml-processor>
  <xml-processor name="invalid">
    <xsl:stylesheet version="2.0">
      <xsl:template match="/">
        <xml-processor-result>
          <block>Invalid</block>
        </xml-processor-result>
        <xml-processor-result>
          <block>Invalid</block>
        </xml-processor-result>
      </xsl:template>
    </xsl:stylesheet>
  </xml-processor>
  <renderer name="table-renderer">
    <rendering-scenario qualifier="count(/obfl:table)=1" processor="matrix" cost="(+ 1 $total-height)"/>
    <rendering-scenario qualifier="count(/obfl:table)=1" processor="staircase" cost="(+ 0 $total-height)"/>
    <rendering-scenario qualifier="count(/obfl:table)=1" processor="invalid" cost="(+ 0 $total-height)"/>
  </renderer>
  <sequence master="body">
    <xml-data renderer="table-renderer">
      <table>
        <tr>
          <td>1</td>
          <td>2</td>
          <td>3</td>
        </tr>
        <tr>
          <td>4</td>
          <td>5</td>
          <td>6</td>
        </tr>
        <tr>
          <td>7</td>
          <td>8</td>
          <td>9</td>
        </tr>
      </table>
    </xml-data>
    <xml-data renderer="table-renderer">
      <table>
        <tr>
          <td>1234567</td>
          <td>1234567</td>
          <td>1234567</td>
        </tr>
        <tr>
          <td>1234567</td>
          <td>1234567</td>
          <td>1234567</td>
        </tr>
        <tr>
          <td>1234567</td>
          <td>1234567</td>
          <td>1234567</td>
        </tr>
      </table>
    </xml-data>
  </sequence>
</obfl>

xml-data/xml-data3-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="14" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠠⠍⠁⠞⠗⠊⠭</row>
          <row>⠞⠁⠃⠇⠑⠒⠼⠉⠭⠼⠉</row>
          <row/>
          <row>⠼⠁⠀⠀⠼⠃⠀⠀⠼⠉</row>
          <row>⠼⠙⠀⠀⠼⠑⠀⠀⠼⠋</row>
          <row>⠼⠛⠀⠀⠼⠓⠀⠀⠼⠊</row>
        </page>
        <page>
          <row>⠀⠀⠼⠁⠃⠉⠙⠑⠋⠛</row>
          <row>⠀⠀⠀⠀⠼⠁⠃⠉⠙⠑⠋⠛</row>
          <row>⠀⠀⠀⠀⠀⠀⠼⠁⠃⠉⠙⠑⠋⠛</row>
          <row>⠀⠀⠼⠁⠃⠉⠙⠑⠋⠛</row>
          <row>⠀⠀⠀⠀⠼⠁⠃⠉⠙⠑⠋⠛</row>
          <row>⠀⠀⠀⠀⠀⠀⠼⠁⠃⠉⠙⠑⠋⠛</row>
        </page>
        <page>
          <row>⠀⠀⠼⠁⠃⠉⠙⠑⠋⠛</row>
          <row>⠀⠀⠀⠀⠼⠁⠃⠉⠙⠑⠋⠛</row>
          <row>⠀⠀⠀⠀⠀⠀⠼⠁⠃⠉⠙⠑⠋⠛</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

XML Data minimum block size

Tests that the correct scenario is selected when the min-block-size variable is used to determine the cost. The first scenario would be selected if the cost were the same in both cases.

xml-data/xml-data4-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>XML Data minimum block size</dc:title>
    <dc:description>Tests that the correct scenario is selected when the min-block-size variable
		is used to determine the cost. The first scenario would be selected if the cost were
		the same in both cases.</dc:description>
  </meta>
  <layout-master name="body" page-width="14" page-height="9" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <xml-processor name="p1">
    <xsl:stylesheet version="2.0">
      <xsl:template match="obfl:table">
        <block>
          <xsl:apply-templates/>
        </block>
      </xsl:template>
      <xsl:template match="obfl:tr">
        <xsl:apply-templates select="obfl:td[1]"/>
      </xsl:template>
      <xsl:template match="obfl:td">
        <block margin-left="2">
          <xsl:value-of select="text()"/>
          <xsl:apply-templates select="following-sibling::*[1]"/>
        </block>
      </xsl:template>
    </xsl:stylesheet>
  </xml-processor>
  <xml-processor name="p2">
    <xsl:stylesheet version="2.0">
      <xsl:template match="obfl:table">
        <block>
          <xsl:apply-templates/>
        </block>
      </xsl:template>
      <xsl:template match="obfl:tr">
        <xsl:apply-templates select="obfl:td[1]"/>
      </xsl:template>
      <xsl:template match="obfl:td">
        <block margin-left="1">
          <xsl:value-of select="text()"/>
          <xsl:apply-templates select="following-sibling::*[1]"/>
        </block>
      </xsl:template>
    </xsl:stylesheet>
  </xml-processor>
  <renderer name="table-renderer">
    <rendering-scenario qualifier="count(/obfl:table)=1" processor="p1" cost="(- 14 $min-block-width)"/>
    <rendering-scenario qualifier="count(/obfl:table)=1" processor="p2" cost="(- 14 $min-block-width)"/>
  </renderer>
  <sequence master="body">
    <xml-data renderer="table-renderer">
      <table>
        <tr>
          <td>1</td>
          <td>2</td>
          <td>3</td>
        </tr>
        <tr>
          <td>4</td>
          <td>5</td>
          <td>6</td>
        </tr>
        <tr>
          <td>7</td>
          <td>8</td>
          <td>9</td>
        </tr>
      </table>
    </xml-data>
  </sequence>
</obfl>

xml-data/xml-data4-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="14" rows="9" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠀⠼⠁</row>
          <row>⠀⠀⠼⠃</row>
          <row>⠀⠀⠀⠼⠉</row>
          <row>⠀⠼⠙</row>
          <row>⠀⠀⠼⠑</row>
          <row>⠀⠀⠀⠼⠋</row>
          <row>⠀⠼⠛</row>
          <row>⠀⠀⠼⠓</row>
          <row>⠀⠀⠀⠼⠊</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

XML Processor parameter example

Tests that parameters can be passed to an xml-processor stylesheet.

xml-data/xml-data7-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>XML Processor parameter example</dc:title>
    <dc:description>Tests that parameters can be passed to an xml-processor stylesheet.</dc:description>
  </meta>
  <layout-master name="body" page-width="14" page-height="9" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <file-reference uri="import.xsl">
    <xsl:stylesheet version="2.0">
      <xsl:param name="text" select="'3'"/>
      <xsl:template match="text()">
        <xsl:value-of select="$text"/>
      </xsl:template>
    </xsl:stylesheet>
  </file-reference>
  <xml-processor name="import">
    <xsl:stylesheet version="2.0" exclude-result-prefixes="obfl">
      <xsl:import href="import.xsl"/>
      <xsl:template match="/">
        <xml-processor-result>
          <xsl:apply-templates select="*"/>
        </xml-processor-result>
      </xsl:template>
      <xsl:template match="obfl:table|obfl:tr|obfl:td">
        <xsl:copy>
          <xsl:apply-templates/>
        </xsl:copy>
      </xsl:template>
    </xsl:stylesheet>
  </xml-processor>
  <renderer name="table-renderer">
    <rendering-scenario processor="import" cost="2">
      <parameter name="text" value="2"/>
    </rendering-scenario>
    <rendering-scenario processor="import" cost="1">
      <parameter name="text" value="1"/>
    </rendering-scenario>
  </renderer>
  <sequence master="body">
    <xml-data renderer="table-renderer">
      <table>
        <tr>
          <td>1</td>
          <td>2</td>
        </tr>
        <tr>
          <td>3</td>
          <td>4</td>
        </tr>
        <tr>
          <td>5</td>
          <td>6</td>
        </tr>
      </table>
    </xml-data>
  </sequence>
</obfl>

xml-data/xml-data7-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="14" rows="9" rowgap="0" duplex="false">
      <section>
        <page>
          <row>⠼⠁⠀⠀⠼⠁</row>
          <row>⠼⠁⠀⠀⠼⠁</row>
          <row>⠼⠁⠀⠀⠼⠁</row>
        </page>
      </section>
    </volume>
  </body>
</pef>

XML Data 1

[add description]

xml-data/xml-data-in-block-input.obfl

<obfl version="2011-1" xml:lang="en">
  <meta>
    <dc:title>XML Data 1</dc:title>
    <dc:description>[add description]</dc:description>
  </meta>
  <layout-master name="body" page-width="14" page-height="6" duplex="false">
    <default-template>
      <header/>
      <footer/>
    </default-template>
  </layout-master>
  <xml-processor name="identity-processor">
    <xsl:stylesheet version="2.0">
      <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
      <xsl:template match="/">
        <xsl:copy-of select="*"/>
      </xsl:template>
    </xsl:stylesheet>
  </xml-processor>
  <renderer name="identity-renderer">
    <rendering-scenario qualifier="count(/obfl:block)=1" processor="identity-processor" cost="(+ (- 30 $min-block-width) $total-height)"/>
  </renderer>
  <sequence master="body">
    <block>
      <xml-data renderer="identity-renderer">
        <block margin-bottom="1">
          <block row-spacing="2.0">⠿⠿⠿⠿⠿⠿⠿⠿ ⠿⠿⠿⠿⠿⠿⠿⠿</block>
        </block>
      </xml-data>
    </block>
  </sequence>
</obfl>

xml-data/xml-data-in-block-expected.pef

<pef version="2008-1">
  <head>
    <meta>
      <dc:format>application/x-pef+xml</dc:format>
      <dc:identifier>identifier?</dc:identifier>
    </meta>
  </head>
  <body>
    <volume cols="14" rows="6" rowgap="0" duplex="false">
      <section>
        <page>
          <row rowgap="4">⠿⠿⠿⠿⠿⠿⠿⠿</row>
          <row rowgap="4">⠿⠿⠿⠿⠿⠿⠿⠿</row>
          <row/>
        </page>
      </section>
    </volume>
  </body>
</pef>