@Component(role=Parser.class, hint="xdoc") public class XdocParser extends XhtmlBaseParser implements XdocMarkup
AbstractXmlParser.CachedFileEntityResolver
Modifier and Type | Field and Description |
---|---|
private boolean |
hasTitle
Indicates that <title> was called from <properties> or <head>.
|
private boolean |
inHead
Indicates that we're inside <properties> or <head>.
|
private boolean |
isEmptyElement
Empty elements don't write a closing tag.
|
private java.lang.String |
macroName
A macro name.
|
private java.util.Map<java.lang.String,java.lang.Object> |
macroParameters
The macro parameters.
|
private java.lang.String |
sourceContent
The source content of the input reader.
|
AUTHOR_TAG, DATE_TAG, DOCUMENT_TAG, MACRO_TAG, PROPERTIES_TAG, SECTION_TAG, SOURCE_TAG, SUBSECTION_TAG, XDOC_NAMESPACE, XDOC_SYSTEM_ID
A, ABBR, ACRONYM, ADDRESS, APPLET, AREA, B, BASE, BASEFONT, BDO, BIG, BLOCKQUOTE, BODY, BR, BUTTON, CAPTION, CDATA_TYPE, CENTER, CITE, CODE, COL, COLGROUP, DD, DEL, DFN, DIR, DIV, DL, DT, EM, ENTITY_TYPE, FIELDSET, FONT, FORM, FRAME, FRAMESET, H1, H2, H3, H4, H5, H6, HEAD, HR, HTML, I, IFRAME, IMG, INPUT, INS, ISINDEX, KBD, LABEL, LEGEND, LI, LINK, MAP, MENU, META, NOFRAMES, NOSCRIPT, OBJECT, OL, OPTGROUP, OPTION, P, PARAM, PRE, Q, S, SAMP, SCRIPT, SELECT, SMALL, SPAN, STRIKE, STRONG, STYLE, SUB, SUP, TABLE, TAG_TYPE_END, TAG_TYPE_SIMPLE, TAG_TYPE_START, TBODY, TD, TEXTAREA, TFOOT, TH, THEAD, TITLE, TR, TT, U, UL, VAR
BANG, CDATA, DOCTYPE_START, ENTITY_START, XML_NAMESPACE
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
ROLE, TXT_TYPE, UNKNOWN_TYPE, XML_TYPE
Constructor and Description |
---|
XdocParser() |
Modifier and Type | Method and Description |
---|---|
private void |
closeOpenSections(int newLevel,
Sink sink)
Close open h4, h5, h6 sections.
|
protected void |
consecutiveSections(int newLevel,
Sink sink)
Make sure sections are nested consecutively.
|
protected void |
handleEndTag(org.codehaus.plexus.util.xml.pull.XmlPullParser parser,
Sink sink)
Goes through the possible end tags.
|
private void |
handleMacroEnd(Sink sink) |
private void |
handleMacroStart(org.codehaus.plexus.util.xml.pull.XmlPullParser parser) |
private void |
handleMetaStart(org.codehaus.plexus.util.xml.pull.XmlPullParser parser,
Sink sink,
SinkEventAttributeSet attribs) |
private void |
handleParamStart(org.codehaus.plexus.util.xml.pull.XmlPullParser parser,
Sink sink) |
private void |
handleSectionStart(int level,
Sink sink,
SinkEventAttributeSet attribs,
org.codehaus.plexus.util.xml.pull.XmlPullParser parser) |
protected void |
handleStartTag(org.codehaus.plexus.util.xml.pull.XmlPullParser parser,
Sink sink)
Goes through the possible start tags.
|
protected void |
init()
Initialize the parser.
|
private void |
openMissingSections(int newLevel,
Sink sink)
Open missing h4, h5, h6 sections.
|
void |
parse(java.io.Reader source,
Sink sink)
Parses the given source model and emits Doxia events into the given sink.
|
baseEndTag, baseStartTag, getSectionLevel, handleCdsect, handleComment, handleText, initXmlParser, isScriptBlock, isVerbatim, setSectionLevel, validAnchor, verbatim_, verbatim
getAttributesFromParser, getLocalEntities, getText, getType, handleEntity, handleUnknown, isCollapsibleWhitespace, isIgnorableWhitespace, isTrimmableWhitespace, isValidate, parse, setCollapsibleWhitespace, setIgnorableWhitespace, setTrimmableWhitespace, setValidate
doxiaVersion, enableLogging, executeMacro, getBasedir, getLog, getMacroManager, isEmitComments, isSecondParsing, parse, setEmitComments, setSecondParsing
private java.lang.String sourceContent
private boolean isEmptyElement
private java.lang.String macroName
private java.util.Map<java.lang.String,java.lang.Object> macroParameters
private boolean inHead
private boolean hasTitle
public void parse(java.io.Reader source, Sink sink) throws ParseException
parse
in interface Parser
parse
in class XhtmlBaseParser
source
- not null reader that provides the source document.
You could use newReader
methods from ReaderFactory
.sink
- A sink that consumes the Doxia events.ParseException
- if the model could not be parsed.protected void handleStartTag(org.codehaus.plexus.util.xml.pull.XmlPullParser parser, Sink sink) throws org.codehaus.plexus.util.xml.pull.XmlPullParserException, MacroExecutionException
XhtmlBaseParser.baseStartTag(XmlPullParser,Sink)
, this should be
overridden by implementing parsers to include additional tags.handleStartTag
in class XhtmlBaseParser
parser
- A parser, not null.sink
- the sink to receive the events.org.codehaus.plexus.util.xml.pull.XmlPullParserException
- if there's a problem parsing the modelMacroExecutionException
- if there's a problem executing a macroprotected void handleEndTag(org.codehaus.plexus.util.xml.pull.XmlPullParser parser, Sink sink) throws org.codehaus.plexus.util.xml.pull.XmlPullParserException, MacroExecutionException
XhtmlBaseParser.baseEndTag(XmlPullParser,Sink)
, this should be
overridden by implementing parsers to include additional tags.handleEndTag
in class XhtmlBaseParser
parser
- A parser, not null.sink
- the sink to receive the events.org.codehaus.plexus.util.xml.pull.XmlPullParserException
- if there's a problem parsing the modelMacroExecutionException
- if there's a problem executing a macroprotected void consecutiveSections(int newLevel, Sink sink)
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.
consecutiveSections
in class XhtmlBaseParser
newLevel
- the new section level, all upper levels have to be closed.sink
- the sink to receive the events.protected void init()
Parser.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.init
in class XhtmlBaseParser
private void closeOpenSections(int newLevel, Sink sink)
private void handleMacroEnd(Sink sink) throws MacroExecutionException
MacroExecutionException
private void handleMacroStart(org.codehaus.plexus.util.xml.pull.XmlPullParser parser) throws MacroExecutionException
MacroExecutionException
private void handleMetaStart(org.codehaus.plexus.util.xml.pull.XmlPullParser parser, Sink sink, SinkEventAttributeSet attribs)
private void handleParamStart(org.codehaus.plexus.util.xml.pull.XmlPullParser parser, Sink sink) throws MacroExecutionException
MacroExecutionException
private void handleSectionStart(int level, Sink sink, SinkEventAttributeSet attribs, org.codehaus.plexus.util.xml.pull.XmlPullParser parser)
private void openMissingSections(int newLevel, Sink sink)