package jp.aonir.fuzzyxml.internal;
import jp.aonir.fuzzyxml.FuzzyXMLNode;
import jp.aonir.fuzzyxml.FuzzyXMLText;
public class FuzzyXMLTextImpl extends AbstractFuzzyXMLNode implements FuzzyXMLText {
private String _value;
private boolean _escape = true;
public FuzzyXMLTextImpl(String value) {
this(null, value, -1, -1);
}
public FuzzyXMLTextImpl(FuzzyXMLNode parent, String value, int offset, int length) {
super(parent, offset, length);
this._value = value;
}
public String getValue() {
if (getDocument() == null) {
return FuzzyXMLUtil.decode(_value, false);
}
return FuzzyXMLUtil.decode(_value, getDocument().isHTML());
}
public String toDebugString() {
StringBuffer sb = new StringBuffer();
toDebugString(sb, 0);
return sb.toString();
}
public void toDebugString(StringBuffer buffer, int indent) {
for (int i = 0; i < indent; i ++) {
buffer.append(" ");
}
buffer.append("text: '" + _value + "'\n");
}
public void toXMLString(RenderContext renderContext, StringBuffer xmlBuffer) {
String value = _value;
if (renderContext.isTrim()) {
if (value.trim().length() == 0) {
return;
}
value = value.replaceFirst("[\r\n\t ]+$", " ");
String replace = "";
if (xmlBuffer.length() >= 1 && !Character.isWhitespace(xmlBuffer.charAt(xmlBuffer.length()-1))) {
replace = " ";
}
value = value.replaceFirst("^[\r\n\t ]+", replace);
}
if (_escape) {
boolean isHTML = renderContext.isHtml();
value = FuzzyXMLUtil.escape(value, isHTML);
}
xmlBuffer.append(value);
}
@Override
public String toString() {
return "text: " + getValue();
}
public void setEscape(boolean escape) {
this._escape = escape;
}
public boolean isEscape() {
return this._escape;
}
@Override
public boolean isNonBreaking() {
if (isHidden())
return false;
String value = getValue();//.trim();
boolean result = FuzzyXMLUtil.isAllWhitescape(value) || FuzzyXMLUtil.getSpaceIndex(value) == -1;
// System.out.println(result?"Non breaking " +this:" Breaking " +this);
return result;
}
@Override
public boolean isHidden() {
boolean result = _value == null || (FuzzyXMLUtil.isAllWhitescape(_value));
return result;
}
@Override
public boolean hasLineBreaks() {
return _value != null && _value.trim().contains("\n");
}
}