keiron 2002/11/12 01:12:36 Added: src/documentation cocoon.diff forrest.diff Log: diffs to make fop cvs trunk work with cocoon and forrest better handles images, pdf bookmarks and some other changes Revision Changes Path 1.1 xml-fop/src/documentation/cocoon.diff Index: cocoon.diff =================================================================== Index: src/blocks/fop/java/org/apache/cocoon/serialization/FOPSerializer.java =================================================================== RCS file: /home/cvspublic/xml-cocoon2/src/blocks/fop/java/org/apache/cocoon/serialization/FOPSerializer.java,v retrieving revision 1.3 diff -u -r1.3 FOPSerializer.java --- src/blocks/fop/java/org/apache/cocoon/serialization/FOPSerializer.java 23 Sep 2002 03:30:44 -0000 1.3 +++ src/blocks/fop/java/org/apache/cocoon/serialization/FOPSerializer.java 8 Nov 2002 12:06:40 -0000 @@ -62,18 +62,28 @@ import org.apache.cocoon.components.url.URLFactory; import org.apache.cocoon.util.ClassUtils; import org.apache.cocoon.environment.URLFactorySourceResolver; -import org.apache.cocoon.environment.Source; +import org.apache.cocoon.environment.Environment; +import org.apache.excalibur.source.Source; +import org.apache.excalibur.source.SourceResolver; import org.apache.excalibur.source.SourceValidity; import org.apache.excalibur.source.impl.validity.NOPValidity; import org.apache.fop.apps.Driver; -import org.apache.fop.apps.Options; -import org.apache.fop.messaging.MessageHandler; import org.apache.fop.render.Renderer; -import org.apache.fop.configuration.ConfigurationParser; +import org.apache.fop.fo.FOUserAgent; +import org.apache.cocoon.components.RequestLifecycleComponent; +import org.apache.avalon.framework.component.Component; +import org.apache.cocoon.ProcessingException; +import org.xml.sax.SAXException; +import org.apache.cocoon.components.RequestLifecycleComponent; + +import java.io.IOException; +import java.util.Map; import java.io.OutputStream; import java.io.File; import java.io.Serializable; +import java.io.InputStream; +import java.net.URL; import java.net.MalformedURLException; /** @@ -83,7 +93,7 @@ */ public class FOPSerializer extends AbstractSerializer -implements Composable, Configurable, CacheableProcessingComponent { +implements Composable, Configurable, CacheableProcessingComponent, RequestLifecycleComponent { /** * The Renderer Factory to use @@ -96,6 +106,11 @@ protected Driver driver; /** + * The current <code>FOUserAgent</code>. + */ + protected FOUserAgent userAgent; + + /** * The current <code>Renderer</code>. */ protected Renderer renderer; @@ -144,24 +159,6 @@ public void configure(Configuration conf) throws ConfigurationException { this.logger = getLogger().getChildLogger("fop"); - MessageHandler.setScreenLogger(this.logger); - - // FIXME: VG: Initialize static FOP configuration with defaults, only once. - // FOP has static config, but that's going to change in the near future. - // Then this code should be reviewed. - synchronized (FOPSerializer.class) { - if (!configured) { - try { - if (getLogger().isDebugEnabled()) { - getLogger().debug("Loading default configuration"); - } - new Options(); - } catch (Exception e) { - getLogger().error("Cannot load default configuration. Proceeding.", e); - } - configured = true; - } - } this.setContentLength = conf.getChild("set-content-length").getValueAsBoolean(true); @@ -179,28 +176,6 @@ // New syntax: Element user-config contains URL configUrl = conf.getChild("user-config").getValue(null); } - if(configUrl != null) { - URLFactory urlFactory = null; - Source configSource = null; - try { - // FIXME: How to do without URLFactory but relative to context? - urlFactory = (URLFactory)manager.lookup(URLFactory.ROLE); - URLFactorySourceResolver urlResolver = new URLFactorySourceResolver(urlFactory, manager); - configSource = urlResolver.resolve(configUrl); - if (getLogger().isDebugEnabled()) { - getLogger().debug("Loading configuration from " + configSource.getSystemId()); - } - configSource.toSAX(new ConfigurationParser()); - } catch (Exception e) { - getLogger().warn("Cannot load configuration from " + configUrl); - throw new ConfigurationException("Cannot load configuration from " + configUrl, e); - } finally { - manager.release(urlFactory); - if (configSource != null) { - configSource.recycle(); - } - } - } // Get the mime type. this.mimetype = conf.getAttribute("mime-type"); @@ -232,6 +207,21 @@ + "no renderer was specified in the sitemap configuration." ); } + + userAgent = new FOUserAgent(); + userAgent.enableLogging(this.logger); + //userAgent.setBaseURL(source.getSystemId()); + + // load the fop driver + this.driver = new Driver(); + driver.enableLogging(this.logger); + driver.setUserAgent(userAgent); + + driver.setRenderer(this.renderer); + + //driver.configure(conf); + driver.initialize(); + } /** @@ -241,27 +231,40 @@ return mimetype; } + public void setup(final org.apache.cocoon.environment.SourceResolver resolver, Map objectModel) + throws ProcessingException, SAXException, IOException { + + userAgent = new FOUserAgent() { + public InputStream getStream(String uri) { + try { + Environment env = (Environment) resolver; + org.apache.cocoon.environment.Source source = null; + org.apache.cocoon.components.source.CocoonSourceFactory ccf; + ccf = new org.apache.cocoon.components.source.CocoonSourceFactory(null, manager); + ccf.enableLogging(logger); + source = ccf.getSource(env, "/" + uri); + getLogger().error("Loading image from " + source.getSystemId()); + InputStream is = source.getInputStream(); + getLogger().error("input stream: " + is + ":" + is.available()); + return is; + } catch (Exception e) { + getLogger().error("Cannot load source", e); + } + return null; + } + }; + userAgent.enableLogging(this.logger); + //userAgent.setBaseURL(source.getSystemId()); + + driver.setUserAgent(userAgent); + + } + /** * Create the FOP driver * Set the <code>OutputStream</code> where the XML should be serialized. */ public void setOutputStream(OutputStream out) { - // load the fop driver - this.driver = new Driver(); - this.driver.setLogger(this.logger); - if (this.rendererName == null) { - this.renderer = factory.createRenderer(mimetype); - } else { - try { - this.renderer = (Renderer)ClassUtils.newInstance(this.rendererName); - } catch (Exception e) { - if (getLogger().isWarnEnabled()) { - getLogger().warn("Cannot load class " + this.rendererName, e); - } - throw new RuntimeException("Cannot load class " + this.rendererName + "(" + e + ")"); - } - } - this.driver.setRenderer(this.renderer); this.driver.setOutputStream(out); setContentHandler(this.driver.getContentHandler()); } @@ -295,8 +298,7 @@ */ public void recycle() { super.recycle(); - this.driver = null; - this.renderer = null; + this.driver.reset(); } /** @@ -306,3 +308,4 @@ return this.setContentLength; } } + Index: src/java/org/apache/cocoon/components/pipeline/AbstractProcessingPipeline.java =================================================================== RCS file: /home/cvspublic/xml-cocoon2/src/java/org/apache/cocoon/components/pipeline/AbstractProcessingPipeline.java,v retrieving revision 1.24 diff -u -r1.24 AbstractProcessingPipeline.java --- src/java/org/apache/cocoon/components/pipeline/AbstractProcessingPipeline.java 11 Oct 2002 08:36:30 -0000 1.24 +++ src/java/org/apache/cocoon/components/pipeline/AbstractProcessingPipeline.java 8 Nov 2002 12:06:40 -0000 @@ -62,6 +62,7 @@ import org.apache.cocoon.ConnectionResetException; import org.apache.cocoon.ProcessingException; import org.apache.cocoon.components.CocoonComponentManager; +import org.apache.cocoon.components.RequestLifecycleComponent; import org.apache.cocoon.components.treeprocessor.ProcessingNode; import org.apache.cocoon.environment.Environment; import org.apache.cocoon.environment.ObjectModelHelper; @@ -392,6 +393,15 @@ environment.getObjectModel(), (String)transformerSourceItt.next(), (Parameters)transformerParamItt.next() + ); + } + + // WARNING: quick hack + // setup the generator + if(this.serializer instanceof RequestLifecycleComponent) { + ((RequestLifecycleComponent)this.serializer).setup( + environment, + environment.getObjectModel() ); } 1.1 xml-fop/src/documentation/forrest.diff Index: forrest.diff =================================================================== Index: src/resources/skins/forrest-site/xslt/fo/document2fo.xsl =================================================================== RCS file: /home/cvspublic/xml-forrest/src/resources/skins/forrest-site/xslt/fo/document2fo.xsl,v retrieving revision 1.3 diff -u -r1.3 document2fo.xsl --- src/resources/skins/forrest-site/xslt/fo/document2fo.xsl 1 Nov 2002 02:49:58 -0000 1.3 +++ src/resources/skins/forrest-site/xslt/fo/document2fo.xsl 8 Nov 2002 12:05:50 -0000 @@ -2,6 +2,7 @@ <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:output method="xml"/> @@ -80,14 +81,52 @@ </fo:repeatable-page-master-alternatives> </fo:page-sequence-master> </fo:layout-master-set> - + + <fox:bookmarks> + <xsl:apply-templates select="document/body/section" mode="bookmarks"/> + </fox:bookmarks> + <fo:page-sequence master-reference="book"> <xsl:apply-templates/> </fo:page-sequence> </fo:root> </xsl:template> - + + <xsl:template match="section" mode="bookmarks"> + <fox:outline internal-destination="{generate-id()}"> + <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 mode="bookmarks"/> + </fox:outline> + </xsl:template> + + <xsl:template match="*" mode="bookmarks"> + <xsl:apply-templates mode="bookmarks"/> + </xsl:template> + + <xsl:template name="info"> + <fo:block-container font-style="italic" absolute-position="absolute" + left="0pt" top="0pt" right="6.25in" bottom="150pt" + font-size="10pt"> + <fo:block text-align="center"> + <fo:basic-link color="lightgrey" + external-destination="http://xml.apache.org/fop/dev"> + Created by: FOP 1.0dev + </fo:basic-link> + </fo:block> + <fo:block text-align="center"> + <fo:basic-link color="lightgrey" + external-destination="http://xml.apache.org/fop/dev"> + http://xml.apache.org/fop/dev + </fo:basic-link> + </fo:block> + </fo:block-container> + </xsl:template> + <xsl:template match="document"> <fo:title><xsl:value-of select="header/title"/></fo:title> @@ -102,6 +141,7 @@ text-align="start"> Page <fo:page-number/> </fo:block> + <xsl:call-template name="info"/> </fo:static-content> <fo:static-content flow-name="even-header"> @@ -110,6 +150,7 @@ font-style="italic"> <xsl:value-of select="header/title"/> </fo:block> + <xsl:call-template name="info"/> </fo:static-content> <fo:static-content flow-name="even-footer"> @@ -131,6 +172,7 @@ font-style="italic"> <xsl:value-of select="header/title"/> </fo:block> + <xsl:call-template name="info"/> </fo:static-content> <fo:static-content flow-name="odd-footer"> @@ -191,7 +233,12 @@ 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> @@ -201,9 +248,15 @@ font-family="serif" font-size="{$size}pt" font-weight="bold" - space-before="12pt"> + space-before="12pt" + id="{generate-id()}"> <xsl:number format="1.1.1.1.1.1.1" count="section" level="multiple"/> <xsl:text> </xsl:text> + + <xsl:if test="normalize-space(@id)!=''"> + <fo:block id="{@id}"/> + </xsl:if> + <xsl:value-of select="title"/> </fo:block> <xsl:apply-templates> @@ -255,6 +308,9 @@ 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> @@ -456,7 +512,14 @@ </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">
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]