Author: ltheussl Date: Tue Jul 17 13:45:47 2007 New Revision: 557051 URL: http://svn.apache.org/viewvc?view=rev&rev=557051 Log: Various fixes to Xdoc parser: - don't emit anchor for section titles (should be done by a sink if desired) - handle <h4>, <h5>, <h6> tags as section3, section4, section5 - distinguish between un-ordered and ordered list items - only use the colspan attribute of table (header) cells if it is non-null - add lineBreak, horizontalRule, monospaced, definition list and img parsing - don't emit text events if text is just white space
Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocParser.java maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocParser.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocParser.java?view=diff&rev=557051&r1=557050&r2=557051 ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocParser.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocParser.java Tue Jul 17 13:45:47 2007 @@ -29,6 +29,7 @@ import org.apache.maven.doxia.parser.AbstractParser; import org.apache.maven.doxia.parser.ParseException; import org.apache.maven.doxia.sink.Sink; + import org.codehaus.plexus.util.IOUtil; import org.codehaus.plexus.util.xml.pull.MXParser; import org.codehaus.plexus.util.xml.pull.XmlPullParser; @@ -49,6 +50,8 @@ private boolean isLink; private boolean isAnchor; + private boolean isEmptyElement; + private int orderedListDepth = 0; public void parse( Reader reader, Sink sink ) throws ParseException @@ -98,9 +101,6 @@ } else if ( parser.getName().equals( "section" ) ) { - sink.anchor( parser.getAttributeValue( null, "name" ) ); - sink.anchor_(); - sink.section1(); sink.sectionTitle1(); @@ -111,9 +111,6 @@ } else if ( parser.getName().equals( "subsection" ) ) { - sink.anchor( parser.getAttributeValue( null, "name" ) ); - sink.anchor_(); - sink.section2(); sink.sectionTitle2(); @@ -122,6 +119,19 @@ sink.sectionTitle2_(); } + // TODO section3 section4 section5 + else if ( parser.getName().equals( "h4" ) ) + { + sink.sectionTitle3(); + } + else if ( parser.getName().equals( "h5" ) ) + { + sink.sectionTitle4(); + } + else if ( parser.getName().equals( "h6" ) ) + { + sink.sectionTitle5(); + } else if ( parser.getName().equals( "p" ) ) { sink.paragraph(); @@ -137,10 +147,31 @@ else if ( parser.getName().equals( "ol" ) ) { sink.numberedList( Sink.NUMBERING_DECIMAL ); + orderedListDepth++; } else if ( parser.getName().equals( "li" ) ) { - sink.listItem(); + if ( orderedListDepth == 0 ) + { + sink.listItem(); + } + else + { + sink.numberedListItem(); + } + } + else if ( parser.getName().equals( "dl" ) ) + { + sink.definitionList(); + } + else if ( parser.getName().equals( "dt" ) ) + { + sink.definitionListItem(); + sink.definedTerm(); + } + else if ( parser.getName().equals( "dd" ) ) + { + sink.definition(); } else if ( parser.getName().equals( "properties" ) ) { @@ -154,6 +185,10 @@ { sink.italic(); } + else if ( parser.getName().equals( "tt" ) ) + { + sink.monospaced(); + } else if ( parser.getName().equals( "a" ) ) { String href = parser.getAttributeValue( null, "href" ); @@ -217,16 +252,65 @@ } else if ( parser.getName().equals( "th" ) ) { - sink.tableHeaderCell(parser.getAttributeValue( null, "colspan" )); + String colspan = parser.getAttributeValue( null, "colspan" ); + if ( colspan == null) + { + sink.tableHeaderCell(); + } + else + { + sink.tableHeaderCell( colspan ); + } } else if ( parser.getName().equals( "td" ) ) { - sink.tableCell(parser.getAttributeValue( null, "colspan" )); + String colspan = parser.getAttributeValue( null, "colspan" ); + if ( colspan == null) + { + sink.tableCell(); + } + else + { + sink.tableCell( colspan ); + } + } + + // ---------------------------------------------------------------------- + // Empty elements: <br/>, <hr/> and <img /> + // ---------------------------------------------------------------------- + + else if ( parser.getName().equals( "br" ) ) + { + sink.lineBreak(); + } + else if ( parser.getName().equals( "hr" ) ) + { + sink.horizontalRule(); + } + else if ( parser.getName().equals( "img" ) ) + { + String src = parser.getAttributeValue( null, "src" ); + String alt = parser.getAttributeValue( null, "alt" ); + + sink.figure(); + sink.figureGraphics( src ); + + if ( alt != null ) + { + sink.figureCaption(); + sink.text( alt ); + sink.figureCaption_(); + } + + sink.figure_(); } else { handleRawText( sink, parser ); } + + isEmptyElement = parser.isEmptyElementTag(); + } else if ( eventType == XmlPullParser.END_TAG ) { @@ -261,10 +345,31 @@ else if ( parser.getName().equals( "ol" ) ) { sink.numberedList_(); + orderedListDepth--; } else if ( parser.getName().equals( "li" ) ) { - sink.listItem_(); + if ( orderedListDepth == 0 ) + { + sink.listItem_(); + } + else + { + sink.numberedListItem_(); + } + } + else if ( parser.getName().equals( "dl" ) ) + { + sink.definitionList_(); + } + else if ( parser.getName().equals( "dt" ) ) + { + sink.definedTerm_(); + } + else if ( parser.getName().equals( "dd" ) ) + { + sink.definition_(); + sink.definitionListItem_(); } else if ( parser.getName().equals( "properties" ) ) { @@ -278,6 +383,10 @@ { sink.italic_(); } + else if ( parser.getName().equals( "tt" ) ) + { + sink.monospaced_(); + } else if ( parser.getName().equals( "a" ) ) { if ( isLink ) @@ -329,7 +438,19 @@ { sink.section2_(); } - else + else if ( parser.getName().equals( "h4" ) ) + { + sink.sectionTitle3_(); + } + else if ( parser.getName().equals( "h5" ) ) + { + sink.sectionTitle4_(); + } + else if ( parser.getName().equals( "h6" ) ) + { + sink.sectionTitle5_(); + } + else if ( !isEmptyElement ) { sink.rawText( "</" ); @@ -337,14 +458,19 @@ sink.rawText( ">" ); } + else + { + isEmptyElement = false; + } - // ---------------------------------------------------------------------- - // Sections - // ---------------------------------------------------------------------- } else if ( eventType == XmlPullParser.TEXT ) { - sink.text( parser.getText() ); + String text = parser.getText(); + if ( !"".equals( text.trim() ) ) + { + sink.text( text ); + } } eventType = parser.next(); Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java?view=diff&rev=557051&r1=557050&r2=557051 ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java Tue Jul 17 13:45:47 2007 @@ -257,7 +257,7 @@ { markup( "<section name=\"" ); } - else + else if ( depth == 2 ) { markup( "<subsection name=\"" ); } @@ -265,12 +265,40 @@ private void onSectionTitle( int depth ) { + if ( depth == 3 ) + { + markup( "<h4>" ); + } + else if ( depth == 4 ) + { + markup( "<h5>" ); + } + else if ( depth == 5 ) + { + markup( "<h6>" ); + } + titleFlag = true; } private void onSectionTitle_( int depth ) { - markup( "\">" ); + if ( depth == 1 || depth == 2 ) + { + markup( "\">" ); + } + else if ( depth == 3 ) + { + markup( "</h4>" ); + } + else if ( depth == 4 ) + { + markup( "</h5>" ); + } + else if ( depth == 5 ) + { + markup( "</h6>" ); + } titleFlag = false; } @@ -281,7 +309,7 @@ { markup( "</section>" ); } - else + else if ( depth == 2 ) { markup( "</subsection>" ); } @@ -358,7 +386,7 @@ public void definitionList() { - markup( "<dl compact=\"compact\">" + EOL ); + markup( "<dl>" + EOL ); } public void definitionList_() @@ -369,12 +397,12 @@ public void definedTerm() { - markup( "<dt><b>" ); + markup( "<dt>" ); } public void definedTerm_() { - markup( "</b></dt>" + EOL ); + markup( "</dt>" + EOL ); } public void definition()