All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sweble.wikitext.lazy.parser.XmlElement.rats Maven / Gradle / Ivy

There is a newer version: 3.1.9
Show newest version
/**
 * 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 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 = new XmlElementClose(name);

      if (isGatherRtData())
        addRtData(yyValue, joinRt("'));
    }
    // 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 --------------------------------------------------------------




© 2015 - 2024 Weber Informatics LLC | Privacy Policy