* @return a PacketExtension.
* @throws Exception if a parsing error occurs.
*/
public PacketExtension parseExtension(XmlPullParser parser)
throws Exception {
XHTMLExtension xhtmlExtension = new XHTMLExtension();
boolean done = false;
StringBuilder buffer = new StringBuilder();
int startDepth = parser.getDepth();
int depth = parser.getDepth();
String lastTag = "";
while (!done) {
int eventType = parser.next();
if (eventType == XmlPullParser.START_TAG) {
if (parser.getName().equals("body")) {
buffer = new StringBuilder();
depth = parser.getDepth();
}
lastTag = parser.getText();
buffer.append(parser.getText());
} else if (eventType == XmlPullParser.TEXT) {
if (buffer != null) {
// We need to return valid XML so any inner text needs to be re-escaped
buffer.append(StringUtils.escapeForXML(parser.getText()));
}
} else if (eventType == XmlPullParser.END_TAG) {
if (parser.getName().equals("body") && parser.getDepth() <= depth) {
buffer.append(parser.getText());
xhtmlExtension.addBody(buffer.toString());
}
else if (parser.getName().equals(xhtmlExtension.getElementName())
&& parser.getDepth() <= startDepth) {
done = true;
}
else {
// This is a check for tags that are both a start and end tag like <br/>