Author: ltheussl Date: Mon Jun 8 09:53:32 2009 New Revision: 782573 URL: http://svn.apache.org/viewvc?rev=782573&view=rev Log: Forward parsed attributes to the sink
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/test/java/org/apache/maven/doxia/module/docbook/DocBookParserTest.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=782573&r1=782572&r2=782573&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 Jun 8 09:53:32 2009 @@ -49,7 +49,7 @@ /** * Level counter for calculating the section level. */ - private int level = -1; + private int level; /** * Used to distinguish italic from bold. @@ -103,7 +103,6 @@ META_ELEMENTS.add( SimplifiedDocbookMarkup.TITLEABBREV_TAG.toString() ); HIER_ELEMENTS.add( SimplifiedDocbookMarkup.SECTION_TAG.toString() ); - HIER_ELEMENTS.add( SimplifiedDocbookMarkup.ARTICLE_TAG.toString() ); HIER_ELEMENTS.add( SimplifiedDocbookMarkup.APPENDIX_TAG.toString() ); HIER_ELEMENTS.add( SimplifiedDocbookMarkup.BIBLIOGRAPHY_TAG.toString() ); HIER_ELEMENTS.add( SimplifiedDocbookMarkup.BIBLIODIV_TAG.toString() ); @@ -146,39 +145,46 @@ sink.body(); } - handleIdAnchor( parser, sink ); + SinkEventAttributeSet attribs = getAttributesFromParser( parser ); - if ( HIER_ELEMENTS.contains( parser.getName() ) ) + // TODO: remove + handleIdAnchor( parser, sink, attribs ); + + if ( parser.getName().equals( SimplifiedDocbookMarkup.ARTICLE_TAG.toString() ) ) + { + handleArticleStart( sink, attribs ); + } + else if ( HIER_ELEMENTS.contains( parser.getName() ) ) { - handleHierarchyElements( sink, parser ); + handleSectionElements( sink, parser.getName(), attribs ); } else if ( parser.getName().equals( SimplifiedDocbookMarkup.ITEMIZEDLIST_TAG.toString() ) ) { - handleItemizedListStart( sink, parser); + handleItemizedListStart( sink, attribs ); } else if ( parser.getName().equals( SimplifiedDocbookMarkup.ORDEREDLIST_TAG.toString() ) ) { - handleOrderedListStart( parser, sink ); + handleOrderedListStart( sink, attribs ); } else if ( parser.getName().equals( SimplifiedDocbookMarkup.LISTITEM_TAG.toString() ) ) { - handleListItemStart( sink ); + handleListItemStart( sink, attribs ); } else if ( parser.getName().equals( SimplifiedDocbookMarkup.VARIABLELIST_TAG.toString() ) ) { - handleVariableListStart( sink, parser); + handleVariableListStart( sink, attribs ); } else if ( parser.getName().equals( SimplifiedDocbookMarkup.VARLISTENTRY_TAG.toString() ) ) { - sink.definitionListItem(); + sink.definitionListItem( attribs ); } else if ( parser.getName().equals( SimplifiedDocbookMarkup.TERM_TAG.toString() ) ) { - sink.definedTerm(); + sink.definedTerm( attribs ); } else if ( parser.getName().equals( SimplifiedDocbookMarkup.MEDIAOBJECT_TAG.toString() ) ) { - handleFigureStart( sink, parser); + handleFigureStart( sink, attribs ); } else if ( parser.getName().equals( SimplifiedDocbookMarkup.IMAGEOBJECT_TAG.toString() ) || parser.getName().equals( SimplifiedDocbookMarkup.FIGURE_TAG.toString() ) @@ -189,35 +195,35 @@ } else if ( parser.getName().equals( SimplifiedDocbookMarkup.IMAGEDATA_TAG.toString() ) ) { - handleImageDataStart( parser, sink ); + handleImageDataStart( sink, attribs ); } else if ( parser.getName().equals( SimplifiedDocbookMarkup.CAPTION_TAG.toString() ) ) { - handleCaptionStart( parser, sink ); + handleCaptionStart( sink, attribs ); } else if ( parser.getName().equals( SimplifiedDocbookMarkup.TABLE_TAG.toString() ) || parser.getName().equals( SimplifiedDocbookMarkup.INFORMALTABLE_TAG.toString() ) ) { - handleTableStart( sink, parser); + handleTableStart( sink, attribs ); } else if ( parser.getName().equals( SimplifiedDocbookMarkup.TR_TAG.toString() ) || parser.getName().equals( SimplifiedDocbookMarkup.ROW_TAG.toString() ) ) { - sink.tableRow(); + sink.tableRow( attribs ); } else if ( parser.getName().equals( SimplifiedDocbookMarkup.ENTRY_TAG.toString() ) && isParent( SimplifiedDocbookMarkup.THEAD_TAG.toString() ) || parser.getName().equals( SimplifiedDocbookMarkup.TH_TAG.toString() ) ) { - sink.tableHeaderCell(); + sink.tableHeaderCell( attribs ); } else if ( parser.getName().equals( SimplifiedDocbookMarkup.ENTRY_TAG.toString() ) ) { - sink.tableCell(); + sink.tableCell( attribs ); } else if ( parser.getName().equals( SimplifiedDocbookMarkup.PARA_TAG.toString() ) ) { - handleParaStart( sink ); + handleParaStart( sink, attribs ); } else if ( VERBATIM_ELEMENTS.contains( parser.getName() ) ) { @@ -253,31 +259,31 @@ } else if ( parser.getName().equals( SimplifiedDocbookMarkup.TITLE_TAG.toString() ) ) { - handleTitleStart( sink ); + handleTitleStart( sink, attribs ); } else if ( parser.getName().equals( SimplifiedDocbookMarkup.CORPAUTHOR_TAG.toString() ) ) { - sink.author(); + sink.author( attribs ); } else if ( parser.getName().equals( SimplifiedDocbookMarkup.DATE_TAG.toString() ) ) { - sink.date(); + sink.date( attribs ); } else if ( parser.getName().equals( SimplifiedDocbookMarkup.ULINK_TAG.toString() ) ) { - handleUlinkStart( parser, sink ); + handleUlinkStart( sink, attribs ); } else if ( parser.getName().equals( SimplifiedDocbookMarkup.EMAIL_TAG.toString() ) ) { - handleEmailStart(parser, sink); + handleEmailStart( parser, sink, attribs ); } else if ( parser.getName().equals( SimplifiedDocbookMarkup.LINK_TAG.toString() ) ) { - handleLinkStart( parser, sink ); + handleLinkStart( sink, attribs ); } else if ( parser.getName().equals( SimplifiedDocbookMarkup.XREF_TAG.toString() ) ) { - handleXrefStart( parser, sink ); + handleXrefStart( sink, attribs ); } else { @@ -292,19 +298,14 @@ protected void handleEndTag( XmlPullParser parser, Sink sink ) throws XmlPullParserException, MacroExecutionException { - - //If the element introduces a new level of hierarchy, lower the stack - if ( HIER_ELEMENTS.contains( parser.getName() ) ) + if ( parser.getName().equals( SimplifiedDocbookMarkup.ARTICLE_TAG.toString() ) ) { - //if this is the root element, handle it as body - if ( level == 0 ) - { - sink.body_(); - } - else - { - sink.section_( level ); - } + sink.body_(); + } + else if ( HIER_ELEMENTS.contains( parser.getName() ) ) + { + sink.section_( level ); + //decrease the nesting level level--; parent.pop(); @@ -487,39 +488,19 @@ // // ---------------------------------------------------------------------- - /** - * 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++ ) - { - if ( parser.getAttributeName( i ).equals( name ) ) - { - return parser.getAttributeValue( i ); - } - } - - return null; - } - - private void handleCaptionStart( XmlPullParser parser, Sink sink ) + private void handleCaptionStart( Sink sink, SinkEventAttributeSet attribs ) { if ( isParent( SimplifiedDocbookMarkup.MEDIAOBJECT_TAG.toString() ) ) { - sink.figureCaption( null ); + sink.figureCaption( attribs ); } else if ( isParent( SimplifiedDocbookMarkup.INFORMALTABLE_TAG.toString() ) || isParent( SimplifiedDocbookMarkup.TABLE_TAG.toString() ) ) { - sink.tableCaption(); + sink.tableCaption( attribs ); } - parent.push( parser.getName() ); + parent.push( SimplifiedDocbookMarkup.CAPTION_TAG.toString() ); } private void handleCaptionEnd( Sink sink ) @@ -537,54 +518,53 @@ } } - private void handleEmailStart( XmlPullParser parser, Sink sink ) + private void handleEmailStart( XmlPullParser parser, Sink sink, SinkEventAttributeSet attribs ) throws XmlPullParserException { - String mailto; try { - mailto = parser.nextText(); - } catch ( IOException e ) + String mailto = parser.nextText(); + sink.link( "mailto:" + mailto, attribs ); + sink.link_(); + } + catch ( IOException e ) { throw new XmlPullParserException( "IOException: " + e.getMessage(), parser, e ); } - sink.link( "mailto:" + mailto ); - sink.link_(); } - private void handleFigureStart( Sink sink, XmlPullParser parser ) + private void handleFigureStart( Sink sink, SinkEventAttributeSet attribs ) { - sink.figure( null ); - parent.push( parser.getName() ); + sink.figure( attribs ); + parent.push( SimplifiedDocbookMarkup.MEDIAOBJECT_TAG.toString() ); + } + + private void handleArticleStart( Sink sink, SinkEventAttributeSet attribs ) + { + sink.head( attribs ); + inHead = true; + + parent.push( SimplifiedDocbookMarkup.ARTICLE_TAG.toString() ); } //If the element introduces a new level of hierarchy, raise the stack - private void handleHierarchyElements( Sink sink, XmlPullParser parser ) + private void handleSectionElements( Sink sink, String name, SinkEventAttributeSet attribs ) { //increase the nesting level level++; - //if this is the root element, start head - if ( parser.getName().equals( SimplifiedDocbookMarkup.ARTICLE_TAG.toString() ) ) - { - sink.head(); - inHead = true; - } - else - { - sink.section( level, null ); - } + sink.section( level, attribs ); - parent.push( parser.getName() ); + parent.push( name ); } - private void handleIdAnchor( XmlPullParser parser, Sink sink ) + private void handleIdAnchor( XmlPullParser parser, Sink sink, SinkEventAttributeSet attribs ) { - String id = getAttributeValue( parser, ID_ATTRIBUTE ); + Object id = attribs.getAttribute( SimplifiedDocbookMarkup.ID_ATTRIBUTE ); //catch link targets if ( id != null ) { - sink.anchor( id ); + sink.anchor( id.toString() ); if ( !parser.getName().equals( SimplifiedDocbookMarkup.ANCHOR_TAG.toString() ) ) { @@ -593,76 +573,88 @@ } } - private void handleImageDataStart( XmlPullParser parser, Sink sink ) + private void handleImageDataStart( Sink sink, SinkEventAttributeSet attribs ) + throws XmlPullParserException { - String fileref = getAttributeValue( parser, "fileref" ); - sink.figureGraphics( fileref, null ); + Object fileref = attribs.getAttribute( SimplifiedDocbookMarkup.FILEREF_ATTRIBUTE ); + + if ( fileref == null ) + { + throw new XmlPullParserException( "Missing fileref attribute in imagedata!" ); + } + + sink.figureGraphics( fileref.toString(), attribs ); } - private void handleItemizedListStart( Sink sink, XmlPullParser parser ) + private void handleItemizedListStart( Sink sink, SinkEventAttributeSet attribs ) { - sink.list(); + sink.list( attribs ); //for itemizedlists in variablelists - parent.push( parser.getName() ); + parent.push( SimplifiedDocbookMarkup.ITEMIZEDLIST_TAG.toString() ); } - private void handleLinkStart( XmlPullParser parser, Sink sink ) + private void handleLinkStart( Sink sink, SinkEventAttributeSet attribs ) + throws XmlPullParserException { - String linkend = getAttributeValue( parser, SimplifiedDocbookMarkup.LINKEND_ATTRIBUTE ); + Object linkend = attribs.getAttribute( SimplifiedDocbookMarkup.LINKEND_ATTRIBUTE ); - if ( linkend != null ) + if ( linkend == null ) { - parent.push( parser.getName() ); - sink.link( "#" + linkend ); + throw new XmlPullParserException( "Missing linkend attribute in link!" ); } + + parent.push( SimplifiedDocbookMarkup.LINK_TAG.toString() ); + sink.link( "#" + linkend.toString(), attribs ); } - private void handleListItemStart( Sink sink ) + private void handleListItemStart( Sink sink, SinkEventAttributeSet attribs ) { if ( isParent( SimplifiedDocbookMarkup.VARIABLELIST_TAG.toString() ) ) { - sink.definition(); + sink.definition( attribs ); } else if ( isParent( SimplifiedDocbookMarkup.ORDEREDLIST_TAG.toString() ) ) { - sink.numberedListItem(); + sink.numberedListItem( attribs ); } else { - sink.listItem(); + sink.listItem( attribs ); } } - private void handleOrderedListStart( XmlPullParser parser, Sink sink ) + private void handleOrderedListStart( Sink sink, SinkEventAttributeSet attribs ) { //default enumeration style is decimal int numeration = Sink.NUMBERING_DECIMAL; + String style = SimplifiedDocbookMarkup.ARABIC_STYLE; - String style = getAttributeValue( parser, SimplifiedDocbookMarkup.NUMERATION_ATTRIBUTE ); + Object num = attribs.getAttribute( SimplifiedDocbookMarkup.NUMERATION_ATTRIBUTE ); - if ( style.equals( SimplifiedDocbookMarkup.ARABIC_STYLE ) ) + if ( num != null ) { - numeration = Sink.NUMBERING_DECIMAL; + style = num.toString(); } - else if ( style.equals( SimplifiedDocbookMarkup.LOWERALPHA_STYLE ) ) + + if ( SimplifiedDocbookMarkup.LOWERALPHA_STYLE.equals( style ) ) { numeration = Sink.NUMBERING_LOWER_ALPHA; } - else if ( style.equals( SimplifiedDocbookMarkup.LOWERROMAN_STYLE ) ) + else if ( SimplifiedDocbookMarkup.LOWERROMAN_STYLE.equals( style ) ) { numeration = Sink.NUMBERING_LOWER_ROMAN; } - else if ( style.equals( SimplifiedDocbookMarkup.UPPERALPHA_STYLE ) ) + else if ( SimplifiedDocbookMarkup.UPPERALPHA_STYLE.equals( style ) ) { numeration = Sink.NUMBERING_UPPER_ALPHA; } - else if ( style.equals( SimplifiedDocbookMarkup.UPPERROMAN_STYLE ) ) + else if ( SimplifiedDocbookMarkup.UPPERROMAN_STYLE.equals( style ) ) { numeration = Sink.NUMBERING_UPPER_ROMAN; } - sink.numberedList( numeration ); - parent.push( parser.getName() ); + sink.numberedList( numeration, attribs ); + parent.push( SimplifiedDocbookMarkup.ORDEREDLIST_TAG.toString() ); } private void handleParaEnd( Sink sink ) @@ -673,36 +665,36 @@ } } - private void handleParaStart( Sink sink ) + private void handleParaStart( Sink sink, SinkEventAttributeSet attribs ) { if ( !isParent( SimplifiedDocbookMarkup.CAPTION_TAG.toString() ) ) { - sink.paragraph(); + sink.paragraph( attribs ); } } - private void handleTableStart( Sink sink, XmlPullParser parser ) + private void handleTableStart( Sink sink, SinkEventAttributeSet attribs ) { - sink.table(); + sink.table( attribs ); //TODO handle tgroups - parent.push( parser.getName() ); + parent.push( SimplifiedDocbookMarkup.TABLE_TAG.toString() ); } - private void handleTitleStart( Sink sink ) + private void handleTitleStart( Sink sink, SinkEventAttributeSet attribs ) { if ( isParent( SimplifiedDocbookMarkup.TABLE_TAG.toString() ) || isParent( SimplifiedDocbookMarkup.INFORMALTABLE_TAG.toString() ) ) { - sink.tableCaption(); + sink.tableCaption( attribs ); } else if ( isParent( SimplifiedDocbookMarkup.ARTICLE_TAG.toString() ) || isParent( SimplifiedDocbookMarkup.ARTICLEINFO_TAG.toString() ) ) { - sink.title(); + sink.title( attribs ); } else if ( isParent( SimplifiedDocbookMarkup.SECTION_TAG.toString() ) ) { - sink.sectionTitle( level, null ); + sink.sectionTitle( level, attribs ); } else { @@ -732,33 +724,39 @@ } } - private void handleUlinkStart( XmlPullParser parser, Sink sink ) + private void handleUlinkStart( Sink sink, SinkEventAttributeSet attribs ) + throws XmlPullParserException { - String url = getAttributeValue( parser, - SimplifiedDocbookMarkup.URL_ATTRIBUTE ); - if ( url != null ) + Object url = attribs.getAttribute( SimplifiedDocbookMarkup.URL_ATTRIBUTE ); + + if ( url == null ) { - parent.push( parser.getName() ); - sink.link( url ); + throw new XmlPullParserException( "Missing url attribute in ulink!" ); } + + parent.push( SimplifiedDocbookMarkup.ULINK_TAG.toString() ); + sink.link( url.toString(), attribs ); } - private void handleVariableListStart( Sink sink, XmlPullParser parser ) + private void handleVariableListStart( Sink sink, SinkEventAttributeSet attribs ) { - sink.definitionList(); - parent.push( parser.getName() ); + sink.definitionList( attribs ); + parent.push( SimplifiedDocbookMarkup.VARIABLELIST_TAG.toString() ); } - private void handleXrefStart( XmlPullParser parser, Sink sink ) + private void handleXrefStart( Sink sink, SinkEventAttributeSet attribs ) + throws XmlPullParserException { - String linkend = getAttributeValue( parser, SimplifiedDocbookMarkup.LINKEND_ATTRIBUTE ); + Object linkend = attribs.getAttribute( SimplifiedDocbookMarkup.LINKEND_ATTRIBUTE ); - if ( linkend != null ) + if ( linkend == null ) { - sink.link( "#" + linkend ); - sink.text( "Link" ); //TODO: determine text of link target - sink.link_(); + throw new XmlPullParserException( "Missing linkend attribute in xref!" ); } + + sink.link( "#" + linkend.toString(), attribs ); + sink.text( "Link" ); //TODO: determine text of link target + sink.link_(); } private boolean ignorable( String name ) 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=782573&r1=782572&r2=782573&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 Jun 8 09:53:32 2009 @@ -160,26 +160,34 @@ assertEquals( "anchor", ( (SinkEventElement) it.next() ).getName() ); assertEquals( "anchor_", ( (SinkEventElement) it.next() ).getName() ); - assertEquals( "head", ( (SinkEventElement) it.next() ).getName() ); + SinkEventElement event = (SinkEventElement) it.next(); + assertEquals( "head", event.getName() ); + assertEquals( " id=article", event.getArgs()[0].toString() ); assertEquals( "head_", ( (SinkEventElement) it.next() ).getName() ); assertEquals( "body", ( (SinkEventElement) it.next() ).getName() ); assertEquals( "anchor", ( (SinkEventElement) it.next() ).getName() ); assertEquals( "anchor_", ( (SinkEventElement) it.next() ).getName() ); - assertEquals( "section1", ( (SinkEventElement) it.next() ).getName() ); + event = (SinkEventElement) it.next(); + assertEquals( "section1", event.getName() ); + assertEquals( " id=section", event.getArgs()[0].toString() ); assertEquals( "anchor", ( (SinkEventElement) it.next() ).getName() ); assertEquals( "anchor_", ( (SinkEventElement) it.next() ).getName() ); - assertEquals( "sectionTitle1", ( (SinkEventElement) it.next() ).getName() ); + event = (SinkEventElement) it.next(); + assertEquals( "sectionTitle1", event.getName() ); + assertEquals( " id=title", event.getArgs()[0].toString() ); assertEquals( "text", ( (SinkEventElement) it.next() ).getName() ); assertEquals( "sectionTitle1_", ( (SinkEventElement) it.next() ).getName() ); assertEquals( "anchor", ( (SinkEventElement) it.next() ).getName() ); assertEquals( "anchor_", ( (SinkEventElement) it.next() ).getName() ); - assertEquals( "paragraph", ( (SinkEventElement) it.next() ).getName() ); + event = (SinkEventElement) it.next(); + assertEquals( "paragraph", event.getName() ); + assertEquals( " id=para", event.getArgs()[0].toString() ); assertEquals( "text", ( (SinkEventElement) it.next() ).getName() ); assertEquals( "paragraph_", ( (SinkEventElement) it.next() ).getName() ); assertEquals( "section1_", ( (SinkEventElement) it.next() ).getName() ); @@ -242,11 +250,18 @@ assertEquals( "text", ( (SinkEventElement) it.next() ).getName() ); assertEquals( "anchor_", ( (SinkEventElement) it.next() ).getName() ); assertEquals( "text", ( (SinkEventElement) it.next() ).getName() ); - assertEquals( "link", ( (SinkEventElement) it.next() ).getName() ); + + SinkEventElement event = (SinkEventElement) it.next(); + assertEquals( "link", event.getName() ); + assertEquals( "#Anchor", event.getArgs()[0].toString() ); + assertEquals( "text", ( (SinkEventElement) it.next() ).getName() ); assertEquals( "link_", ( (SinkEventElement) it.next() ).getName() ); assertEquals( "text", ( (SinkEventElement) it.next() ).getName() ); - assertEquals( "link", ( (SinkEventElement) it.next() ).getName() ); + + event = (SinkEventElement) it.next(); + assertEquals( "link", event.getName() ); + assertEquals( "url.com", event.getArgs()[0].toString() ); assertEquals( "text", ( (SinkEventElement) it.next() ).getName() ); assertEquals( "link_", ( (SinkEventElement) it.next() ).getName() ); assertEquals( "text", ( (SinkEventElement) it.next() ).getName() ); @@ -303,7 +318,9 @@ parser.parse( text, sink ); it = sink.getEventList().iterator(); - assertEquals( "numberedList", ( (SinkEventElement) it.next() ).getName() ); + SinkEventElement event = (SinkEventElement) it.next(); + assertEquals( "numberedList", event.getName() ); + assertEquals( Sink.NUMBERING_UPPER_ALPHA, ( (Integer) event.getArgs()[0] ).intValue() ); assertEquals( "numberedListItem", ( (SinkEventElement) it.next() ).getName() ); assertEquals( "paragraph", ( (SinkEventElement) it.next() ).getName() ); assertEquals( "text", ( (SinkEventElement) it.next() ).getName() );