Author: trygvis
Date: Mon Jul  3 16:34:53 2006
New Revision: 418877

URL: http://svn.apache.org/viewvc?rev=418877&view=rev
Log:
o More work done. Adding LaTeX book sink.

Added:
    
maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/LatexBookRenderer.java
    
maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/latex/
    
maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/latex/LatexBookSink.java
Modified:
    
maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/validation/DefaultBookValidator.java
    maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/modello/book.mdo

Added: 
maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/LatexBookRenderer.java
URL: 
http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/LatexBookRenderer.java?rev=418877&view=auto
==============================================================================
--- 
maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/LatexBookRenderer.java
 (added)
+++ 
maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/LatexBookRenderer.java
 Mon Jul  3 16:34:53 2006
@@ -0,0 +1,198 @@
+package org.apache.maven.doxia.book.services.renderer;
+
+import org.apache.maven.doxia.book.BookDoxiaException;
+import org.apache.maven.doxia.book.services.renderer.latex.LatexBookSink;
+import org.apache.maven.doxia.book.context.BookContext;
+import org.apache.maven.doxia.book.model.Book;
+import org.apache.maven.doxia.book.model.Chapter;
+import org.apache.maven.doxia.book.model.Section;
+import org.apache.maven.doxia.module.latex.LatexSink;
+import org.apache.maven.doxia.parser.manager.ParserNotFoundException;
+import org.apache.maven.doxia.parser.ParseException;
+import org.apache.maven.doxia.Doxia;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.IOUtil;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.FileReader;
+import java.io.FileNotFoundException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * @plexus.component role-hint="latex"
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Trygve Laugst&oslash;l</a>
+ * @version $Id$
+ */
+public class LatexBookRenderer
+    implements BookRenderer
+{
+    /**
+     * @plexus.requirement
+     */
+    private Doxia doxia;
+
+    // ----------------------------------------------------------------------
+    // BookRenderer Implementatino
+    // ----------------------------------------------------------------------
+
+    public void renderBook( BookContext context )
+        throws BookDoxiaException
+    {
+        Book 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() + 
".tex" );
+
+        FileWriter fileWriter = null;
+
+        try
+        {
+            fileWriter = new FileWriter( bookFile );
+
+            PrintWriter writer = new PrintWriter( fileWriter );
+
+            writeBook( book, context, writer );
+        }
+        catch ( IOException e )
+        {
+            throw new BookDoxiaException( "Error while opening file.", e );
+        }
+        finally
+        {
+            IOUtil.close( fileWriter );
+        }
+    }
+
+    // ----------------------------------------------------------------------
+    // Private
+    // ----------------------------------------------------------------------
+
+    private static class SectionInfo
+    {
+        private String id;
+
+        private String title;
+    }
+
+    private void writeBook( Book book, BookContext context, PrintWriter writer 
)
+        throws IOException, BookDoxiaException
+    {
+        // 
----------------------------------------------------------------------
+        // Process all the section documents and collect their names
+        // 
----------------------------------------------------------------------
+
+        Map sectionInfos = new HashMap();
+
+        for ( Iterator it = book.getChapters().iterator(); it.hasNext(); )
+        {
+            Chapter chapter = (Chapter) it.next();
+
+            for ( Iterator j = chapter.getSections().iterator(); j.hasNext(); )
+            {
+                Section section = (Section) j.next();
+
+                SectionInfo info = writeSection( section, context );
+
+                sectionInfos.put( info.id, info );
+            }
+        }
+
+        // 
----------------------------------------------------------------------
+        // Write the main .tex file
+        // 
----------------------------------------------------------------------
+
+        writer.println( "\\documentclass{book}" );
+        writer.println( "\\title{" + book.getTitle() + "}");
+
+        if ( StringUtils.isNotEmpty( book.getAuthor() ) )
+        {
+            writer.println( "\\author{" + book.getAuthor() + "}" );
+        }
+
+        if ( StringUtils.isNotEmpty( book.getDate() ) )
+        {
+            writer.println( "\\author{" + book.getDate() + "}" );
+        }
+
+        writer.print( IOUtil.toString( LatexSink.getDefaultSinkCommands() ) );
+        writer.print( IOUtil.toString( LatexSink.getDefaultPreamble() ) );
+        writer.println( "\\begin{document}");
+        writer.println( "\\maketitle");
+        writer.println( "\\tableofcontents");
+//        writer.println( "\\listoffigures");
+
+        for ( Iterator it = book.getChapters().iterator(); it.hasNext(); )
+        {
+            Chapter chapter = (Chapter) it.next();
+
+            writer.println( "\\chapter{" + chapter.getTitle() + "}" );
+
+            for ( Iterator j = chapter.getSections().iterator(); j.hasNext(); )
+            {
+                Section section = (Section) j.next();
+
+                SectionInfo info = (SectionInfo) sectionInfos.get( 
section.getId() );
+
+                writer.println( "\\input{" + info.id + "}");
+            }
+        }
+
+        writer.println( "\\end{document}");
+    }
+
+    private SectionInfo writeSection( Section section, BookContext context )
+        throws IOException, BookDoxiaException
+    {
+        File file = new File( context.getOutputDirectory(), (section.getId() + 
".tex") );
+
+        FileWriter writer = new FileWriter( file );
+
+        LatexBookSink sink = new LatexBookSink( writer );
+
+        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() + "." );
+        }
+
+        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 );
+        }
+
+        SectionInfo info = new SectionInfo();
+        info.id = section.getId();
+        info.title = sink.getTitle();
+
+        return info;
+    }
+}

Added: 
maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/latex/LatexBookSink.java
URL: 
http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/latex/LatexBookSink.java?rev=418877&view=auto
==============================================================================
--- 
maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/latex/LatexBookSink.java
 (added)
+++ 
maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/latex/LatexBookSink.java
 Mon Jul  3 16:34:53 2006
@@ -0,0 +1,70 @@
+package org.apache.maven.doxia.book.services.renderer.latex;
+
+import org.apache.maven.doxia.module.latex.LatexSink;
+
+import java.io.Writer;
+import java.io.IOException;
+
+/**
+ * @author <a href="mailto:[EMAIL PROTECTED]">Trygve Laugst&oslash;l</a>
+ * @version $Id$
+ */
+public class LatexBookSink
+    extends LatexSink
+{
+    private String text;
+
+    private String title;
+
+    // ----------------------------------------------------------------------
+    //
+    // ----------------------------------------------------------------------
+
+    public LatexBookSink( Writer out )
+        throws IOException
+    {
+        super( out, null, null, true );
+    }
+
+    // ----------------------------------------------------------------------
+    //
+    // ----------------------------------------------------------------------
+
+    protected String getDocumentStart()
+    {
+        return "";
+//        return "\\documentclass{book}";
+    }
+
+    protected String getDocumentBegin()
+    {
+        return null;
+    }
+
+    // ----------------------------------------------------------------------
+    //
+    // ----------------------------------------------------------------------
+
+    public void text( String text )
+    {
+        this.text = text;
+
+        super.text( text );
+    }
+
+    public void title_()
+    {
+        super.title_();
+
+        this.title = text;
+    }
+
+    // ----------------------------------------------------------------------
+    //
+    // ----------------------------------------------------------------------
+
+    public String getTitle()
+    {
+        return title;
+    }
+}

Modified: 
maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/validation/DefaultBookValidator.java
URL: 
http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/validation/DefaultBookValidator.java?rev=418877&r1=418876&r2=418877&view=diff
==============================================================================
--- 
maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/validation/DefaultBookValidator.java
 (original)
+++ 
maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/validation/DefaultBookValidator.java
 Mon Jul  3 16:34:53 2006
@@ -43,6 +43,8 @@
                 Chapter chapter = (Chapter) it.next();
 
                 validateChapter( result, chapter );
+
+                // TODO: Validate the chapter id
             }
         }
 
@@ -62,9 +64,14 @@
             return;
         }
 
+        if ( StringUtils.isEmpty( chapter.getTitle() ) )
+        {
+            result.getErrors().add( "Missing title. Chapter id: " + 
chapter.getId() );
+        }
+
         if ( chapter.getSections().size() == 0 )
         {
-            result.getErrors().add( "Each chapter has to contain at least one 
section. Chapter id: " + chapter.getId() );
+            result.getErrors().add( "Chapter doesn't have any sections. 
Chapter id: " + chapter.getId() );
         }
     }
 }

Modified: maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/modello/book.mdo
URL: 
http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/modello/book.mdo?rev=418877&r1=418876&r2=418877&view=diff
==============================================================================
--- maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/modello/book.mdo 
(original)
+++ maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/modello/book.mdo Mon 
Jul  3 16:34:53 2006
@@ -23,7 +23,17 @@
           <identifier>true</identifier>
         </field>
         <field>
-          <name>name</name>
+          <name>title</name>
+          <version>1.0.0</version>
+          <type>String</type>
+        </field>
+        <field>
+          <name>author</name>
+          <version>1.0.0</version>
+          <type>String</type>
+        </field>
+        <field>
+          <name>date</name>
           <version>1.0.0</version>
           <type>String</type>
         </field>


Reply via email to