use of org.apache.xml.utils.FastStringBuffer in project nokogiri by sparklemotion.
the class DOM2DTMExt method getStringValue.
/**
* Get the string-value of a node as a String object
* (see http://www.w3.org/TR/xpath#data-model
* for the definition of a node's string-value).
*
* @param nodeHandle The node ID.
*
* @return A string object that represents the string-value of the given node.
*/
public XMLString getStringValue(int nodeHandle) {
int type = getNodeType(nodeHandle);
Node node = getNode(nodeHandle);
// directly.
if (DTM.ELEMENT_NODE == type || DTM.DOCUMENT_NODE == type || DTM.DOCUMENT_FRAGMENT_NODE == type) {
FastStringBuffer buf = StringBufferPool.get();
String s;
try {
getNodeData(node, buf);
s = (buf.length() > 0) ? buf.toString() : "";
} finally {
StringBufferPool.free(buf);
}
return m_xstrf.newstr(s);
} else if (TEXT_NODE == type || CDATA_SECTION_NODE == type) {
// If this is a DTM text node, it may be made of multiple DOM text
// nodes -- including navigating into Entity References. DOM2DTM
// records the first node in the sequence and requires that we
// pick up the others when we retrieve the DTM node's value.
//
// %REVIEW% DOM Level 3 is expected to add a "whole text"
// retrieval method which performs this function for us.
FastStringBuffer buf = StringBufferPool.get();
while (node != null) {
buf.append(node.getNodeValue());
node = logicalNextDOMTextNode(node);
}
String s = (buf.length() > 0) ? buf.toString() : "";
StringBufferPool.free(buf);
return m_xstrf.newstr(s);
} else
return m_xstrf.newstr(node.getNodeValue());
}
use of org.apache.xml.utils.FastStringBuffer in project nokogiri by sparklemotion.
the class DOM2DTMExt method getNodeValue.
/**
* Given a node handle, return its node value. This is mostly
* as defined by the DOM, but may ignore some conveniences.
* <p>
*
* @param nodeHandle The node id.
* @return String Value of this node, or null if not
* meaningful for this node type.
*/
public String getNodeValue(int nodeHandle) {
// The _type(nodeHandle) call was taking the lion's share of our
// time, and was wrong anyway since it wasn't coverting handle to
// identity. Inlined it.
int type = _exptype(makeNodeIdentity(nodeHandle));
type = (NULL != type) ? getNodeType(nodeHandle) : NULL;
if (TEXT_NODE != type && CDATA_SECTION_NODE != type)
return getNode(nodeHandle).getNodeValue();
// If this is a DTM text node, it may be made of multiple DOM text
// nodes -- including navigating into Entity References. DOM2DTM
// records the first node in the sequence and requires that we
// pick up the others when we retrieve the DTM node's value.
//
// %REVIEW% DOM Level 3 is expected to add a "whole text"
// retrieval method which performs this function for us.
Node node = getNode(nodeHandle);
Node n = logicalNextDOMTextNode(node);
if (n == null)
return node.getNodeValue();
FastStringBuffer buf = StringBufferPool.get();
buf.append(node.getNodeValue());
while (n != null) {
buf.append(n.getNodeValue());
n = logicalNextDOMTextNode(n);
}
String s = (buf.length() > 0) ? buf.toString() : "";
StringBufferPool.free(buf);
return s;
}
use of org.apache.xml.utils.FastStringBuffer in project nokogiri by sparklemotion.
the class DOM2DTMExt method isWhitespace.
/**
* Determine if the string-value of a node is whitespace
*
* @param nodeHandle The node Handle.
*
* @return Return true if the given node is whitespace.
*/
public boolean isWhitespace(int nodeHandle) {
int type = getNodeType(nodeHandle);
Node node = getNode(nodeHandle);
if (TEXT_NODE == type || CDATA_SECTION_NODE == type) {
// If this is a DTM text node, it may be made of multiple DOM text
// nodes -- including navigating into Entity References. DOM2DTM
// records the first node in the sequence and requires that we
// pick up the others when we retrieve the DTM node's value.
//
// %REVIEW% DOM Level 3 is expected to add a "whole text"
// retrieval method which performs this function for us.
FastStringBuffer buf = StringBufferPool.get();
while (node != null) {
buf.append(node.getNodeValue());
node = logicalNextDOMTextNode(node);
}
boolean b = buf.isWhitespace(0, buf.length());
StringBufferPool.free(buf);
return b;
}
return false;
}
use of org.apache.xml.utils.FastStringBuffer in project robovm by robovm.
the class XStringForFSB method indexOf.
/**
* Returns the index within this string of the first occurrence of the
* specified character, starting the search at the specified index.
* <p>
* If a character with value <code>ch</code> occurs in the character
* sequence represented by this <code>String</code> object at an index
* no smaller than <code>fromIndex</code>, then the index of the first
* such occurrence is returned--that is, the smallest value <i>k</i>
* such that:
* <blockquote><pre>
* (this.charAt(<i>k</i>) == ch) && (<i>k</i> >= fromIndex)
* </pre></blockquote>
* is true. If no such character occurs in this string at or after
* position <code>fromIndex</code>, then <code>-1</code> is returned.
* <p>
* There is no restriction on the value of <code>fromIndex</code>. If it
* is negative, it has the same effect as if it were zero: this entire
* string may be searched. If it is greater than the length of this
* string, it has the same effect as if it were equal to the length of
* this string: <code>-1</code> is returned.
*
* @param ch a character.
* @param fromIndex the index to start the search from.
* @return the index of the first occurrence of the character in the
* character sequence represented by this object that is greater
* than or equal to <code>fromIndex</code>, or <code>-1</code>
* if the character does not occur.
*/
public int indexOf(int ch, int fromIndex) {
int max = m_start + m_length;
FastStringBuffer fsb = fsb();
if (fromIndex < 0) {
fromIndex = 0;
} else if (fromIndex >= m_length) {
// Note: fromIndex might be near -1>>>1.
return -1;
}
for (int i = m_start + fromIndex; i < max; i++) {
if (fsb.charAt(i) == ch) {
return i - m_start;
}
}
return -1;
}
use of org.apache.xml.utils.FastStringBuffer in project robovm by robovm.
the class XStringForFSB method equals.
/**
* Compares this string to the specified object.
* The result is <code>true</code> if and only if the argument is not
* <code>null</code> and is a <code>String</code> object that represents
* the same sequence of characters as this object.
*
* @param obj2 the object to compare this <code>String</code>
* against.
*
* @return <code>true</code> if the <code>String </code>are equal;
* <code>false</code> otherwise.
* @see java.lang.String#compareTo(java.lang.String)
* @see java.lang.String#equalsIgnoreCase(java.lang.String)
*/
public boolean equals(XMLString obj2) {
if (this == obj2) {
return true;
}
int n = m_length;
if (n == obj2.length()) {
FastStringBuffer fsb = fsb();
int i = m_start;
int j = 0;
while (n-- != 0) {
if (fsb.charAt(i) != obj2.charAt(j)) {
return false;
}
i++;
j++;
}
return true;
}
return false;
}
Aggregations