From fee684781b2d6ebb7fe98b54990f764acdc11a75 Mon Sep 17 00:00:00 2001 From: "Jorge L. Williams" Date: Sun, 7 Nov 2010 16:23:26 -0600 Subject: [PATCH] Initial custom dookbook.xsl --- .../cloud/api/docs/DocBookResolver.java | 63 +++++ .../com/rackspace/cloud/api/docs/PDFMojo.java | 17 +- src/main/resources/cloud/fo/dookbook.xsl | 237 ++++++++++++++++++ 3 files changed, 314 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/rackspace/cloud/api/docs/DocBookResolver.java create mode 100644 src/main/resources/cloud/fo/dookbook.xsl diff --git a/src/main/java/com/rackspace/cloud/api/docs/DocBookResolver.java b/src/main/java/com/rackspace/cloud/api/docs/DocBookResolver.java new file mode 100644 index 0000000..951d331 --- /dev/null +++ b/src/main/java/com/rackspace/cloud/api/docs/DocBookResolver.java @@ -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; + } +} diff --git a/src/main/java/com/rackspace/cloud/api/docs/PDFMojo.java b/src/main/java/com/rackspace/cloud/api/docs/PDFMojo.java index 07d2c1f..11f6fce 100644 --- a/src/main/java/com/rackspace/cloud/api/docs/PDFMojo.java +++ b/src/main/java/com/rackspace/cloud/api/docs/PDFMojo.java @@ -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); diff --git a/src/main/resources/cloud/fo/dookbook.xsl b/src/main/resources/cloud/fo/dookbook.xsl new file mode 100644 index 0000000..e6d36c1 --- /dev/null +++ b/src/main/resources/cloud/fo/dookbook.xsl @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + sans-serif + 10.5pt + + + + + rgb(84,141,212) + + + + rgb(84,141,212) + italic + + + + + + 2 1 2 + + + + + + + + + + + + + + + : + + + + + + + + + + + + 4 1 1 + + + + + + + + + + + + + + + Copyright © + + + + , All rights reserved. + + + + + + + + + + + + + + + + + i + i + i + i + 1 + + + + + + + + + + + + + wrap + \ + + + + + + + + + + + + + + + + + + + + + + + + + cloudpage-first + + + + + + + + + + + + + + + + + titlepage-even + titlepage-odd + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +