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()


Reply via email to