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 jv...@apache.org on 2006/05/15 00:15:33 UTC
svn commit: r406450 [1/2] - in
/maven/doxia/trunk/doxia-modules/doxia-module-itext: ./ src/ src/main/
src/main/java/ src/main/java/org/ src/main/java/org/apache/
src/main/java/org/apache/maven/ src/main/java/org/apache/maven/doxia/
src/main/java/org/ap...
Author: jvanzyl
Date: Sun May 14 15:15:30 2006
New Revision: 406450
URL: http://svn.apache.org/viewcvs?rev=406450&view=rev
Log:
o adding vincent's itext stuff
Added:
maven/doxia/trunk/doxia-modules/doxia-module-itext/
maven/doxia/trunk/doxia-modules/doxia-module-itext/pom.xml (with props)
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextFont.java (with props)
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextHeader.java (with props)
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextSink.java (with props)
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextUtil.java (with props)
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/resources/
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/java/
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/java/org/
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/java/org/apache/
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/java/org/apache/maven/
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/java/org/apache/maven/doxia/
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/java/org/apache/maven/doxia/module/
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/java/org/apache/maven/doxia/module/itext/
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/java/org/apache/maven/doxia/module/itext/ITextSinkTestCase.java (with props)
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/resources/
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/resources/apt/
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/resources/apt/guide-ide-netbeans.apt (with props)
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/resources/apt/test.apt (with props)
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/resources/apt/test.apt.bak
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/resources/images/
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/resources/images/Context_Menu.png (with props)
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/resources/images/Generate_Site.png (with props)
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/resources/images/Open_Project.png (with props)
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/resources/images/Project_Opened.png (with props)
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/resources/images/Refresh_Project.png (with props)
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/resources/images/Refreshed_Context_Menu.png (with props)
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/resources/images/Run_Build_Main_Project.png (with props)
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/resources/images/Run_Clean_Main_Project.png (with props)
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/resources/images/Window_Files.png (with props)
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/resources/xdoc/
maven/doxia/trunk/doxia-modules/doxia-module-itext/src/test/resources/xdoc/test.xml (with props)
Added: maven/doxia/trunk/doxia-modules/doxia-module-itext/pom.xml
URL: http://svn.apache.org/viewcvs/maven/doxia/trunk/doxia-modules/doxia-module-itext/pom.xml?rev=406450&view=auto
==============================================================================
--- maven/doxia/trunk/doxia-modules/doxia-module-itext/pom.xml (added)
+++ maven/doxia/trunk/doxia-modules/doxia-module-itext/pom.xml Sun May 14 15:15:30 2006
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+ <parent>
+ <artifactId>doxia-modules</artifactId>
+ <groupId>org.apache.maven.doxia</groupId>
+ <version>1.0-alpha-8-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>doxia-module-itext</artifactId>
+ <name>Doxia iText Module</name>
+ <version>1.0-SNAPSHOT</version>
+ <developers>
+ <developer>
+ <id>vsiveton</id>
+ <name>Vincent Siveton</name>
+ <email>vsiveton@apache.org</email>
+ <organization>Apache Software Foundation</organization>
+ <roles>
+ <role>Java Developer</role>
+ </roles>
+ <timezone>-5</timezone>
+ </developer>
+ </developers>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.4</source>
+ <target>1.4</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>itext</groupId>
+ <artifactId>itext</artifactId>
+ <version>1.3.1</version>
+ </dependency>
+ </dependencies>
+</project>
Propchange: maven/doxia/trunk/doxia-modules/doxia-module-itext/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/doxia/trunk/doxia-modules/doxia-module-itext/pom.xml
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextFont.java
URL: http://svn.apache.org/viewcvs/maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextFont.java?rev=406450&view=auto
==============================================================================
--- maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextFont.java (added)
+++ maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextFont.java Sun May 14 15:15:30 2006
@@ -0,0 +1,375 @@
+package org.apache.maven.doxia.module.itext;
+
+/*
+ * 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.awt.Color;
+
+import com.lowagie.text.Font;
+import com.lowagie.text.FontFactory;
+import com.lowagie.text.markup.MarkupTags;
+import com.lowagie.text.pdf.DefaultFontMapper;
+import com.lowagie.text.pdf.FontMapper;
+
+/**
+ * <code>iText</code> wrapper object for font.
+ *
+ * @see com.lowagie.text.Font
+ *
+ * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
+ * @version $Id$
+ */
+public class ITextFont
+{
+ /** A normal font style */
+ public static final String NORMAL = MarkupTags.CSS_VALUE_NORMAL;
+
+ /** A bold font style */
+ public static final String BOLD = MarkupTags.CSS_VALUE_BOLD;
+
+ /** A italic font style */
+ public static final String ITALIC = MarkupTags.CSS_VALUE_ITALIC;
+
+ /** An underline font style */
+ public static final String UNDERLINE = MarkupTags.CSS_VALUE_UNDERLINE;
+
+ /** A default font name */
+ public static final String DEFAULT_FONT_NAME = FontFactory.HELVETICA;
+
+ /** A default font size */
+ public static final float DEFAULT_FONT_SIZE = 12;
+
+ /** A default font style */
+ public static final String DEFAULT_FONT_STYLE = NORMAL;
+
+ /** A default Black color definition */
+ public static final int DEFAULT_FONT_COLOR_RED = Color.BLACK.getRed();
+
+ /** A default Black color definition */
+ public static final int DEFAULT_FONT_COLOR_GREEN = Color.BLACK.getGreen();
+
+ /** A default Black color definition */
+ public static final int DEFAULT_FONT_COLOR_BLUE = Color.BLACK.getBlue();
+
+ /** To specify monoSpaced font */
+ private static final FontMapper FONT_MAPPER = new DefaultFontMapper();
+
+ private boolean monoSpaced = false;
+
+ private float currentSize = 12;
+
+ private int currentStyle = Font.NORMAL;
+
+ private Color currentColor = Color.BLACK;
+
+ /**
+ * Default constructor
+ */
+ public ITextFont()
+ {
+ // nop
+ }
+
+ /**
+ * Add bold style to the current style
+ */
+ public void addBold()
+ {
+ this.currentStyle += Font.BOLD;
+ }
+
+ /**
+ * Remove bold style to the current style
+ */
+ public void removeBold()
+ {
+ this.currentStyle -= Font.BOLD;
+ if ( this.currentStyle < 0 )
+ {
+ this.currentStyle = Font.NORMAL;
+ }
+ }
+
+ /**
+ * Add italic style to the current style
+ */
+ public void addItalic()
+ {
+ this.currentStyle += Font.ITALIC;
+ }
+
+ /**
+ * Remove italic style to the current style
+ */
+ public void removeItalic()
+ {
+ this.currentStyle -= Font.ITALIC;
+ if ( this.currentStyle < 0 )
+ {
+ this.currentStyle = Font.NORMAL;
+ }
+ }
+
+ /**
+ * Add italic style to the current style
+ */
+ public void addUnderlined()
+ {
+ this.currentStyle += Font.UNDERLINE;
+ }
+
+ /**
+ * Remove italic style to the current style
+ */
+ public void removeUnderlined()
+ {
+ this.currentStyle -= Font.UNDERLINE;
+ if ( this.currentStyle < 0 )
+ {
+ this.currentStyle = Font.NORMAL;
+ }
+ }
+
+ /**
+ * Add monospaced style to the current style
+ *
+ * @param monoSpaced true for monospaced style
+ */
+ public void setMonoSpaced( boolean monoSpaced )
+ {
+ this.monoSpaced = monoSpaced;
+ }
+
+ /**
+ * Set a new font color
+ *
+ * @param color a new color
+ */
+ public void setColor( Color color )
+ {
+ this.currentColor = color;
+ }
+
+ /**
+ * Set a new font color
+ *
+ * @param size a new size
+ */
+ public void setSize( float size )
+ {
+ this.currentSize = size;
+ }
+
+ /**
+ * Return the font name
+ *
+ * @return the font name
+ */
+ public String getFontName()
+ {
+ Font font = getCurrentFont();
+
+ return font.getFamilyname();
+ }
+
+ /**
+ * Return the font style
+ *
+ * @return the font style
+ */
+ public String getFontStyle()
+ {
+ Font font = getCurrentFont();
+ StringBuffer sb = new StringBuffer();
+
+ if ( font.isBold() )
+ {
+ sb.append( BOLD );
+ }
+
+ if ( font.isItalic() )
+ {
+ if ( sb.length() == 0 )
+ {
+ sb.append( ITALIC );
+ }
+ else
+ {
+ sb.append( "," );
+ sb.append( ITALIC );
+ }
+ }
+
+ if ( font.isUnderlined() )
+ {
+ if ( sb.length() == 0 )
+ {
+ sb.append( UNDERLINE );
+ }
+ else
+ {
+ sb.append( "," );
+ sb.append( UNDERLINE );
+ }
+ }
+
+ if ( sb.length() == 0 )
+ {
+ return NORMAL;
+ }
+
+ return sb.toString();
+ }
+
+ /**
+ * Return the font name
+ *
+ * @return the font name
+ */
+ public String getFontSize()
+ {
+ Font font = getCurrentFont();
+
+ return String.valueOf( font.getCalculatedSize() );
+ }
+
+ /**
+ * Return the font color blue
+ *
+ * @return the font color blue
+ */
+ public String getFontColorBlue()
+ {
+ Font font = getCurrentFont();
+
+ return String.valueOf( font.color().getBlue() );
+ }
+
+ /**
+ * Return the font color green
+ *
+ * @return the font color green
+ */
+ public String getFontColorGreen()
+ {
+ Font font = getCurrentFont();
+
+ return String.valueOf( font.color().getGreen() );
+ }
+
+ /**
+ * Return the font color red
+ *
+ * @return the font color red
+ */
+ public String getFontColorRed()
+ {
+ Font font = getCurrentFont();
+
+ return String.valueOf( font.color().getRed() );
+ }
+
+ /**
+ * Get a section font depending the section number.
+ * <dl>
+ * <dt>0</dt>
+ * <dd>Chapter: font size = 24</dd>
+ * <dt>1</dt>
+ * <dd>Section 1: font size = 22</dd>
+ * <dt>2</dt>
+ * <dd>Section 2: font size = 20</dd>
+ * <dt>3</dt>
+ * <dd>Section 3: font size = 18</dd>
+ * <dt>4</dt>
+ * <dd>Section 4: font size = 16</dd>
+ * <dt>5 ot otherwise</dt>
+ * <dd>Section 5: font size = 14</dd>
+ * </dl>
+ *
+ * @param sectionNumber a section number
+ * @return a font
+ */
+ public static int getSectionFontSize( int sectionNumber )
+ {
+ switch ( sectionNumber )
+ {
+ case 0:
+ return 24;
+
+ case 1:
+ return 22;
+
+ case 2:
+ return 20;
+
+ case 3:
+ return 18;
+
+ case 4:
+ return 16;
+
+ case 5:
+ default:
+ return 14;
+ }
+ }
+
+ /**
+ * Convenience method to get a defined MonoSpaced font depending the wanted style and size.
+ *
+ * @param style
+ * @param size
+ * @param color
+ * @return a font
+ */
+ public static Font getMonoSpacedFont( int style, float size, Color color )
+ {
+ return new Font( FONT_MAPPER.awtToPdf( new java.awt.Font( "Monospaced", 0, 0 ) ), size, style, color );
+ }
+
+ /**
+ * Convenience method to get a defined font depending the wanted style and size.
+ *
+ * @param style
+ * @param size
+ * @param color
+ * @return a font
+ */
+ public static Font getFont( int style, float size, Color color )
+ {
+ Font font = new Font();
+ font.setFamily( DEFAULT_FONT_NAME );
+ font.setStyle( style );
+ font.setSize( size );
+ font.setColor( color );
+ return font;
+ }
+
+ /**
+ * Convenience method to return the current font
+ *
+ * @return the current font
+ */
+ private Font getCurrentFont()
+ {
+ if ( this.monoSpaced )
+ {
+ return getMonoSpacedFont( this.currentStyle, this.currentSize, this.currentColor );
+ }
+
+ return getFont(this.currentStyle, this.currentSize, this.currentColor );
+ }
+}
Propchange: maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextFont.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextFont.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextHeader.java
URL: http://svn.apache.org/viewcvs/maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextHeader.java?rev=406450&view=auto
==============================================================================
--- maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextHeader.java (added)
+++ maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextHeader.java Sun May 14 15:15:30 2006
@@ -0,0 +1,133 @@
+package org.apache.maven.doxia.module.itext;
+
+/*
+ * 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.util.Date;
+
+/**
+ * Header object containing meta-informations.
+ *
+ * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
+ * @version $Id$
+ */
+public class ITextHeader
+{
+ private String title;
+
+ private StringBuffer authors;
+
+ private Date date;
+
+ /**
+ * Default constructor
+ */
+ public ITextHeader()
+ {
+ // nop
+ }
+
+ /**
+ * Add a title to the Document
+ *
+ * @param title1
+ */
+ public final void setTitle( String title1 )
+ {
+ this.title = title1;
+ }
+
+ /**
+ * Get the title
+ *
+ * @return title as String
+ */
+ public String getTitle()
+ {
+ if ( this.title == null )
+ {
+ return "";
+ }
+
+ return this.title;
+ }
+
+ /**
+ * Add a new author
+ *
+ * @param author
+ */
+ public void addAuthor( String author )
+ {
+ if ( this.authors == null )
+ {
+ this.authors = new StringBuffer();
+ }
+ else
+ {
+ this.authors.append( ", " );
+ }
+
+ this.authors.append( author );
+ }
+
+ /**
+ * Get the authors
+ *
+ * @return the authors as String
+ */
+ public String getAuthors()
+ {
+ if ( ( this.authors == null ) || ( this.authors.length() == 0 ) )
+ {
+ return System.getProperty( "user.name" );
+ }
+
+ return this.authors.toString();
+ }
+
+ /**
+ * Add a date to the document
+ *
+ * @param date1 a date as String
+ */
+ public void setDate( String date1 )
+ {
+ try
+ {
+ this.date = new Date( date1 );
+ }
+ catch ( IllegalArgumentException e )
+ {
+ this.date = new Date();
+ }
+ }
+
+ /**
+ * Get the date of the document
+ *
+ * @return the date as String
+ */
+ public String getDate()
+ {
+ if ( this.date == null )
+ {
+ return new Date( System.currentTimeMillis() ).toString();
+ }
+
+ return this.date.toString();
+ }
+}
Propchange: maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextHeader.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextHeader.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextSink.java
URL: http://svn.apache.org/viewcvs/maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextSink.java?rev=406450&view=auto
==============================================================================
--- maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextSink.java (added)
+++ maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextSink.java Sun May 14 15:15:30 2006
@@ -0,0 +1,1887 @@
+package org.apache.maven.doxia.module.itext;
+
+/*
+ * Copyright 2004-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.awt.Color;
+import java.io.IOException;
+import java.io.LineNumberReader;
+import java.io.StringReader;
+import java.io.Writer;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.apache.maven.doxia.module.HtmlTools;
+import org.apache.maven.doxia.module.SinkActionContext;
+import org.apache.maven.doxia.sink.Sink;
+import org.apache.maven.doxia.sink.SinkAdapter;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.xml.PrettyPrintXMLWriter;
+import org.codehaus.plexus.util.xml.XMLWriter;
+
+import com.lowagie.text.BadElementException;
+import com.lowagie.text.ElementTags;
+import com.lowagie.text.Image;
+
+/**
+ * <p>A doxia Sink which produces an XML Front End document for <code>iText</code> framework.</p>
+ * Known limitations:
+ * <ul>
+ * <li>Roman lists are not supported.</li>
+ * <li>Horizontal rule is not supported with 1.3.
+ * See <a href="http://www.mail-archive.com/itext-questions@lists.sourceforge.net/msg10323.html">http://www.mail-archive.com/itext-questions@lists.sourceforge.net/msg10323.html</a></li>
+ * <li>iText has some problems with <code>ElementTags.TABLE</code> and <code>ElementTags.TABLEFITSPAGE</code>.
+ * See http://sourceforge.net/tracker/index.php?func=detail&aid=786427&group_id=15255&atid=115255.</li>
+ * <li>Images could be on another page and next text on the last one.</li>
+ * </ul>
+ *
+ * @see <a href="http://www.lowagie.com/iText/tutorial/ch07.html">http://www.lowagie.com/iText/tutorial/ch07.html</a>
+ *
+ * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
+ * @version $Id$
+ * @plexus.component role="org.apache.maven.doxia.sink.Sink"
+ * role-hint="pdf"
+ */
+public final class ITextSink
+ extends SinkAdapter
+{
+ /** This is the place where the iText DTD is located. IMPORTANT: this DTD is not uptodate! */
+ public final static String DTD = "http://itext.sourceforge.net/itext.dtd";
+
+ /** This is the reference to the DTD. */
+ public static final String DOCTYPE = "ITEXT SYSTEM \"" + DTD + "\"";
+
+ /** This is the default leading for chapter title */
+ public static final String DEFAULT_CHAPTER_TITLE_LEADING = "36.0";
+
+ /** This is the default leading for section title */
+ public static final String DEFAULT_SECTION_TITLE_LEADING = "24.0";
+
+ /** The ClassLoader used */
+ private ClassLoader currentClassLoader;
+
+ /** The action context */
+ private SinkActionContext actionContext;
+
+ /** The Writer used */
+ private Writer writer;
+
+ /** The XML Writer used */
+ private XMLWriter xmlWriter;
+
+ /** The Header object */
+ private ITextHeader header;
+
+ /** The font object */
+ private ITextFont font;
+
+ private int numberDepth = 0;
+
+ private int depth = 0;
+
+ /**
+ * Default constructor
+ *
+ * @param w a writer
+ */
+ public ITextSink( Writer w )
+ {
+ this.writer = w;
+
+ this.actionContext = new SinkActionContext();
+ this.font = new ITextFont();
+ this.header = new ITextHeader();
+
+ this.xmlWriter = new PrettyPrintXMLWriter( this.writer, "UTF-8", null );//, DOCTYPE );
+ }
+
+ /**
+ * Get the current classLoader
+ *
+ * @return the current class loader
+ */
+ public ClassLoader getClassLoader()
+ {
+ return this.currentClassLoader;
+ }
+
+ /**
+ * Set a new class loader
+ *
+ * @param cl
+ */
+ public void setClassLoader( ClassLoader cl )
+ {
+ this.currentClassLoader = cl;
+ }
+
+ // ----------------------------------------------------------------------
+ // Document
+ // ----------------------------------------------------------------------
+ /**
+ * @see org.apache.maven.doxia.sink.Sink#close()
+ */
+ public void close()
+ {
+ IOUtil.close( this.writer );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.Sink#flush()
+ */
+ public void flush()
+ {
+ super.flush();
+ }
+
+ // ----------------------------------------------------------------------
+ // Header
+ // ----------------------------------------------------------------------
+ /**
+ * @see org.apache.maven.doxia.sink.Sink#head_()
+ */
+ public void head_()
+ {
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.Sink#head()
+ */
+ public void head()
+ {
+ this.actionContext.setAction( SinkActionContext.HEAD );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#author_()
+ */
+ public void author_()
+ {
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#author()
+ */
+ public void author()
+ {
+ this.actionContext.setAction( SinkActionContext.AUTHOR );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#date_()
+ */
+ public void date_()
+ {
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#date()
+ */
+ public void date()
+ {
+ this.actionContext.setAction( SinkActionContext.DATE );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#title_()
+ */
+ public void title_()
+ {
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#title()
+ */
+ public void title()
+ {
+ this.actionContext.setAction( SinkActionContext.TITLE );
+ }
+
+ // ----------------------------------------------------------------------
+ // Body
+ // ----------------------------------------------------------------------
+ /**
+ * @see org.apache.maven.doxia.sink.Sink#body_()
+ */
+ public void body_()
+ {
+ writeEndElement(); // ElementTags.CHAPTER
+
+ writeEndElement(); // ElementTags.ITEXT
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.Sink#body()
+ */
+ public void body()
+ {
+ writeStartElement( ElementTags.ITEXT );
+ writeAddAttribute( ElementTags.TITLE, this.header.getTitle() );
+ writeAddAttribute( ElementTags.AUTHOR, this.header.getAuthors() );
+ writeAddAttribute( ElementTags.CREATIONDATE, this.header.getDate() );
+ writeAddAttribute( ElementTags.SUBJECT, this.header.getTitle() );
+ writeAddAttribute( ElementTags.KEYWORDS, "" );
+ writeAddAttribute( ElementTags.PRODUCER, "Generated with Doxia by " + System.getProperty( "user.name" ) );
+ writeAddAttribute( ElementTags.PAGE_SIZE, ITextUtil.getPageSize( ITextUtil.getDefaultPageSize() ) );
+
+ writeStartElement( ElementTags.CHAPTER );
+ writeAddAttribute( ElementTags.NUMBERDEPTH, this.numberDepth );
+ writeAddAttribute( ElementTags.DEPTH, this.depth );
+ writeAddAttribute( ElementTags.INDENT, "0.0" );
+
+ writeStartElement( ElementTags.TITLE );
+ writeAddAttribute( ElementTags.LEADING, DEFAULT_CHAPTER_TITLE_LEADING );
+ writeAddAttribute( ElementTags.FONT, ITextFont.DEFAULT_FONT_NAME );
+ writeAddAttribute( ElementTags.SIZE, ITextFont.getSectionFontSize( 0 ) );
+ writeAddAttribute( ElementTags.STYLE, ITextFont.BOLD );
+ writeAddAttribute( ElementTags.BLUE, ITextFont.DEFAULT_FONT_COLOR_BLUE );
+ writeAddAttribute( ElementTags.GREEN, ITextFont.DEFAULT_FONT_COLOR_GREEN );
+ writeAddAttribute( ElementTags.RED, ITextFont.DEFAULT_FONT_COLOR_RED );
+ writeAddAttribute( ElementTags.ALIGN, ElementTags.ALIGN_CENTER );
+
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, ITextFont.DEFAULT_FONT_NAME );
+ writeAddAttribute( ElementTags.SIZE, ITextFont.getSectionFontSize( 0 ) );
+ writeAddAttribute( ElementTags.STYLE, ITextFont.BOLD );
+ writeAddAttribute( ElementTags.BLUE, ITextFont.DEFAULT_FONT_COLOR_BLUE );
+ writeAddAttribute( ElementTags.GREEN, ITextFont.DEFAULT_FONT_COLOR_GREEN );
+ writeAddAttribute( ElementTags.RED, ITextFont.DEFAULT_FONT_COLOR_RED );
+ writeAddAttribute( ElementTags.LOCALDESTINATION, "top" );
+
+ write( this.header.getTitle() );
+
+ writeEndElement(); // ElementTags.CHUNK
+
+ writeEndElement(); // ElementTags.TITLE
+
+ this.actionContext.setAction( SinkActionContext.BODY );
+ }
+
+ // ----------------------------------------------------------------------
+ // Sections
+ // ----------------------------------------------------------------------
+ /**
+ * @see org.apache.maven.doxia.sink.Sink#sectionTitle()
+ */
+ public void sectionTitle()
+ {
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.Sink#sectionTitle_()
+ */
+ public void sectionTitle_()
+ {
+ this.actionContext.setAction( SinkActionContext.SECTION_TITLE );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#section1_()
+ */
+ public void section1_()
+ {
+ writeEndElement(); // ElementTags.SECTION
+
+ this.numberDepth--;
+ this.depth = 0;
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#section1()
+ */
+ public void section1()
+ {
+ this.numberDepth++;
+ this.depth = 1;
+
+ writeStartElement( ElementTags.SECTION );
+ writeAddAttribute( ElementTags.NUMBERDEPTH, this.numberDepth );
+ writeAddAttribute( ElementTags.DEPTH, this.depth );
+ writeAddAttribute( ElementTags.INDENT, "0.0" );
+
+ lineBreak();
+
+ this.actionContext.setAction( SinkActionContext.SECTION_1 );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.Sink#sectionTitle1_()
+ */
+ public void sectionTitle1_()
+ {
+ writeEndElement(); // ElementTags.TITLE
+
+ this.font.setSize( ITextFont.DEFAULT_FONT_SIZE );
+ bold_();
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.Sink#sectionTitle()
+ */
+ public void sectionTitle1()
+ {
+ this.font.setSize( ITextFont.getSectionFontSize( 1 ) );
+ this.font.setColor( Color.BLACK );
+ bold();
+
+ writeStartElement( ElementTags.TITLE );
+ writeAddAttribute( ElementTags.LEADING, DEFAULT_SECTION_TITLE_LEADING );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ this.actionContext.setAction( SinkActionContext.SECTION_TITLE_1 );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#section2_()
+ */
+ public void section2_()
+ {
+ writeEndElement(); // ElementTags.SECTION
+
+ this.numberDepth--;
+ this.depth = 0;
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#section2()
+ */
+ public void section2()
+ {
+ this.numberDepth++;
+ this.depth = 1;
+
+ writeStartElement( ElementTags.SECTION );
+ writeAddAttribute( ElementTags.NUMBERDEPTH, this.numberDepth );
+ writeAddAttribute( ElementTags.DEPTH, this.depth );
+ writeAddAttribute( ElementTags.INDENT, "0.0" );
+
+ lineBreak();
+
+ this.actionContext.setAction( SinkActionContext.SECTION_2 );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#sectionTitle2_()
+ */
+ public void sectionTitle2_()
+ {
+ writeEndElement(); // ElementTags.TITLE
+
+ this.font.setSize( ITextFont.DEFAULT_FONT_SIZE );
+ bold_();
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#sectionTitle2()
+ */
+ public void sectionTitle2()
+ {
+ this.font.setSize( ITextFont.getSectionFontSize( 2 ) );
+ this.font.setColor( Color.BLACK );
+ bold();
+
+ writeStartElement( ElementTags.TITLE );
+ writeAddAttribute( ElementTags.LEADING, DEFAULT_SECTION_TITLE_LEADING );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ this.actionContext.setAction( SinkActionContext.SECTION_TITLE_2 );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#section3_()
+ */
+ public void section3_()
+ {
+ writeEndElement(); // ElementTags.SECTION
+
+ this.numberDepth--;
+ this.depth = 1;
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#section3()
+ */
+ public void section3()
+ {
+ this.numberDepth++;
+ this.depth = 1;
+
+ writeStartElement( ElementTags.SECTION );
+ writeAddAttribute( ElementTags.NUMBERDEPTH, this.numberDepth );
+ writeAddAttribute( ElementTags.DEPTH, this.depth );
+ writeAddAttribute( ElementTags.INDENT, "0.0" );
+
+ lineBreak();
+
+ this.actionContext.setAction( SinkActionContext.SECTION_3 );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#sectionTitle3_()
+ */
+ public void sectionTitle3_()
+ {
+ writeEndElement(); // ElementTags.TITLE
+
+ this.font.setSize( ITextFont.DEFAULT_FONT_SIZE );
+ bold_();
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#sectionTitle3()
+ */
+ public void sectionTitle3()
+ {
+ this.font.setSize( ITextFont.getSectionFontSize( 3 ) );
+ this.font.setColor( Color.BLACK );
+ bold();
+
+ writeStartElement( ElementTags.TITLE );
+ writeAddAttribute( ElementTags.LEADING, DEFAULT_SECTION_TITLE_LEADING );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ this.actionContext.setAction( SinkActionContext.SECTION_TITLE_3 );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#section4_()
+ */
+ public void section4_()
+ {
+ writeEndElement(); // ElementTags.SECTION
+
+ this.numberDepth--;
+ this.depth = 1;
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#section4()
+ */
+ public void section4()
+ {
+ this.numberDepth++;
+ this.depth = 1;
+
+ writeStartElement( ElementTags.SECTION );
+ writeAddAttribute( ElementTags.NUMBERDEPTH, this.numberDepth );
+ writeAddAttribute( ElementTags.DEPTH, this.depth );
+ writeAddAttribute( ElementTags.INDENT, "0.0" );
+
+ lineBreak();
+
+ this.actionContext.setAction( SinkActionContext.SECTION_4 );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#sectionTitle4_()
+ */
+ public void sectionTitle4_()
+ {
+ writeEndElement(); // ElementTags.TITLE
+
+ this.font.setSize( ITextFont.DEFAULT_FONT_SIZE );
+ bold_();
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#sectionTitle4()
+ */
+ public void sectionTitle4()
+ {
+ this.font.setSize( ITextFont.getSectionFontSize( 4 ) );
+ this.font.setColor( Color.BLACK );
+ bold();
+
+ writeStartElement( ElementTags.TITLE );
+ writeAddAttribute( ElementTags.LEADING, DEFAULT_SECTION_TITLE_LEADING );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ this.actionContext.setAction( SinkActionContext.SECTION_TITLE_4 );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#section5_()
+ */
+ public void section5_()
+ {
+ writeEndElement(); // ElementTags.SECTION
+
+ this.numberDepth--;
+ this.depth = 1;
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#section5()
+ */
+ public void section5()
+ {
+ this.numberDepth++;
+ this.depth = 1;
+
+ writeStartElement( ElementTags.SECTION );
+ writeAddAttribute( ElementTags.NUMBERDEPTH, this.numberDepth );
+ writeAddAttribute( ElementTags.DEPTH, this.depth );
+ writeAddAttribute( ElementTags.INDENT, "0.0" );
+
+ lineBreak();
+
+ this.actionContext.setAction( SinkActionContext.SECTION_5 );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#sectionTitle5_()
+ */
+ public void sectionTitle5_()
+ {
+ writeEndElement(); // ElementTags.TITLE
+
+ this.font.setSize( ITextFont.DEFAULT_FONT_SIZE );
+ bold_();
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#sectionTitle5()
+ */
+ public void sectionTitle5()
+ {
+ this.font.setSize( ITextFont.getSectionFontSize( 5 ) );
+ this.font.setColor( Color.BLACK );
+ bold();
+
+ writeStartElement( ElementTags.TITLE );
+ writeAddAttribute( ElementTags.LEADING, DEFAULT_SECTION_TITLE_LEADING );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ this.actionContext.setAction( SinkActionContext.SECTION_TITLE_5 );
+ }
+
+ // ----------------------------------------------------------------------
+ // Paragraph
+ // ----------------------------------------------------------------------
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#paragraph_()
+ */
+ public void paragraph_()
+ {
+ // Special case
+ if ( ( this.actionContext.getCurrentAction() == SinkActionContext.LIST_ITEM )
+ || ( this.actionContext.getCurrentAction() == SinkActionContext.NUMBERED_LIST_ITEM )
+ || ( this.actionContext.getCurrentAction() == SinkActionContext.DEFINITION ) )
+ {
+ return;
+ }
+
+ writeEndElement(); // ElementTags.PARAGRAPH
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#paragraph()
+ */
+ public void paragraph()
+ {
+ // Special case
+ if ( ( this.actionContext.getCurrentAction() == SinkActionContext.LIST_ITEM )
+ || ( this.actionContext.getCurrentAction() == SinkActionContext.NUMBERED_LIST_ITEM )
+ || ( this.actionContext.getCurrentAction() == SinkActionContext.DEFINITION ) )
+ {
+ return;
+ }
+
+ writeStartElement( ElementTags.PARAGRAPH );
+
+ writeStartElement( ElementTags.NEWLINE );
+ writeEndElement();
+
+ this.actionContext.setAction( SinkActionContext.PARAGRAPH );
+ }
+
+ // ----------------------------------------------------------------------
+ // Lists
+ // ----------------------------------------------------------------------
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#list_()
+ */
+ public void list_()
+ {
+ writeEndElement(); // ElementTags.LIST
+
+ writeEndElement(); // ElementTags.CHUNK
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#list()
+ */
+ public void list()
+ {
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ writeStartElement( ElementTags.LIST );
+ writeAddAttribute( ElementTags.NUMBERED, Boolean.FALSE.toString() );
+ writeAddAttribute( ElementTags.SYMBOLINDENT, "15" );
+
+ this.actionContext.setAction( SinkActionContext.LIST );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#listItem_()
+ */
+ public void listItem_()
+ {
+ writeEndElement(); // ElementTags.LISTITEM
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#listItem()
+ */
+ public void listItem()
+ {
+ writeStartElement( ElementTags.LISTITEM );
+ writeAddAttribute( ElementTags.INDENTATIONLEFT, "20.0" );
+
+ this.actionContext.setAction( SinkActionContext.LIST_ITEM );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#numberedList_()
+ */
+ public void numberedList_()
+ {
+ writeEndElement(); // ElementTags.LIST
+
+ writeEndElement(); // ElementTags.CHUNK
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#numberedList(int)
+ */
+ public void numberedList( int numbering )
+ {
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ writeStartElement( ElementTags.LIST );
+ writeAddAttribute( ElementTags.NUMBERED, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.SYMBOLINDENT, "20" );
+
+ switch ( numbering )
+ {
+ case Sink.NUMBERING_UPPER_ALPHA:
+ writeAddAttribute( ElementTags.LETTERED, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.FIRST, 'A' );
+ break;
+
+ case Sink.NUMBERING_LOWER_ALPHA:
+ writeAddAttribute( ElementTags.LETTERED, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.FIRST, 'a' );
+ break;
+
+ // TODO Doesn't work
+ case Sink.NUMBERING_UPPER_ROMAN:
+ writeAddAttribute( ElementTags.LETTERED, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.FIRST, 'I' );
+ break;
+
+ case Sink.NUMBERING_LOWER_ROMAN:
+ writeAddAttribute( ElementTags.LETTERED, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.FIRST, 'i' );
+ break;
+
+ case Sink.NUMBERING_DECIMAL:
+ default:
+ writeAddAttribute( ElementTags.LETTERED, Boolean.FALSE.toString() );
+ }
+
+ this.actionContext.setAction( SinkActionContext.NUMBERED_LIST );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#numberedListItem_()
+ */
+ public void numberedListItem_()
+ {
+ writeEndElement(); // ElementTags.LISTITEM
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#numberedListItem()
+ */
+ public void numberedListItem()
+ {
+ writeStartElement( ElementTags.LISTITEM );
+ writeAddAttribute( ElementTags.INDENTATIONLEFT, "20" );
+
+ this.actionContext.setAction( SinkActionContext.NUMBERED_LIST_ITEM );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#definitionList_()
+ */
+ public void definitionList_()
+ {
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#definitionList()
+ */
+ public void definitionList()
+ {
+ this.actionContext.setAction( SinkActionContext.DEFINITION_LIST );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#definedTerm_()
+ */
+ public void definedTerm_()
+ {
+ writeEndElement(); // ElementTags.CELL
+
+ writeEndElement(); // ElementTags.ROW
+
+ writeEndElement(); // ElementTags.TABLE
+
+ writeEndElement(); // ElementTags.CHUNK
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#definedTerm()
+ */
+ public void definedTerm()
+ {
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ writeStartElement( ElementTags.TABLE );
+ writeAddAttribute( ElementTags.COLUMNS, "1" );
+ writeAddAttribute( ElementTags.LEFT, Boolean.FALSE.toString() );
+ writeAddAttribute( ElementTags.RIGHT, Boolean.FALSE.toString() );
+ writeAddAttribute( ElementTags.TOP, Boolean.FALSE.toString() );
+ writeAddAttribute( ElementTags.BOTTOM, Boolean.FALSE.toString() );
+ writeAddAttribute( ElementTags.ALIGN, ElementTags.ALIGN_CENTER );
+ writeAddAttribute( ElementTags.WIDTH, "100%" );
+ // writeAddAttribute( ElementTags.TABLEFITSPAGE, Boolean.TRUE.toString() );
+ // writeAddAttribute( ElementTags.CELLSFITPAGE, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.CELLPADDING, "0" );
+
+ writeStartElement( ElementTags.ROW );
+
+ writeStartElement( ElementTags.CELL );
+ writeAddAttribute( ElementTags.LEFT, Boolean.FALSE.toString() );
+ writeAddAttribute( ElementTags.RIGHT, Boolean.FALSE.toString() );
+ writeAddAttribute( ElementTags.TOP, Boolean.FALSE.toString() );
+ writeAddAttribute( ElementTags.BOTTOM, Boolean.FALSE.toString() );
+
+ this.actionContext.setAction( SinkActionContext.DEFINED_TERM );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#definition_()
+ */
+ public void definition_()
+ {
+ writeEndElement(); // ElementTags.CELL
+
+ writeEndElement(); // ElementTags.ROW
+
+ writeEndElement(); // ElementTags.TABLE
+
+ writeEndElement(); // ElementTags.CHUNK
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#definition()
+ */
+ public void definition()
+ {
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ writeStartElement( ElementTags.TABLE );
+ writeAddAttribute( ElementTags.COLUMNS, "2" );
+ writeAddAttribute( ElementTags.LEFT, Boolean.FALSE.toString() );
+ writeAddAttribute( ElementTags.RIGHT, Boolean.FALSE.toString() );
+ writeAddAttribute( ElementTags.TOP, Boolean.FALSE.toString() );
+ writeAddAttribute( ElementTags.BOTTOM, Boolean.FALSE.toString() );
+ writeAddAttribute( ElementTags.ALIGN, ElementTags.ALIGN_CENTER );
+ writeAddAttribute( ElementTags.WIDTH, "100%" );
+ writeAddAttribute( ElementTags.WIDTHS, "20.0;80.0" );
+ // writeAddAttribute( ElementTags.TABLEFITSPAGE, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.CELLSFITPAGE, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.CELLPADDING, "5" );
+
+ writeStartElement( ElementTags.ROW );
+
+ writeStartElement( ElementTags.CELL );
+ writeAddAttribute( ElementTags.LEFT, Boolean.FALSE.toString() );
+ writeAddAttribute( ElementTags.RIGHT, Boolean.FALSE.toString() );
+ writeAddAttribute( ElementTags.TOP, Boolean.FALSE.toString() );
+ writeAddAttribute( ElementTags.BOTTOM, Boolean.FALSE.toString() );
+
+ write( "" );
+
+ writeEndElement(); // ElementTags.CELL
+
+ writeStartElement( ElementTags.CELL );
+ writeAddAttribute( ElementTags.LEFT, Boolean.FALSE.toString() );
+ writeAddAttribute( ElementTags.RIGHT, Boolean.FALSE.toString() );
+ writeAddAttribute( ElementTags.TOP, Boolean.FALSE.toString() );
+ writeAddAttribute( ElementTags.BOTTOM, Boolean.FALSE.toString() );
+
+ this.actionContext.setAction( SinkActionContext.DEFINITION );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#definitionListItem_()
+ */
+ public void definitionListItem_()
+ {
+ // nop
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#definitionListItem()
+ */
+ public void definitionListItem()
+ {
+ // nop
+
+ this.actionContext.setAction( SinkActionContext.DEFINITION_LIST_ITEM );
+ }
+
+ // ----------------------------------------------------------------------
+ // Tables
+ // ----------------------------------------------------------------------
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#table_()
+ */
+ public void table_()
+ {
+ writeEndElement(); // ElementTags.TABLE
+
+ writeEndElement(); // ElementTags.CHUNK
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#table()
+ */
+ public void table()
+ {
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ writeStartElement( ElementTags.TABLE );
+ writeAddAttribute( ElementTags.LEFT, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.RIGHT, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.TOP, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.BOTTOM, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.ALIGN, ElementTags.ALIGN_CENTER );
+ writeAddAttribute( ElementTags.WIDTH, "100.0%" );
+ writeAddAttribute( ElementTags.TABLEFITSPAGE, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.CELLSFITPAGE, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.CELLPADDING, "10" );
+ //writeAddAttribute( ElementTags.COLUMNS, "2" );
+
+ this.actionContext.setAction( SinkActionContext.TABLE );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#tableCaption_()
+ */
+ public void tableCaption_()
+ {
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#tableCaption()
+ */
+ public void tableCaption()
+ {
+ this.actionContext.setAction( SinkActionContext.TABLE_CAPTION );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#tableCell_()
+ */
+ public void tableCell_()
+ {
+ writeEndElement(); // ElementTags.CELL
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#tableCell()
+ */
+ public void tableCell()
+ {
+ writeStartElement( ElementTags.CELL );
+ writeAddAttribute( ElementTags.LEFT, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.RIGHT, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.TOP, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.BOTTOM, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.HORIZONTALALIGN, ElementTags.ALIGN_LEFT );
+
+ this.actionContext.setAction( SinkActionContext.TABLE_CELL );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#tableCell(java.lang.String)
+ */
+ public void tableCell( String width )
+ {
+ this.actionContext.setAction( SinkActionContext.TABLE_CELL );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#tableHeaderCell_()
+ */
+ public void tableHeaderCell_()
+ {
+ writeEndElement(); // ElementTags.CELL
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#tableHeaderCell()
+ */
+ public void tableHeaderCell()
+ {
+ writeStartElement( ElementTags.CELL );
+ writeAddAttribute( ElementTags.LEFT, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.RIGHT, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.TOP, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.BOTTOM, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.HEADER, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.BGRED, Color.GRAY.getRed() );
+ writeAddAttribute( ElementTags.BGBLUE, Color.GRAY.getBlue() );
+ writeAddAttribute( ElementTags.BGGREEN, Color.GRAY.getGreen() );
+ writeAddAttribute( ElementTags.HORIZONTALALIGN, ElementTags.ALIGN_CENTER );
+
+ this.actionContext.setAction( SinkActionContext.TABLE_HEADER_CELL );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#tableHeaderCell(java.lang.String)
+ */
+ public void tableHeaderCell( String width )
+ {
+ this.actionContext.setAction( SinkActionContext.TABLE_HEADER_CELL );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#tableRow_()
+ */
+ public void tableRow_()
+ {
+ writeEndElement(); // ElementTags.ROW
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#tableRow()
+ */
+ public void tableRow()
+ {
+ writeStartElement( ElementTags.ROW );
+
+ this.actionContext.setAction( SinkActionContext.TABLE_ROW );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#tableRows_()
+ */
+ public void tableRows_()
+ {
+ //writeEndElement(); // ElementTags.TABLE
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#tableRows(int[], boolean)
+ */
+ public void tableRows( int[] justification, boolean grid )
+ {
+ // ElementTags.TABLE
+ writeAddAttribute( ElementTags.COLUMNS, justification.length );
+
+ this.actionContext.setAction( SinkActionContext.TABLE_ROWS );
+ }
+
+ // ----------------------------------------------------------------------
+ // Verbatim
+ // ----------------------------------------------------------------------
+ /**
+ * @see org.apache.maven.doxia.sink.Sink#verbatim_()
+ */
+ public void verbatim_()
+ {
+ writeEndElement(); // ElementTags.CELL
+
+ writeEndElement(); // ElementTags.ROW
+
+ writeEndElement(); // ElementTags.TABLE
+
+ writeEndElement(); // ElementTags.CHUNK
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.Sink#verbatim(boolean)
+ */
+ public void verbatim( boolean boxed )
+ {
+ // Always boxed
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ writeStartElement( ElementTags.TABLE );
+ writeAddAttribute( ElementTags.COLUMNS, "1" );
+ writeAddAttribute( ElementTags.LEFT, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.RIGHT, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.TOP, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.BOTTOM, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.ALIGN, ElementTags.ALIGN_CENTER );
+ writeAddAttribute( ElementTags.TABLEFITSPAGE, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.CELLSFITPAGE, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.CELLPADDING, "10" );
+ writeAddAttribute( ElementTags.WIDTH, "100.0%" );
+
+ writeStartElement( ElementTags.ROW );
+
+ writeStartElement( ElementTags.CELL );
+ writeAddAttribute( ElementTags.LEFT, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.RIGHT, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.TOP, Boolean.TRUE.toString() );
+ writeAddAttribute( ElementTags.BOTTOM, Boolean.TRUE.toString() );
+
+ this.actionContext.setAction( SinkActionContext.VERBATIM );
+ }
+
+ // ----------------------------------------------------------------------
+ // Figures
+ // ----------------------------------------------------------------------
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#figure_()
+ */
+ public void figure_()
+ {
+ writeEndElement(); // ElementTags.IMAGE
+
+ writeEndElement(); // ElementTags.CHUNK
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#figure()
+ */
+ public void figure()
+ {
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ writeStartElement( ElementTags.IMAGE );
+
+ this.actionContext.setAction( SinkActionContext.FIGURE );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#figureCaption_()
+ */
+ public void figureCaption_()
+ {
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#figureCaption()
+ */
+ public void figureCaption()
+ {
+ this.actionContext.setAction( SinkActionContext.FIGURE_CAPTION );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.Sink#figureGraphics(java.lang.String)
+ */
+ public void figureGraphics( String name )
+ {
+ String urlName = null;
+ if ( ( name.toLowerCase().startsWith( "http://" ) ) || ( name.toLowerCase().startsWith( "https://" ) ) )
+ {
+ urlName = name;
+ }
+ else
+ {
+ if ( getClassLoader() != null )
+ {
+ if ( getClassLoader().getResource( name ) != null )
+ {
+ urlName = getClassLoader().getResource( name ).toString();
+ }
+ }
+ else
+ {
+ if ( ITextSink.class.getClassLoader().getResource( name ) != null )
+ {
+ urlName = ITextSink.class.getClassLoader().getResource( name ).toString();
+ }
+ }
+ }
+
+ if ( urlName == null )
+ {
+ //TODO
+ System.err.println( "The image " + name + " not found in the class loader. Try to call setClassLoader(ClassLoader) before." );
+ return;
+ }
+
+ float width = 0;
+ float height = 0;
+ try
+ {
+ Image image = Image.getInstance( new URL( urlName ) );
+ image.scaleToFit( ITextUtil.getDefaultPageSize().width() / 2, ITextUtil.getDefaultPageSize().height() / 2 );
+ width = image.plainWidth();
+ height = image.plainHeight();
+ }
+ catch ( BadElementException e )
+ {
+ // nop
+ }
+ catch ( MalformedURLException e )
+ {
+ // nop
+ }
+ catch ( IOException e )
+ {
+ // nop
+ }
+
+ writeAddAttribute( ElementTags.URL, urlName );
+ writeAddAttribute( ElementTags.ALIGN, ElementTags.ALIGN_MIDDLE );
+ writeAddAttribute( ElementTags.PLAINWIDTH, String.valueOf( width ) );
+ writeAddAttribute( ElementTags.PLAINHEIGHT, String.valueOf( height ) );
+
+ this.actionContext.setAction( SinkActionContext.FIGURE_GRAPHICS );
+ }
+
+ // ----------------------------------------------------------------------
+ // Fonts
+ // ----------------------------------------------------------------------
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#bold_()
+ */
+ public void bold_()
+ {
+ this.font.removeBold();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#bold()
+ */
+ public void bold()
+ {
+ this.font.addBold();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#italic_()
+ */
+ public void italic_()
+ {
+ this.font.removeItalic();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#italic()
+ */
+ public void italic()
+ {
+ this.font.addItalic();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.Sink#monospaced_()
+ */
+ public void monospaced_()
+ {
+ this.font.setMonoSpaced( false );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.Sink#monospaced()
+ */
+ public void monospaced()
+ {
+ this.font.setMonoSpaced( true );
+ }
+
+ // ----------------------------------------------------------------------
+ // Links
+ // ----------------------------------------------------------------------
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#link_()
+ */
+ public void link_()
+ {
+ writeEndElement(); // ElementTags.ANCHOR
+
+ this.font.setColor( Color.BLACK );
+ this.font.removeUnderlined();
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#link(java.lang.String)
+ */
+ public void link( String name )
+ {
+ this.font.setColor( Color.BLUE );
+ this.font.addUnderlined();
+
+ writeStartElement( ElementTags.ANCHOR );
+ writeAddAttribute( ElementTags.REFERENCE, HtmlTools.escapeHTML( name ) );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ this.actionContext.setAction( SinkActionContext.LINK );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#anchor_()
+ */
+ public void anchor_()
+ {
+ writeEndElement(); // ElementTags.ANCHOR
+
+ this.actionContext.release();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#anchor(java.lang.String)
+ */
+ public void anchor( String name )
+ {
+ writeStartElement( ElementTags.ANCHOR );
+ writeAddAttribute( ElementTags.NAME, name );
+
+ this.actionContext.setAction( SinkActionContext.ANCHOR );
+ }
+
+ // ----------------------------------------------------------------------
+ // Misc
+ // ----------------------------------------------------------------------
+ /**
+ * @see org.apache.maven.doxia.sink.Sink#lineBreak()
+ */
+ public void lineBreak()
+ {
+ // Special case for the header
+ if ( ( this.actionContext.getCurrentAction() == SinkActionContext.AUTHOR )
+ || ( this.actionContext.getCurrentAction() == SinkActionContext.DATE )
+ || ( this.actionContext.getCurrentAction() == SinkActionContext.TITLE ) )
+ {
+ return;
+ }
+
+ writeStartElement( ElementTags.NEWLINE );
+ writeEndElement();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.Sink#nonBreakingSpace()
+ */
+ public void nonBreakingSpace()
+ {
+ write( " " );
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.SinkAdapter#pageBreak()
+ */
+ public void pageBreak()
+ {
+ writeStartElement( ElementTags.NEWPAGE );
+ writeEndElement();
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.Sink#horizontalRule()
+ */
+ public void horizontalRule()
+ {
+ writeStartElement( ElementTags.HORIZONTALRULE );
+ writeEndElement();
+ }
+
+ // ----------------------------------------------------------------------
+ // Text
+ // ----------------------------------------------------------------------
+ /**
+ * @see org.apache.maven.doxia.sink.Sink#rawText(java.lang.String)
+ */
+ public void rawText( String text )
+ {
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ write( text, false );
+
+ writeEndElement(); // ElementTags.CHUNK
+ }
+
+ /**
+ * @see org.apache.maven.doxia.sink.Sink#text(java.lang.String)
+ */
+ public void text( String text )
+ {
+ switch ( this.actionContext.getCurrentAction() )
+ {
+ case SinkActionContext.UNDEFINED:
+ break;
+
+ case SinkActionContext.HEAD:
+ break;
+
+ case SinkActionContext.AUTHOR:
+ this.header.addAuthor( text );
+ break;
+
+ case SinkActionContext.DATE:
+ this.header.setDate( text );
+ break;
+
+ case SinkActionContext.TITLE:
+ this.header.setTitle( text );
+ break;
+
+ case SinkActionContext.SECTION_TITLE_1:
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ write( text );
+
+ writeEndElement(); // ElementTags.CHUNK
+ break;
+
+ case SinkActionContext.SECTION_TITLE_2:
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ write( text );
+
+ writeEndElement(); // ElementTags.CHUNK
+ break;
+
+ case SinkActionContext.SECTION_TITLE_3:
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ write( text );
+
+ writeEndElement(); // ElementTags.CHUNK
+ break;
+
+ case SinkActionContext.SECTION_TITLE_4:
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ write( text );
+
+ writeEndElement(); // ElementTags.CHUNK
+ break;
+
+ case SinkActionContext.SECTION_TITLE_5:
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ write( text );
+
+ writeEndElement(); // ElementTags.CHUNK
+ break;
+
+ case SinkActionContext.LIST_ITEM:
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ write( text );
+
+ writeEndElement(); // ElementTags.CHUNK
+ break;
+
+ case SinkActionContext.NUMBERED_LIST_ITEM:
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ write( text );
+
+ writeEndElement(); // ElementTags.CHUNK
+ break;
+
+ case SinkActionContext.DEFINED_TERM:
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ write( text );
+
+ writeEndElement(); // ElementTags.CHUNK
+ break;
+
+ case SinkActionContext.DEFINITION:
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ write( text );
+
+ writeEndElement(); // ElementTags.CHUNK
+ break;
+
+ case SinkActionContext.TABLE:
+ break;
+
+ case SinkActionContext.TABLE_ROW:
+ break;
+
+ case SinkActionContext.TABLE_HEADER_CELL:
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ write( text );
+
+ writeEndElement(); // ElementTags.CHUNK
+ break;
+
+ case SinkActionContext.TABLE_CELL:
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ write( text );
+
+ writeEndElement(); // ElementTags.CHUNK
+ break;
+
+ case SinkActionContext.TABLE_CAPTION:
+ writeStartElement( ElementTags.PARAGRAPH );
+ writeAddAttribute( ElementTags.ALIGN, ElementTags.ALIGN_CENTER );
+
+ write( text );
+
+ writeEndElement(); // ElementTags.PARAGRAPH
+ break;
+
+ case SinkActionContext.VERBATIM:
+ // Used to preserve indentation and formating
+ LineNumberReader lnr = new LineNumberReader( new StringReader( text ) );
+ String line;
+ try
+ {
+ while ( ( line = lnr.readLine() ) != null )
+ {
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ write( "<![CDATA[", true );
+ // Special case
+ line = StringUtils.replace( line, "<![CDATA[", "< ![CDATA[" );
+ line = StringUtils.replace( line, "]]>", "]] >" );
+ write( line, true, false );
+ write( "]]>", true );
+
+ writeEndElement();
+ lineBreak();
+ }
+ }
+ catch ( IOException e )
+ {
+ throw new RuntimeException( "IOException: ", e );
+ }
+ break;
+
+ case SinkActionContext.FIGURE:
+ case SinkActionContext.FIGURE_GRAPHICS:
+ break;
+
+ case SinkActionContext.FIGURE_CAPTION:
+ writeAddAttribute( ElementTags.ALT, text );
+ break;
+
+ case SinkActionContext.LINK:
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ write( text );
+
+ writeEndElement(); // ElementTags.CHUNK
+ break;
+
+ case SinkActionContext.ANCHOR:
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ write( text );
+
+ writeEndElement(); // ElementTags.CHUNK
+ break;
+
+ case SinkActionContext.SECTION_TITLE:
+ case SinkActionContext.SECTION_1:
+ case SinkActionContext.SECTION_2:
+ case SinkActionContext.SECTION_3:
+ case SinkActionContext.SECTION_4:
+ case SinkActionContext.SECTION_5:
+ break;
+
+ case SinkActionContext.PARAGRAPH:
+ default:
+ writeStartElement( ElementTags.CHUNK );
+ writeAddAttribute( ElementTags.FONT, this.font.getFontName() );
+ writeAddAttribute( ElementTags.SIZE, this.font.getFontSize() );
+ writeAddAttribute( ElementTags.STYLE, this.font.getFontStyle() );
+ writeAddAttribute( ElementTags.BLUE, this.font.getFontColorBlue() );
+ writeAddAttribute( ElementTags.GREEN, this.font.getFontColorGreen() );
+ writeAddAttribute( ElementTags.RED, this.font.getFontColorRed() );
+
+ write( text );
+
+ writeEndElement(); // ElementTags.CHUNK
+ }
+ }
+
+ /**
+ * Convenience method to write a starting element.
+ *
+ * @param tag the name of the tag
+ */
+ private void writeStartElement( String tag )
+ {
+ this.xmlWriter.startElement( tag );
+ }
+
+ /**
+ * Convenience method to write a key-value pair.
+ *
+ * @param key the name of an attribute
+ * @param value the value of an attribute
+ */
+ private void writeAddAttribute( String key, String value )
+ {
+ this.xmlWriter.addAttribute( key, value );
+ }
+
+ /**
+ * Convenience method to write a key-value pair.
+ *
+ * @param key the name of an attribute
+ * @param value the value of an attribute
+ */
+ private void writeAddAttribute( String key, int value )
+ {
+ this.xmlWriter.addAttribute( key, String.valueOf( value ) );
+ }
+
+ /**
+ * Convenience method to write an end element.
+ */
+ private void writeEndElement()
+ {
+ this.xmlWriter.endElement();
+ }
+
+ /**
+ * Convenience method to write a String
+ *
+ * @param aString
+ */
+ private void write( String aString )
+ {
+ write( aString, false );
+ }
+
+ /**
+ * Convenience method to write a String depending the escapeHtml flag
+ *
+ * @param aString
+ * @param escapeHtml
+ */
+ private void write( String aString, boolean escapeHtml )
+ {
+ write( aString, escapeHtml, true );
+ }
+
+ /**
+ * Convenience method to write a String depending the escapeHtml flag
+ *
+ * @param aString
+ * @param escapeHtml
+ * @param trim
+ */
+ private void write( String aString, boolean escapeHtml, boolean trim )
+ {
+ if ( aString == null )
+ {
+ return;
+ }
+
+ if ( trim )
+ {
+ aString = StringUtils.replace( aString, "\n", "" );
+
+ LineNumberReader lnr = new LineNumberReader( new StringReader( aString ) );
+ StringBuffer sb = new StringBuffer();
+ String line;
+ try
+ {
+ while ( ( line = lnr.readLine() ) != null )
+ {
+ sb.append( beautifyPhrase( line.trim() ) );
+ sb.append( " " );
+ }
+
+ aString = sb.toString();
+ }
+ catch ( IOException e )
+ {
+ // nop
+ }
+ if ( aString.trim().length() == 0 )
+ {
+ return;
+ }
+ }
+ if ( escapeHtml )
+ {
+ this.xmlWriter.writeMarkup( aString );
+ }
+ else
+ {
+ this.xmlWriter.writeText( aString );
+ }
+ }
+
+ /**
+ * Convenience method to return a beautify phrase, i.e. one space between words.
+ *
+ * @param aString
+ * @return a String with only one space between words
+ */
+ private static String beautifyPhrase( String aString )
+ {
+ String[] strings = StringUtils.split( aString, " " );
+ StringBuffer sb = new StringBuffer();
+ for ( int i = 0; i < strings.length; i++ )
+ {
+ if ( strings[i].trim().length() != 0 )
+ {
+ sb.append( strings[i].trim() );
+ sb.append( " " );
+ }
+ }
+
+ return sb.toString().trim();
+ }
+}
\ No newline at end of file
Propchange: maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextSink.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextSink.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"