/** * Copyright (C) 2016-2019 Michael Kourlas * * 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. */ import { IStringOptions } from "../options"; import { default as XmlAttribute, IXmlAttributeOptions as IXmlAttributeOptions } from "./XmlAttribute"; import XmlCdata, { IXmlCdataOptions } from "./XmlCdata"; import XmlCharData, { IXmlCharDataOptions } from "./XmlCharData"; import XmlCharRef, { IXmlCharRefOptions } from "./XmlCharRef"; import XmlComment, { IXmlCommentOptions } from "./XmlComment"; import XmlEntityRef, { IXmlEntityRefOptions } from "./XmlEntityRef"; import XmlProcInst, { IXmlProcInstOptions } from "./XmlProcInst"; /** * The options used to create a new element. */ export interface IXmlElementOptions { /** * The name of the element. */ name: string; /** * Whether to replace any invalid characters in the name of the element * with the Unicode replacement character. By default, this is disabled. */ replaceInvalidCharsInName?: boolean; /** * Whether to use a self-closing tag if this element is empty. * * For example, use: * ```xml * * ``` * instead of: * ```xml * * ``` * * By default, this is enabled. */ useSelfClosingTagIfEmpty?: boolean; } /** * Represents an XML element. * * A sample element is structured as follows, where `{name}` is the name * of the element: * * ```xml * <{name} attname="attvalue"> * * * text * * ``` * * XML elements can have an unlimited number of attributes, CDATA sections, * character references, comments, elements, entity references, processing * instructions, and character data. * * An element with no content will be represented using an empty element tag: * * ```xml * <{name}/> * ``` */ export default class XmlElement { private readonly _validation; private readonly _children; private readonly _attributeNames; private readonly _parent; private readonly _replaceInvalidCharsInName; private readonly _useSelfClosingTagIfEmpty; private _name; constructor(parent: Parent, validation: boolean, options: IXmlElementOptions); /** * Gets the name of this element. */ get name(): string; /** * Sets the name of this element. */ set name(name: string); /** * Adds an attribute to this element and returns the new attribute. */ attribute(options: IXmlAttributeOptions): XmlAttribute; /** * Adds a CDATA section to this element and returns the new CDATA section. */ cdata(options: IXmlCdataOptions): XmlCdata; /** * Adds character data to this element and returns the new character data. */ charData(options: IXmlCharDataOptions): XmlCharData; /** * Adds a character reference to this element and returns the new * character reference. */ charRef(options: IXmlCharRefOptions): XmlCharRef; /** * Adds a comment to this element and returns the new comment. */ comment(options: IXmlCommentOptions): XmlComment; /** * Adds an element to this element and returns the new element. */ element(options: IXmlElementOptions): XmlElement; /** * Adds an entity reference to this element and returns the new entity * reference. */ entityRef(options: IXmlEntityRefOptions): XmlEntityRef; /** * Adds a processing instruction to this element and returns the new * processing instruction. */ procInst(options: IXmlProcInstOptions): XmlProcInst; /** * Returns an XML string representation of this element using the specified * options. */ toString(options?: IStringOptions): string; /** * Returns the parent of this element. */ up(): Parent; /** * Returns an XML string representation of this element using the specified * options and initial indent. */ private toStringWithIndent; /** * Returns true if the specified nodes are all character references, * entity references, or character data. */ private allSameLineNodes; /** * Returns true if the specified nodes are all character references, * entity references, or character data. */ private onSameLine; }