Initial custom dookbook.xsl
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
package com.rackspace.cloud.api.docs;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
|
||||
import javax.xml.transform.URIResolver;
|
||||
import javax.xml.transform.Source;
|
||||
import javax.xml.transform.TransformerException;
|
||||
import javax.xml.transform.stream.StreamSource;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.regex.Matcher;
|
||||
|
||||
/**
|
||||
We are adding a customization layer ontop of the docbook one, so we
|
||||
need to distinguish when we wish to visit the original docbook
|
||||
entries or our entries.
|
||||
|
||||
The resolver helps us do this:
|
||||
|
||||
urn:docbkx:stylesheet-orig : will always point to the original
|
||||
stylesheets.
|
||||
**/
|
||||
public class DocBookResolver implements URIResolver {
|
||||
private URIResolver originalResolver;
|
||||
private String type;
|
||||
private static final Pattern urnPattern = Pattern.compile ("urn:docbkx:stylesheet\\-orig(/.*)?");
|
||||
|
||||
public DocBookResolver (URIResolver original, String type) {
|
||||
this.originalResolver = original;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public Source resolve (String href, String base) throws TransformerException {
|
||||
Matcher m = urnPattern.matcher (href);
|
||||
if (m.matches()) {
|
||||
String grpMatch = m.group(1);
|
||||
String file = (m.group(1) == null) ? "/docbook.xsl" : grpMatch;
|
||||
String filePath = "docbook/"+type+file;
|
||||
|
||||
URL url = this.getClass().getClassLoader().getResource(filePath);
|
||||
|
||||
if (url != null) {
|
||||
try {
|
||||
return new StreamSource (url.openStream(), url.toExternalForm());
|
||||
}catch (IOException ioe) {
|
||||
throw new TransformerException ("Can't get docbook refrence "+href+"->"+filePath, ioe);
|
||||
}
|
||||
} else {
|
||||
throw new TransformerException ("Can't resolve docbook link: "+href+"->"+filePath+" Docbook missing in classpath?");
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// We can't resolve, maybe the next resolver in the chain
|
||||
// can.
|
||||
//
|
||||
if (originalResolver != null) {
|
||||
return originalResolver.resolve (href, base);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -3,10 +3,15 @@ package com.rackspace.cloud.api.docs;
|
||||
import java.io.File;
|
||||
|
||||
import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.URIResolver;
|
||||
|
||||
import org.apache.maven.plugin.MojoExecutionException;
|
||||
|
||||
import com.agilejava.docbkx.maven.TransformerBuilder;
|
||||
import com.agilejava.docbkx.maven.AbstractPdfMojo;
|
||||
|
||||
import com.rackspace.cloud.api.docs.FileUtils;
|
||||
import com.rackspace.cloud.api.docs.DocBookResolver;
|
||||
|
||||
public abstract class PDFMojo extends AbstractPdfMojo {
|
||||
private File imageDirectory;
|
||||
@@ -19,9 +24,11 @@ public abstract class PDFMojo extends AbstractPdfMojo {
|
||||
return this.imageDirectory;
|
||||
}
|
||||
|
||||
/*
|
||||
Setup..
|
||||
*/
|
||||
protected String getNonDefaultStylesheetLocation() {
|
||||
return "cloud/fo/dookbook.xsl";
|
||||
}
|
||||
|
||||
|
||||
public void preProcess() throws MojoExecutionException {
|
||||
super.preProcess();
|
||||
|
||||
@@ -39,6 +46,10 @@ public abstract class PDFMojo extends AbstractPdfMojo {
|
||||
setImageDirectory (new File (imageParentDirectory, "images"));
|
||||
}
|
||||
|
||||
protected TransformerBuilder createTransformerBuilder(URIResolver resolver) {
|
||||
return super.createTransformerBuilder (new DocBookResolver (resolver, getType()));
|
||||
}
|
||||
|
||||
public void adjustTransformer(Transformer transformer, String sourceFilename, File targetFile) {
|
||||
super.adjustTransformer(transformer, sourceFilename, targetFile);
|
||||
|
||||
|
||||
237
src/main/resources/cloud/fo/dookbook.xsl
Normal file
237
src/main/resources/cloud/fo/dookbook.xsl
Normal file
@@ -0,0 +1,237 @@
|
||||
<?xml version="1.0"?>
|
||||
<xsl:stylesheet exclude-result-prefixes="d"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:d="http://docbook.org/ns/docbook"
|
||||
xmlns:fo="http://www.w3.org/1999/XSL/Format"
|
||||
version="1.0">
|
||||
|
||||
<xsl:import href="urn:docbkx:stylesheet-orig" />
|
||||
<xsl:import href="urn:docbkx:stylesheet-orig/highlight.xsl" />
|
||||
|
||||
<!-- <xsl:import href="titlefo.xsl"/> -->
|
||||
|
||||
<!--
|
||||
XSL-FO Extensions:
|
||||
|
||||
These are used to do things like generate PDF Bookmarks, which
|
||||
are out of scope in standard XSL-FO 1.0, but which most XSL-FO
|
||||
solutions support via Extensions.
|
||||
|
||||
XSL-FO 1.1, addresses the issue of bookmarks, with a new
|
||||
bookmark element, Apache FOP version > 0.90 supports XSL-FO 1.1.
|
||||
|
||||
Enable 1 and only 1 extension, depending on the XSL-FO
|
||||
implementation.
|
||||
-->
|
||||
<xsl:param name="fop1.extensions" select="1"/> <!-- Apache FOP >= 0.90 -->
|
||||
<xsl:param name="fop.extensions" select="0"/> <!-- Apache FOP < 0.90 -->
|
||||
<xsl:param name="axf.extensions" select="0"/> <!-- Antenna House's XSL Formatter -->
|
||||
<xsl:param name="xep.extensions" select="0"/> <!-- RenderX's XEP -->
|
||||
|
||||
<xsl:param name="use.extensions" select="1"/>
|
||||
<xsl:param name="callouts.extension" select="1"/>
|
||||
<xsl:param name="textinsert.extension" select="1"/>
|
||||
|
||||
|
||||
<!-- Define hard pagebreak -->
|
||||
<xsl:template match="processing-instruction('hard-pagebreak')">
|
||||
<fo:block break-after='page'/>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Root Text Properties -->
|
||||
<xsl:attribute-set name="root.properties">
|
||||
<xsl:attribute name="font-family">sans-serif</xsl:attribute>
|
||||
<xsl:attribute name="font-size">10.5pt</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Title Properties (Sections/Components) -->
|
||||
<xsl:attribute-set name="component.title.properties">
|
||||
<xsl:attribute name="color">rgb(84,141,212)</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<xsl:attribute-set name="section.title.properties">
|
||||
<xsl:attribute name="color">rgb(84,141,212)</xsl:attribute>
|
||||
<xsl:attribute name="font-style">italic</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- <xsl:param name="local.l10n.xml" select="document('gentex_mods.xml')"/> -->
|
||||
|
||||
<!-- Headers -->
|
||||
<xsl:param name="header.column.widths">2 1 2</xsl:param>
|
||||
<xsl:template name="header.content">
|
||||
<xsl:param name="pageclass" select="''"/>
|
||||
<xsl:param name="sequence" select="''"/>
|
||||
<xsl:param name="position" select="''"/>
|
||||
<xsl:param name="gentext-key" select="''"/>
|
||||
|
||||
<fo:block>
|
||||
<xsl:choose>
|
||||
<xsl:when test="$sequence = 'blank'">
|
||||
<!-- nothing -->
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:choose>
|
||||
<xsl:when test="$position = 'left'">
|
||||
<xsl:value-of select="//d:title[1]"/>: <xsl:value-of select="//d:info[1]/d:pubdate"/>
|
||||
</xsl:when>
|
||||
<xsl:when test="$position = 'right'">
|
||||
<xsl:value-of select="//d:info[1]/d:releaseinfo"/>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</fo:block>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Footers -->
|
||||
<xsl:param name="footer.column.widths">4 1 1</xsl:param>
|
||||
<xsl:template name="footer.content">
|
||||
<xsl:param name="pageclass" select="''"/>
|
||||
<xsl:param name="sequence" select="''"/>
|
||||
<xsl:param name="position" select="''"/>
|
||||
<xsl:param name="gentext-key" select="''"/>
|
||||
|
||||
<fo:block>
|
||||
<xsl:choose>
|
||||
<xsl:when test="$sequence = 'blank'">
|
||||
<!-- Nothing -->
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:choose>
|
||||
<xsl:when test="$position = 'left'">
|
||||
Copyright ©
|
||||
<xsl:value-of select="' '"/>
|
||||
<xsl:value-of select="//d:info[1]/d:copyright/d:year"/>
|
||||
<xsl:value-of select="' '"/>
|
||||
<xsl:value-of select="//d:info[1]/d:copyright/d:holder"/>, All rights reserved.
|
||||
</xsl:when>
|
||||
<xsl:when test="$position = 'right'">
|
||||
<fo:page-number/>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</fo:block>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Page Number Format -->
|
||||
<xsl:template name="page.number.format">
|
||||
<xsl:param name="element" select="local-name(.)"/>
|
||||
<xsl:param name="master-reference" select="''"/>
|
||||
|
||||
<xsl:choose>
|
||||
<xsl:when test="$element = 'toc' and self::d:book">i</xsl:when>
|
||||
<xsl:when test="$element = 'preface'">i</xsl:when>
|
||||
<xsl:when test="$element = 'dedication'">i</xsl:when>
|
||||
<xsl:when test="$master-reference = 'cloud-titlepage'">i</xsl:when>
|
||||
<xsl:otherwise>1</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Chapter Numbering -->
|
||||
<xsl:param name="chapter.autolabel" select="0"/>
|
||||
|
||||
<!-- Source Code Properties -->
|
||||
<xsl:param name="shade.verbatim" select="1"/>
|
||||
<xsl:param name="highlight.source" select="1"/>
|
||||
|
||||
<!-- Wrap long examples -->
|
||||
<xsl:attribute-set name="monospace.verbatim.properties">
|
||||
<xsl:attribute name="wrap-option">wrap</xsl:attribute>
|
||||
<xsl:attribute name="hyphenation-character">\</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Admonition Graphics -->
|
||||
<xsl:param name="admon.graphics" select="1"/>
|
||||
<!-- NEED IMAGE PATH -->
|
||||
<!-- <xsl:param name="admon.graphics.path" select="'urn:docbkx:stylesheet/../images/'"/> -->
|
||||
<xsl:param name="admon.graphics.extension" select="'.svg'"/>
|
||||
|
||||
<!-- Callout Graphics -->
|
||||
<xsl:param name="callout.unicode" select="0"/>
|
||||
<xsl:param name="callout.graphics" select="1"/>
|
||||
<xsl:param name="callout.graphics.extension" select="'.svg'"/>
|
||||
<!-- NEED IMAGE PATH -->
|
||||
<!-- <xsl:param name="callout.graphics.path" select="'urn:docbkx:stylesheet/../images/callouts/'"/> -->
|
||||
<xsl:param name="callout.graphics.number.limit" select="30"/>
|
||||
|
||||
<!-- Glossary Setup -->
|
||||
<xsl:param name="glossary.as.blocks" select="1"/>
|
||||
|
||||
<!-- Sets up the Cloud Title Page -->
|
||||
<xsl:template name="user.pagemasters">
|
||||
<fo:simple-page-master master-name="cloudpage-first"
|
||||
page-width="8.5in"
|
||||
page-height="11in"
|
||||
margin-top="0.0in"
|
||||
margin-bottom="0.0in"
|
||||
margin-left="0.0in"
|
||||
margin-right="0.0in"
|
||||
>
|
||||
<xsl:if test="$axf.extensions != 0">
|
||||
<xsl:call-template name="axf-page-master-properties">
|
||||
<xsl:with-param name="page.master">cloudpage-first</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</xsl:if>
|
||||
<fo:region-body margin-bottom="0.0in"
|
||||
margin-top="1.25in"
|
||||
column-gap="0pt"
|
||||
column-count="1"/>
|
||||
<fo:region-before extent="11.0in"
|
||||
display-align="before"
|
||||
background-image="url(img/cover2.svg)"
|
||||
background-repeat="no-repeat"
|
||||
background-position-horizontal="0%"
|
||||
background-position-vertical="0%"/>
|
||||
<fo:region-after
|
||||
extent="0.5in"
|
||||
display-align="after"
|
||||
background-color="rgb(67,173,213)"
|
||||
/>
|
||||
</fo:simple-page-master>
|
||||
|
||||
<!-- setup for title page(s) -->
|
||||
<fo:page-sequence-master master-name="cloud-titlepage">
|
||||
<fo:repeatable-page-master-alternatives>
|
||||
<fo:conditional-page-master-reference master-reference="blank"
|
||||
blank-or-not-blank="blank"/>
|
||||
<fo:conditional-page-master-reference master-reference="cloudpage-first"
|
||||
page-position="first"/>
|
||||
<fo:conditional-page-master-reference master-reference="titlepage-odd"
|
||||
odd-or-even="odd"/>
|
||||
<fo:conditional-page-master-reference
|
||||
odd-or-even="even">
|
||||
<xsl:attribute name="master-reference">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$double.sided != 0">titlepage-even</xsl:when>
|
||||
<xsl:otherwise>titlepage-odd</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:attribute>
|
||||
</fo:conditional-page-master-reference>
|
||||
</fo:repeatable-page-master-alternatives>
|
||||
</fo:page-sequence-master>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="select.user.pagemaster">
|
||||
<xsl:param name="element"/>
|
||||
<xsl:param name="pageclass"/>
|
||||
<xsl:param name="default-pagemaster"/>
|
||||
|
||||
<xsl:choose>
|
||||
<xsl:when test="$default-pagemaster = 'titlepage'">
|
||||
<xsl:value-of select="'cloud-titlepage'" />
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="$default-pagemaster"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Don't output a verso title page -->
|
||||
<xsl:template name="book.titlepage.verso">
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="book.titlepage.before.verso">
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
Reference in New Issue
Block a user