You are viewing a plain text version of this content. The canonical link for it is here.
Posted to doxia-commits@maven.apache.org by vs...@apache.org on 2006/07/25 21:33:51 UTC
svn commit: r425493 - in /maven/doxia/trunk/doxia-sandbox:
doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/
doxia-maven-plugin/src/main/java/org/apache/maven/doxia/plugin/
Author: vsiveton
Date: Tue Jul 25 12:33:51 2006
New Revision: 425493
URL: http://svn.apache.org/viewvc?rev=425493&view=rev
Log:
o Replaced ITextBookRenderer by PDF and RTF renderers. <format>itext</format> is deprecated in favor of <format>pdf</format>
o Corrected a toString() bug.
Added:
maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/AbstractITextBookRenderer.java
maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/PdfBookRenderer.java
maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/RtfBookRenderer.java
Removed:
maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/ITextBookRenderer.java
Modified:
maven/doxia/trunk/doxia-sandbox/doxia-maven-plugin/src/main/java/org/apache/maven/doxia/plugin/DoxiaRenderBooksMojo.java
Added: maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/AbstractITextBookRenderer.java
URL: http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/AbstractITextBookRenderer.java?rev=425493&view=auto
==============================================================================
--- maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/AbstractITextBookRenderer.java (added)
+++ maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/AbstractITextBookRenderer.java Tue Jul 25 12:33:51 2006
@@ -0,0 +1,293 @@
+package org.apache.maven.doxia.book.services.renderer;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.text.DateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.doxia.Doxia;
+import org.apache.maven.doxia.book.BookDoxiaException;
+import org.apache.maven.doxia.book.context.BookContext;
+import org.apache.maven.doxia.book.model.BookModel;
+import org.apache.maven.doxia.book.model.Chapter;
+import org.apache.maven.doxia.book.model.Section;
+import org.apache.maven.doxia.editor.io.PipelineSink;
+import org.apache.maven.doxia.module.itext.ITextSink;
+import org.apache.maven.doxia.parser.ParseException;
+import org.apache.maven.doxia.parser.manager.ParserNotFoundException;
+import org.apache.maven.doxia.sink.Sink;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.xml.PrettyPrintXMLWriter;
+
+/**
+ * Base class for <code>iText</code> renderer.
+ *
+ * @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a>
+ * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
+ * @version $Id$
+ */
+public abstract class AbstractITextBookRenderer
+ extends AbstractLogEnabled
+ implements BookRenderer
+{
+ /**
+ * @plexus.requirement
+ */
+ private Doxia doxia;
+
+ // ----------------------------------------------------------------------
+ // BookRenderer Implementation
+ // ----------------------------------------------------------------------
+
+ public void renderBook( BookContext context )
+ throws BookDoxiaException
+ {
+ BookModel book = context.getBook();
+
+ if ( !context.getOutputDirectory().exists() )
+ {
+ if ( !context.getOutputDirectory().mkdirs() )
+ {
+ throw new BookDoxiaException( "Could not make directory: "
+ + context.getOutputDirectory().getAbsolutePath() + "." );
+ }
+ }
+
+ File bookFile = new File( context.getOutputDirectory(), book.getId() + ".xml" );
+
+ FileWriter fileWriter;
+
+ try
+ {
+ fileWriter = new FileWriter( bookFile );
+ }
+ catch ( IOException e )
+ {
+ throw new BookDoxiaException( "Error while opening file.", e );
+ }
+
+ // ----------------------------------------------------------------------
+ // Create the XML File
+ // ----------------------------------------------------------------------
+
+ PrettyPrintXMLWriter writer = new PrettyPrintXMLWriter( fileWriter, "UTF-8", null );
+ writer.startElement( "itext" );
+ writer.addAttribute( "creationdate", DateFormat.getDateTimeInstance().format( new Date() ) );
+ writer.addAttribute( "producer", "Doxia iText" );
+
+ // writer.startElement( "paragraph" );
+ // writer.addAttribute( "leading", "18.0" );
+ // writer.addAttribute( "font", "unknown" );
+ // writer.addAttribute( "align", "Default" );
+ // writer.writeText( "Please visit my" + System.getProperty( "line.separator" ) );
+ //
+ // writer.startElement( "anchor" );
+ // writer.addAttribute( "leading", "18.0" );
+ // writer.addAttribute( "font", "Helvetica" );
+ // writer.addAttribute( "size", "12.0" );
+ // writer.addAttribute( "fontstyle", "normal, underline" );
+ // writer.addAttribute( "red", "0" );
+ // writer.addAttribute( "green", "0" );
+ // writer.addAttribute( "blue", "255" );
+ // writer.addAttribute( "name", "top" );
+ // writer.addAttribute( "reference", "http://www.lowagie.com/iText/" );
+ //
+ // writer.startElement( "chunk" );
+ // writer.addAttribute( "font", "Helvetica" );
+ // writer.addAttribute( "size", "12.0" );
+ // writer.addAttribute( "fontstyle", "normal, underline" );
+ // writer.addAttribute( "red", "0" );
+ // writer.addAttribute( "green", "0" );
+ // writer.addAttribute( "blue", "255" );
+ // writer.writeText( "website (external reference)" );
+ // writer.endElement();
+ //
+ // writer.endElement(); // anchor
+ //
+ // writer.endElement(); // paragraph
+
+ // TODO: Write out TOC
+
+ for ( Iterator it = book.getChapters().iterator(); it.hasNext(); )
+ {
+ Chapter chapter = (Chapter) it.next();
+
+ renderChapter( writer, chapter, context );
+ }
+
+ writer.endElement(); // itext
+
+ try
+ {
+ fileWriter.close();
+ }
+ catch ( IOException e )
+ {
+ throw new BookDoxiaException( "Error while closing file.", e );
+ }
+
+ // ----------------------------------------------------------------------
+ // Render the XML to PDF
+ // ----------------------------------------------------------------------
+ File outputFile = new File( context.getOutputDirectory(), book.getId() + "." + getOutputExtension() );
+ try
+ {
+ renderXML( bookFile, outputFile );
+ }
+ catch ( IOException e )
+ {
+ throw new BookDoxiaException( "Error while rendering file", e );
+ }
+ }
+
+ /**
+ * Get the output extension supported
+ *
+ * @return the ouput extension supported
+ */
+ public abstract String getOutputExtension();
+
+ /**
+ * Generate an ouput file with the iText framework
+ *
+ * @param iTextFile
+ * @param iTextOutput
+ * @throws IOException if any
+ */
+ public abstract void renderXML( File iTextFile, File iTextOutput )
+ throws IOException;
+
+ // ----------------------------------------------------------------------
+ // Private
+ // ----------------------------------------------------------------------
+
+ private void renderChapter( PrettyPrintXMLWriter writer, Chapter chapter, BookContext context )
+ throws BookDoxiaException
+ {
+ writer.startElement( "chapter" );
+ writer.addAttribute( "numberdepth", "1" );
+ writer.addAttribute( "depth", "1" );
+ writer.addAttribute( "indent", "1" );
+
+ startTitle( writer, "36.0", "Helvetica", "24.0", "normal", "255", "0", "0" );
+ chunk( writer, chapter.getTitle(), "Helvetica", "24.0", "normal", "255", "0", "0" );
+ writer.endElement(); // title
+
+ // writer.startElement( "sectioncontent" );
+ for ( Iterator it = chapter.getSections().iterator(); it.hasNext(); )
+ {
+ Section section = (Section) it.next();
+
+ renderSection( writer, section, context );
+ }
+ // writer.endElement(); // sectioncontent
+
+ writer.endElement(); // chapter
+ }
+
+ private void renderSection( PrettyPrintXMLWriter writer, Section section, BookContext context )
+ throws BookDoxiaException
+ {
+ // writer.startElement( "section" );
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ BookContext.BookFile bookFile = (BookContext.BookFile) context.getFiles().get( section.getId() );
+
+ if ( bookFile == null )
+ {
+ throw new BookDoxiaException( "No document that matches section with id=" + section.getId() + "." );
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ Sink itextSink = new ITextSink( writer );
+
+ List pipeline = new ArrayList();
+ // pipeline.add( DebugSink.newInstance() );
+ pipeline.add( itextSink );
+ Sink sink = PipelineSink.newInstance( pipeline );
+
+ try
+ {
+ doxia.parse( new FileReader( bookFile.getFile() ), bookFile.getParserId(), sink );
+ }
+ catch ( ParserNotFoundException e )
+ {
+ throw new BookDoxiaException( "Parser not found: " + bookFile.getParserId() + ".", e );
+ }
+ catch ( ParseException e )
+ {
+ throw new BookDoxiaException(
+ "Error while parsing document: " + bookFile.getFile().getAbsolutePath() + ".",
+ e );
+ }
+ catch ( FileNotFoundException e )
+ {
+ throw new BookDoxiaException( "Could not find document: " + bookFile.getFile().getAbsolutePath() + ".", e );
+ }
+
+ // writer.endElement(); // section
+ }
+
+ private void startTitle( PrettyPrintXMLWriter writer, String leading, String font, String size, String fontstyle,
+ String red, String green, String blue )
+ {
+ writer.startElement( "title" );
+ writer.addAttribute( "leading", leading );
+ writer.addAttribute( "font", font );
+ writer.addAttribute( "size", size );
+ writer.addAttribute( "fontstyle", fontstyle );
+ writer.addAttribute( "red", red );
+ writer.addAttribute( "green", green );
+ writer.addAttribute( "blue", blue );
+ }
+
+ private void chunk( PrettyPrintXMLWriter writer, String title, String font, String size, String fontstyle,
+ String red, String green, String blue )
+ {
+ writer.startElement( "chunk" );
+ writer.addAttribute( "font", font );
+ writer.addAttribute( "size", size );
+ writer.addAttribute( "fontstyle", fontstyle );
+ writer.addAttribute( "red", red );
+ writer.addAttribute( "green", green );
+ writer.addAttribute( "blue", blue );
+ if ( StringUtils.isNotEmpty( title ) )
+ {
+ writer.writeText( title );
+ }
+ else
+ {
+ writer.writeText( "<Missing title>" );
+ }
+ writer.endElement(); // chunk
+ }
+}
Added: maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/PdfBookRenderer.java
URL: http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/PdfBookRenderer.java?rev=425493&view=auto
==============================================================================
--- maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/PdfBookRenderer.java (added)
+++ maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/PdfBookRenderer.java Tue Jul 25 12:33:51 2006
@@ -0,0 +1,53 @@
+package org.apache.maven.doxia.book.services.renderer;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import org.apache.maven.doxia.module.itext.ITextUtil;
+
+/**
+ * PDF book renderer with the <code>iText</code> framework.
+ *
+ * @plexus.component role-hint="pdf"
+ *
+ * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
+ * @version $Id$
+ */
+public class PdfBookRenderer
+ extends AbstractITextBookRenderer
+{
+ /**
+ * @see org.apache.maven.doxia.book.services.renderer.AbstractITextBookRenderer#getOutputExtension()
+ */
+ public String getOutputExtension()
+ {
+ return "pdf";
+ }
+
+ /**
+ * @see org.apache.maven.doxia.book.services.renderer.AbstractITextBookRenderer#renderXML(java.io.File, java.io.File)
+ */
+ public void renderXML( File iTextFile, File iTextOutput )
+ throws IOException
+ {
+ ITextUtil.writePdf( new FileInputStream( iTextFile ), new FileOutputStream( iTextOutput ) );
+ }
+}
Added: maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/RtfBookRenderer.java
URL: http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/RtfBookRenderer.java?rev=425493&view=auto
==============================================================================
--- maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/RtfBookRenderer.java (added)
+++ maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/RtfBookRenderer.java Tue Jul 25 12:33:51 2006
@@ -0,0 +1,53 @@
+package org.apache.maven.doxia.book.services.renderer;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import org.apache.maven.doxia.module.itext.ITextUtil;
+
+/**
+ * RTF book renderer with the <code>iText</code> framework.
+ *
+ * @plexus.component role-hint="rtf"
+ *
+ * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
+ * @version $Id$
+ */
+public class RtfBookRenderer
+ extends AbstractITextBookRenderer
+{
+ /**
+ * @see org.apache.maven.doxia.book.services.renderer.AbstractITextBookRenderer#getOutputExtension()
+ */
+ public String getOutputExtension()
+ {
+ return "rtf";
+ }
+
+ /**
+ * @see org.apache.maven.doxia.book.services.renderer.AbstractITextBookRenderer#renderXML(java.io.File, java.io.File)
+ */
+ public void renderXML( File iTextFile, File iTextOutput )
+ throws IOException
+ {
+ ITextUtil.writeRtf( new FileInputStream( iTextFile ), new FileOutputStream( iTextOutput ) );
+ }
+}
Modified: maven/doxia/trunk/doxia-sandbox/doxia-maven-plugin/src/main/java/org/apache/maven/doxia/plugin/DoxiaRenderBooksMojo.java
URL: http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-sandbox/doxia-maven-plugin/src/main/java/org/apache/maven/doxia/plugin/DoxiaRenderBooksMojo.java?rev=425493&r1=425492&r2=425493&view=diff
==============================================================================
--- maven/doxia/trunk/doxia-sandbox/doxia-maven-plugin/src/main/java/org/apache/maven/doxia/plugin/DoxiaRenderBooksMojo.java (original)
+++ maven/doxia/trunk/doxia-sandbox/doxia-maven-plugin/src/main/java/org/apache/maven/doxia/plugin/DoxiaRenderBooksMojo.java Tue Jul 25 12:33:51 2006
@@ -92,17 +92,20 @@
if ( StringUtils.isEmpty( book.getDescriptor() ) )
{
- throw new MojoFailureException( "Invalid configuration: The book is required to have a descriptor set." );
+ throw new MojoFailureException( "Invalid configuration: "
+ + "The book is required to have a descriptor set." );
}
if ( StringUtils.isEmpty( book.getDirectory() ) )
{
- throw new MojoFailureException( "Invalid configuration: The book is required to have a directory set." );
+ throw new MojoFailureException( "Invalid configuration: "
+ + "The book is required to have a directory set." );
}
if ( book.getFormats() == null || book.getFormats().size() == 0 )
{
- throw new MojoFailureException( "Invalid configuration: The book is required to have at least one format set." );
+ throw new MojoFailureException( "Invalid configuration: "
+ + "The book is required to have at least one format set." );
}
// ----------------------------------------------------------------------
@@ -159,10 +162,8 @@
}
catch ( IOException e )
{
- throw new MojoExecutionException( "Error while looking for input files. " +
- "Basedir=" + basedir.getAbsolutePath() + ", " +
- "includes=" + includes + ", " +
- "excludes=" + excludes, e );
+ throw new MojoExecutionException( "Error while looking for input files. " + "Basedir="
+ + basedir.getAbsolutePath() + ", " + "includes=" + includes + ", " + "excludes=" + excludes, e );
}
// -----------------------------------------------------------------------
@@ -177,8 +178,8 @@
}
catch ( InvalidBookDescriptorException e )
{
- throw new MojoFailureException( "Invalid book descriptor: " + LINE_SEPARATOR +
- formatResult( e.getValidationResult() ) );
+ throw new MojoFailureException( "Invalid book descriptor: " + LINE_SEPARATOR
+ + formatResult( e.getValidationResult() ) );
}
catch ( BookDoxiaException e )
{
@@ -202,7 +203,9 @@
}
catch ( BookDoxiaException e )
{
- throw new MojoExecutionException( "Error while generating book in format '" + format + "'.", e );
+ throw new MojoExecutionException(
+ "Error while generating book in format '" + format.getId() + "'.",
+ e );
}
}
}
Re: svn commit: r425493 - in /maven/doxia/trunk/doxia-sandbox: doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/
doxia-maven-plugin/src/main/java/org/apache/maven/doxia/plugin/
Posted by Trygve Laugstøl <tr...@apache.org>.
Vincent Siveton wrote:
> Agree but currently, pdfs are only generated with itext framework, so
> IMHO <format>pdf</format> is enough but I am open.
The point is that the ID sticks for ever so if there is a posibility
that something else will generate a PDF we need to make room for that.
I'm also open here, I'm not sure if it's realistic for anyone else to
add a new PDF writing instead of fixing/adding any feature to the iText
implementation. It is always possible for someone else to make pdf-foo
if they feel like it so we're not ruling out anyone entirely.
Anyone else have an opinion?
> What do you propose? itextPdf and itextRtf?
itext-pdf and itext-rtf.
--
Trygve
Re: svn commit: r425493 - in /maven/doxia/trunk/doxia-sandbox: doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/ doxia-maven-plugin/src/main/java/org/apache/maven/doxia/plugin/
Posted by Vincent Siveton <vi...@gmail.com>.
Agree but currently, pdfs are only generated with itext framework, so
IMHO <format>pdf</format> is enough but I am open.
What do you propose? itextPdf and itextRtf?
Cheers,
Vincent
2006/7/26, Trygve Laugstøl <tr...@apache.org>:
> vsiveton@apache.org wrote:
> > Author: vsiveton
> > Date: Tue Jul 25 12:33:51 2006
> > New Revision: 425493
> >
> > URL: http://svn.apache.org/viewvc?rev=425493&view=rev
> > Log:
> > o Replaced ITextBookRenderer by PDF and RTF renderers. <format>itext</format> is deprecated in favor of <format>pdf</format>
>
> Is it not likely that something else also will generate PDFs? At least
> for RTF output I think it's fairly likely that something else will be
> able to generate that.
>
> --
> Trygve
>
Re: svn commit: r425493 - in /maven/doxia/trunk/doxia-sandbox: doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/
doxia-maven-plugin/src/main/java/org/apache/maven/doxia/plugin/
Posted by Trygve Laugstøl <tr...@apache.org>.
vsiveton@apache.org wrote:
> Author: vsiveton
> Date: Tue Jul 25 12:33:51 2006
> New Revision: 425493
>
> URL: http://svn.apache.org/viewvc?rev=425493&view=rev
> Log:
> o Replaced ITextBookRenderer by PDF and RTF renderers. <format>itext</format> is deprecated in favor of <format>pdf</format>
Is it not likely that something else also will generate PDFs? At least
for RTF output I think it's fairly likely that something else will be
able to generate that.
--
Trygve