// XmlUtil.java
package net.sf.gogui.util;
/** Static utility functions related to XML. */
public final class XmlUtil
{
/** Escape XML special characters for attribute values.
This assumes that the attribute will be quotes with ", it does
not escape '. Also strips invalid XML characters. */
public static String escapeAttr(String text)
{
int len = text.length();
StringBuilder result = new StringBuilder(len);
for (int i = 0; i < len; ++i)
{
char c = text.charAt(i);
if (isInvalidXml(c))
continue;
switch (c)
{
case '>':
result.append(">");
break;
case '<':
result.append("<");
break;
case '&':
result.append("&");
break;
case '"':
result.append(""");
break;
default:
result.append(c);
}
}
return result.toString();
}
/** Escape XML special characters for text content.
Also strips invalid XML characters. */
public static String escapeText(String text)
{
int len = text.length();
StringBuilder result = new StringBuilder(len);
for (int i = 0; i < len; ++i)
{
char c = text.charAt(i);
if (isInvalidXml(c))
continue;
switch (c)
{
case '>':
result.append(">");
break;
case '<':
result.append("<");
break;
case '&':
result.append("&");
break;
default:
result.append(c);
}
}
return result.toString();
}
/** Make constructor unavailable; class is for namespace only. */
private XmlUtil()
{
}
/** See http://www.w3.org/TR/2000/REC-xml-20001006#NT-Char */
private static boolean isInvalidXml(char c)
{
return ! (c == 0x9 || c == 0xA || c == 0xD
|| (c >= 0x20 && c <= 0xD7FF)
|| (c >= 0xE000 && c <= 0xFFFD)
|| (c >= 0x10000 && c <= 0x10FFFF));
}
}