/*
* reserved comment block
* DO NOT REMOVE OR ALTER!
*/
/*
* Copyright 1999-2002,2004 The Apache Software Foundation.
*
* 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
*
*
* 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.
*/
/**
* Text nodes hold the non-markup, non-Entity content of
* an Element or Attribute.
* <P>
* When a document is first made available to the DOM, there is only
* one Text object for each block of adjacent plain-text. Users (ie,
* applications) may create multiple adjacent Texts during editing --
* see {@link org.w3c.dom.Element#normalize} for discussion.
* <P>
* Note that CDATASection is a subclass of Text. This is conceptually
* valid, since they're really just two different ways of quoting
* characters when they're written out as part of an XML stream.
*
* @xerces.internal
*
* @since PR-DOM-Level-1-19980818.
*/
public class TextImpl
extends CharacterDataImpl
implements CharacterData, Text {
//
// Private Data members
//
//
// Constants
//
/** Serialization version. */
//
// Constructors
//
/** Default constructor */
public TextImpl(){}
/** Factory constructor. */
}
/**
* NON-DOM: resets node and sets specified values for the current node
*
* @param ownerDoc
* @param data
*/
flags=0;
nextSibling = null;
}
//
// Node methods
//
/**
* A short integer indicating what type of node this is. The named
* constants for this value are defined in the org.w3c.dom.Node interface.
*/
public short getNodeType() {
}
/** Returns the node name. */
return "#text";
}
/**
* NON-DOM: Set whether this Text is ignorable whitespace.
*/
if (needsSyncData()) {
}
} // setIgnorableWhitespace(boolean)
/**
* DOM L3 Core CR - Experimental
*
* Returns whether this text node contains
* element content whitespace</a>, 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
* <code>Document.normalizeDocument()</code>.
* @since DOM Level 3
*/
public boolean isElementContentWhitespace() {
// REVISIT: is this implemenation correct?
if (needsSyncData()) {
}
return internalIsIgnorableWhitespace();
}
/**
* DOM Level 3 WD - Experimental.
* Returns all text of <code>Text</code> nodes logically-adjacent text
* nodes to this node, concatenated in document order.
* @since DOM Level 3
*/
if (needsSyncData()) {
}
if (fBufferStr == null){
fBufferStr = new StringBuffer();
}
else {
}
}
//concatenate text of logically adjacent text nodes to the left of this node in the tree
//clear buffer
//concatenate text of logically adjacent text nodes to the right of this node in the tree
}
/**
* internal method taking a StringBuffer in parameter and inserts the
* text content at the start of the buffer
*
* @param buf
*/
}
}
/**
* Concatenates the text of all logically-adjacent text nodes to the
* right of this node
* @param node
* @param buffer
* @param parent
* @return true - if execution was stopped because the type of node
* other than EntityRef, Text, CDATA is encountered, otherwise
* return false
*/
// boolean to indicate whether node is a child of an entity reference
boolean inEntRef = false;
}
return true;
}
}
}
else {
return true;
}
}
// if the parent node is an entity reference node, must
// check nodes to the right of the parent entity reference node for logically adjacent
// text nodes
if (inEntRef) {
return true;
}
return false;
}
/**
* Concatenates the text of all logically-adjacent text nodes to the left of
* the node
* @param node
* @param buffer
* @param parent
* @return true - if execution was stopped because the type of node
* other than EntityRef, Text, CDATA is encountered, otherwise
* return false
*/
// boolean to indicate whether node is a child of an entity reference
boolean inEntRef = false;
}
return true;
}
}
}
else {
return true;
}
}
// if the parent node is an entity reference node, must
// check nodes to the left of the parent entity reference node for logically adjacent
// text nodes
if (inEntRef) {
return true;
}
return false;
}
/**
* 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.
*
* @param content
* The content of the replacing Text node.
* @return text - The Text node created with the specified content.
* @since DOM Level 3
*/
if (needsSyncData()) {
}
//if the content is null
// remove current node
parent.removeChild(this);
}
return null;
}
// make sure we can make the replacement
if (ownerDocument().errorChecking) {
if (!canModifyPrev(this)) {
"NO_MODIFICATION_ALLOWED_ERR", null));
}
// make sure we can make the replacement
if (!canModifyNext(this)) {
"NO_MODIFICATION_ALLOWED_ERR", null));
}
}
//replace the text node
if (isReadOnly()) {
parent.removeChild(this);
} else {
return newNode;
}
} else {
currentNode = this;
}
//check logically-adjacent text nodes
//If the logically-adjacent next node can be removed
//remove it. A logically adjacent node can be removed if
//it is a Text or CDATASection node or an EntityReference with
//Text and CDATA only children.
prev = currentNode;
} else {
break;
}
}
//check logically-adjacent text nodes
//If the logically-adjacent next node can be removed
//remove it. A logically adjacent node can be removed if
//it is a Text or CDATASection node or an EntityReference with
//Text and CDATA only children.
next = currentNode;
} else {
break;
}
}
return currentNode;
}
/**
* 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. Traverse previous
* siblings of the node to be replaced. If a previous sibling is an
* EntityReference node, get it's last child. If the last child was a Text
* or CDATASection node and its previous siblings are neither a replaceable
* EntityReference or Text or CDATASection nodes, return false. IF the last
* child was neither Text nor CDATASection nor a replaceable EntityReference
* Node, then return true. If the last child was a Text or CDATASection node
* any its previous sibling was not or was an EntityReference that did not
* contain only Text or CDATASection nodes, return false. Check this
* recursively for EntityReference nodes.
*
* @param node
* @return true - can replace text false - can't replace exception must be
* raised
*/
boolean textLastChild = false;
//If the previous sibling was entityreference
//check if its content is replaceable
//if the entity reference has no children
//return false
return false;
}
//The replacement text of the entity reference should
//be either only text,cadatsections or replaceable entity
//reference nodes or the last child should be neither of these
textLastChild = true;
if (!canModifyPrev(lastChild)) {
return false;
} else {
//If the EntityReference child contains
//only text, or non-text or ends with a
//non-text node.
textLastChild = true;
}
} else {
//If the last child was replaceable and others are not
//Text or CDataSection or replaceable EntityRef nodes
//return false.
if (textLastChild) {
return false;
} else {
return true;
}
}
}
//If the previous sibling was text or cdatasection move to next
} else {
//If the previous sibling was anything but text or
//cdatasection or an entity reference, stop search and
//return true
return true;
}
}
return true;
}
/**
* 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. Traverse previous
* siblings of the node to be replaced. If a previous sibling is an
* EntityReference node, get it's last child. If the first child was a Text
* or CDATASection node and its next siblings are neither a replaceable
* EntityReference or Text or CDATASection nodes, return false. IF the first
* child was neither Text nor CDATASection nor a replaceable EntityReference
* Node, then return true. If the first child was a Text or CDATASection
* node any its next sibling was not or was an EntityReference that did not
* contain only Text or CDATASection nodes, return false. Check this
* recursively for EntityReference nodes.
*
* @param node
* @return true - can replace text false - can't replace exception must be
* raised
*/
boolean textFirstChild = false;
//If the previous sibling was entityreference
//check if its content is replaceable
//if the entity reference has no children
//return false
if (firstChild == null) {
return false;
}
//The replacement text of the entity reference should
//be either only text,cadatsections or replaceable entity
//reference nodes or the last child should be neither of these
while (firstChild != null) {
textFirstChild = true;
if (!canModifyNext(firstChild)) {
return false;
} else {
//If the EntityReference child contains
//only text, or non-text or ends with a
//non-text node.
textFirstChild = true;
}
} else {
//If the first child was replaceable text and next
//children are not, then return false
if (textFirstChild) {
return false;
} else {
return true;
}
}
}
//If the previous sibling was text or cdatasection move to next
} else {
//If the next sibling was anything but text or
//cdatasection or an entity reference, stop search and
//return true
return true;
}
}
return true;
}
/**
* Check if an EntityReference node has Text Only child nodes
*
* @param node
* @return true - Contains text only children
*/
return false;
}
return hasTextOnlyChildren(child);
}
return false;
}
}
return true;
}
/**
* NON-DOM: Returns whether this Text is ignorable whitespace.
*/
public boolean isIgnorableWhitespace() {
if (needsSyncData()) {
}
return internalIsIgnorableWhitespace();
} // isIgnorableWhitespace():boolean
//
// Text methods
//
/**
* Break a text node into two sibling nodes. (Note that if the current node
* has no parent, they won't wind up as "siblings" -- they'll both be
* orphans.)
*
* @param offset
* The offset at which to split. If offset is at the end of the
* available data, the second node will be empty.
*
* @return A reference to the new node (containing data after the offset
* point). The original node will contain data up to that point.
*
* @throws DOMException(INDEX_SIZE_ERR)
* if offset is <0 or >length.
*
* @throws DOMException(NO_MODIFICATION_ALLOWED_ERR)
* if node is read-only.
*/
throws DOMException {
if (isReadOnly()) {
throw new DOMException(
DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "NO_MODIFICATION_ALLOWED_ERR", null));
}
if (needsSyncData()) {
}
}
// split text into two separate nodes
// insert new text node
if (parentNode != null) {
}
return newText;
} // splitText(int):Text
/**
* NON-DOM (used by DOMParser): Reset data for the node.
*/
}
/**
* NON-DOM (used by DOMParser: Sets data to empty string.
* Returns the value the data was set to.
*/
data = "";
return olddata;
}
} // class TextImpl