org.sweble.wikitext.lazy.parser.XmlElement.rats Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of swc-parser-lazy Show documentation
Show all versions of swc-parser-lazy Show documentation
A parser for MediaWiki's Wikitext.
/**
* Copyright 2011 The Open Source Research Group,
* University of Erlangen-Nürnberg
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*!
*
* XmlElement
* ----------
*
* This grammar recognizes start and end tags separatly without matching them.
* Finding valid pairs of start and end tags is defered to later processing.
*
* Grammar:
* - '' XmlName Ws* '>'
* - '<' XmlName XmlAttribute* Ws* "/>"
* - '<' XmlName XmlAttribute* Ws* ">"
*
* Closing XML tag
* ---------------
*
* AST node:
* Name : XmlElementClose
* Extends : LeafNode
* Implements : NamedXmlElement
* Constructor : "name"
* NodeType : org.sweble.wikitext.lazy.AstNodeTypes.NT_XML_TAG_CLOSE
*
* Properties:
* name : String
*
* Opening XML tag
* ---------------
*
* AST node:
* Name : XmlElementOpen
* Extends : InnerNode.InnerNode1
* Implements : NamedXmlElement
* Constructor : "name, xmlAttributes"
* NodeType : org.sweble.wikitext.lazy.AstNodeTypes.NT_XML_TAG_OPEN
*
* Properties:
* name : String
*
* Children:
* xmlAttributes : NodeList
*
* Empty XML Element
* -----------------
*
* AST node:
* Name : XmlElementEmpty
* Extends : InnerNode.InnerNode1
* Implements : NamedXmlElement
* Constructor : "name, xmlAttributes"
* NodeType : org.sweble.wikitext.lazy.AstNodeTypes.NT_XML_TAG_EMPTY
*
* Properties:
* name : String
*
* Children:
* xmlAttributes : NodeList
*
* XML Element
* -----------
*
* AST node:
* Name : XmlElement
* Extends : InnerNode.InnerNode2
* Implements : NamedXmlElement
* Constructor : "name, empty, xmlAttributes, body"
* NodeType : org.sweble.wikitext.lazy.AstNodeTypes.NT_XML_ELEMENT
*
* Properties:
* name : String
* empty : Boolean
*
* Children:
* xmlAttributes : NodeList
* body : NodeList
*
*/
module org.sweble.wikitext.lazy.parser.XmlElement;
import org.sweble.wikitext.lazy.utils.Whitespace as Whitespace;
import org.sweble.wikitext.lazy.utils.XmlName;
import org.sweble.wikitext.lazy.utils.XmlAttribute(Whitespace);
// -- XmlElement ---------------------------------------------------------------
AstNode XmlElement =
"" yyValue:XmlElementClose
/ '<' yyValue:XmlElementOpen
/ '<'
{
yyValue = new Text("<");
}
;
private inline AstNode XmlElementClose =
name:XmlName ws:pWsStar '>'
{
yyValue = new XmlElementClose(name);
if (isGatherRtData())
addRtData(yyValue, joinRt("", name, ws, '>'));
}
// FIXME: Add auto correction and/or warning generation
;
private inline AstNode XmlElementOpen =
name:XmlName attributes:AttributeStar ws:pWsStar "/>"
{
yyValue = new XmlElementEmpty(name, attributes);
if (isGatherRtData())
addRtData(yyValue,
joinRt("<", name),
joinRt(ws, "/>"));
}
/ name:XmlName attributes:AttributeStar ws:pWsStar '>'
{
yyValue = new XmlElementOpen(name, attributes);
if (isGatherRtData())
addRtData(yyValue,
joinRt('<', name),
joinRt(ws, '>'));
}
// FIXME: Add auto correction and/or warning generation
;
private inline NodeList AttributeStar =
yyValue:(&pWsPlus XmlAttributePlus)?
{
if (yyValue == null)
yyValue = new NodeList();
}
;
// -- End of file --------------------------------------------------------------