Author: vsiveton Date: Thu Jul 27 12:19:00 2006 New Revision: 426203 URL: http://svn.apache.org/viewvc?rev=426203&view=rev Log: o Improved the XdocBookRenderer, more like latex2html layout o Improved anchor links (see MSITE-168) o Added i18n support o Added javadoc, copyright stuff o Moved BookIndexerTest.java from main to test o Removed unused System.out.println()
Added: maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/AbstractXdocBookSink.java maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/ChapterXdocBookSink.java maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/IndexXdocBookSink.java - copied, changed from r425808, maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/XdocBookSink.java maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/SectionXdocBookSink.java maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/resources/book-renderer.properties maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/resources/book-renderer_fr.properties maven/doxia/trunk/doxia-sandbox/doxia-book/src/test/java/org/apache/maven/doxia/book/services/indexer/BookIndexerTest.java - copied, changed from r425808, maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/indexer/BookIndexerTest.java Removed: maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/indexer/BookIndexerTest.java maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/XdocBookSink.java Modified: maven/doxia/trunk/doxia-sandbox/doxia-book/pom.xml maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/indexer/BookIndexingSink.java maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/XdocBookRenderer.java Modified: maven/doxia/trunk/doxia-sandbox/doxia-book/pom.xml URL: http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-sandbox/doxia-book/pom.xml?rev=426203&r1=426202&r2=426203&view=diff ============================================================================== --- maven/doxia/trunk/doxia-sandbox/doxia-book/pom.xml (original) +++ maven/doxia/trunk/doxia-sandbox/doxia-book/pom.xml Thu Jul 27 12:19:00 2006 @@ -1,4 +1,26 @@ -<project> +<?xml version="1.0" encoding="ISO-8859-1"?> + +<!-- +/* + * Copyright 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. + */ + --> + +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.maven.doxia</groupId> @@ -28,6 +50,11 @@ <groupId>org.codehaus.plexus</groupId> <artifactId>plexus-container-default</artifactId> <version>1.0-alpha-8</version> + </dependency> + <dependency> + <groupId>org.codehaus.plexus</groupId> + <artifactId>plexus-i18n</artifactId> + <version>1.0-beta-6</version> </dependency> </dependencies> <build> Modified: maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/indexer/BookIndexingSink.java URL: http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/indexer/BookIndexingSink.java?rev=426203&r1=426202&r2=426203&view=diff ============================================================================== --- maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/indexer/BookIndexingSink.java (original) +++ maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/indexer/BookIndexingSink.java Thu Jul 27 12:19:00 2006 @@ -1,43 +1,74 @@ package org.apache.maven.doxia.book.services.indexer; -import org.apache.maven.doxia.sink.SinkAdapter; -import org.apache.maven.doxia.book.context.IndexEntry; +/* + * Copyright 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.util.List; import java.util.Stack; +import org.apache.maven.doxia.book.context.IndexEntry; +import org.apache.maven.doxia.module.HtmlTools; +import org.apache.maven.doxia.sink.SinkAdapter; + /** + * A simk implementation for book index + * * @author <a href="mailto:[EMAIL PROTECTED]">Trygve Laugstøl</a> + * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Siveton</a> * @version $Id$ */ public class BookIndexingSink extends SinkAdapter { private final static int TYPE_SECTION_1 = 1; + private final static int TYPE_SECTION_2 = 2; + private final static int TYPE_SECTION_3 = 3; + private final static int TYPE_SECTION_4 = 4; + private final static int TYPE_SECTION_5 = 5; + private final static int TYPE_DEFINED_TERM = 6; + private final static int TYPE_FIGURE = 7; + private final static int TYPE_TABLE = 8; + private final static int TITLE = 9; private int type; - // ---------------------------------------------------------------------- - // - // ---------------------------------------------------------------------- - private String title; private Stack stack = new Stack(); + /** + * Default constructor + * + * @param sectionEntry + */ public BookIndexingSink( IndexEntry sectionEntry ) { stack.push( sectionEntry ); } + /** + * @return the title + */ public String getTitle() { return title; @@ -104,26 +135,26 @@ pop(); } -// public void definedTerm() -// { -// type = TYPE_DEFINED_TERM; -// } -// -// public void figureCaption() -// { -// type = TYPE_FIGURE; -// } -// -// public void tableCaption() -// { -// type = TYPE_TABLE; -// } + // public void definedTerm() + // { + // type = TYPE_DEFINED_TERM; + // } + // + // public void figureCaption() + // { + // type = TYPE_FIGURE; + // } + // + // public void tableCaption() + // { + // type = TYPE_TABLE; + // } public void text( String text ) { IndexEntry entry; - switch( type ) + switch ( type ) { case TITLE: this.title = text; @@ -137,15 +168,7 @@ // Sanitize the id. The most important step is to remove any blanks // ----------------------------------------------------------------------- - String id = text; - id = id.toLowerCase(); - id = id.replace( '\'', '_' ); - id = id.replace( '\"', '_' ); - id = id.replace( ' ', '_' ); - - // ----------------------------------------------------------------------- - // - // ----------------------------------------------------------------------- + String id = HtmlTools.encodeId( text ); entry = new IndexEntry( peek(), id ); @@ -162,18 +185,27 @@ type = 0; } + /** + * Pushes an IndexEntry onto the top of this stack + * + * @param entry to put + */ public void push( IndexEntry entry ) { -// System.out.println( "push: " + entry.getId() ); stack.push( entry ); } + /** + * Removes the IndexEntry at the top of this stack + */ public void pop() { -// System.out.println( "pop: " + peek().getId() ); stack.pop(); } + /** + * @return Looks at the IndexEntry at the top of this stack + */ public IndexEntry peek() { return (IndexEntry) stack.peek(); Modified: maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/XdocBookRenderer.java URL: http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/XdocBookRenderer.java?rev=426203&r1=426202&r2=426203&view=diff ============================================================================== --- maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/XdocBookRenderer.java (original) +++ maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/XdocBookRenderer.java Thu Jul 27 12:19:00 2006 @@ -1,31 +1,56 @@ package org.apache.maven.doxia.book.services.renderer; +/* + * Copyright 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.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; + import org.apache.maven.doxia.Doxia; -import org.apache.maven.doxia.module.xdoc.XdocSink; import org.apache.maven.doxia.book.BookDoxiaException; import org.apache.maven.doxia.book.context.BookContext; import org.apache.maven.doxia.book.context.IndexEntry; 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.book.services.renderer.xdoc.XdocBookSink; +import org.apache.maven.doxia.book.services.renderer.xdoc.ChapterXdocBookSink; +import org.apache.maven.doxia.book.services.renderer.xdoc.IndexXdocBookSink; +import org.apache.maven.doxia.book.services.renderer.xdoc.SectionXdocBookSink; import org.apache.maven.doxia.editor.io.PipelineSink; +import org.apache.maven.doxia.module.HtmlTools; +import org.apache.maven.doxia.module.xdoc.XdocSink; 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.i18n.I18N; import org.codehaus.plexus.logging.AbstractLogEnabled; - -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.File; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; +import org.codehaus.plexus.util.StringUtils; /** + * An implementation of <code>BookRenderer</code> for Xdoc + * * @author <a href="mailto:[EMAIL PROTECTED]">Trygve Laugstøl</a> + * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Siveton</a> * @version $Id$ * @plexus.component role-hint="xdoc" */ @@ -38,6 +63,11 @@ */ private Doxia doxia; + /** + * @plexus.requirement + */ + private I18N i18n; + // ---------------------------------------------------------------------- // BookRenderer Implementation // ---------------------------------------------------------------------- @@ -51,29 +81,50 @@ { if ( !context.getOutputDirectory().mkdirs() ) { - throw new BookDoxiaException( - "Could not make directory: " + context.getOutputDirectory().getAbsolutePath() + "." ); + throw new BookDoxiaException( "Could not make directory: " + + context.getOutputDirectory().getAbsolutePath() + "." ); } } - // ----------------------------------------------------------------------- - // - // ----------------------------------------------------------------------- - renderBook( book, context ); } // ----------------------------------------------------------------------- + // Protected + // ----------------------------------------------------------------------- + + /** + * Gets a trimmed String for the given key from the resource bundle defined by Plexus. + * + * @param key the key for the desired string + * @return the string for the given key + * @throws IllegalArgumentException if the parameter is empty. + */ + protected String getString( String key ) + { + if ( StringUtils.isEmpty( key ) ) + { + throw new IllegalArgumentException( "The key cannot be empty" ); + } + + // TODO Handle locale + return i18n.getString( "book-renderer", Locale.getDefault(), key ).trim(); + } + + // ----------------------------------------------------------------------- // Private // ----------------------------------------------------------------------- + /** + * Render the book, ie the book index and all chapter index + * + * @param book + * @param context + * @throws BookDoxiaException if any + */ private void renderBook( BookModel book, BookContext context ) throws BookDoxiaException { - // ----------------------------------------------------------------------- - // Render the book index.xml page - // ----------------------------------------------------------------------- - File index = new File( context.getOutputDirectory(), "index.xml" ); try @@ -86,12 +137,6 @@ } // ----------------------------------------------------------------------- - // Render the index.html files for each chapter - // ----------------------------------------------------------------------- - - // TODO: Implement - - // ----------------------------------------------------------------------- // Render all the chapters // ----------------------------------------------------------------------- @@ -105,14 +150,20 @@ } } - // ----------------------------------------------------------------------- - // Index Rendering - // ----------------------------------------------------------------------- - + /** + * Write the book index, ie a TOC + * + * @param index + * @param book + * @param context + * @throws IOException if any + */ private void writeBookIndex( File index, BookModel book, BookContext context ) throws IOException { - XdocSink sink = new XdocSink( new FileWriter( index ) ); + FileWriter writer = new FileWriter( index ); + + XdocSink sink = new IndexXdocBookSink( writer, context.getIndex().getFirstEntry(), i18n ); // ----------------------------------------------------------------------- // Head @@ -121,7 +172,7 @@ sink.head(); sink.title(); - sink.text( book.getTitle() + " - Index" ); + sink.text( book.getTitle() + " - " + getString( "toc" ) ); sink.title_(); sink.head_(); @@ -134,7 +185,7 @@ sink.section1(); sink.sectionTitle1(); - sink.text( book.getTitle() + " - Index" ); + sink.text( book.getTitle() + " - " + getString( "toc" ) ); sink.sectionTitle1_(); sink.list(); @@ -149,6 +200,12 @@ sink.body_(); } + /** + * Write the chapter index for the book index + * + * @param sink + * @param chapterEntry + */ private void writeChapterIndexForBookIndex( XdocSink sink, IndexEntry chapterEntry ) { sink.listItem(); @@ -167,6 +224,12 @@ sink.listItem_(); } + /** + * Write the section index for the book index + * + * @param sink + * @param sectionIndex + */ private void writeSectionIndexForBookIndex( XdocSink sink, IndexEntry sectionIndex ) { sink.listItem(); @@ -185,10 +248,17 @@ sink.listItem_(); } + /** + * Write subsection index for the book index + * + * @param sink + * @param sectionIndex + * @param subsectionIndex + */ private void writeSubsectionIndexForBookIndex( XdocSink sink, IndexEntry sectionIndex, IndexEntry subsectionIndex ) { sink.listItem(); - sink.link( sectionIndex.getId() + ".html#" + subsectionIndex.getId() ); + sink.link( sectionIndex.getId() + ".html#" + HtmlTools.encodeId( subsectionIndex.getId() ) ); sink.text( subsectionIndex.getTitle() ); sink.link_(); sink.listItem_(); @@ -198,9 +268,28 @@ // Rendering // ----------------------------------------------------------------------- + /** + * Render all chapter index + * + * @param chapter + * @param context + * @param chapterIndex + * @throws BookDoxiaException if any + */ private void renderChapter( Chapter chapter, BookContext context, IndexEntry chapterIndex ) throws BookDoxiaException { + File index = new File( context.getOutputDirectory(), chapter.getId() + ".xml" ); + + try + { + writeChapterIndex( index, chapter, chapterIndex ); + } + catch ( IOException e ) + { + throw new BookDoxiaException( "Error while rendering index page to: '" + index.getAbsolutePath() + "'.", e ); + } + Iterator ii = chapterIndex.getChildEntries().iterator(); for ( Iterator it = chapter.getSections().iterator(); it.hasNext(); ) @@ -211,6 +300,65 @@ } } + /** + * Write a chapter index + * + * @param index + * @param chapter + * @param chapterIndex + * @throws IOException + */ + private void writeChapterIndex( File index, Chapter chapter, IndexEntry chapterIndex ) + throws IOException + { + FileWriter writer = new FileWriter( index ); + + ChapterXdocBookSink sink = new ChapterXdocBookSink( writer, chapterIndex, i18n ); + + // ----------------------------------------------------------------------- + // Head + // ----------------------------------------------------------------------- + + sink.head(); + + sink.title(); + sink.text( chapter.getTitle() ); + sink.title_(); + + sink.head_(); + + // ----------------------------------------------------------------------- + // Body + // ----------------------------------------------------------------------- + + sink.body(); + + sink.section1(); + sink.sectionTitle1(); + sink.text( chapter.getTitle() ); + sink.sectionTitle1_(); + + sink.list(); + for ( Iterator it = chapterIndex.getChildEntries().iterator(); it.hasNext(); ) + { + IndexEntry sectionIndex = (IndexEntry) it.next(); + writeSectionIndexForBookIndex( sink, sectionIndex ); + } + sink.list_(); + + sink.section1_(); + + sink.body_(); + } + + /** + * Render all section pages + * + * @param context + * @param section + * @param sectionIndex + * @throws BookDoxiaException if any + */ private void renderSection( BookContext context, Section section, IndexEntry sectionIndex ) throws BookDoxiaException { @@ -218,18 +366,17 @@ { FileWriter writer = new FileWriter( context.getOutputDirectory() + "/" + section.getId() + ".xml" ); - XdocBookSink sink = new XdocBookSink( writer, sectionIndex ); + SectionXdocBookSink sink = new SectionXdocBookSink( writer, sectionIndex, i18n ); 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() + "." ); + throw new BookDoxiaException( "No document that matches section with id=" + section.getId() + "." ); } List pipeline = new ArrayList(); -// pipeline.add( DebugSink.newInstance() ); + // pipeline.add( DebugSink.newInstance() ); pipeline.add( sink ); Sink pipelineSink = PipelineSink.newInstance( pipeline ); @@ -243,13 +390,13 @@ } catch ( ParseException e ) { - throw new BookDoxiaException( - "Error while parsing document: " + bookFile.getFile().getAbsolutePath() + ".", 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 ); + throw new BookDoxiaException( "Could not find document: " + bookFile.getFile().getAbsolutePath() + ".", + e ); } } catch ( IOException e ) Added: maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/AbstractXdocBookSink.java URL: http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/AbstractXdocBookSink.java?rev=426203&view=auto ============================================================================== --- maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/AbstractXdocBookSink.java (added) +++ maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/AbstractXdocBookSink.java Thu Jul 27 12:19:00 2006 @@ -0,0 +1,169 @@ +package org.apache.maven.doxia.book.services.renderer.xdoc; + +/* + * Copyright 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.Writer; +import java.util.Locale; + +import org.apache.maven.doxia.module.xdoc.XdocSink; +import org.codehaus.plexus.i18n.I18N; +import org.codehaus.plexus.util.StringUtils; + +/** + * Abstract <code>XdocSink</code> implementation for book. + * + * @author <a href="mailto:[EMAIL PROTECTED]">Trygve Laugstøl</a> + * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Siveton</a> + * @version $Id$ + */ +public abstract class AbstractXdocBookSink + extends XdocSink +{ + private I18N i18n; + + /** + * Default constructor + * + * @param out + * @param i18n + */ + public AbstractXdocBookSink( Writer out, I18N i18n ) + { + super( out ); + + this.i18n = i18n; + } + + /** + * @see org.apache.maven.doxia.module.xdoc.XdocSink#head() + */ + public void head() + { + resetState(); + + headFlag = true; + + markup( "<?xml version=\"1.0\" ?>" + EOL ); + + markup( "<document>" + EOL ); + + markup( "<properties>" + EOL ); + + } + + /** + * @see org.apache.maven.doxia.module.xdoc.XdocSink#head_() + */ + public void head_() + { + headFlag = false; + + markup( "</properties>" + EOL ); + } + + /** + * @see org.apache.maven.doxia.module.xdoc.XdocSink#author_() + */ + public void author_() + { + if ( buffer.length() > 0 ) + { + markup( "<author>" ); + content( buffer.toString() ); + markup( "</author>" + EOL ); + buffer = new StringBuffer(); + } + } + + /** + * @see org.apache.maven.doxia.module.xdoc.XdocSink#date_() + */ + public void date_() + { + // nop + } + + /** + * @see org.apache.maven.doxia.module.xdoc.XdocSink#body() + */ + public void body() + { + markup( "<body>" + EOL ); + + navigationPanel(); + + horizontalRule(); + } + + /** + * @see org.apache.maven.doxia.module.xdoc.XdocSink#body_() + */ + public void body_() + { + horizontalRule(); + + navigationPanel(); + + markup( "</body>" + EOL ); + + markup( "</document>" + EOL ); + + out.flush(); + + resetState(); + } + + /** + * @see org.apache.maven.doxia.module.xdoc.XdocSink#title_() + */ + public void title_() + { + if ( buffer.length() > 0 ) + { + markup( "<title>" ); + content( buffer.toString() ); + markup( "</title>" + EOL ); + buffer = new StringBuffer(); + } + } + + // ----------------------------------------------------------------------- + // Protected + // ----------------------------------------------------------------------- + + /** + * Gets a trimmed String for the given key from the resource bundle defined by Plexus. + * + * @param key the key for the desired string + * @return the string for the given key + * @throws IllegalArgumentException if the parameter is empty. + */ + protected String getString( String key ) + { + if ( StringUtils.isEmpty( key ) ) + { + throw new IllegalArgumentException( "The key cannot be empty" ); + } + + return i18n.getString( "book-renderer", Locale.getDefault(), key ).trim(); + } + + /** + * Add a navigation panel. + */ + protected abstract void navigationPanel(); +} Added: maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/ChapterXdocBookSink.java URL: http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/ChapterXdocBookSink.java?rev=426203&view=auto ============================================================================== --- maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/ChapterXdocBookSink.java (added) +++ maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/ChapterXdocBookSink.java Thu Jul 27 12:19:00 2006 @@ -0,0 +1,151 @@ +package org.apache.maven.doxia.book.services.renderer.xdoc; + +/* + * Copyright 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 org.apache.maven.doxia.book.context.IndexEntry; +import org.codehaus.plexus.i18n.I18N; + +import java.io.Writer; + +/** + * A <code>XdocSink</code> implementation for chapter in a book + * + * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Siveton</a> + * @version $Id$ + */ +public class ChapterXdocBookSink + extends AbstractXdocBookSink +{ + private IndexEntry chapterIndex; + + /** + * Default constructor + * + * @param out + * @param chapterIndex + * @param i18n + */ + public ChapterXdocBookSink( Writer out, IndexEntry chapterIndex, I18N i18n ) + { + super( out, i18n ); + + this.chapterIndex = chapterIndex; + } + + /** + * @see org.apache.maven.doxia.book.services.renderer.xdoc.AbstractXdocBookSink#navigationPanel() + */ + protected void navigationPanel() + { + markup( "<!--Navigation Panel-->" + EOL ); + + markup( "<table width=\"100%\" align=\"center\">" + EOL ); + markup( "<tr>" + EOL ); + + // ----------------------------------------------------------------------- + // Prev + // ----------------------------------------------------------------------- + + IndexEntry prevChapter = chapterIndex.getPrevEntry(); + + markup( "<td><div align='left'>" ); + + previous( prevChapter ); + + markup( "</div></td>" + EOL ); + + // ----------------------------------------------------------------------- + // Parent + // ----------------------------------------------------------------------- + + markup( "<td><div align='center'>" ); + up(); + markup( "</div></td>" + EOL ); + + // ----------------------------------------------------------------------- + // Next + // ----------------------------------------------------------------------- + + markup( "<td><div align='right'>" ); + + next(); + + markup( "</div></td>" + EOL ); + + markup( "</tr>" + EOL ); + markup( "</table>" + EOL ); + + markup( "<!--End of Navigation Panel-->" + EOL ); + } + + /** + * Add previous link + * + * @param prevChapter + */ + protected void previous( IndexEntry prevChapter ) + { + if ( prevChapter != null ) + { + IndexEntry lastEntry = prevChapter.getLastEntry(); + if ( lastEntry == null ) + { + markup( "<i>Start of book</i>" ); + } + else + { + markup( getString( "previous" ) + ": <a href='" + lastEntry.getId() + ".html'>" ); + content( lastEntry.getTitle() ); + markup( "</a>" ); + } + } + else + { + markup( getString( "previous" ) + ":<a href='index.html'>" + getString( "toc" ) + "</a>" ); + } + } + + /** + * Add parent/up link + * + * @param parent + */ + protected void up() + { + markup( getString( "up" ) + ": <a href='index.html'>" + getString( "toc" ) + "</a>" ); + } + + /** + * Add next link + * + * @param nextChapter + */ + protected void next() + { + IndexEntry firstEntry = chapterIndex.getFirstEntry(); + if ( firstEntry == null ) + { + markup( "<i>End of book</i>" ); + } + else + { + markup( getString( "next" ) + ": <a href='" + firstEntry.getId() + ".html'>" ); + content( firstEntry.getTitle() ); + markup( "</a>" ); + } + } +} Copied: maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/IndexXdocBookSink.java (from r425808, maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/XdocBookSink.java) URL: http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/IndexXdocBookSink.java?p2=maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/IndexXdocBookSink.java&p1=maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/XdocBookSink.java&r1=425808&r2=426203&rev=426203&view=diff ============================================================================== --- maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/XdocBookSink.java (original) +++ maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/IndexXdocBookSink.java Thu Jul 27 12:19:00 2006 @@ -1,179 +1,80 @@ package org.apache.maven.doxia.book.services.renderer.xdoc; -import org.apache.maven.doxia.module.xdoc.XdocSink; -import org.apache.maven.doxia.book.context.IndexEntry; +/* + * Copyright 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.Writer; +import org.apache.maven.doxia.book.context.IndexEntry; +import org.codehaus.plexus.i18n.I18N; + /** + * A <code>XdocSink</code> implementation for index book. + * * @author <a href="mailto:[EMAIL PROTECTED]">Trygve Laugstøl</a> + * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Siveton</a> * @version $Id$ */ -public class XdocBookSink - extends XdocSink +public class IndexXdocBookSink + extends AbstractXdocBookSink { - private IndexEntry indexEntry; - - // ---------------------------------------------------------------------- - // - // ---------------------------------------------------------------------- - - public XdocBookSink( Writer out, IndexEntry indexEntry ) - { - super( out ); - - this.indexEntry = indexEntry; - } - - // ---------------------------------------------------------------------- - // - // ---------------------------------------------------------------------- + private IndexEntry firstEntry; - public void head() + /** + * Default constructor + * + * @param out + * @param firstEntry + * @param i18n + */ + public IndexXdocBookSink( Writer out, IndexEntry firstEntry, I18N i18n ) { - resetState(); - - headFlag = true; - - markup( "<?xml version=\"1.0\" ?>" + EOL ); - - markup( "<document>" + EOL ); - - markup( "<properties>" + EOL ); + super( out, i18n ); + this.firstEntry = firstEntry; } - public void head_() + /** + * @see org.apache.maven.doxia.book.services.renderer.xdoc.AbstractXdocBookSink#navigationPanel() + */ + protected void navigationPanel() { - headFlag = false; - - markup( "</properties>" + EOL ); - } - - public void author_() - { - if ( buffer.length() > 0 ) - { - markup( "<author>" ); - content( buffer.toString() ); - markup( "</author>" + EOL ); - buffer = new StringBuffer(); - } - } - - public void date_() - { - } - - public void body() - { - markup( "<body>" + EOL ); + markup( "<!--Navigation Panel-->" + EOL ); markup( "<table width=\"100%\" align=\"center\">" + EOL ); markup( "<tr>" + EOL ); - IndexEntry parent = indexEntry.getParent(); - // ----------------------------------------------------------------------- - // Prev + // Next // ----------------------------------------------------------------------- - IndexEntry prevEntry = indexEntry.getPrevEntry(); - - markup( "<td><div align='left'>" ); - - if ( prevEntry != null ) + if ( firstEntry != null ) { - markup( "Previous: <a href='" + prevEntry.getId() + ".html'>" ); - content( prevEntry.getTitle() ); - markup( "</a>" ); - } - else - { - IndexEntry prevChapter = parent.getPrevEntry(); - - if ( prevChapter == null ) - { - markup( "<i>Start of book</i>" ); - } - else - { - IndexEntry lastEntry = prevChapter.getLastEntry(); - - markup( "Previous: <a href='" + lastEntry.getId() + ".html'>" ); - content( lastEntry.getTitle() ); - markup( "</a>" ); - } - } - - markup( "</div></td>" + EOL ); - - // ----------------------------------------------------------------------- - // Parent - // ----------------------------------------------------------------------- - - markup( "<td><div align='center'><b><i>NOT IMPLEMENTED</i></b> Up: <a href='" + parent.getId() + ".html'>" + parent.getTitle() + "</a></div></td>" + EOL ); + markup( "<td><div align='right'>" ); - // ----------------------------------------------------------------------- - // - // ----------------------------------------------------------------------- - - IndexEntry nextEntry = indexEntry.getNextEntry(); - - markup( "<td><div align='right'>" ); - - if ( nextEntry != null ) - { - markup( "Next: <a href='" + nextEntry.getId() + ".html'>" ); - content( nextEntry.getTitle() ); + markup( getString( "next" ) + ": <a href='" + firstEntry.getId() + ".html'>" ); + content( firstEntry.getTitle() ); markup( "</a>" ); - } - else - { - IndexEntry nextChapter = parent.getNextEntry(); - if ( nextChapter == null ) - { - markup( "<i>End of book</i>" ); - } - else - { - IndexEntry firstEntry = nextChapter.getFirstEntry(); - markup( "Next: <a href='" + firstEntry.getId() + ".html'>" ); - content( firstEntry.getTitle() ); - markup( "</a>" ); - } + markup( "</div></td>" + EOL ); } - markup( "</div></td>" + EOL ); - - // ----------------------------------------------------------------------- - // - // ----------------------------------------------------------------------- - markup( "</tr>" + EOL ); markup( "</table>" + EOL ); - } - - public void body_() - { - markup( "</body>" + EOL ); - markup( "</document>" + EOL ); - - out.flush(); - - resetState(); - } - - public void title_() - { - if ( buffer.length() > 0 ) - { - markup( "<title>" ); - content( "Book " + buffer.toString() ); - markup( "</title>" + EOL ); - buffer = new StringBuffer(); - } + markup( "<!--End of Navigation Panel-->" + EOL ); } } Added: maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/SectionXdocBookSink.java URL: http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/SectionXdocBookSink.java?rev=426203&view=auto ============================================================================== --- maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/SectionXdocBookSink.java (added) +++ maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/renderer/xdoc/SectionXdocBookSink.java Thu Jul 27 12:19:00 2006 @@ -0,0 +1,159 @@ +package org.apache.maven.doxia.book.services.renderer.xdoc; + +/* + * Copyright 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 org.apache.maven.doxia.book.context.IndexEntry; +import org.codehaus.plexus.i18n.I18N; + +import java.io.Writer; + +/** + * A <code>XdocSink</code> implementation for section in a book + * + * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Siveton</a> + * @version $Id$ + */ +public class SectionXdocBookSink + extends AbstractXdocBookSink +{ + private IndexEntry indexEntry; + + /** + * Default constructor + * + * @param out + * @param indexEntry + * @param i18n + */ + public SectionXdocBookSink( Writer out, IndexEntry indexEntry, I18N i18n ) + { + super( out, i18n ); + + this.indexEntry = indexEntry; + } + + /** + * @see org.apache.maven.doxia.book.services.renderer.xdoc.AbstractXdocBookSink#navigationPanel() + */ + protected void navigationPanel() + { + markup( "<!--Navigation Panel-->" + EOL ); + + markup( "<table width=\"100%\" align=\"center\">" + EOL ); + markup( "<tr>" + EOL ); + + IndexEntry parent = indexEntry.getParent(); + + // ----------------------------------------------------------------------- + // Prev + // ----------------------------------------------------------------------- + + IndexEntry prevEntry = indexEntry.getPrevEntry(); + + markup( "<td><div align='left'>" ); + + previous( parent, prevEntry ); + + markup( "</div></td>" + EOL ); + + // ----------------------------------------------------------------------- + // Parent + // ----------------------------------------------------------------------- + + markup( "<td><div align='center'>" ); + up( parent ); + markup( "</div></td>" + EOL ); + + // ----------------------------------------------------------------------- + // Next + // ----------------------------------------------------------------------- + + IndexEntry nextEntry = indexEntry.getNextEntry(); + + markup( "<td><div align='right'>" ); + + next( parent, nextEntry ); + + markup( "</div></td>" + EOL ); + + markup( "</tr>" + EOL ); + markup( "</table>" + EOL ); + + markup( "<!--End of Navigation Panel-->" + EOL ); + } + + /** + * Add previous link + * + * @param parent + * @param prevEntry + */ + protected void previous( IndexEntry parent, IndexEntry prevEntry ) + { + if ( prevEntry != null ) + { + markup( getString( "previous" ) + ": <a href='" + prevEntry.getId() + ".html'>" ); + content( prevEntry.getTitle() ); + markup( "</a>" ); + } + else + { + markup( getString( "previous" ) + ": <a href='" + parent.getId() + ".html'>" ); + content( parent.getTitle() ); + markup( "</a>" ); + } + } + + /** + * @see org.apache.maven.doxia.book.services.renderer.xdoc.ChapterXdocBookSink#up(org.apache.maven.doxia.book.context.IndexEntry) + */ + protected void up( IndexEntry parent ) + { + markup( getString( "up" ) + ": <a href='" + parent.getId() + ".html'>" + parent.getTitle() + "</a>" ); + } + + /** + * Add next link + * + * @param parent + * @param nextEntry + */ + protected void next( IndexEntry parent, IndexEntry nextEntry ) + { + if ( nextEntry != null ) + { + markup( getString( "next" ) + ": <a href='" + nextEntry.getId() + ".html'>" ); + content( nextEntry.getTitle() ); + markup( "</a>" ); + } + else + { + IndexEntry nextChapter = parent.getNextEntry(); + + if ( nextChapter == null ) + { + markup( "<i>End of book</i>" ); + } + else + { + markup( getString( "next" ) + ": <a href='" + nextChapter.getId() + ".html'>" ); + content( nextChapter.getTitle() ); + markup( "</a>" ); + } + } + } +} Added: maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/resources/book-renderer.properties URL: http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/resources/book-renderer.properties?rev=426203&view=auto ============================================================================== --- maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/resources/book-renderer.properties (added) +++ maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/resources/book-renderer.properties Thu Jul 27 12:19:00 2006 @@ -0,0 +1,20 @@ +# ------------------------------------------------------------------- +# Copyright 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. +# ------------------------------------------------------------------- + +toc=Table Of Content +previous=Previous +up=Up +next=Next Added: maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/resources/book-renderer_fr.properties URL: http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/resources/book-renderer_fr.properties?rev=426203&view=auto ============================================================================== --- maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/resources/book-renderer_fr.properties (added) +++ maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/resources/book-renderer_fr.properties Thu Jul 27 12:19:00 2006 @@ -0,0 +1,20 @@ +# ------------------------------------------------------------------- +# Copyright 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. +# ------------------------------------------------------------------- + +toc=Table des matières +previous=Précédent +up=Haut +next=Suivant Copied: maven/doxia/trunk/doxia-sandbox/doxia-book/src/test/java/org/apache/maven/doxia/book/services/indexer/BookIndexerTest.java (from r425808, maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/indexer/BookIndexerTest.java) URL: http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-sandbox/doxia-book/src/test/java/org/apache/maven/doxia/book/services/indexer/BookIndexerTest.java?p2=maven/doxia/trunk/doxia-sandbox/doxia-book/src/test/java/org/apache/maven/doxia/book/services/indexer/BookIndexerTest.java&p1=maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/indexer/BookIndexerTest.java&r1=425808&r2=426203&rev=426203&view=diff ============================================================================== --- maven/doxia/trunk/doxia-sandbox/doxia-book/src/main/java/org/apache/maven/doxia/book/services/indexer/BookIndexerTest.java (original) +++ maven/doxia/trunk/doxia-sandbox/doxia-book/src/test/java/org/apache/maven/doxia/book/services/indexer/BookIndexerTest.java Thu Jul 27 12:19:00 2006 @@ -1,11 +1,28 @@ package org.apache.maven.doxia.book.services.indexer; +/* + * Copyright 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 org.codehaus.plexus.PlexusTestCase; import org.codehaus.plexus.util.FileUtils; import org.apache.maven.doxia.book.services.io.BookIo; import org.apache.maven.doxia.book.model.BookModel; import org.apache.maven.doxia.book.context.BookContext; import org.apache.maven.doxia.book.context.IndexEntry; +import org.apache.maven.doxia.module.HtmlTools; /** * @author <a href="mailto:[EMAIL PROTECTED]">Trygve Laugstøl</a> @@ -89,7 +106,7 @@ assertEquals( title, indexEntry.getTitle() ); - assertEquals( id, indexEntry.getId() ); + assertEquals( HtmlTools.encodeId( id ), indexEntry.getId() ); assertEquals( childCount, indexEntry.getChildEntries().size() );