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

<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<!-- START SNIPPET: foConfig -->
<xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <!-- <xsl:attribute-set name="layout.master.set.base">
    <xsl:attribute name="page-width">8.5in</xsl:attribute>
    <xsl:attribute name="page-height">11.0in</xsl:attribute>
    <xsl:attribute name="margin-top">0.625in</xsl:attribute>
    <xsl:attribute name="margin-bottom">0.6in</xsl:attribute>
    <xsl:attribute name="margin-left">1in</xsl:attribute>
    <xsl:attribute name="margin-right">1in</xsl:attribute>
  </xsl:attribute-set> -->
  <xsl:template match="processing-instruction('hard-pagebreak')">
    <fo:block break-after='page'/>
  </xsl:template>
  <xsl:attribute-set name="body.pre" use-attribute-sets="base.pre.style">
    <xsl:attribute name="font-size">8pt</xsl:attribute>
  </xsl:attribute-set>
  <!-- <xsl:attribute-set name="body.source" use-attribute-sets="body.pre">
    <xsl:attribute name="color">black</xsl:attribute>
    <xsl:attribute name="start-indent">inherited-property-value(start-indent) + 1.5em</xsl:attribute>
    <xsl:attribute name="end-indent">inherited-property-value(end-indent) + 1.5em</xsl:attribute>
  </xsl:attribute-set> -->
</xsl:stylesheet>
    <!-- END SNIPPET: foConfig -->