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 vs...@apache.org on 2007/08/01 15:45:22 UTC
svn commit: r561795 -
/maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlParser.java
Author: vsiveton
Date: Wed Aug 1 06:45:21 2007
New Revision: 561795
URL: http://svn.apache.org/viewvc?view=rev&rev=561795
Log:
o split up the long parseXhtml() method into parts (see r557536)
o Clean up Exception handling.
Modified:
maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlParser.java
Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlParser.java
URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlParser.java?view=diff&rev=561795&r1=561794&r2=561795
==============================================================================
--- maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlParser.java (original)
+++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlParser.java Wed Aug 1 06:45:21 2007
@@ -79,20 +79,19 @@
parseXhtml( parser, sink );
}
- catch ( Exception ex )
+ catch ( XmlPullParserException ex )
{
- throw new ParseException( "Error parsing the model.", ex );
+ throw new ParseException( "Error parsing the model!", ex );
}
}
-
/**
* @param parser
* @param sink
* @throws IOException if any
* @throws XmlPullParserException if any
*/
- public void parseXhtml( XmlPullParser parser, Sink sink ) throws XmlPullParserException, IOException
+ public void parseXhtml( XmlPullParser parser, Sink sink ) throws XmlPullParserException
{
int eventType = parser.getEventType();
@@ -100,256 +99,294 @@
{
if ( eventType == XmlPullParser.START_TAG )
{
- if ( parser.getName().equals( Tag.TITLE.toString() ) )
- {
- sink.title();
- }
- /*
- * The ADDRESS element may be used by authors to supply contact information
- * for a model or a major part of a model such as a form. This element
- * often appears at the beginning or end of a model.
- */
- else if ( parser.getName().equals( Tag.ADDRESS.toString() ) )
- {
- sink.author();
- }
- else if ( parser.getName().equals( Tag.BODY.toString() ) )
- {
- sink.body();
- }
- else if ( parser.getName().equals( Tag.H1.toString() ) || parser.getName().equals( Tag.H2.toString() ) ||
- parser.getName().equals( Tag.H3.toString() ) || parser.getName().equals( Tag.H4.toString() ) ||
- parser.getName().equals( Tag.H5.toString() ) )
- {
- this.closeSubordinatedSections( parser.getName(), sink );
- this.startSection( this.sections.size(), sink );
- this.startSectionTitle( this.sections.size(), sink );
- this.sections.push( parser.getName() );
+ handleStartTag( parser, sink );
+ }
+ else if ( eventType == XmlPullParser.END_TAG )
+ {
+ handleEndTag( parser, sink );
+ }
+ else if ( eventType == XmlPullParser.TEXT )
+ {
+ handleText( parser, sink );
+ }
- }
- else if ( parser.getName().equals( Tag.P.toString() ) )
- {
- sink.paragraph();
- }
- /*
- * The PRE element tells visual user agents that the enclosed text is
- * "preformatted". When handling preformatted text, visual user agents:
- * - May leave white space intact.
- * - May render text with a fixed-pitch font.
- * - May disable automatic word wrap.
- * - Must not disable bidirectional processing.
- * Non-visual user agents are not required to respect extra white space
- * in the content of a PRE element.
- */
- else if ( parser.getName().equals( Tag.PRE.toString() ) )
- {
- sink.verbatim( true );
- }
- else if ( ( parser.getName().equals( Tag.CODE.toString() ) ) || ( parser.getName().equals( Tag.SAMP.toString() ) ) ||
- ( parser.getName().equals( Tag.TT.toString() ) ) )
- {
- sink.monospaced();
- }
- else if ( parser.getName().equals( Tag.UL.toString() ) )
- {
- sink.list();
- }
- else if ( parser.getName().equals( Tag.OL.toString() ) )
- {
- sink.numberedList( Sink.NUMBERING_DECIMAL );
- }
- else if ( parser.getName().equals( Tag.LI.toString() ) )
- {
- sink.listItem();
- }
- else if ( parser.getName().equals( Tag.HEAD.toString() ) )
- {
- sink.head();
- }
- else if ( ( parser.getName().equals( Tag.B.toString() ) ) || ( parser.getName().equals( Tag.STRONG.toString() ) ) )
- {
- sink.bold();
- }
- else if ( ( parser.getName().equals( Tag.I.toString() ) ) || ( parser.getName().equals( Tag.EM.toString() ) ) )
- {
- sink.italic();
- }
- else if ( parser.getName().equals( Tag.A.toString() ) )
- {
- String href = parser.getAttributeValue( null, Attribute.HREF.toString() );
- String name = parser.getAttributeValue( null, Attribute.NAME.toString() );
- String id = parser.getAttributeValue( null, Attribute.ID.toString() );
- if ( href != null )
- {
- sink.link( href );
- this.linktypes.push( XhtmlParser.LINK );
- }
- else if ( name != null )
- {
- sink.anchor( name );
- this.linktypes.push( XhtmlParser.ANCHOR );
- }
- else if ( id != null )
- {
- sink.anchor( id );
- this.linktypes.push( XhtmlParser.ANCHOR );
- }
- }
- else if ( parser.getName().equals( Tag.BR.toString() ) )
- {
- sink.lineBreak();
- }
- else if ( parser.getName().equals( Tag.HR.toString() ) )
- {
- sink.horizontalRule();
- }
- else if ( parser.getName().equals( Tag.IMG.toString() ) )
- {
- sink.figure();
- String src = parser.getAttributeValue( null, Attribute.SRC.toString() );
- String title = parser.getAttributeValue( null, Attribute.TITLE.toString() );
- String alt = parser.getAttributeValue( null, Attribute.ALT.toString() );
- if ( src != null )
- {
- sink.figureGraphics( src );
- }
- if ( title != null )
- {
- sink.figureCaption();
- text( sink, title );
- sink.figureCaption_();
- }
- else if ( alt != null )
- {
- sink.figureCaption();
- text( sink, alt );
- sink.figureCaption_();
- }
- sink.figure_();
- }
- // ----------------------------------------------------------------------
- // Tables
- // ----------------------------------------------------------------------
+ try
+ {
+ eventType = parser.next();
+ }
+ catch ( IOException io )
+ {
+ throw new XmlPullParserException( "Error parsing the model.", parser, io );
+ }
+ }
+ }
- else if ( parser.getName().equals( Tag.TABLE.toString() ) )
- {
- sink.table();
- }
- else if ( parser.getName().equals( Tag.TR.toString() ) )
- {
- sink.tableRow();
- }
- else if ( parser.getName().equals( Tag.TH.toString() ) )
- {
- sink.tableCell();
- }
- else if ( parser.getName().equals( Tag.TD.toString() ) )
- {
- sink.tableCell();
- }
+ /**
+ * Goes through the possible start tags.
+ *
+ * @param parser A parser.
+ * @param sink the sink to receive the events.
+ */
+ private void handleStartTag( XmlPullParser parser, Sink sink )
+ {
+ if ( parser.getName().equals( Tag.TITLE.toString() ) )
+ {
+ sink.title();
+ }
+ /*
+ * The ADDRESS element may be used by authors to supply contact information
+ * for a model or a major part of a model such as a form. This element
+ * often appears at the beginning or end of a model.
+ */
+ else if ( parser.getName().equals( Tag.ADDRESS.toString() ) )
+ {
+ sink.author();
+ }
+ else if ( parser.getName().equals( Tag.BODY.toString() ) )
+ {
+ sink.body();
+ }
+ else if ( parser.getName().equals( Tag.H1.toString() ) || parser.getName().equals( Tag.H2.toString() ) ||
+ parser.getName().equals( Tag.H3.toString() ) || parser.getName().equals( Tag.H4.toString() ) ||
+ parser.getName().equals( Tag.H5.toString() ) )
+ {
+ this.closeSubordinatedSections( parser.getName(), sink );
+ this.startSection( this.sections.size(), sink );
+ this.startSectionTitle( this.sections.size(), sink );
+ this.sections.push( parser.getName() );
+ }
+ else if ( parser.getName().equals( Tag.P.toString() ) )
+ {
+ sink.paragraph();
+ }
+ /*
+ * The PRE element tells visual user agents that the enclosed text is
+ * "preformatted". When handling preformatted text, visual user agents:
+ * - May leave white space intact.
+ * - May render text with a fixed-pitch font.
+ * - May disable automatic word wrap.
+ * - Must not disable bidirectional processing.
+ * Non-visual user agents are not required to respect extra white space
+ * in the content of a PRE element.
+ */
+ else if ( parser.getName().equals( Tag.PRE.toString() ) )
+ {
+ sink.verbatim( true );
+ }
+ else if ( ( parser.getName().equals( Tag.CODE.toString() ) ) || ( parser.getName().equals( Tag.SAMP.toString() ) ) ||
+ ( parser.getName().equals( Tag.TT.toString() ) ) )
+ {
+ sink.monospaced();
+ }
+ else if ( parser.getName().equals( Tag.UL.toString() ) )
+ {
+ sink.list();
+ }
+ else if ( parser.getName().equals( Tag.OL.toString() ) )
+ {
+ sink.numberedList( Sink.NUMBERING_DECIMAL );
+ }
+ else if ( parser.getName().equals( Tag.LI.toString() ) )
+ {
+ sink.listItem();
+ }
+ else if ( parser.getName().equals( Tag.HEAD.toString() ) )
+ {
+ sink.head();
+ }
+ else if ( ( parser.getName().equals( Tag.B.toString() ) ) || ( parser.getName().equals( Tag.STRONG.toString() ) ) )
+ {
+ sink.bold();
+ }
+ else if ( ( parser.getName().equals( Tag.I.toString() ) ) || ( parser.getName().equals( Tag.EM.toString() ) ) )
+ {
+ sink.italic();
+ }
+ else if ( parser.getName().equals( Tag.A.toString() ) )
+ {
+ String href = parser.getAttributeValue( null, Attribute.HREF.toString() );
+ String name = parser.getAttributeValue( null, Attribute.NAME.toString() );
+ String id = parser.getAttributeValue( null, Attribute.ID.toString() );
+ if ( href != null )
+ {
+ sink.link( href );
+ this.linktypes.push( XhtmlParser.LINK );
}
- else if ( eventType == XmlPullParser.END_TAG )
+ else if ( name != null )
+ {
+ sink.anchor( name );
+ this.linktypes.push( XhtmlParser.ANCHOR );
+ }
+ else if ( id != null )
+ {
+ sink.anchor( id );
+ this.linktypes.push( XhtmlParser.ANCHOR );
+ }
+ }
+ else if ( parser.getName().equals( Tag.BR.toString() ) )
+ {
+ sink.lineBreak();
+ }
+ else if ( parser.getName().equals( Tag.HR.toString() ) )
+ {
+ sink.horizontalRule();
+ }
+ else if ( parser.getName().equals( Tag.IMG.toString() ) )
+ {
+ sink.figure();
+ String src = parser.getAttributeValue( null, Attribute.SRC.toString() );
+ String title = parser.getAttributeValue( null, Attribute.TITLE.toString() );
+ String alt = parser.getAttributeValue( null, Attribute.ALT.toString() );
+ if ( src != null )
+ {
+ sink.figureGraphics( src );
+ }
+ if ( title != null )
{
- if ( parser.getName().equals( Tag.TITLE.toString() ) )
- {
- sink.title_();
- }
- else if ( parser.getName().equals( Tag.ADDRESS.toString() ) )
- {
- sink.author_();
- }
- else if ( parser.getName().equals( Tag.BODY.toString() ) )
- {
- //close all sections that are still open
- closeSubordinatedSections( "h0", sink );
- sink.body_();
- }
- else if ( parser.getName().equals( Tag.H1.toString() ) || parser.getName().equals( Tag.H2.toString() ) ||
- parser.getName().equals( Tag.H3.toString() ) || parser.getName().equals( Tag.H4.toString() ) ||
- parser.getName().equals( Tag.H5.toString() ) )
- {
- this.closeSectionTitle( this.sections.size() - 1, sink );
- }
- else if ( parser.getName().equals( Tag.P.toString() ) )
- {
- sink.paragraph_();
- }
- else if ( parser.getName().equals( Tag.PRE.toString() ) )
- {
- sink.verbatim_();
- }
- else if ( ( parser.getName().equals( Tag.CODE.toString() ) ) || ( parser.getName().equals( Tag.SAMP.toString() ) ) ||
- ( parser.getName().equals( Tag.TT.toString() ) ) )
- {
- sink.monospaced_();
- }
- else if ( parser.getName().equals( Tag.UL.toString() ) )
- {
- sink.list_();
- }
- else if ( parser.getName().equals( Tag.OL.toString() ) )
- {
- sink.numberedList_();
- }
- else if ( parser.getName().equals( Tag.LI.toString() ) )
- {
- sink.listItem_();
- }
- else if ( parser.getName().equals( Tag.HEAD.toString() ) )
- {
- sink.head_();
- }
- else if ( ( parser.getName().equals( Tag.B.toString() ) ) || ( parser.getName().equals( Tag.STRONG.toString() ) ) )
- {
- sink.bold_();
- }
- else if ( ( parser.getName().equals( Tag.I.toString() ) ) || ( parser.getName().equals( Tag.EM.toString() ) ) )
- {
- sink.italic_();
- }
- else if ( parser.getName().equals( Tag.A.toString() ) )
- {
- String linktype = (String) this.linktypes.pop();
- //the equals operation is ok here, because we always use the class constant
- if ( linktype == XhtmlParser.LINK )
- {
- sink.link_();
- }
- else
- {
- sink.anchor_();
- }
- }
- // ----------------------------------------------------------------------
- // Tables
- // ----------------------------------------------------------------------
+ sink.figureCaption();
+ text( sink, title );
+ sink.figureCaption_();
+ }
+ else if ( alt != null )
+ {
+ sink.figureCaption();
+ text( sink, alt );
+ sink.figureCaption_();
+ }
+ sink.figure_();
+ }
+ // ----------------------------------------------------------------------
+ // Tables
+ // ----------------------------------------------------------------------
- else if ( parser.getName().equals( Tag.TABLE.toString() ) )
- {
- sink.table_();
- }
- else if ( parser.getName().equals( Tag.TR.toString() ) )
- {
- sink.tableRow_();
- }
- else if ( parser.getName().equals( Tag.TH.toString() ) )
- {
- sink.tableCell_();
- }
- else if ( parser.getName().equals( Tag.TD.toString() ) )
- {
- sink.tableCell_();
- }
+ else if ( parser.getName().equals( Tag.TABLE.toString() ) )
+ {
+ sink.table();
+ }
+ else if ( parser.getName().equals( Tag.TR.toString() ) )
+ {
+ sink.tableRow();
+ }
+ else if ( parser.getName().equals( Tag.TH.toString() ) )
+ {
+ sink.tableCell();
+ }
+ else if ( parser.getName().equals( Tag.TD.toString() ) )
+ {
+ sink.tableCell();
+ }
+ }
+ /**
+ * Goes through the possible end tags.
+ *
+ * @param parser A parser.
+ * @param sink the sink to receive the events.
+ */
+ private void handleEndTag( XmlPullParser parser, Sink sink )
+ {
+ if ( parser.getName().equals( Tag.TITLE.toString() ) )
+ {
+ sink.title_();
+ }
+ else if ( parser.getName().equals( Tag.ADDRESS.toString() ) )
+ {
+ sink.author_();
+ }
+ else if ( parser.getName().equals( Tag.BODY.toString() ) )
+ {
+ //close all sections that are still open
+ closeSubordinatedSections( "h0", sink );
+ sink.body_();
+ }
+ else if ( parser.getName().equals( Tag.H1.toString() ) || parser.getName().equals( Tag.H2.toString() ) ||
+ parser.getName().equals( Tag.H3.toString() ) || parser.getName().equals( Tag.H4.toString() ) ||
+ parser.getName().equals( Tag.H5.toString() ) )
+ {
+ this.closeSectionTitle( this.sections.size() - 1, sink );
+ }
+ else if ( parser.getName().equals( Tag.P.toString() ) )
+ {
+ sink.paragraph_();
+ }
+ else if ( parser.getName().equals( Tag.PRE.toString() ) )
+ {
+ sink.verbatim_();
+ }
+ else if ( ( parser.getName().equals( Tag.CODE.toString() ) ) || ( parser.getName().equals( Tag.SAMP.toString() ) ) ||
+ ( parser.getName().equals( Tag.TT.toString() ) ) )
+ {
+ sink.monospaced_();
+ }
+ else if ( parser.getName().equals( Tag.UL.toString() ) )
+ {
+ sink.list_();
+ }
+ else if ( parser.getName().equals( Tag.OL.toString() ) )
+ {
+ sink.numberedList_();
+ }
+ else if ( parser.getName().equals( Tag.LI.toString() ) )
+ {
+ sink.listItem_();
+ }
+ else if ( parser.getName().equals( Tag.HEAD.toString() ) )
+ {
+ sink.head_();
+ }
+ else if ( ( parser.getName().equals( Tag.B.toString() ) ) || ( parser.getName().equals( Tag.STRONG.toString() ) ) )
+ {
+ sink.bold_();
+ }
+ else if ( ( parser.getName().equals( Tag.I.toString() ) ) || ( parser.getName().equals( Tag.EM.toString() ) ) )
+ {
+ sink.italic_();
+ }
+ else if ( parser.getName().equals( Tag.A.toString() ) )
+ {
+ String linktype = (String) this.linktypes.pop();
+ //the equals operation is ok here, because we always use the class constant
+ if ( linktype == XhtmlParser.LINK )
+ {
+ sink.link_();
}
- else if ( eventType == XmlPullParser.TEXT )
+ else
{
- text( sink, parser.getText() );
+ sink.anchor_();
}
+ }
+ // ----------------------------------------------------------------------
+ // Tables
+ // ----------------------------------------------------------------------
- eventType = parser.next();
+ else if ( parser.getName().equals( Tag.TABLE.toString() ) )
+ {
+ sink.table_();
+ }
+ else if ( parser.getName().equals( Tag.TR.toString() ) )
+ {
+ sink.tableRow_();
+ }
+ else if ( parser.getName().equals( Tag.TH.toString() ) )
+ {
+ sink.tableCell_();
}
+ else if ( parser.getName().equals( Tag.TD.toString() ) )
+ {
+ sink.tableCell_();
+ }
+ }
+
+ /**
+ * Handles text events.
+ *
+ * @param parser A parser.
+ * @param sink the sink to receive the events.
+ */
+ private void handleText( XmlPullParser parser, Sink sink )
+ {
+ text( sink, parser.getText() );
}
/**