Author: ltheussl Date: Mon Aug 20 06:05:20 2007 New Revision: 567679 URL: http://svn.apache.org/viewvc?rev=567679&view=rev Log: Use new test classes. Minor fixes to parser (some elements were not properly closed). Javadocs.
Added: maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/java/org/apache/maven/doxia/module/docbook/DocBookIdentityTest.java (with props) maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/resources/test.xml - copied unchanged from r567313, maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/resources/guide.xml Removed: maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/resources/guide.xml Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookParser.java maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookSink.java maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/java/org/apache/maven/doxia/module/docbook/DocBookParserTest.java maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/java/org/apache/maven/doxia/module/docbook/DocBookSinkTest.java Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookParser.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookParser.java?rev=567679&r1=567678&r2=567679&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookParser.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookParser.java Mon Aug 20 06:05:20 2007 @@ -22,6 +22,7 @@ import org.apache.maven.doxia.macro.MacroExecutionException; import org.apache.maven.doxia.parser.AbstractXmlParser; import org.apache.maven.doxia.sink.Sink; + import org.codehaus.plexus.util.xml.pull.XmlPullParser; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; @@ -40,7 +41,7 @@ * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a> * @version $Id$ * @since 1.0 - * @plexus.component role-hint="doc-book" + * @plexus.component role="org.apache.maven.doxia.parser.Parser" role-hint="doc-book" */ public class DocBookParser extends AbstractXmlParser @@ -49,7 +50,7 @@ /** * Level counter for calculating the section level. */ - private int level = 0; + private int level = -1; /** * A selective stack of parent elements @@ -65,99 +66,99 @@ * The list of DocBook elements that introduce a new level of * hierarchy. */ - private static final Collection hierElements = new HashSet(); + private static final Collection HIER_ELEMENTS = new HashSet(); /** * The list of DocBook elements that will be rendered verbatim */ - private static final Collection verbatimElements = new HashSet(); + private static final Collection VERBATIM_ELEMENTS = new HashSet(); /** * The list of DocBook elements that will be rendered inline and bold */ - private static final Collection boldElements = new HashSet(); + private static final Collection BOLD_ELEMENTS = new HashSet(); /** * The list of DocBook elements that will be rendered inline and italic */ - private static final Collection italicElements = new HashSet(); + private static final Collection ITALIC_ELEMENTS = new HashSet(); /** * The list of DocBook elements that will be rendered inline and monospace */ - private static final Collection monospaceElements = new HashSet(); + private static final Collection MONOSPACE_ELEMENTS = new HashSet(); static { - DocBookParser.hierElements.add( "set" ); - DocBookParser.hierElements.add( "book" ); - DocBookParser.hierElements.add( "part" ); - DocBookParser.hierElements.add( "chapter" ); - DocBookParser.hierElements.add( "section" ); - DocBookParser.hierElements.add( "sect1" ); - DocBookParser.hierElements.add( "sect2" ); - DocBookParser.hierElements.add( "sect3" ); - DocBookParser.hierElements.add( "sect4" ); - DocBookParser.hierElements.add( "sect5" ); - DocBookParser.hierElements.add( "article" ); - DocBookParser.hierElements.add( "preface" ); - DocBookParser.hierElements.add( "partintro" ); - DocBookParser.hierElements.add( "appendix" ); - DocBookParser.hierElements.add( "bibliography" ); - DocBookParser.hierElements.add( "reference" ); - DocBookParser.hierElements.add( "bibliography" ); - DocBookParser.hierElements.add( "bibliodiv" ); - DocBookParser.hierElements.add( "glossary" ); - DocBookParser.hierElements.add( "refentry" ); - DocBookParser.hierElements.add( "refnamediv" ); - DocBookParser.hierElements.add( "refsection" ); - DocBookParser.hierElements.add( "refsect1" ); - DocBookParser.hierElements.add( "refsect2" ); - DocBookParser.hierElements.add( "refsect3" ); - - DocBookParser.verbatimElements.add( "programlisting" ); - DocBookParser.verbatimElements.add( "screen" ); - DocBookParser.verbatimElements.add( "literallayout" ); - DocBookParser.verbatimElements.add( "synopsis" ); - - DocBookParser.boldElements.add( "command" ); - DocBookParser.boldElements.add( "keycap" ); - DocBookParser.boldElements.add( "shortcut" ); - DocBookParser.boldElements.add( "userinput" ); - - DocBookParser.italicElements.add( "parameter" ); - DocBookParser.italicElements.add( "replaceable" ); - DocBookParser.italicElements.add( "medialabel" ); - DocBookParser.italicElements.add( "structfield" ); - DocBookParser.italicElements.add( "systemitem" ); - DocBookParser.italicElements.add( "citetitle" ); - DocBookParser.italicElements.add( "emphasis" ); - DocBookParser.italicElements.add( "foreignphrase" ); - DocBookParser.italicElements.add( "wordasword" ); - - DocBookParser.monospaceElements.add( "classname" ); - DocBookParser.monospaceElements.add( "exceptionname" ); - DocBookParser.monospaceElements.add( "interfacename" ); - DocBookParser.monospaceElements.add( "methodname" ); - DocBookParser.monospaceElements.add( "computeroutput" ); - DocBookParser.monospaceElements.add( "constant" ); - DocBookParser.monospaceElements.add( "envar" ); - DocBookParser.monospaceElements.add( "function" ); - DocBookParser.monospaceElements.add( "parameter" ); - DocBookParser.monospaceElements.add( "replaceable" ); - DocBookParser.monospaceElements.add( "literal" ); - DocBookParser.monospaceElements.add( "code" ); - DocBookParser.monospaceElements.add( "option" ); - DocBookParser.monospaceElements.add( "prompt" ); - DocBookParser.monospaceElements.add( "structfield" ); - DocBookParser.monospaceElements.add( "systemitem" ); - DocBookParser.monospaceElements.add( "structfield" ); - DocBookParser.monospaceElements.add( "userinput" ); - DocBookParser.monospaceElements.add( "varname" ); - DocBookParser.monospaceElements.add( "sgmltag" ); - DocBookParser.monospaceElements.add( "tag" );//DocBook 5 - DocBookParser.monospaceElements.add( "uri" ); - DocBookParser.monospaceElements.add( "filename" ); + DocBookParser.HIER_ELEMENTS.add( "set" ); + DocBookParser.HIER_ELEMENTS.add( "book" ); + DocBookParser.HIER_ELEMENTS.add( "part" ); + DocBookParser.HIER_ELEMENTS.add( "chapter" ); + DocBookParser.HIER_ELEMENTS.add( "section" ); + DocBookParser.HIER_ELEMENTS.add( "sect1" ); + DocBookParser.HIER_ELEMENTS.add( "sect2" ); + DocBookParser.HIER_ELEMENTS.add( "sect3" ); + DocBookParser.HIER_ELEMENTS.add( "sect4" ); + DocBookParser.HIER_ELEMENTS.add( "sect5" ); + DocBookParser.HIER_ELEMENTS.add( "article" ); + DocBookParser.HIER_ELEMENTS.add( "preface" ); + DocBookParser.HIER_ELEMENTS.add( "partintro" ); + DocBookParser.HIER_ELEMENTS.add( "appendix" ); + DocBookParser.HIER_ELEMENTS.add( "bibliography" ); + DocBookParser.HIER_ELEMENTS.add( "reference" ); + DocBookParser.HIER_ELEMENTS.add( "bibliography" ); + DocBookParser.HIER_ELEMENTS.add( "bibliodiv" ); + DocBookParser.HIER_ELEMENTS.add( "glossary" ); + DocBookParser.HIER_ELEMENTS.add( "refentry" ); + DocBookParser.HIER_ELEMENTS.add( "refnamediv" ); + DocBookParser.HIER_ELEMENTS.add( "refsection" ); + DocBookParser.HIER_ELEMENTS.add( "refsect1" ); + DocBookParser.HIER_ELEMENTS.add( "refsect2" ); + DocBookParser.HIER_ELEMENTS.add( "refsect3" ); + + DocBookParser.VERBATIM_ELEMENTS.add( "programlisting" ); + DocBookParser.VERBATIM_ELEMENTS.add( "screen" ); + DocBookParser.VERBATIM_ELEMENTS.add( "literallayout" ); + DocBookParser.VERBATIM_ELEMENTS.add( "synopsis" ); + + DocBookParser.BOLD_ELEMENTS.add( "command" ); + DocBookParser.BOLD_ELEMENTS.add( "keycap" ); + DocBookParser.BOLD_ELEMENTS.add( "shortcut" ); + DocBookParser.BOLD_ELEMENTS.add( "userinput" ); + + DocBookParser.ITALIC_ELEMENTS.add( "parameter" ); + DocBookParser.ITALIC_ELEMENTS.add( "replaceable" ); + DocBookParser.ITALIC_ELEMENTS.add( "medialabel" ); + DocBookParser.ITALIC_ELEMENTS.add( "structfield" ); + DocBookParser.ITALIC_ELEMENTS.add( "systemitem" ); + DocBookParser.ITALIC_ELEMENTS.add( "citetitle" ); + DocBookParser.ITALIC_ELEMENTS.add( "emphasis" ); + DocBookParser.ITALIC_ELEMENTS.add( "foreignphrase" ); + DocBookParser.ITALIC_ELEMENTS.add( "wordasword" ); + + DocBookParser.MONOSPACE_ELEMENTS.add( "classname" ); + DocBookParser.MONOSPACE_ELEMENTS.add( "exceptionname" ); + DocBookParser.MONOSPACE_ELEMENTS.add( "interfacename" ); + DocBookParser.MONOSPACE_ELEMENTS.add( "methodname" ); + DocBookParser.MONOSPACE_ELEMENTS.add( "computeroutput" ); + DocBookParser.MONOSPACE_ELEMENTS.add( "constant" ); + DocBookParser.MONOSPACE_ELEMENTS.add( "envar" ); + DocBookParser.MONOSPACE_ELEMENTS.add( "function" ); + DocBookParser.MONOSPACE_ELEMENTS.add( "parameter" ); + DocBookParser.MONOSPACE_ELEMENTS.add( "replaceable" ); + DocBookParser.MONOSPACE_ELEMENTS.add( "literal" ); + DocBookParser.MONOSPACE_ELEMENTS.add( "code" ); + DocBookParser.MONOSPACE_ELEMENTS.add( "option" ); + DocBookParser.MONOSPACE_ELEMENTS.add( "prompt" ); + DocBookParser.MONOSPACE_ELEMENTS.add( "structfield" ); + DocBookParser.MONOSPACE_ELEMENTS.add( "systemitem" ); + DocBookParser.MONOSPACE_ELEMENTS.add( "structfield" ); + DocBookParser.MONOSPACE_ELEMENTS.add( "userinput" ); + DocBookParser.MONOSPACE_ELEMENTS.add( "varname" ); + DocBookParser.MONOSPACE_ELEMENTS.add( "sgmltag" ); + DocBookParser.MONOSPACE_ELEMENTS.add( "tag" ); //DocBook 5 + DocBookParser.MONOSPACE_ELEMENTS.add( "uri" ); + DocBookParser.MONOSPACE_ELEMENTS.add( "filename" ); } // ---------------------------------------------------------------------- @@ -190,41 +191,42 @@ if ( id != null ) { sink.anchor( id ); + sink.anchor_(); } //If the element introduces a new level of hierarchy, raise the stack - if ( hierElements.contains( parser.getName() ) ) + if ( HIER_ELEMENTS.contains( parser.getName() ) ) { //increase the nesting level level++; //if this is the root element, handle it as body - if ( level == 1 ) + if ( level == 0 ) { sink.body(); } - else if ( level == 2 ) + else if ( level == Sink.SECTION_LEVEL_1 ) { sink.section1(); } - else if ( level == 3 ) + else if ( level == Sink.SECTION_LEVEL_2 ) { sink.section2(); } - else if ( level == 4 ) + else if ( level == Sink.SECTION_LEVEL_3 ) { sink.section3(); } - else if ( level == 5 ) + else if ( level == Sink.SECTION_LEVEL_4 ) { sink.section4(); } - else if ( level == 6 ) + else if ( level == Sink.SECTION_LEVEL_5 ) { sink.section5(); } } //Match all *info-Elements for metainformation, but only consider the root element - else if ( ( parser.getName().endsWith( INFO_TAG.toString() ) ) && ( level == 1 ) ) + else if ( ( parser.getName().endsWith( INFO_TAG.toString() ) ) && ( level == 0 ) ) { sink.head(); parent.push( parser.getName() ); @@ -338,7 +340,8 @@ { sink.tableCaption(); } - else if ( ( parser.getName().equals( PARA_TAG.toString() ) || parser.getName().equals( SIMPARA_TAG.toString() ) ) + else if ( ( parser.getName().equals( PARA_TAG.toString() ) + || parser.getName().equals( SIMPARA_TAG.toString() ) ) && !isParent( FORMALPARA_TAG.toString() ) ) { sink.paragraph(); @@ -352,32 +355,32 @@ { sink.bold(); } - else if ( DocBookParser.verbatimElements.contains( parser.getName() ) ) + else if ( DocBookParser.VERBATIM_ELEMENTS.contains( parser.getName() ) ) { sink.verbatim( true ); } - else if ( DocBookParser.boldElements.contains( parser.getName() ) && - DocBookParser.monospaceElements.contains( parser.getName() ) ) + else if ( DocBookParser.BOLD_ELEMENTS.contains( parser.getName() ) + && DocBookParser.MONOSPACE_ELEMENTS.contains( parser.getName() ) ) { sink.bold(); sink.monospaced(); } - else if ( DocBookParser.italicElements.contains( parser.getName() ) && - DocBookParser.monospaceElements.contains( parser.getName() ) ) + else if ( DocBookParser.ITALIC_ELEMENTS.contains( parser.getName() ) + && DocBookParser.MONOSPACE_ELEMENTS.contains( parser.getName() ) ) { sink.italic(); sink.monospaced(); } - else if ( DocBookParser.boldElements.contains( parser.getName() ) ) + else if ( DocBookParser.BOLD_ELEMENTS.contains( parser.getName() ) ) { sink.bold(); } - else if ( DocBookParser.italicElements.contains( parser.getName() ) ) + else if ( DocBookParser.ITALIC_ELEMENTS.contains( parser.getName() ) ) { sink.italic(); } - else if ( DocBookParser.monospaceElements.contains( parser.getName() ) ) + else if ( DocBookParser.MONOSPACE_ELEMENTS.contains( parser.getName() ) ) { sink.monospaced(); } @@ -394,27 +397,27 @@ { sink.tableCaption(); } - else if ( level == 1 ) + else if ( level == 0 ) { sink.title(); } - else if ( level == 2 ) + else if ( level == Sink.SECTION_LEVEL_1 ) { sink.sectionTitle1(); } - else if ( level == 3 ) + else if ( level == Sink.SECTION_LEVEL_2 ) { sink.sectionTitle2(); } - else if ( level == 4 ) + else if ( level == Sink.SECTION_LEVEL_3 ) { sink.sectionTitle3(); } - else if ( level == 5 ) + else if ( level == Sink.SECTION_LEVEL_4 ) { sink.sectionTitle4(); } - else if ( level == 6 ) + else if ( level == Sink.SECTION_LEVEL_5 ) { sink.sectionTitle5(); } @@ -457,7 +460,7 @@ if ( linkend != null ) { sink.link( "#" + linkend ); - sink.text( "Link" );//TODO: determine text of link target + sink.text( "Link" ); //TODO: determine text of link target sink.link_(); } } @@ -473,38 +476,38 @@ { //If the element introduces a new level of hierarchy, lower the stack - if ( hierElements.contains( parser.getName() ) ) + if ( HIER_ELEMENTS.contains( parser.getName() ) ) { - //increase the nesting level - level--; //if this is the root element, handle it as body - if ( level == 1 ) + if ( level == 0 ) { sink.body_(); } - else if ( level == 2 ) + else if ( level == Sink.SECTION_LEVEL_1 ) { sink.section1_(); } - else if ( level == 3 ) + else if ( level == Sink.SECTION_LEVEL_2 ) { sink.section2_(); } - else if ( level == 4 ) + else if ( level == Sink.SECTION_LEVEL_3 ) { sink.section3_(); } - else if ( level == 5 ) + else if ( level == Sink.SECTION_LEVEL_4 ) { sink.section4_(); } - else if ( level == 6 ) + else if ( level == Sink.SECTION_LEVEL_5 ) { sink.section5_(); } + //decrease the nesting level + level--; } //Match all *info-Elements for metainformation, but only consider the root element - else if ( parser.getName().endsWith( INFO_TAG.toString() ) && level == 1 ) + else if ( parser.getName().endsWith( INFO_TAG.toString() ) && level == 0 ) { sink.head_(); parent.pop(); @@ -584,7 +587,8 @@ { sink.tableCaption_(); } - else if ( ( parser.getName().equals( PARA_TAG.toString() ) || parser.getName().equals( SIMPARA_TAG.toString() ) ) + else if ( ( parser.getName().equals( PARA_TAG.toString() ) + || parser.getName().equals( SIMPARA_TAG.toString() ) ) && !isParent( FORMALPARA_TAG.toString() ) ) { sink.paragraph_(); @@ -596,34 +600,34 @@ } else if ( parser.getName().equals( Tag.TITLE.toString() ) && isParent( FORMALPARA_TAG.toString() ) ) { - sink.text( ". " );//Inline Running head + sink.text( ". " ); //Inline Running head sink.bold_(); } - else if ( DocBookParser.verbatimElements.contains( parser.getName() ) ) + else if ( DocBookParser.VERBATIM_ELEMENTS.contains( parser.getName() ) ) { sink.verbatim_(); } - else if ( DocBookParser.boldElements.contains( parser.getName() ) && - DocBookParser.monospaceElements.contains( parser.getName() ) ) + else if ( DocBookParser.BOLD_ELEMENTS.contains( parser.getName() ) + && DocBookParser.MONOSPACE_ELEMENTS.contains( parser.getName() ) ) { sink.bold_(); sink.monospaced_(); } - else if ( DocBookParser.italicElements.contains( parser.getName() ) && - DocBookParser.monospaceElements.contains( parser.getName() ) ) + else if ( DocBookParser.ITALIC_ELEMENTS.contains( parser.getName() ) + && DocBookParser.MONOSPACE_ELEMENTS.contains( parser.getName() ) ) { sink.italic_(); sink.monospaced_(); } - else if ( DocBookParser.boldElements.contains( parser.getName() ) ) + else if ( DocBookParser.BOLD_ELEMENTS.contains( parser.getName() ) ) { sink.bold_(); } - else if ( DocBookParser.italicElements.contains( parser.getName() ) ) + else if ( DocBookParser.ITALIC_ELEMENTS.contains( parser.getName() ) ) { sink.italic_(); } - else if ( DocBookParser.monospaceElements.contains( parser.getName() ) ) + else if ( DocBookParser.MONOSPACE_ELEMENTS.contains( parser.getName() ) ) { sink.monospaced_(); } @@ -640,27 +644,27 @@ { sink.tableCaption_(); } - else if ( level == 1 ) + else if ( level == 0 ) { sink.title_(); } - else if ( level == 2 ) + else if ( level == Sink.SECTION_LEVEL_1 ) { sink.sectionTitle1_(); } - else if ( level == 3 ) + else if ( level == Sink.SECTION_LEVEL_2 ) { sink.sectionTitle2_(); } - else if ( level == 4 ) + else if ( level == Sink.SECTION_LEVEL_3 ) { sink.sectionTitle3_(); } - else if ( level == 5 ) + else if ( level == Sink.SECTION_LEVEL_4 ) { sink.sectionTitle4_(); } - else if ( level == 6 ) + else if ( level == Sink.SECTION_LEVEL_5 ) { sink.sectionTitle5_(); } @@ -687,6 +691,13 @@ // // ---------------------------------------------------------------------- + /** + * Returns the value of the given attribute. + * + * @param parser the parser to scan. + * @param name the attribute name. + * @return the attribute value. + */ private String getAttributeValue( XmlPullParser parser, String name ) { for ( int i = 0; i < parser.getAttributeCount(); i++ ) @@ -700,6 +711,12 @@ return null; } + /** + * Determines if the given element is a parent element. + * + * @param element the element to determine. + * @return true if the given element is a parent element. + */ private boolean isParent( String element ) { if ( parent.size() > 0 ) Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookSink.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookSink.java?rev=567679&r1=567678&r2=567679&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookSink.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookSink.java Mon Aug 20 06:05:20 2007 @@ -22,7 +22,6 @@ import org.apache.maven.doxia.parser.Parser; import org.apache.maven.doxia.sink.AbstractXmlSink; import org.apache.maven.doxia.sink.StructureSink; -import org.apache.maven.doxia.util.HtmlTools; import org.apache.maven.doxia.util.LineBreaker; import org.codehaus.plexus.util.FileUtils; @@ -54,64 +53,89 @@ /** DocBook XML V4.0 XML system id: "http://www.oasis-open.org/docbook/xml/4.0/docbookx.dtd" */ public static final String DEFAULT_XML_SYSTEM_ID = "http://www.oasis-open.org/docbook/xml/4.0/docbookx.dtd"; + /** The output writer. */ private LineBreaker out; + /** xmlMode. */ private boolean xmlMode = false; + /** encoding. */ private String encoding = null; + /** styleSheet. */ private String styleSheet = null; + /** language. */ private String lang = null; + /** publicId. */ private String publicId = null; + /** systemId. */ private String systemId = null; + /** italicBegin. */ private String italicBeginTag; + /** italicEnd. */ private String italicEndTag; + /** boldBegin. */ private String boldBeginTag; + /** boldEnd. */ private String boldEndTag; + /** monospacedBegin. */ private String monospacedBeginTag; + /** monospacedEnd. */ private String monospacedEndTag; + /** horizontalRule. */ private String horizontalRuleElement; + /** pageBreak. */ private String pageBreakElement; + /** lineBreak. */ private String lineBreakElement; - protected String graphicsFileName; + /** An image source file. */ + private String graphicsFileName; + /** hasTitle. */ private boolean hasTitle; + /** authorDate. */ private boolean authorDateFlag; + /** verbatim. */ private boolean verbatimFlag; + /** externalLink. */ private boolean externalLinkFlag; + /** tableHasCaption. */ private boolean tableHasCaption; + /** Used for table rows. */ private LineBreaker savedOut; + /** tableRows. */ private String tableRows; + /** tableHasGrid. */ private boolean tableHasGrid; // ----------------------------------------------------------------------- /** - * @param out the default writer + * @param writer the default writer. */ - public DocBookSink( Writer out ) + public DocBookSink( Writer writer ) { - this.out = new LineBreaker( out ); + this.out = new LineBreaker( writer ); setItalicElement( "<emphasis>" ); setBoldElement( "<emphasis role=\"bold\">" ); setMonospacedElement( "<literal>" ); @@ -121,12 +145,12 @@ } /** - * TODO Try to replace by [EMAIL PROTECTED] HtmlTools#escapeHTML(String)} * - * @param text - * @param xmlMode - * @return + * @param text The text to escape. + * @param xmlMode xmlMode. + * @return The escaped text. */ + // TODO: Try to replace by HtmlTools#escapeHTML(String). public static final String escapeSGML( String text, boolean xmlMode ) { int length = text.length(); @@ -174,76 +198,147 @@ return buffer.toString(); } - public void setXMLMode( boolean xmlMode ) + /** + * Sets the xml mode. + * + * @param mode the mode to set. + */ + public void setXMLMode( boolean mode ) { - this.xmlMode = xmlMode; + this.xmlMode = mode; } + /** + * Returns the current xmlMode. + * + * @return the current xmlMode. + */ public boolean isXMLMode() { return xmlMode; } - public void setEncoding( String encoding ) + /** + * Sets the encoding. + * + * @param enc the encoding to set. + */ + public void setEncoding( String enc ) { - this.encoding = encoding; + this.encoding = enc; } + /** + * Returns the current encoding. + * + * @return the current encoding. + */ public String getEncoding() { return encoding; } - public void setStyleSheet( String styleSheet ) + /** + * Sets the styleSheet. + * + * @param sheet the styleSheet to set. + */ + public void setStyleSheet( String sheet ) { - this.styleSheet = styleSheet; + this.styleSheet = sheet; } + /** + * Returns the current styleSheet. + * + * @return the current styleSheet. + */ public String getStyleSheet() { return styleSheet; } - public void setPublicId( String publicId ) + /** + * Sets the publicId. + * + * @param id the publicId to set. + */ + public void setPublicId( String id ) { - this.publicId = publicId; + this.publicId = id; } + /** + * Returns the current publicId. + * + * @return the current publicId. + */ public String getPublicId() { return publicId; } - public void setSystemId( String systemId ) + /** + * Sets the systemId. + * + * @param id the systemId to set. + */ + public void setSystemId( String id ) { - this.systemId = systemId; + this.systemId = id; } + /** + * Returns the current systemId. + * + * @return the current systemId. + */ public String getSystemId() { return systemId; } - public void setLanguage( String lang ) + /** + * Sets the language. + * + * @param language the language to set. + */ + public void setLanguage( String language ) { - this.lang = lang; + this.lang = language; } + /** + * Returns the current language. + * + * @return the current language. + */ public String getLanguage() { return lang; } - public void setItalicElement( String italicBeginTag ) + /** + * Sets the current italicBeginTag and constructs the corresponding end tag from it. + * + * @param tag the tag to set. If tag is null, the empty string is used. + */ + public void setItalicElement( String tag ) { - if ( italicBeginTag == null ) + if ( tag == null ) { - italicBeginTag = ""; + tag = ""; } - this.italicBeginTag = italicBeginTag; + this.italicBeginTag = tag; italicEndTag = makeEndTag( italicBeginTag ); } + /** + * Constructs the corresponding end tag from the given begin tag. + * + * @param beginTag the begin tag to set. If null, the empty string is returned. + * @return the corresponding end tag. + */ private String makeEndTag( String beginTag ) { int length = beginTag.length(); @@ -266,71 +361,129 @@ return "</" + tokens.nextToken() + ">"; } + /** + * Returns the current italicBeginTag. + * + * @return the current italicBeginTag. Defaults to "<emphasis>". + */ public String getItalicElement() { return italicBeginTag; } - public void setBoldElement( String boldBeginTag ) + /** + * Sets the current boldBeginTag and constructs the corresponding end tag from it. + * + * @param tag the tag to set. If tag is null, the empty string is used. + */ + public void setBoldElement( String tag ) { - if ( boldBeginTag == null ) + if ( tag == null ) { - boldBeginTag = ""; + tag = ""; } - this.boldBeginTag = boldBeginTag; + this.boldBeginTag = tag; boldEndTag = makeEndTag( boldBeginTag ); } + /** + * Returns the current boldBeginTag. + * + * @return the current boldBeginTag. Defaults to "<emphasis role=\"bold\">". + */ public String getBoldElement() { return boldBeginTag; } - public void setMonospacedElement( String monospacedBeginTag ) + /** + * Sets the current monospacedBeginTag and constructs the corresponding end tag from it. + * + * @param tag the tag to set. If tag is null, the empty string is used. + */ + public void setMonospacedElement( String tag ) { - if ( monospacedBeginTag == null ) + if ( tag == null ) { - monospacedBeginTag = ""; + tag = ""; } - this.monospacedBeginTag = monospacedBeginTag; + this.monospacedBeginTag = tag; monospacedEndTag = makeEndTag( monospacedBeginTag ); } + /** + * Returns the current monospacedBeginTag. + * + * @return the current monospacedBeginTag. Defaults to "<literal>>". + */ public String getMonospacedElement() { return monospacedBeginTag; } - public void setHorizontalRuleElement( String horizontalRuleElement ) + /** + * Sets the current horizontalRuleElement. + * + * @param element the element to set. + */ + public void setHorizontalRuleElement( String element ) { - this.horizontalRuleElement = horizontalRuleElement; + this.horizontalRuleElement = element; } + /** + * Returns the current horizontalRuleElement. + * + * @return the current horizontalRuleElement. Defaults to "<!-- HR -->". + */ public String getHorizontalRuleElement() { return horizontalRuleElement; } - public void setPageBreakElement( String pageBreakElement ) + /** + * Sets the current pageBreakElement. + * + * @param element the element to set. + */ + public void setPageBreakElement( String element ) { - this.pageBreakElement = pageBreakElement; + this.pageBreakElement = element; } + /** + * Returns the current pageBreakElement. + * + * @return the current pageBreakElement. Defaults to "<!-- PB -->". + */ public String getPageBreakElement() { return pageBreakElement; } - public void setLineBreakElement( String lineBreakElement ) + /** + * Sets the current lineBreakElement. + * + * @param element the element to set. + */ + public void setLineBreakElement( String element ) { - this.lineBreakElement = lineBreakElement; + this.lineBreakElement = element; } + /** + * Returns the current lineBreakElement. + * + * @return the current lineBreakElement. Defaults to "<!-- LB -->". + */ public String getLineBreakElement() { return lineBreakElement; } + /** + * Reset all variables. + */ private void resetState() { hasTitle = false; @@ -857,6 +1010,7 @@ att.addAttribute( FORMAT_ATTRIBUTE, format ); att.addAttribute( FILEREF_ATTRIBUTE, escapeSGML( graphicsFileName, xmlMode ) ); + // TODO: why? if ( xmlMode ) { writeSimpleTag( IMAGEDATA_TAG, att ); @@ -864,6 +1018,7 @@ else { writeStartTag( IMAGEDATA_TAG, att ); + writeEndTag( IMAGEDATA_TAG ); } writeEndTag( IMAGEOBJECT_TAG ); @@ -875,6 +1030,7 @@ /** [EMAIL PROTECTED] */ public void figureGraphics( String name ) { + // TODO: extension? graphicsFileName = name + ".jpeg"; } @@ -996,6 +1152,7 @@ att = new SimpleAttributeSet(); att.addAttribute( Attribute.ALIGN.toString(), justif ); + // TODO: why? if ( xmlMode ) { writeSimpleTag( COLSPEC_TAG, att ); @@ -1003,6 +1160,7 @@ else { writeStartTag( COLSPEC_TAG, att ); + writeEndTag( COLSPEC_TAG ); } } @@ -1121,6 +1279,7 @@ MutableAttributeSet att = new SimpleAttributeSet(); att.addAttribute( Attribute.ID, "a." + StructureSink.linkToKey( name ) ); + // TODO: why? if ( xmlMode ) { writeSimpleTag( ANCHOR_TAG, att ); @@ -1134,6 +1293,21 @@ /** * [EMAIL PROTECTED] + * @see DocbookMarkup#ANCHOR_TAG + */ + public void anchor_() + { + if ( !authorDateFlag ) + { + if ( !xmlMode ) + { + writeEndTag( ANCHOR_TAG ); + } + } + } + + /** + * [EMAIL PROTECTED] * @see DocbookMarkup#ULINK_TAG * @see DocbookMarkup#URL_ATTRIBUTE * @see DocbookMarkup#LINK_TAG @@ -1228,8 +1402,8 @@ /** [EMAIL PROTECTED] */ public void nonBreakingSpace() { - //markup(" "); - markup( " " ); + markup( " " ); + //markup( " " ); } /** [EMAIL PROTECTED] */ @@ -1247,16 +1421,31 @@ // ----------------------------------------------------------------------- + /** + * Write text to output, preserving white space. + * + * @param text The text to write. + */ protected void markup( String text ) { out.write( text, /*preserveSpace*/ true ); } + /** + * Write SGML escaped text to output, not preserving white space. + * + * @param text The text to write. + */ protected void content( String text ) { out.write( escapeSGML( text, xmlMode ), /*preserveSpace*/ false ); } + /** + * Write SGML escaped text to output, preserving white space. + * + * @param text The text to write. + */ protected void verbatimContent( String text ) { out.write( escapeSGML( text, xmlMode ), /*preserveSpace*/ true ); Added: maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/java/org/apache/maven/doxia/module/docbook/DocBookIdentityTest.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/java/org/apache/maven/doxia/module/docbook/DocBookIdentityTest.java?rev=567679&view=auto ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/java/org/apache/maven/doxia/module/docbook/DocBookIdentityTest.java (added) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/java/org/apache/maven/doxia/module/docbook/DocBookIdentityTest.java Mon Aug 20 06:05:20 2007 @@ -0,0 +1,46 @@ +package org.apache.maven.doxia.module.docbook; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.module.AbstractIdentityTest; +import org.apache.maven.doxia.parser.Parser; +import org.apache.maven.doxia.sink.Sink; + + +/** + * Check that piping a full model through a DocBookParser and a DocBookSink + * leaves the model unchanged. The test is done in AbstractIdentityTest. + */ +public class DocBookIdentityTest extends AbstractIdentityTest +{ + /** [EMAIL PROTECTED] */ + protected Sink createSink( Writer writer ) + { + return new DocBookSink( writer ); + } + + /** [EMAIL PROTECTED] */ + protected Parser createParser() + { + return new DocBookParser(); + } +} Propchange: maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/java/org/apache/maven/doxia/module/docbook/DocBookIdentityTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/java/org/apache/maven/doxia/module/docbook/DocBookIdentityTest.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/java/org/apache/maven/doxia/module/docbook/DocBookParserTest.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/java/org/apache/maven/doxia/module/docbook/DocBookParserTest.java?rev=567679&r1=567678&r2=567679&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/java/org/apache/maven/doxia/module/docbook/DocBookParserTest.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/java/org/apache/maven/doxia/module/docbook/DocBookParserTest.java Mon Aug 20 06:05:20 2007 @@ -19,25 +19,80 @@ * under the License. */ -import org.apache.maven.doxia.parser.AbstractParserTestCase; +import java.io.IOException; +import java.io.Reader; +import java.io.Writer; + +import org.apache.maven.doxia.parser.AbstractParserTest; import org.apache.maven.doxia.parser.Parser; +import org.apache.maven.doxia.parser.ParseException; +import org.apache.maven.doxia.sink.Sink; /** * @author <a href="mailto:[EMAIL PROTECTED]">Lars Trieloff</a> * @version $Id$ */ -public class DocBookParserTest - extends AbstractParserTestCase +public class DocBookParserTest extends AbstractParserTest { + /** The parser to test. */ + private DocBookParser parser; + /** [EMAIL PROTECTED] */ - protected Parser getParser() + protected void setUp() + throws Exception { - return new DocBookParser(); + super.setUp(); + + parser = (DocBookParser) lookup( Parser.ROLE, "doc-book" ); } /** [EMAIL PROTECTED] */ - protected String getDocument() + protected Parser createParser() { - return "src/test/resources/guide.xml"; + return parser; } + + /** [EMAIL PROTECTED] */ + protected String outputExtension() + { + return "xml"; + } + + /** + * Parses the test document test.xml and re-emits it into test.docbook. + * + * @throws IOException if something goes wrong + * @throws ParseException if something goes wrong + */ + public void testTestDocument() + throws IOException, ParseException + { + Writer writer = null; + + Reader reader = null; + + try + { + writer = getTestWriter( "test", "docbook" ); + reader = getTestReader( "test" ); + + Sink sink = new DocBookSink( writer ); + + createParser().parse( reader, sink ); + } + finally + { + if ( writer != null ) + { + writer.close(); + } + + if ( reader != null ) + { + reader.close(); + } + } + } + + } Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/java/org/apache/maven/doxia/module/docbook/DocBookSinkTest.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/java/org/apache/maven/doxia/module/docbook/DocBookSinkTest.java?rev=567679&r1=567678&r2=567679&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/java/org/apache/maven/doxia/module/docbook/DocBookSinkTest.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/test/java/org/apache/maven/doxia/module/docbook/DocBookSinkTest.java Mon Aug 20 06:05:20 2007 @@ -19,20 +19,20 @@ * under the License. */ -import org.apache.maven.doxia.sink.AbstractSinkTestCase; +import org.apache.maven.doxia.sink.AbstractSinkTest; import org.apache.maven.doxia.sink.Sink; import org.apache.maven.doxia.parser.Parser; import java.io.Reader; import java.io.InputStream; import java.io.InputStreamReader; +import java.io.Writer; /** * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a> * @version $Id$ */ -public class DocBookSinkTest - extends AbstractSinkTestCase +public class DocBookSinkTest extends AbstractSinkTest { /** [EMAIL PROTECTED] */ protected String outputExtension() @@ -41,26 +41,194 @@ } /** [EMAIL PROTECTED] */ - protected Parser createParser() + protected Sink createSink( Writer writer ) { - return new DocBookParser(); + return new DocBookSink( writer ); } /** [EMAIL PROTECTED] */ - protected Sink createSink() - throws Exception + protected String getTitleBlock( String title ) { - return new DocBookSink( getTestWriter() ); + return "<articleinfo><title>" + title + "</title>"; } /** [EMAIL PROTECTED] */ - protected Reader getTestReader() - throws Exception + protected String getAuthorBlock( String author ) { - InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream( "guide.xml" ); + return "<corpauthor>" + author + "</corpauthor>"; + } + + /** [EMAIL PROTECTED] */ + protected String getDateBlock( String date ) + { + return "<date>" + date + "</date>"; + } + + /** [EMAIL PROTECTED] */ + protected String getHeadBlock() + { + return "<!DOCTYPE article PUBLIC \"-//OASIS//DTD DocBook V4.1//EN\"><article>"; + } + + /** [EMAIL PROTECTED] */ + protected String getBodyBlock() + { + return "</article>"; + } + + /** [EMAIL PROTECTED] */ + protected String getSectionTitleBlock( String title ) + { + return "<title>" + title + "</title>"; + } + + /** [EMAIL PROTECTED] */ + protected String getSection1Block( String title ) + { + return "<section>" + title + "</section>"; + } + + /** [EMAIL PROTECTED] */ + protected String getSection2Block( String title ) + { + return "<section>" + title + "</section>"; + } + + /** [EMAIL PROTECTED] */ + protected String getSection3Block( String title ) + { + return "<section>" + title + "</section>"; + } + + /** [EMAIL PROTECTED] */ + protected String getSection4Block( String title ) + { + return "<section>" + title + "</section>"; + } + + /** [EMAIL PROTECTED] */ + protected String getSection5Block( String title ) + { + return "<section>" + title + "</section>"; + } + + /** [EMAIL PROTECTED] */ + protected String getListBlock( String item ) + { + return "<itemizedlist><listitem>" + item + "</listitem></itemizedlist>"; + } + + /** [EMAIL PROTECTED] */ + protected String getNumberedListBlock( String item ) + { + return "<orderedlist numeration=\"lowerroman\"><listitem>" + + item + "</listitem></orderedlist>"; + } + + /** [EMAIL PROTECTED] */ + protected String getDefinitionListBlock( String definum, String definition ) + { + return "<variablelist><varlistentry><term>" + definum + + "</term><listitem>" + definition + + "</listitem></varlistentry></variablelist>"; + } + + /** [EMAIL PROTECTED] */ + protected String getFigureBlock( String source, String caption ) + { + // TODO: fix source + return "<figure><title>" + caption + "</title><mediaobject><imageobject><imagedata fileref=\"figure.jpeg\" format=\"JPEG\"></imagedata></imageobject></mediaobject></figure>"; + } + + /** [EMAIL PROTECTED] */ + protected String getTableBlock( String cell, String caption ) + { + return "<table frame=\"none\" rowsep=\"0\" colsep=\"0\"><title>" + caption + + "</title><tgroup cols=\"1\"><colspec align=\"center\"></colspec><tbody><row><entry><para>" + + cell + "</para></entry></row></tbody></tgroup></table>"; + } + + /** [EMAIL PROTECTED] */ + protected String getParagraphBlock( String text ) + { + return "<para>" + text + "</para>"; + } + + /** [EMAIL PROTECTED] */ + protected String getVerbatimBlock( String text ) + { + return "<programlisting>" + text + "</programlisting>"; + } + + /** [EMAIL PROTECTED] */ + protected String getHorizontalRuleBlock() + { + return "<!-- HR -->"; + } + + /** [EMAIL PROTECTED] */ + protected String getPageBreakBlock() + { + return "<!-- PB -->"; + } + + /** [EMAIL PROTECTED] */ + protected String getAnchorBlock( String anchor ) + { + // TODO: fix id + return "<anchor id=\"a.anchor\">" + anchor + "</anchor>"; + } + + /** [EMAIL PROTECTED] */ + protected String getLinkBlock( String link, String text ) + { + // TODO: fix link + return "<link linkend=\"a.link\">" + text + "</link>"; + } - InputStreamReader reader = new InputStreamReader( is ); + /** [EMAIL PROTECTED] */ + protected String getItalicBlock( String text ) + { + return "<emphasis>" + text + "</emphasis>"; + } + + /** [EMAIL PROTECTED] */ + protected String getBoldBlock( String text ) + { + return "<emphasis role=\"bold\">" + text + "</emphasis>"; + } - return reader; + /** [EMAIL PROTECTED] */ + protected String getMonospacedBlock( String text ) + { + return "<literal>" + text + "</literal>"; } + + /** [EMAIL PROTECTED] */ + protected String getLineBreakBlock() + { + return "<!-- LB -->"; + } + + /** [EMAIL PROTECTED] */ + protected String getNonBreakingSpaceBlock() + { + return " "; + } + + /** [EMAIL PROTECTED] */ + protected String getTextBlock( String text ) + { + // TODO: retreive those from the sink + return "~, =, -, +, *, [, ], <, >, {, }, \\"; + } + + /** [EMAIL PROTECTED] */ + protected String getRawTextBlock( String text ) + { + // TODO + return ""; + } + + }