package jp.aonir.fuzzyxml.internal; import org.objectstyle.wolips.wodclipse.core.util.WodHtmlUtils; import jp.aonir.fuzzyxml.FuzzyXMLComment; import jp.aonir.fuzzyxml.FuzzyXMLElement; import jp.aonir.fuzzyxml.FuzzyXMLFormat; import jp.aonir.fuzzyxml.FuzzyXMLNode; import jp.aonir.fuzzyxml.FuzzyXMLText; public class FuzzyXMLFormatComposite implements FuzzyXMLNode, FuzzyXMLFormat { private final FuzzyXMLNode delegate; public FuzzyXMLFormatComposite(FuzzyXMLNode node) { delegate = unwrap(node); } public boolean isNonBreaking() { return isNonBreaking(delegate); } public boolean isBreaking() { return isBreaking(delegate); } public boolean isHidden() { return isHidden(delegate); } public boolean hasCloseTag() { if (delegate != null) { return hasCloseTag(delegate); } return false; } public FuzzyXMLNode getDelegate() { return delegate; } public int getLength() { if (delegate != null) { return getLength(); } return 0; } public int getOffset() { if (delegate != null) { return delegate.getOffset(); } return 0; } public FuzzyXMLFormatComposite getParentNode() { if (delegate != null) { return new FuzzyXMLFormatComposite(delegate.getParentNode()); } return null; } public FuzzyXMLFormatComposite parentNode() { return getParentNode(); } 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("formatComposite: " + delegate + "\n"); } public String toXMLString(RenderContext renderContext) { if (delegate != null) { return delegate.toXMLString(renderContext); } return ""; } public void toXMLString(RenderContext renderContext, StringBuffer xmlBuffer) { if (delegate != null) { delegate.toXMLString(renderContext, xmlBuffer); } } public boolean isText() { return isText(delegate); } public boolean isElement() { return isElement(delegate); } public boolean hasNonBreakingStart() { return hasNonBreakingStart(delegate); } public boolean hasBreakingStart() { return hasBreakingStart(delegate); } public boolean hasNonBreakingEnd() { return hasNonBreakingEnd(delegate); } public boolean hasBreakingEnd() { return hasBreakingEnd(delegate); } public boolean isMultiLine() { return isMultiLine(delegate); } public boolean hasLineBreaks() { return hasLineBreaks(delegate); } public boolean isCode() { return isCode(delegate); } public boolean isComment() { return isComment(delegate); } public String getValue() { return getValue(delegate); } public String getName() { return getName(delegate); } @Override public String toString() { if (delegate != null) { return delegate.toString(); } return ""; } public boolean isWOTag() { return isWOTag(delegate); } public boolean isDocumentRoot() { return isDocumentRoot(delegate); } public boolean hasChildren() { return hasChildren(delegate); } public boolean isScript() { return isScript(delegate); } public boolean isStyle() { return isStyle(delegate); } public boolean isSelfClosing() { return isSelfClosing(delegate); } /** Utility methods **/ public static boolean isNonBreaking(FuzzyXMLNode node) { FuzzyXMLNode _node = unwrap(node); return (_node instanceof FuzzyXMLFormat && ((FuzzyXMLFormat)_node).isNonBreaking()); } public static boolean isBreaking(FuzzyXMLNode node) { return !isNonBreaking(node); } public static boolean isHidden(FuzzyXMLNode node) { FuzzyXMLNode _node = unwrap(node); return (_node instanceof FuzzyXMLFormat && ((FuzzyXMLFormat)_node).isHidden()); } public static boolean hasNonBreakingStart(String value) { if (value == null || value.equals("")) { return true; } return !(Character.isWhitespace(value.charAt(0))); } public static boolean hasBreakingStart(String value) { return !hasNonBreakingStart(value); } public static boolean hasNonBreakingEnd(String value) { if (value == null || value.equals("")) { return true; } return !(Character.isWhitespace(value.charAt(value.length()-1))); } public static boolean hasBreakingEnd(String value) { return !hasNonBreakingEnd(value); } public static boolean hasNonBreakingEnd(FuzzyXMLNode node) { if (unwrap(node) instanceof FuzzyXMLComment) { return true; } return hasNonBreakingEnd(getValue(node)); } public static boolean hasBreakingEnd(FuzzyXMLNode node) { return !hasNonBreakingEnd(node); } public static boolean hasNonBreakingStart(FuzzyXMLNode node) { if (unwrap(node) instanceof FuzzyXMLComment) { return true; } return hasNonBreakingStart(getValue(node)); } public static boolean hasBreakingStart(FuzzyXMLNode node) { return !hasNonBreakingStart(node); } public static boolean isElement(FuzzyXMLNode node) { return unwrap(node) instanceof FuzzyXMLElement; } public static boolean isText(FuzzyXMLNode node) { return unwrap(node) instanceof FuzzyXMLText; } public static boolean hasCloseTag(FuzzyXMLNode node) { FuzzyXMLNode _node = unwrap(node); return (_node instanceof FuzzyXMLElement && ((FuzzyXMLElement)_node).hasCloseTag()); } public static boolean isMultiLine(FuzzyXMLNode node) { return getValue(node).contains("\n"); } public static boolean hasLineBreaks(FuzzyXMLNode node) { FuzzyXMLNode _node = unwrap(node); if (_node instanceof FuzzyXMLText) { return ((FuzzyXMLText)_node).hasLineBreaks(); } return getValue(_node).contains("\n"); } public static boolean isCode(FuzzyXMLNode node) { return (isScript(node.getParentNode()) || isStyle(node.getParentNode())); } public static boolean isComment(FuzzyXMLNode node) { return unwrap(node) instanceof FuzzyXMLComment; } public static String getValue(FuzzyXMLNode node) { FuzzyXMLNode _node = unwrap(node); if (_node instanceof FuzzyXMLText) { return ((FuzzyXMLText)_node).getValue(); } if (_node instanceof FuzzyXMLComment) { return ((FuzzyXMLComment)_node).getValue(); } return ""; } public static String getName(FuzzyXMLNode node) { FuzzyXMLNode _node = unwrap(node); if (_node instanceof FuzzyXMLElement) { return ((FuzzyXMLElement)_node).getName(); } return ""; } public static boolean isWOTag(FuzzyXMLNode node) { FuzzyXMLNode _node = unwrap(node); return (_node instanceof FuzzyXMLElement && WodHtmlUtils.isWOTag(getName(_node).toLowerCase())); } public static boolean isDocumentRoot(FuzzyXMLNode node) { FuzzyXMLNode _node = unwrap(node); return (_node instanceof FuzzyXMLElement && _node.getParentNode() == null); } public static boolean hasChildren(FuzzyXMLNode node) { FuzzyXMLNode _node = unwrap(node); return (_node instanceof FuzzyXMLElement && ((FuzzyXMLElement)_node).hasChildren()); } public static FuzzyXMLNode[] getChildren(FuzzyXMLNode node) { FuzzyXMLNode _node = unwrap(node); if (_node instanceof FuzzyXMLElement) { return ((FuzzyXMLElement)_node).getChildren(); } return null; } public static boolean isStyle(FuzzyXMLNode node) { return "style".equalsIgnoreCase(getName(node)); } public static boolean isScript(FuzzyXMLNode node) { return "script".equalsIgnoreCase(getName(node)); } public static FuzzyXMLNode unwrap(FuzzyXMLNode node) { if (node instanceof FuzzyXMLFormatComposite) { return ((FuzzyXMLFormatComposite)node).getDelegate(); } return node; } public static FuzzyXMLFormatComposite wrap(FuzzyXMLNode node) { if (node instanceof FuzzyXMLFormatComposite) { return (FuzzyXMLFormatComposite)node; } return new FuzzyXMLFormatComposite(node); } public static boolean isSelfClosing(FuzzyXMLNode node) { if (unwrap(node) instanceof FuzzyXMLElement) { return FuzzyXMLElementImpl.isSelfClosing((FuzzyXMLElement)unwrap(node)); } return false; } public boolean isSynthetic() { FuzzyXMLNode _node = unwrap(delegate); return _node.isSynthetic(); } }