org.apache.maven.doxia.parser
Class XhtmlBaseParser

java.lang.Object
  extended by org.apache.maven.doxia.parser.AbstractParser
      extended by org.apache.maven.doxia.parser.AbstractXmlParser
          extended by org.apache.maven.doxia.parser.XhtmlBaseParser
All Implemented Interfaces:
LogEnabled, Markup, XmlMarkup, Parser

public class XhtmlBaseParser
extends AbstractXmlParser

Common base parser for xhtml events.

Since:
1.0
Version:
$Id: XhtmlBaseParser.java 749269 2009-03-02 11:09:23Z ltheussl $
Author:
Jason van Zyl, ltheussl

Nested Class Summary
 
Nested classes/interfaces inherited from class org.apache.maven.doxia.parser.AbstractXmlParser
AbstractXmlParser.CachedFileEntityResolver
 
Field Summary
 
Fields inherited from interface org.apache.maven.doxia.markup.XmlMarkup
BANG, CDATA, DOCTYPE_START, ENTITY_START, XML_NAMESPACE
 
Fields inherited from interface org.apache.maven.doxia.markup.Markup
COLON, EOL, EQUAL, GREATER_THAN, LEFT_CURLY_BRACKET, LEFT_SQUARE_BRACKET, LESS_THAN, MINUS, PLUS, QUOTE, RIGHT_CURLY_BRACKET, RIGHT_SQUARE_BRACKET, SEMICOLON, SLASH, SPACE, STAR
 
Fields inherited from interface org.apache.maven.doxia.parser.Parser
ROLE, TXT_TYPE, UNKNOWN_TYPE, XML_TYPE
 
Constructor Summary
XhtmlBaseParser()
           
 
Method Summary
protected  boolean baseEndTag(org.codehaus.plexus.util.xml.pull.XmlPullParser parser, Sink sink)
           Goes through a common list of possible html end tags.
protected  boolean baseStartTag(org.codehaus.plexus.util.xml.pull.XmlPullParser parser, Sink sink)
           Goes through a common list of possible html start tags.
protected  void consecutiveSections(int newLevel, Sink sink)
          Make sure sections are nested consecutively.
protected  int getSectionLevel()
          Return the current section level.
protected  void handleCdsect(org.codehaus.plexus.util.xml.pull.XmlPullParser parser, Sink sink)
          Handles CDATA sections.
protected  void handleComment(org.codehaus.plexus.util.xml.pull.XmlPullParser parser, Sink sink)
          Handles comments.
protected  void handleEndTag(org.codehaus.plexus.util.xml.pull.XmlPullParser parser, Sink sink)
          Goes through the possible end tags. Just calls baseEndTag(XmlPullParser,Sink), this should be overridden by implementing parsers to include additional tags.
protected  void handleEntity(org.codehaus.plexus.util.xml.pull.XmlPullParser parser, Sink sink)
          Handles entities.
protected  void handleStartTag(org.codehaus.plexus.util.xml.pull.XmlPullParser parser, Sink sink)
          Goes through the possible start tags. Just calls baseStartTag(XmlPullParser,Sink), this should be overridden by implementing parsers to include additional tags.
protected  void handleText(org.codehaus.plexus.util.xml.pull.XmlPullParser parser, Sink sink)
          Handles text events.
protected  void handleUnknown(org.codehaus.plexus.util.xml.pull.XmlPullParser parser, Sink sink, int type)
          Handles an unkown event.
protected  boolean isVerbatim()
          Checks if we are currently insid a <pre> tag.
protected  void setSectionLevel(int newLevel)
          Set the current section level.
protected  java.lang.String validAnchor(java.lang.String id)
          Checks if the given id is a valid Doxia id and if not, returns a transformed one.
protected  void verbatim_()
          Decrease the current verbatim level.
protected  void verbatim()
          Increases the current verbatim level.
 
Methods inherited from class org.apache.maven.doxia.parser.AbstractXmlParser
getAttributesFromParser, getLocalEntities, getText, getType, isCollapsibleWhitespace, isIgnorableWhitespace, isTrimmableWhitespace, isValidate, parse, parse, setCollapsibleWhitespace, setIgnorableWhitespace, setTrimmableWhitespace, setValidate
 
Methods inherited from class org.apache.maven.doxia.parser.AbstractParser
enableLogging, executeMacro, getBasedir, getLog, getMacroManager, isSecondParsing, setSecondParsing
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

XhtmlBaseParser

public XhtmlBaseParser()
Method Detail

baseStartTag

protected boolean baseStartTag(org.codehaus.plexus.util.xml.pull.XmlPullParser parser,
                               Sink sink)

Goes through a common list of possible html start tags. These include only tags that can go into the body of a xhtml document and so should be re-usable by different xhtml-based parsers.

The currently handled tags are:

<h2>, <h3>, <h4>, <h5>, <h6>, <p>, <pre>, <ul>, <ol>, <li>, <dl>, <dt>, <dd>, <b>, <strong>, <i>, <em>, <code>, <samp>, <tt>, <a>, <table>, <tr>, <th>, <td>, <caption>, <br/>, <hr/>, <img/>.

Parameters:
parser - A parser.
sink - the sink to receive the events.
Returns:
True if the event has been handled by this method, i.e. the tag was recognized, false otherwise.

baseEndTag

protected boolean baseEndTag(org.codehaus.plexus.util.xml.pull.XmlPullParser parser,
                             Sink sink)

Goes through a common list of possible html end tags. These should be re-usable by different xhtml-based parsers. The tags handled here are the same as for baseStartTag(XmlPullParser,Sink), except for the empty elements (<br/>, <hr/>, <img/>).

Parameters:
parser - A parser.
sink - the sink to receive the events.
Returns:
True if the event has been handled by this method, false otherwise.

handleStartTag

protected void handleStartTag(org.codehaus.plexus.util.xml.pull.XmlPullParser parser,
                              Sink sink)
                       throws org.codehaus.plexus.util.xml.pull.XmlPullParserException,
                              MacroExecutionException
Goes through the possible start tags. Just calls baseStartTag(XmlPullParser,Sink), this should be overridden by implementing parsers to include additional tags.

Specified by:
handleStartTag in class AbstractXmlParser
Parameters:
parser - A parser, not null.
sink - the sink to receive the events.
Throws:
org.codehaus.plexus.util.xml.pull.XmlPullParserException - if there's a problem parsing the model
MacroExecutionException - if there's a problem executing a macro

handleEndTag

protected void handleEndTag(org.codehaus.plexus.util.xml.pull.XmlPullParser parser,
                            Sink sink)
                     throws org.codehaus.plexus.util.xml.pull.XmlPullParserException,
                            MacroExecutionException
Goes through the possible end tags. Just calls baseEndTag(XmlPullParser,Sink), this should be overridden by implementing parsers to include additional tags.

Specified by:
handleEndTag in class AbstractXmlParser
Parameters:
parser - A parser, not null.
sink - the sink to receive the events.
Throws:
org.codehaus.plexus.util.xml.pull.XmlPullParserException - if there's a problem parsing the model
MacroExecutionException - if there's a problem executing a macro

handleText

protected void handleText(org.codehaus.plexus.util.xml.pull.XmlPullParser parser,
                          Sink sink)
                   throws org.codehaus.plexus.util.xml.pull.XmlPullParserException
Handles text events.

Specified by:
handleText in class AbstractXmlParser
Parameters:
parser - A parser, not null.
sink - the sink to receive the events.
Throws:
org.codehaus.plexus.util.xml.pull.XmlPullParserException - if there's a problem parsing the model

handleCdsect

protected void handleCdsect(org.codehaus.plexus.util.xml.pull.XmlPullParser parser,
                            Sink sink)
                     throws org.codehaus.plexus.util.xml.pull.XmlPullParserException
Handles CDATA sections.

Specified by:
handleCdsect in class AbstractXmlParser
Parameters:
parser - A parser, not null.
sink - the sink to receive the events.
Throws:
org.codehaus.plexus.util.xml.pull.XmlPullParserException - if there's a problem parsing the model

handleComment

protected void handleComment(org.codehaus.plexus.util.xml.pull.XmlPullParser parser,
                             Sink sink)
                      throws org.codehaus.plexus.util.xml.pull.XmlPullParserException
Handles comments.

Specified by:
handleComment in class AbstractXmlParser
Parameters:
parser - A parser, not null.
sink - the sink to receive the events.
Throws:
org.codehaus.plexus.util.xml.pull.XmlPullParserException - if there's a problem parsing the model

handleEntity

protected void handleEntity(org.codehaus.plexus.util.xml.pull.XmlPullParser parser,
                            Sink sink)
                     throws org.codehaus.plexus.util.xml.pull.XmlPullParserException
Handles entities.

Specified by:
handleEntity in class AbstractXmlParser
Parameters:
parser - A parser, not null.
sink - the sink to receive the events.
Throws:
org.codehaus.plexus.util.xml.pull.XmlPullParserException - if there's a problem parsing the model

handleUnknown

protected void handleUnknown(org.codehaus.plexus.util.xml.pull.XmlPullParser parser,
                             Sink sink,
                             int type)
Handles an unkown event.

Parameters:
parser - the parser to get the event from.
sink - the sink to receive the event.
type - the tag event type. This should be one of HtmlMarkup.TAG_TYPE_SIMPLE, HtmlMarkup.TAG_TYPE_START or HtmlMarkup.TAG_TYPE_END. It will be passed as the first argument of the required parameters to the Sink Sink.unknown(String, Object[], SinkEventAttributes) method.

consecutiveSections

protected void consecutiveSections(int newLevel,
                                   Sink sink)
Make sure sections are nested consecutively.

HTML doesn't have any sections, only sectionTitles (<h2> etc), that means we have to open close any sections that are missing in between.

For instance, if the following sequence is parsed:

 <h3></h3>
 <h6></h6>
 
we have to insert two section starts before we open the <h6>. In the following sequence
 <h6></h6>
 <h3></h3>
 
we have to close two sections before we open the <h3>.

The current level is set to newLevel afterwards.

Parameters:
newLevel - the new section level, all upper levels have to be closed.
sink - the sink to receive the events.

getSectionLevel

protected int getSectionLevel()
Return the current section level.

Returns:
the current section level.

setSectionLevel

protected void setSectionLevel(int newLevel)
Set the current section level.

Parameters:
newLevel - the new section level.

verbatim_

protected void verbatim_()
Decrease the current verbatim level.


verbatim

protected void verbatim()
Increases the current verbatim level. A value of 0 means that we are not in verbatim mode, every nested <pre> tag increases the level.


isVerbatim

protected boolean isVerbatim()
Checks if we are currently insid a <pre> tag.

Returns:
true if we are currently in verbatim mode.

validAnchor

protected java.lang.String validAnchor(java.lang.String id)
Checks if the given id is a valid Doxia id and if not, returns a transformed one.

Parameters:
id - The id to validate.
Returns:
A transformed id or the original id if it was already valid.
See Also:
DoxiaUtils.encodeId(String)


Copyright © 2005-2009 The Apache Software Foundation. All Rights Reserved.