package org.itsnat.droid.impl.dommini;
import org.itsnat.droid.impl.util.MiscUtil;
import java.util.List;
/**
* Created by jmarranz on 10/02/2016.
*/
public class DOMMiniRender
{
public static String toString(DMNode[] nodeArray)
{
StringBuilder res = new StringBuilder();
for(DMNode node : nodeArray)
res.append(toString(node));
return res.toString();
}
private static String toString(DMNode node)
{
if (node instanceof DMElem)
{
return toStringDMElem((DMElem) node);
}
else if (node instanceof DMTextNode)
{
return toStringDMTextNode((DMTextNode) node);
}
else if (node instanceof DMCDSECTNode)
{
return toStringDMCDSECTNode((DMCDSECTNode) node);
}
else if (node instanceof DMEntityRefNode)
{
return toStringDMEntityRefNode((DMEntityRefNode) node);
}
throw MiscUtil.internalError();
}
private static String toStringDMElem(DMElem elem)
{
StringBuilder res = new StringBuilder();
res.append("<"); res.append(elem.getName());
List<DMAttr> attrList = elem.getDMAttrList();
if (attrList != null)
{
for(DMAttr attr : attrList)
{
res.append(' ');
res.append(attr.getName());
res.append('=');
res.append(attr.getValue());
}
}
List<DMNode> childList = elem.getChildDMNodeList();
if (childList != null)
{
res.append('>');
for(DMNode node : childList)
{
res.append(toString(node));
}
res.append("</"); res.append(elem.getName()); res.append('>');
}
else res.append("/>");
return res.toString();
}
private static String toStringDMTextNode(DMTextNode text)
{
return text.getText();
}
private static String toStringDMCDSECTNode(DMCDSECTNode node)
{
// Esto es lo que parece que hace Android con el XML compilado
String text = node.getText();
text = text.replaceAll("\n","");
text = text.replaceAll("\\s+", " ");
// return /*"<![CDATA[" + */ text.getText() /* + "]]>" */ ;
return text;
}
private static String toStringDMEntityRefNode(DMEntityRefNode node)
{
// Android no acepta entities con o a nivel de compilador aunque la clase android.text.Html lo soporte
return "&" + node.getEntityName() + ";";
// return node.getResolvedEntity();
/*
String entityName = node.getEntityName();
if ("lt".equals(entityName)) return "<";
else if ("gt".equals(entityName)) return ">";
else if ("amp".equals(entityName)) return "&";
else if (" ".equals(entityName)) return " ";
return node.getResolvedEntity(); // MAL
*/
}
}