| <?xml version="1.0"?> |
| |
| <!-- |
| * 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. |
| --> |
| |
| <!-- XSLT stylesheet to convert the Xalan documentation collected in one xml file into a fo file |
| for use in FOP |
| |
| TBD: - The faq doesn't show in the content |
| - check why margin-bottom on the page with properties is too large |
| - check why keep-next not only doesn't work, but leads to repeating already printed lines |
| - make lines containing only code look nicer (smaller line height) |
| - replace bullets in ordered lists with numbers |
| - correct the hack replacing nbsp with '-' |
| - handle the links correctly which have been external in the html doc and are now internal |
| |
| --> |
| |
| <xsl:stylesheet |
| xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" |
| xmlns:fo="http://www.w3.org/1999/XSL/Format"> |
| |
| <!-- to use with document() to get resources.xml --> |
| <xsl:param name="resourceFile" select="'../../sources/xalan/resources.xml'"/> |
| <xsl:param name="project" select="Xalan"/> |
| |
| <xsl:template match ="/"> |
| <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> |
| |
| <!-- defines page layout --> |
| <fo:layout-master-set> |
| <fo:simple-page-master master-name="simple" |
| page-height="29.7cm" |
| page-width="21cm" |
| margin-top="1.5cm" |
| margin-bottom="2cm" |
| margin-left="2.5cm" |
| margin-right="2.5cm"> |
| <fo:region-body margin-top="3cm"/> |
| <fo:region-before extent="1.5cm"/> |
| <fo:region-after extent="1.5cm"/> |
| </fo:simple-page-master> |
| </fo:layout-master-set> |
| |
| <fo:page-sequence master-name="simple"> |
| <fo:static-content flow-name="xsl-region-before"> |
| <fo:block text-align="end" |
| font-size="10pt" |
| font-family="serif" |
| line-height="14pt" > |
| <xsl:value-of select="$project"/> documentation - p. <fo:page-number/> |
| </fo:block> |
| </fo:static-content> |
| |
| <fo:flow flow-name="xsl-region-body"> |
| |
| <fo:block font-size="18pt" |
| font-family="sans-serif" |
| line-height="24pt" |
| space-after.optimum="15pt" |
| background-color="blue" |
| color="white" |
| text-align="center"> |
| <xsl:value-of select="$project"/> - an XSL Transformer |
| </fo:block> |
| |
| |
| <!-- generates table of contents and puts it into a table --> |
| |
| <fo:block font-size="14pt" |
| font-family="sans-serif" |
| line-height="18pt" |
| space-after.optimum="10pt" |
| font-weight="bold" |
| start-indent="15pt"> |
| Content |
| </fo:block> |
| |
| <fo:table> |
| <fo:table-column column-width="1cm"/> |
| <fo:table-column column-width="10cm"/> |
| <fo:table-column column-width="5cm"/> |
| <fo:table-body font-size="12pt" |
| line-height="16pt" |
| font-family="sans-serif"> |
| <fo:table-row> |
| <fo:table-cell> |
| <fo:block text-align="end" > |
| </fo:block> |
| </fo:table-cell> |
| <fo:table-cell> |
| <fo:block text-align="end" > |
| </fo:block> |
| </fo:table-cell> |
| <fo:table-cell> |
| <fo:block text-align="end" > |
| page |
| </fo:block> |
| </fo:table-cell> |
| </fo:table-row> |
| <xsl:for-each select="documentation/chapter"> |
| <fo:table-row> |
| <fo:table-cell> |
| <fo:block text-align="end" > |
| <xsl:number value="position()" format="I"/>. |
| </fo:block> |
| </fo:table-cell> |
| <fo:table-cell> |
| <fo:block text-align="start" > |
| <fo:basic-link color="blue"> |
| <xsl:attribute name="internal-destination"> |
| <xsl:value-of select="@id"/> |
| </xsl:attribute> |
| <xsl:value-of select="s1/@title|faqs/@title"/> |
| </fo:basic-link> |
| </fo:block> |
| </fo:table-cell> |
| <fo:table-cell> |
| <fo:block text-align="end"> |
| <fo:page-number-citation ref-id="{@id}"/> |
| </fo:block> |
| </fo:table-cell> |
| </fo:table-row> |
| </xsl:for-each> |
| </fo:table-body> |
| </fo:table> |
| <xsl:apply-templates/> |
| </fo:flow> |
| </fo:page-sequence> |
| </fo:root> |
| </xsl:template> |
| |
| <!--chapter--> |
| <xsl:template match="chapter"> |
| <fo:block id="{@id}" break-before="page"/> |
| <xsl:apply-templates/> |
| </xsl:template> |
| |
| <!-- s1 --> |
| <xsl:template match ="s1"> |
| <fo:block font-size="18pt" |
| font-family="sans-serif" |
| line-height="24pt" |
| space-before.optimum="15pt" |
| space-after.optimum="15pt" |
| background-color="blue" |
| color="white" |
| keep-with-next.within-page="always" |
| text-align="center"> |
| <xsl:attribute name="id"> |
| <xsl:value-of select="translate(@title,' ),-.(','____')"/> |
| </xsl:attribute> |
| <xsl:value-of select="@title"/> |
| </fo:block> |
| <xsl:apply-templates/> |
| </xsl:template> |
| |
| <!-- s2 --> |
| <xsl:template match ="s2"> |
| <fo:block font-size="16pt" |
| font-family="sans-serif" |
| line-height="20pt" |
| keep-with-next.within-page="always" |
| space-before.optimum="15pt" |
| space-after.optimum="12pt" |
| text-align="start" |
| padding-top="3pt" |
| > |
| <xsl:value-of select="@title"/> |
| </fo:block> |
| <xsl:apply-templates/> |
| </xsl:template> |
| |
| <!-- s3 --> |
| <xsl:template match ="s3"> |
| <fo:block font-size="14pt" |
| font-family="sans-serif" |
| line-height="18pt" |
| keep-with-next.within-page="always" |
| space-before.optimum="10pt" |
| space-after.optimum="9pt" |
| text-align="start" |
| padding-top="3pt"> |
| <xsl:value-of select="@title"/> |
| </fo:block> |
| <xsl:apply-templates/> |
| </xsl:template> |
| |
| <!-- p [not(code)] --> |
| <xsl:template match ="p"> |
| <fo:block font-size="11pt" |
| font-family="sans-serif" |
| line-height="13pt" |
| space-after.optimum="3pt" |
| space-before.optimum="3pt" |
| text-align="start"> |
| <xsl:apply-templates/> |
| </fo:block> |
| </xsl:template> |
| |
| <xsl:template match ="note"> |
| <fo:block font-size="11pt" |
| font-family="sans-serif" |
| font-weight="italic" |
| line-height="13pt" |
| space-after.optimum="3pt" |
| space-before.optimum="3pt" |
| text-align="start"> |
| Note: |
| <xsl:apply-templates/> |
| </fo:block> |
| </xsl:template> |
| |
| <xsl:template match="anchor"> |
| <fo:block> <!--id="concat(local-name(ancestor::node()="chapter"/@id.,'_',{./@name}"/--> |
| <xsl:attribute name="id"> |
| <xsl:value-of select="concat(ancestor::chapter/@id,'_',./@name)"/> |
| </xsl:attribute> |
| </fo:block> |
| </xsl:template> |
| |
| <xsl:template match="table"> |
| <xsl:variable name="colwidth" select="14.5 div count(tr[1]/td)"/> |
| <fo:table> |
| <xsl:for-each select="tr[1]/td"> |
| <fo:table-column column-width="{$colwidth}cm"/> |
| </xsl:for-each> |
| <fo:table-body font-size="10pt" font-family="sans-serif"> |
| <xsl:apply-templates/> |
| </fo:table-body> |
| </fo:table> |
| </xsl:template> |
| <xsl:template match="tr"> |
| <fo:table-row> |
| <xsl:apply-templates/> |
| </fo:table-row> |
| </xsl:template> |
| <xsl:template match="td"> |
| <fo:table-cell> |
| <fo:block> |
| <xsl:apply-templates/> |
| </fo:block> |
| </fo:table-cell> |
| </xsl:template> |
| |
| <!-- p + code |
| <xsl:template match ="p[code]"> |
| <fo:block font-size="11pt" |
| font-family="sans-serif" |
| line-height="11pt" |
| space-after.optimum="0pt" |
| space-before.optimum="0pt" |
| text-align="start"> |
| <xsl:apply-templates/> |
| </fo:block> |
| </xsl:template> |
| --> |
| |
| <xsl:template match="img"> |
| <fo:block> |
| <fo:external-graphic src="file:build/docs/images/{@src}"/> |
| </fo:block> |
| </xsl:template> |
| |
| <!-- faqs --> |
| <xsl:template match ="faqs"> |
| <fo:block font-size="18pt" |
| font-family="sans-serif" |
| line-height="24pt" |
| space-before.optimum="15pt" |
| space-after.optimum="15pt" |
| background-color="blue" |
| color="white" |
| text-align="center" |
| > |
| <xsl:attribute name="id"> |
| <xsl:value-of select="translate(.,' ),-.(','____')"/> |
| </xsl:attribute> |
| <xsl:value-of select="@title"/> |
| </fo:block> |
| <xsl:apply-templates/> |
| </xsl:template> |
| |
| <!-- faq --> |
| <xsl:template match ="faq"> |
| <xsl:apply-templates/> |
| </xsl:template> |
| |
| <!-- q in faq --> |
| <xsl:template match="q"> |
| <fo:block font-size="14pt" |
| font-family="sans-serif" |
| line-height="18pt" |
| keep-with-next.within-page="always" |
| space-before.optimum="10pt" |
| space-after.optimum="9pt" |
| text-align="start" |
| padding-top="3pt"> |
| <xsl:apply-templates/> |
| </fo:block> |
| </xsl:template> |
| |
| <!-- a in faq --> |
| <xsl:template match ="a"> |
| <xsl:apply-templates/> |
| </xsl:template> |
| |
| |
| <!-- jump (links) --> |
| <xsl:template match ="jump"> |
| <fo:basic-link color="blue"> |
| <xsl:attribute name="external-destination"> |
| <xsl:if test="starts-with(@href,'apidocs')"> |
| <xsl:value-of select="concat('http://xml.apache.org/xalan-j/',@href)"/> |
| </xsl:if> |
| <xsl:if test="not(starts-with(@href,'apidocs'))"> |
| <xsl:value-of select="@href"/> |
| </xsl:if> |
| </xsl:attribute> |
| <xsl:value-of select="./text()"/> |
| <!--xsl:apply-templates/--> |
| </fo:basic-link> |
| </xsl:template> |
| |
| <xsl:template match="link"> |
| <xsl:if test="string-length(@anchor)=0"> |
| <xsl:if test="string-length(@idref)=0"> |
| <xsl:apply-templates/> |
| </xsl:if> |
| <xsl:if test="string-length(@idref)>0"> |
| <fo:basic-link color="blue" internal-destination="{@idref}"> |
| <xsl:value-of select="./text()"/></fo:basic-link> |
| </xsl:if> |
| </xsl:if> |
| |
| <xsl:if test="string-length(@anchor)>0"> |
| <xsl:if test="string-length(@idref)=0"> |
| <fo:basic-link color="blue" |
| internal-destination="{concat(ancestor::chapter/@id,'_',@anchor)}"> |
| <xsl:value-of select="./text()"/></fo:basic-link> |
| </xsl:if> |
| <xsl:if test="string-length(@idref)>0"> |
| <fo:basic-link color="blue" internal-destination="{@idref}_{@anchor}"> |
| <xsl:value-of select="./text()"/></fo:basic-link> |
| </xsl:if> |
| </xsl:if> |
| </xsl:template> |
| |
| |
| <xsl:template match="resource-ref"> |
| <xsl:variable name="xref" select="@idref"/> |
| <xsl:variable name="href" |
| select="document($resourceFile)/resources/resource[@id=$xref]/@location"/> |
| <xsl:variable name="label" |
| select="document($resourceFile)/resources/resource[@id=$xref]/@title"/> |
| <fo:basic-link color="blue"> |
| <xsl:attribute name="external-destination"> |
| <xsl:if test="starts-with($href,'apidocs')"> |
| <xsl:value-of select="concat('http://xml.apache.org/xalan-j/',$href)"/> |
| </xsl:if> |
| <xsl:if test="not(starts-with($href,'apidocs'))"> |
| <xsl:value-of select="$href"/> |
| </xsl:if> |
| </xsl:attribute> |
| <xsl:value-of select="$label"/> |
| <!--xsl:apply-templates/--> |
| </fo:basic-link> |
| </xsl:template> |
| |
| <xsl:template match="human-resource-ref"> |
| <xsl:variable name="resourceFile" |
| select="./xalan/resources.xml"/> |
| <xsl:variable name="ref" select="@idref"/> |
| <xsl:variable name="mailto" |
| select="document($resourceFile)/resources/human-resource[@id=$ref]/@mailto"/> |
| <xsl:variable name="name" |
| select="document($resourceFile)/resources/human-resource[@id=$ref]/@name"/> |
| <fo:basic-link color="blue" external-destination="mailto:{$mailto}"> |
| <xsl:value-of select="$name"/> |
| <!--xsl:apply-templates/--> |
| </fo:basic-link> |
| </xsl:template> |
| |
| <xsl:template match ="source"> |
| <fo:block font-size="10pt" |
| font-family="Courier" |
| text-align="start" |
| white-space-collapse="false"> |
| <xsl:apply-templates/> |
| </fo:block> |
| |
| </xsl:template> |
| <xsl:template match ="br"> |
| <fo:block></fo:block> |
| </xsl:template> |
| |
| <!-- code --> |
| <xsl:template match ="*/code"> |
| <fo:inline font-size="10pt" |
| font-family="Courier"> |
| <xsl:apply-templates/> |
| </fo:inline> |
| </xsl:template> |
| |
| <!-- ul (unordered list) --> |
| <xsl:template match ="ul"> |
| <fo:list-block start-indent="1cm" |
| provisional-distance-between-starts="12pt" |
| font-family="sans-serif" |
| font-size="11pt" |
| line-height="11pt"> |
| <xsl:apply-templates/> |
| </fo:list-block> |
| </xsl:template> |
| |
| <!-- ol (ordered list) --> |
| <xsl:template match ="ol"> |
| <fo:list-block start-indent="1cm" |
| provisional-distance-between-starts="12pt" |
| font-family="sans-serif" |
| font-size="11pt" |
| line-height="11pt"> |
| <xsl:apply-templates/> |
| </fo:list-block> |
| </xsl:template> |
| |
| |
| <!-- li (list item) in unordered list --> |
| <xsl:template match ="ul/li"> |
| <fo:list-item> |
| <fo:list-item-label> |
| <fo:block><fo:inline font-family="Symbol">·</fo:inline></fo:block> |
| </fo:list-item-label> |
| <fo:list-item-body> |
| <fo:block space-after.optimum="4pt" |
| text-align="start" |
| padding-top="3pt"> |
| <xsl:apply-templates/> |
| </fo:block> |
| </fo:list-item-body> |
| </fo:list-item> |
| </xsl:template> |
| |
| <!-- li (list item) in ordered list --> |
| <xsl:template match ="ol/li"> |
| <fo:list-item> |
| <fo:list-item-label> |
| <fo:block> |
| <xsl:number level="multiple" count="li" format="1"/>) |
| </fo:block> |
| </fo:list-item-label> |
| <fo:list-item-body> |
| <fo:block space-after.optimum="4pt" |
| text-align="start" |
| padding-top="3pt"> |
| <xsl:apply-templates/> |
| </fo:block> |
| </fo:list-item-body> |
| </fo:list-item> |
| </xsl:template> |
| |
| <!-- temporary kludge for definition list gloss with label-item pairs ) --> |
| |
| <xsl:template match="gloss"> |
| <xsl:apply-templates/> |
| </xsl:template> |
| <xsl:template match="label"> |
| <fo:block font-size="11pt" |
| font-family="sans-serif" |
| line-height="13pt" |
| space-after.optimum="3pt" |
| space-before.optimum="6pt" |
| text-align="start"> |
| <xsl:apply-templates/> |
| </fo:block> |
| </xsl:template> |
| <xsl:template match="item"> |
| <fo:block font-size="11pt" |
| font-family="sans-serif" |
| line-height="13pt" |
| space-after.optimum="6pt" |
| space-before.optimum="0pt" |
| margin-left="24pt" |
| text-align="start"> |
| <xsl:apply-templates/> |
| <fo:block></fo:block> |
| </fo:block> |
| </xsl:template> |
| |
| <!-- end body --> |
| |
| </xsl:stylesheet> |