| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 | /** * 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     * <element/>     * ```     * instead of:     * ```xml     * <element></element>     * ```     *     * 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"> *     <subelem/> *     <?pitarget picontent?> *     text * </{name}></pre> * ``` * * 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<Parent> {    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<this>;    /**     * Adds a CDATA section to this element and returns the new CDATA section.     */    cdata(options: IXmlCdataOptions): XmlCdata<this>;    /**     * Adds character data to this element and returns the new character data.     */    charData(options: IXmlCharDataOptions): XmlCharData<this>;    /**     * Adds a character reference to this element and returns the new     * character reference.     */    charRef(options: IXmlCharRefOptions): XmlCharRef<this>;    /**     * Adds a comment to this element and returns the new comment.     */    comment(options: IXmlCommentOptions): XmlComment<this>;    /**     * Adds an element to this element and returns the new element.     */    element(options: IXmlElementOptions): XmlElement<this>;    /**     * Adds an entity reference to this element and returns the new entity     * reference.     */    entityRef(options: IXmlEntityRefOptions): XmlEntityRef<this>;    /**     * Adds a processing instruction to this element and returns the new     * processing instruction.     */    procInst(options: IXmlProcInstOptions): XmlProcInst<this>;    /**     * 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;}
 |