You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2003/10/16 20:45:04 UTC

cvs commit: ws-axis/contrib/axisdocs/src/documentation/skins/common/xslt/fo document2fo.xsl footerinfo.xsl pdfoutline.xsl

dims        2003/10/16 11:45:04

  Added:       contrib/axisdocs/src/documentation/skins/common/xslt/fo
                        document2fo.xsl footerinfo.xsl pdfoutline.xsl
  Log:
  Doc contribution from "Tetsuya Kitahata" <te...@apache.org>:
  
  Step #1: download Apache Forrest from http://xml.apache.org/forrest/ (version 0.5.1) and install.
  
  Step #2: From unzipped directory ($AXIS), run "forrest site" and the html files will be created at
  $AXIS/build/site/ directory.
  
  Revision  Changes    Path
  1.1                  ws-axis/contrib/axisdocs/src/documentation/skins/common/xslt/fo/document2fo.xsl
  
  Index: document2fo.xsl
  ===================================================================
  <?xml version="1.0"?>
  
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                  xmlns:fo="http://www.w3.org/1999/XSL/Format"
                  version="1.0">
  
    <xsl:output method="xml"/>
    <xsl:param name="numbersections" select="'true'"/>
  
    <!-- Section depth at which we stop numbering and just indent -->
    <xsl:param name="numbering-max-depth" select="'3'"/>
    <xsl:param name="ctxbasedir" select="."/>
    <xsl:param name="xmlbasedir"/>
    <xsl:include href="pdfoutline.xsl"/>
    <xsl:include href="footerinfo.xsl"/>
  
    <xsl:template match="/">
      <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
        <fo:layout-master-set>
  
          <fo:simple-page-master master-name="first-page"
            page-height="11in" 
            page-width="8.5in"
            margin-top="1in" 
            margin-bottom="1in" 
            margin-left="1.25in" 
            margin-right="1in">
            <fo:region-body
              margin-top="0.5in"
              margin-bottom=".5in"/>
            <fo:region-after 
              region-name="first-footer"
              extent=".5in"
              display-align="before"/>
          </fo:simple-page-master>
  
          <fo:simple-page-master master-name="even-page"
            page-height="11in" 
            page-width="8.5in"
            margin-top="1in" 
            margin-bottom="1in" 
            margin-left="1.25in" 
            margin-right="1in">
            <fo:region-before
              region-name="even-header"
              extent="0.5in"
              border-bottom="0.5pt solid"/>
            <fo:region-body
              margin-top="0.5in"
              margin-bottom=".5in"/>
            <fo:region-after 
              region-name="even-footer"
              extent=".5in"
              display-align="before"/>
          </fo:simple-page-master>
  
          <fo:simple-page-master master-name="odd-page"
            page-height="11in" 
            page-width="8.5in"
            margin-top="1in" 
            margin-bottom="1in" 
            margin-left="1.25in" 
            margin-right="1in">
            <fo:region-before
              region-name="odd-header"
              extent="0.5in"
              border-bottom="0.5pt solid"/>
            <fo:region-body
              margin-top="0.5in"
              margin-bottom=".5in"/>
            <fo:region-after 
              region-name="odd-footer"
              extent=".5in"
              display-align="before"/>
          </fo:simple-page-master>
  
          <fo:page-sequence-master master-name="book">
            <fo:repeatable-page-master-alternatives>
              <fo:conditional-page-master-reference
                page-position="first"
                master-reference="first-page"/>
              <fo:conditional-page-master-reference
                odd-or-even="odd"
                master-reference="odd-page"/>
              <fo:conditional-page-master-reference
                odd-or-even="even"
                master-reference="even-page"/>
            </fo:repeatable-page-master-alternatives>
          </fo:page-sequence-master>
        </fo:layout-master-set>
  
        <xsl:apply-templates select="/document" mode="outline"/>
  
        <fo:page-sequence master-reference="book">
          <fo:title><xsl:value-of select="document/header/title"/></fo:title>
          <xsl:apply-templates/>
        </fo:page-sequence>
        
      </fo:root>
    </xsl:template>
  
    <xsl:template match="document">
      <fo:title><xsl:value-of select="header/title"/></fo:title>
      
      <fo:static-content flow-name="first-footer">
        <fo:block
          border-top="0.25pt solid"
          padding-before="6pt"
          text-align="center">
          <xsl:apply-templates select="footer"/>
        </fo:block>
        <fo:block
          text-align="start">
          Page <fo:page-number/>
        </fo:block>
        <xsl:call-template name="info"/>
      </fo:static-content>
  
      <fo:static-content flow-name="even-header">
        <fo:block
          text-align="end"
          font-style="italic">
          <xsl:value-of select="header/title"/>
        </fo:block>
      </fo:static-content>
  
      <fo:static-content flow-name="even-footer">
        <fo:block
          border-top="0.25pt solid"
          padding-before="6pt"
          text-align="center">
          <xsl:apply-templates select="footer"/>
        </fo:block>
        <fo:block
          text-align="end">
          Page <fo:page-number/>
        </fo:block>
        <xsl:call-template name="info"/>
      </fo:static-content>
  
      <fo:static-content flow-name="odd-header">
        <fo:block
          text-align="start"
          font-style="italic">
          <xsl:value-of select="header/title"/>
        </fo:block>
      </fo:static-content>
      
      <fo:static-content flow-name="odd-footer">
        <fo:block
          border-top="0.25pt solid"
          padding-before="6pt"
          text-align="center">
          <xsl:apply-templates select="footer"/>
        </fo:block>
        <fo:block
          text-align="start">
          Page <fo:page-number/>
        </fo:block>
        <xsl:call-template name="info"/>
      </fo:static-content>
  
      <fo:flow flow-name="xsl-region-body">
        <fo:block
          padding-before="24pt"
          padding-after="24pt"
          font-size="24pt"
          font-weight="bold"
          id="{generate-id()}">
  
          <xsl:value-of select="header/title"/>
        </fo:block>
        
        <fo:block
          text-align="justify"
          padding-before="18pt"
          padding-after="18pt">
          <xsl:apply-templates/>
        </fo:block>
      </fo:flow>
    </xsl:template>
    
    <xsl:template match="abstract">
      <fo:block
        font-size="12pt"
        text-align="center"
        space-before="20pt"
        space-after="25pt"
        width="7.5in"
        font-family="serif"
        font-style="italic">
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    <xsl:template match="notice">
      <fo:block
        font-size="10pt"
        text-align="left"
        space-before="20pt"
        width="7.5in"
        font-family="serif"
        border-top="0.25pt solid"
        border-bottom="0.25pt solid"
        padding-before="6pt"
        padding-after="6pt">
        NOTICE: <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
  
    <xsl:template match="anchor">
      <fo:block id="{@id}"/>
      <xsl:apply-templates/>
    </xsl:template>
  
    <xsl:template match="section">
      
      <xsl:param name="level">0</xsl:param>
  
      <xsl:variable name="size">
        <xsl:choose>
          <xsl:when test="number($level) = 1">
            <xsl:value-of select="14"/>
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="12"/>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:variable>
      
      <fo:block
        font-family="serif"
        font-size="{$size}pt"
        font-weight="bold"
        space-before="12pt"
        space-after="4pt">
  
        <xsl:attribute name="id">
          <xsl:choose>
            <xsl:when test="normalize-space(@id)!=''">
              <xsl:value-of select="@id"/>
            </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="generate-id()"/>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:attribute>
  
        <xsl:if test="$numbersections = 'true' and number($level) &lt; $numbering-max-depth+1">
          <xsl:number format="1.1.1.1.1.1.1" count="section" level="multiple"/>
          <xsl:text>. </xsl:text>
        </xsl:if>
  
        <!-- For sections 4  or more nestings deep, indent instead of number -->
        <xsl:if test="number($level) &gt; $numbering-max-depth+1">
          <xsl:attribute name="start-indent">
            <xsl:value-of select="4+number($level)"/><xsl:text>pt</xsl:text>
          </xsl:attribute>
        </xsl:if>
  
        <xsl:value-of select="title"/>
      </fo:block>
      <xsl:apply-templates>
        <xsl:with-param name="level" select="number($level)+1"/>
      </xsl:apply-templates>
      
    </xsl:template>
    
    <xsl:template match="title">
      <!-- do nothing as titles are handled in their parent templates -->
    </xsl:template>
    
    <xsl:template match="subtitle">
      <xsl:param name="level">0</xsl:param>
      <xsl:variable name="size" select="16-(number($level)*1.5)"/>
  
      <fo:block
        font-weight="bold"
        font-size="{$size}pt">
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
  
    <xsl:template match="authors">
      <fo:block
        space-before="20pt"
        font-weight="bold"
        font-size="9pt">
        by
        <xsl:for-each select="person">
          <xsl:value-of select="@name"/>
          <xsl:if test="not(position() = last())">, </xsl:if>
        </xsl:for-each>
      </fo:block>
    </xsl:template>
  
    <xsl:template match="p">
      <fo:block
        space-before="4pt"
        space-after="4pt"
        font-family="serif">
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
  
    <xsl:template match="source">
      <fo:block
        font-family="monospace"
        font-size="10pt"
        background-color="#f0f0f0"
        white-space-collapse="false"
        linefeed-treatment="preserve"
        white-space-treatment="preserve"
        wrap-option="no-wrap"
        text-align="start">
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    
    <xsl:template match="ol|ul">
      <fo:list-block 
        provisional-distance-between-starts="18pt"
        provisional-label-separation="3pt"
        text-align="start">
        <xsl:apply-templates/>
      </fo:list-block>
    </xsl:template>
    
    <xsl:template match="ol/li">
      <fo:list-item>
        <fo:list-item-label 
          end-indent="label-end()">
          <fo:block>
            <xsl:number format="1."/>
          </fo:block>
        </fo:list-item-label>
        <fo:list-item-body 
          start-indent="body-start()">
          <fo:block
            font-family="serif">
            <xsl:apply-templates/>
          </fo:block>
        </fo:list-item-body>
      </fo:list-item>
    </xsl:template>
  
    <!-- Emulate browser handling of these invalid combinations that our DTD
    unfortunately allows -->
    <xsl:template match="ul/ul | ul/ol | ol/ul | ol/ol">
      <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
          <fo:block></fo:block>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <fo:block font-family="serif">
            <xsl:apply-templates/>
          </fo:block>
        </fo:list-item-body>
      </fo:list-item>
    </xsl:template>
  
    <xsl:template match="ul/li">
      <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
          <fo:block>&#x2022;</fo:block>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <fo:block
            font-family="serif">
            <xsl:apply-templates/>
          </fo:block>
        </fo:list-item-body>
      </fo:list-item>
    </xsl:template>
    
    <xsl:template match="dl">
      <fo:list-block
        provisional-distance-between-starts="18pt"
        provisional-label-separation="3pt"
        text-align="start">
        <xsl:apply-templates/>
      </fo:list-block>
    </xsl:template>
    
    <xsl:template match="dt">
      <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
          <fo:block></fo:block>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <fo:block
            font-weight="bold">
            <xsl:apply-templates/>
          </fo:block>
        </fo:list-item-body>
      </fo:list-item>
    </xsl:template>
    
    <xsl:template match="dd">
      <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
          <fo:block></fo:block>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <fo:block>
            <xsl:apply-templates/>
          </fo:block>
        </fo:list-item-body>
      </fo:list-item>
    </xsl:template>
    
    <xsl:template match="strong">
      <fo:inline font-weight="bold"><xsl:apply-templates/></fo:inline>
    </xsl:template>
    
    <xsl:template match="em">
      <fo:inline font-style="italic"><xsl:apply-templates/></fo:inline>
    </xsl:template>
  
    <xsl:template match="code">
      <fo:inline font-family="monospace"><xsl:apply-templates/></fo:inline>
    </xsl:template>
  
    <xsl:template match="warning">
      <fo:block
        margin-left="0.25in"
        margin-right="0.25in"
        font-weight="bold"
        font-size="10pt"
        font-family="serif"
        space-before="10pt"
        border-before-style="solid"
        border-start-style="solid"
        border-end-style="solid"
        border-color="#D00000"
        background-color="#D00000"
        color="#ffffff">
        <xsl:choose>
          <xsl:when test="@label"><xsl:value-of select="@label"/></xsl:when>
          <xsl:otherwise>Note: </xsl:otherwise>
        </xsl:choose><xsl:value-of select="title"/>       
      </fo:block>
      <fo:block
        margin-left="0.25in"
        margin-right="0.25in"
        font-family="serif"
        font-size="8pt"
        border-after-style="solid"
        border-start-style="solid"
        border-end-style="solid"
        border-color="#D00000"
        background-color="#fff0f0"
        padding-start="3pt"
        padding-end="3pt"
        padding-before="3pt"
        padding-after="3pt"
        space-after="10pt">
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
  
    <xsl:template match="note">
      <fo:block
        margin-left="0.25in"
        margin-right="0.25in"
        font-weight="bold"
        font-size="10pt"
        color="#ffffff"
        font-family="serif"
        space-before="10pt"
        border-before-style="solid"
        border-start-style="solid"
        border-end-style="solid"
        border-color="#A0C9F5"
        background-color="#A0C9F5">
        <xsl:choose>
          <xsl:when test="@label"><xsl:value-of select="@label"/></xsl:when>
          <xsl:otherwise>Note: </xsl:otherwise>
        </xsl:choose><xsl:value-of select="title"/>
      </fo:block>
      <fo:block
        margin-left="0.25in"
        margin-right="0.25in"
        font-family="serif"
        font-size="8pt"
        space-after="10pt"
        border-after-style="solid"
        border-start-style="solid"
        border-end-style="solid"
        border-color="#A0C9F5"
        background-color="#F0F0FF"
        padding-start="3pt"
        padding-end="3pt"
        padding-before="3pt"
        padding-after="3pt">
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
  
    <xsl:template match="fixme">
      <fo:block
        margin-left="0.25in"
        margin-right="0.25in"
        font-weight="bold"
        font-size="10pt"
        color="#FFFFFF"
        font-family="serif"
        space-before="10pt"
        border-before-style="solid"
        border-start-style="solid"
        border-end-style="solid"
        border-color="#C6C650"
        background-color="#C6C650">
        FIXME (<xsl:value-of select="@author"/>): <xsl:value-of select="title"/>
      </fo:block>
      <fo:block
        margin-left="0.25in"
        margin-right="0.25in"
        font-family="serif"
        font-size="8pt"
        space-after="10pt"
        border-after-style="solid"
        border-start-style="solid"
        border-end-style="solid"
        border-color="#C6C650"
        background-color="#FFF0F0"
        padding-start="3pt"
        padding-end="3pt"
        padding-before="3pt"
        padding-after="3pt">
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
  
    <xsl:template match="link">
      <xsl:choose>
        <xsl:when test="starts-with(@href, '#')">
      <fo:basic-link color="blue" text-decoration="underline" internal-destination="{substring(@href,2)}">
        <xsl:apply-templates/>
      </fo:basic-link>
        </xsl:when>
        <xsl:otherwise>
      <fo:basic-link color="blue" text-decoration="underline" external-destination="{@href}"><xsl:apply-templates/></fo:basic-link>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template match="figure|img">
      <fo:block text-align="center">
        <xsl:if test="normalize-space(@id)!=''">
            <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
        </xsl:if>
  
        <!-- Make relative paths absolute -->
        <xsl:variable name="imgpath">
        <xsl:choose>
          <xsl:when test="starts-with(string(@src), 'images/') or contains(string(@src), '../images')">
            <xsl:value-of select="concat($ctxbasedir, 'resources/images/' , substring-after(@src, 'images'))"/>
          </xsl:when>
          <xsl:otherwise><xsl:value-of select="concat($ctxbasedir, $xmlbasedir, @src)"/></xsl:otherwise>
        </xsl:choose>
        </xsl:variable>
        <fo:external-graphic src="{$imgpath}">
          <xsl:if test="@height">
            <xsl:attribute name="height"><xsl:value-of select="@height"/></xsl:attribute>
          </xsl:if>
          <xsl:if test="@width">
            <xsl:attribute name="width"><xsl:value-of select="@width"/></xsl:attribute>
          </xsl:if>
        </fo:external-graphic>
        <!-- alt text -->
        <xsl:if test="normalize-space(@alt)!=''">
            <fo:block><xsl:value-of select="@alt"/></fo:block>
        </xsl:if>
      </fo:block>
    </xsl:template>
  
    <xsl:template match="table">
      <!-- FIXME: Apache FOP must have column widths specified at present,
           this section can be removed when this limitation is removed from Fop. 
           Unfortunately, this means that each column is a fixed width,
           but at least the table displays! -->
  
      <xsl:variable name="max-number-columns">
        <xsl:for-each select="tr">
          <xsl:sort select="count(td|th)" data-type="number" order="descending"/>
          <xsl:if test="position() = 1">
            <xsl:value-of select="count(td|th)"/>
          </xsl:if>
        </xsl:for-each>
      </xsl:variable>
  
  
      <xsl:variable name="column-width">
        <xsl:value-of select="6.25 div number($max-number-columns)"/>in
      </xsl:variable>
  
      <fo:table>
                    
        <fo:table-column>
          <xsl:attribute name="column-width">
            <xsl:value-of select="$column-width"/>
          </xsl:attribute>
  
          <xsl:attribute name="number-columns-repeated">
            <xsl:value-of select="number($max-number-columns)"/>
          </xsl:attribute>
        </fo:table-column>
  
        <!-- End of hack for Fop support (if removing this hack, remember 
             you need the <fo:table> element) -->
  
        <fo:table-body
          font-size="10pt"
          font-family="sans-serif">
          <xsl:apply-templates select="tr"/>
        </fo:table-body>
      </fo:table>
  
      <!-- FIXME: Apache Fop does not support the caption element yet.
           This hack will display the table caption accordingly. -->
      <xsl:if test="caption">
        <fo:block
          text-align="center"
          font-weight="bold">
          Table
          <xsl:text> </xsl:text>
          <xsl:number count="table" level="multiple"/>
          <xsl:text>: </xsl:text>
          <xsl:value-of select="caption"/>
        </fo:block>
      </xsl:if>
    </xsl:template>
  
    <xsl:template match="tr">
      <fo:table-row>
        <xsl:apply-templates/>
      </fo:table-row>
    </xsl:template>
  
    <xsl:template match="th">
        <fo:table-cell
          padding-before="4pt"
          padding-after="4pt"
          padding-start="4pt"
          padding-end="4pt"
          background-color="#A0C9F5">
          <xsl:attribute name="number-columns-spanned">
            <xsl:value-of select="@colspan"/>
          </xsl:attribute>
          <xsl:attribute name="number-rows-spanned">
            <xsl:value-of select="@rowspan"/>
          </xsl:attribute>
          <fo:block
            text-align="center">
            <xsl:apply-templates/>
          </fo:block>
        </fo:table-cell>
    </xsl:template>
  
    <xsl:template match="td">
      <fo:table-cell
        padding-before="4pt"
        padding-after="4pt"
        padding-start="4pt"
        padding-end="4pt"
        border="1pt solid #A0C9F5">
        <xsl:attribute name="number-columns-spanned">
            <xsl:value-of select="@colspan"/>
          </xsl:attribute>
          <xsl:attribute name="number-rows-spanned">
            <xsl:value-of select="@rowspan"/>
          </xsl:attribute>
        <fo:block>
          <xsl:apply-templates/>
        </fo:block>
      </fo:table-cell>
    </xsl:template>
  
    <xsl:template match="br">
      <fo:block></fo:block>
    </xsl:template>
  
    <xsl:template match="legal">
      <fo:inline
        font-size="8pt">
        <xsl:apply-templates/>
      </fo:inline>
    </xsl:template>
  
  <!-- ====================================================================== -->
  <!-- Local Extensions section -->
  <!-- ====================================================================== -->
  
   <xsl:template match="citation">
     <fo:inline>
       [<xsl:value-of select="@def"/>]
     </fo:inline>
   </xsl:template>
  
  
  
  </xsl:stylesheet>
  
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/skins/common/xslt/fo/footerinfo.xsl
  
  Index: footerinfo.xsl
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                  xmlns:fo="http://www.w3.org/1999/XSL/Format"
                  version="1.0">
  
  <!--
  Named template to generate a short message in the PDF footer, from text in
  skinconf.xml.  By default, the message is a copyright statement.  If a credit
  with @role='pdf' is present, that is used instead.  Eg:
  
  <credit role="pdf">
    <name>Generated by Apache FOP 1.0-dev</name>
    <url>http://xml.apache.org/forrest/fop/dev/</url>
  </credit>
  -->
  
    <xsl:param name="config-file" select="'../../../../skinconf.xml'"/>
    <xsl:variable name="config" select="document($config-file)/skinconfig"/>
  
    <xsl:template name="info">
      <xsl:variable name="pdfcredit" select="$config/credits/credit[@role = 'pdf']"/>
      <xsl:variable name="text">
        <xsl:if test="$pdfcredit">
          <xsl:value-of select="$pdfcredit/name"/>
        </xsl:if>
        <xsl:if test="not($pdfcredit)">
          <xsl:text>Copyright &#169; </xsl:text><xsl:value-of select="$config/year"/>&#160;<xsl:value-of
            select="$config/vendor"/><xsl:text> All rights reserved.</xsl:text>
        </xsl:if>
      </xsl:variable>
      <xsl:variable name="url" select="$pdfcredit/url"/>
  
      <fo:block-container font-style="italic" absolute-position="absolute"
        left="0pt" top="0pt" right="6.25in" bottom="150pt"
        font-size="10pt">
        <xsl:if test="not($url)">
          <fo:block text-align="center" color="lightgrey">
            <xsl:value-of select="$text"/>
          </fo:block>
        </xsl:if>
        <xsl:if test="$url">
          <fo:block text-align="center">
            <fo:basic-link color="lightgrey"
              external-destination="{$url}">
              <xsl:value-of select="$text"/>
            </fo:basic-link>
          </fo:block>
          <fo:block text-align="center">
            <fo:basic-link color="lightgrey"
              external-destination="{$url}">
              <xsl:value-of select="$url"/>
            </fo:basic-link>
          </fo:block>
        </xsl:if>
      </fo:block-container>
    </xsl:template>
  
  </xsl:stylesheet>
  
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/skins/common/xslt/fo/pdfoutline.xsl
  
  Index: pdfoutline.xsl
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                  xmlns:fo="http://www.w3.org/1999/XSL/Format"
                  xmlns:fox="http://xml.apache.org/fop/extensions"
                  version="1.0">
  
  <xsl:template match="document" mode="outline">
        <xsl:apply-templates select="body/section" mode="outline"/>
  </xsl:template>
  
  <xsl:template match="section" mode="outline">
    <fox:outline>
      <xsl:attribute name="internal-destination">
        <xsl:choose>
          <xsl:when test="normalize-space(@id)!=''">
            <xsl:value-of select="@id"/>
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="generate-id()"/>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:attribute>
      <fox:label>
        <xsl:number format="1.1.1.1.1.1.1" count="section" level="multiple"/>
        <xsl:text> </xsl:text>
        <xsl:value-of select="title"/>
  
      </fox:label>
      <xsl:apply-templates select="section" mode="outline"/>
    </fox:outline>
  </xsl:template>
  
  </xsl:stylesheet>