package com.marshalchen.common.uimodule.shapeimageview.path.parser;
import android.util.Log;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.util.HashMap;
import java.util.Stack;
@SuppressWarnings("StatementWithEmptyBody")
class IdHandler {
private static final String TAG = SvgToPath.TAG;
final HashMap<String, String> idXml = new HashMap<String, String>();
private final Stack<IdRecording> idRecordingStack = new Stack<IdRecording>();
private final XmlPullParser atts;
IdHandler(XmlPullParser atts) {
this.atts = atts;
}
class IdRecording {
final String id;
int level;
final StringBuilder sb;
public IdRecording (String id) {
this.id = id;
this.level = 0;
this.sb = new StringBuilder();
}
}
public void processIds() throws XmlPullParserException, IOException {
int eventType = atts.getEventType();
do {
if(eventType == XmlPullParser.START_DOCUMENT) {
// no op
} else if(eventType == XmlPullParser.END_DOCUMENT) {
// no op
} else if(eventType == XmlPullParser.START_TAG) {
startElement();
} else if(eventType == XmlPullParser.END_TAG) {
endElement();
} else if(eventType == XmlPullParser.TEXT) {
// not implemented
}
eventType = atts.next();
} while (eventType != XmlPullParser.END_DOCUMENT);
}
private void appendElementString(StringBuilder sb, String localName, XmlPullParser atts) {
sb.append("<");
sb.append(localName);
for (int i = 0; i < atts.getAttributeCount(); i++) {
sb.append(" ");
sb.append(atts.getAttributeName(i));
sb.append("='");
sb.append(ParseUtil.escape(atts.getAttributeValue(i)));
sb.append("'");
}
sb.append(">");
}
void startElement() {
String localName = atts.getName();
String id = ParseUtil.getStringAttr("id", atts);
if (id != null) {
IdRecording ir = new IdRecording(id);
idRecordingStack.push(ir);
}
if (idRecordingStack.size() > 0){
IdRecording ir = idRecordingStack.lastElement();
ir.level++;
//appendElementString(ir.sb, atts.getNamespace(), localName, atts.getName(), atts);
appendElementString(ir.sb, localName, atts);
}
}
void endElement() {
String localName = atts.getName();
if (idRecordingStack.size() > 0){
IdRecording ir = idRecordingStack.lastElement();
ir.sb.append("</");
ir.sb.append(localName);
ir.sb.append(">");
ir.level--;
if (ir.level == 0) {
String xml = ir.sb.toString();
//Log.d(TAG, "Added element with id " + ir.id + " and content: " + xml);
idXml.put(ir.id, xml);
idRecordingStack.pop();
if (idRecordingStack.size() > 0){
idRecordingStack.lastElement().sb.append(xml);
}
Log.w(TAG, xml);
}
}
}
}