Class XdocParser

All Implemented Interfaces:
LogEnabled, HtmlMarkup, Markup, XmlMarkup, XdocMarkup, Parser

@Component(role=Parser.class, hint="xdoc") public class XdocParser extends XhtmlBaseParser implements XdocMarkup
Parse an xdoc model and emit events into the specified doxia Sink.
Since:
1.0
  • Field Details

    • sourceContent

      private String sourceContent
      The source content of the input reader. Used to pass into macros.
    • isEmptyElement

      private boolean isEmptyElement
      Empty elements don't write a closing tag.
    • macroName

      private String macroName
      A macro name.
    • macroParameters

      private Map<String,Object> macroParameters
      The macro parameters.
    • inHead

      private boolean inHead
      Indicates that we're inside <properties> or <head>.
    • hasTitle

      private boolean hasTitle
      Indicates that <title> was called from <properties> or <head>.
  • Constructor Details

    • XdocParser

      public XdocParser()
  • Method Details

    • parse

      public void parse(Reader source, Sink sink, String reference) throws ParseException
      Parses the given source model and emits Doxia events into the given sink.
      Specified by:
      parse in interface Parser
      Overrides:
      parse in class XhtmlBaseParser
      Parameters:
      source - not null reader that provides the source document. You could use newReader methods from ReaderFactory.
      sink - A sink that consumes the Doxia events.
      reference - the reference
      Throws:
      ParseException - if the model could not be parsed.
    • 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 XhtmlBaseParser.baseStartTag(XmlPullParser,Sink), this should be overridden by implementing parsers to include additional tags.
      Overrides:
      handleStartTag in class XhtmlBaseParser
      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 XhtmlBaseParser.baseEndTag(XmlPullParser,Sink), this should be overridden by implementing parsers to include additional tags.
      Overrides:
      handleEndTag in class XhtmlBaseParser
      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
    • 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.

      Overrides:
      consecutiveSections in class XhtmlBaseParser
      Parameters:
      newLevel - the new section level, all upper levels have to be closed.
      sink - the sink to receive the events.
    • init

      protected void init()
      Initialize the parser. This is called first by AbstractParser.parse(java.io.Reader, org.apache.maven.doxia.sink.Sink) and can be used to set the parser into a clear state so it can be re-used.
      Overrides:
      init in class XhtmlBaseParser
    • closeOpenSections

      private void closeOpenSections(int newLevel, Sink sink)
      Close open h4, h5, h6 sections.
    • handleMacroEnd

      private void handleMacroEnd(Sink sink) throws MacroExecutionException
      Throws:
      MacroExecutionException
    • handleMacroStart

      private void handleMacroStart(org.codehaus.plexus.util.xml.pull.XmlPullParser parser) throws MacroExecutionException
      Throws:
      MacroExecutionException
    • handleMetaStart

      private void handleMetaStart(org.codehaus.plexus.util.xml.pull.XmlPullParser parser, Sink sink, SinkEventAttributeSet attribs)
    • handleParamStart

      private void handleParamStart(org.codehaus.plexus.util.xml.pull.XmlPullParser parser, Sink sink) throws MacroExecutionException
      Throws:
      MacroExecutionException
    • handleSectionStart

      private void handleSectionStart(int level, Sink sink, SinkEventAttributeSet attribs, org.codehaus.plexus.util.xml.pull.XmlPullParser parser)
    • openMissingSections

      private void openMissingSections(int newLevel, Sink sink)
      Open missing h4, h5, h6 sections.