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

net.sf.saxon.dom.TextOverNodeInfo Maven / Gradle / Ivy

There is a newer version: 12.5
Show newest version
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2018-2023 Saxonica Limited
// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
// If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
// This Source Code Form is "Incompatible With Secondary Licenses", as defined by the Mozilla Public License, v. 2.0.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

package net.sf.saxon.dom;

import net.sf.saxon.om.NodeInfo;
import net.sf.saxon.type.ComplexType;
import net.sf.saxon.type.SchemaType;
import net.sf.saxon.type.Type;
import net.sf.saxon.value.Whitespace;
import org.w3c.dom.Comment;
import org.w3c.dom.DOMException;
import org.w3c.dom.Text;

/**
 * This class is an implementation of the DOM Text and Comment interfaces that wraps a Saxon NodeInfo
 * representation of a text or comment node.
 */

public class TextOverNodeInfo extends NodeOverNodeInfo implements Text, Comment {


    /**
     * Get the character data of a Text or Comment node.
     * DOM method.
     */

    @Override
    public String getData() {
        return node.getStringValue();
    }

    /**
     * Set the character data of a Text or Comment node.
     * DOM method: always fails, Saxon tree is immutable.
     */

    @Override
    public void setData(String data) throws DOMException {
        disallowUpdate();
    }

    /**
     * Get the length of a Text or Comment node.
     * DOM method.
     */

    @Override
    public int getLength() {
        return node.getStringValue().length();
    }

    /**
     * Extract a range of data from a Text or Comment node. DOM method.
     *
     * @param offset Start offset of substring to extract.
     * @param count  The number of 16-bit units to extract.
     * @return The specified substring. If the sum of offset and
     *         count exceeds the length , then all 16-bit
     *         units to the end of the data are returned.
     * @throws org.w3c.dom.DOMException INDEX_SIZE_ERR: Raised if the specified offset is
     *                                  negative or greater than the number of 16-bit units in
     *                                  data , or if the specified count is
     *                                  negative.
     */

    @Override
    public String substringData(int offset, int count) throws DOMException {
        try {
            return node.getStringValue().substring(offset, offset + count);
        } catch (IndexOutOfBoundsException err2) {
            throw new DOMExceptionImpl(DOMException.INDEX_SIZE_ERR,
                    "substringData: index out of bounds");
        }
    }

    /**
     * Append the string to the end of the character data of the node.
     * DOM method: always fails.
     *
     * @param arg The DOMString to append.
     * @throws org.w3c.dom.DOMException NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
     */

    @Override
    public void appendData(String arg) throws DOMException {
        disallowUpdate();
    }

    /**
     * Insert a string at the specified character offset.
     * DOM method: always fails.
     *
     * @param offset The character offset at which to insert.
     * @param arg    The DOMString to insert.
     * @throws UnsupportedOperationException always
     */

    @Override
    public void insertData(int offset, String arg) throws DOMException {
        disallowUpdate();
    }

    /**
     * Remove a range of 16-bit units from the node.
     * DOM method: always fails.
     *
     * @param offset The offset from which to start removing.
     * @param count  The number of 16-bit units to delete.
     * @throws UnsupportedOperationException always
     */

    @Override
    public void deleteData(int offset, int count) throws DOMException {
        disallowUpdate();
    }

    /**
     * Replace the characters starting at the specified 16-bit unit offset
     * with the specified string. DOM method: always fails.
     *
     * @param offset The offset from which to start replacing.
     * @param count  The number of 16-bit units to replace.
     * @param arg    The DOMString with which the range must be
     *               replaced.
     * @throws org.w3c.dom.DOMException NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
     */

    @Override
    public void replaceData(int offset,
                            int count,
                            String arg) throws DOMException {
        disallowUpdate();
    }


    /**
     * Break this node into two nodes at the specified offset,
     * keeping both in the tree as siblings. DOM method, always fails.
     *
     * @param offset The 16-bit unit offset at which to split, starting from 0.
     * @return The new node, of the same type as this node.
     * @throws org.w3c.dom.DOMException always (the DOM is read-only)
     */

    @Override
    public Text splitText(int offset) throws DOMException {
        disallowUpdate();
        return null;
    }

    /**
     * Replaces the text of the current node and all logically-adjacent text
     * nodes with the specified text. All logically-adjacent text nodes are
     * removed including the current node unless it was the recipient of the
     * replacement text.
     * 
This method returns the node which received the replacement text. * The returned node is: *
    *
  • null, when the replacement text is * the empty string; *
  • *
  • the current node, except when the current node is * read-only; *
  • *
  • a new Text node of the same type ( * Text or CDATASection) as the current node * inserted at the location of the replacement. *
  • *
*
For instance, in the above example calling * replaceWholeText on the Text node that * contains "bar" with "yo" in argument results in the following: *
Where the nodes to be removed are read-only descendants of an * EntityReference, the EntityReference must * be removed instead of the read-only nodes. If any * EntityReference to be removed has descendants that are * not EntityReference, Text, or * CDATASection nodes, the replaceWholeText * method must fail before performing any modification of the document, * raising a DOMException with the code * NO_MODIFICATION_ALLOWED_ERR. *
For instance, in the example below calling * replaceWholeText on the Text node that * contains "bar" fails, because the EntityReference node * "ent" contains an Element node which cannot be removed. * * @param content The content of the replacing Text node. * @return The Text node created with the specified content. * @throws org.w3c.dom.DOMException NO_MODIFICATION_ALLOWED_ERR: Raised if one of the Text * nodes being replaced is readonly. * @since DOM Level 3 */ /*@Nullable*/ @Override public Text replaceWholeText(String content) throws DOMException { disallowUpdate(); return null; } /** * Returns whether this text node contains * element content whitespace, often abusively called "ignorable whitespace". The text node is * determined to contain whitespace in element content during the load * of the document or if validation occurs while using * Document.normalizeDocument(). * * @since DOM Level 3 */ @Override public boolean isElementContentWhitespace() { if (node.getNodeKind() != Type.TEXT) { throw new UnsupportedOperationException("Method is defined only on text nodes"); } if (!Whitespace.isAllWhite(node.getUnicodeStringValue())) { return false; } NodeInfo parent = node.getParent(); if (parent == null) { return false; } SchemaType type = parent.getSchemaType(); return type.isComplexType() && !((ComplexType) type).isMixedContent(); } /** * Returns all text of Text nodes logically-adjacent text * nodes to this node, concatenated in document order. *
For instance, in the example below wholeText on the * Text node that contains "bar" returns "barfoo", while on * the Text node that contains "foo" it returns "barfoo". * * @since DOM Level 3 */ @Override public String getWholeText() { if (node.getNodeKind() != Type.TEXT) { throw new UnsupportedOperationException("Method is defined only on text nodes"); } return node.getStringValue(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy