fix styled string parser

This commit is contained in:
REAndroid 2023-05-07 21:19:08 +02:00
parent f49799a02d
commit f0747a6b4f
2 changed files with 26 additions and 7 deletions

View File

@ -47,7 +47,7 @@ public class XMLDecodeHelper {
public static void writeParsedSpannable(EntryWriter<?> writer, XMLElement spannableParent) throws IOException { public static void writeParsedSpannable(EntryWriter<?> writer, XMLElement spannableParent) throws IOException {
for(XMLNode xmlNode : spannableParent.getChildNodes()){ for(XMLNode xmlNode : spannableParent.getChildNodes()){
if(xmlNode instanceof XMLText){ if(xmlNode instanceof XMLText){
String text = ((XMLText)xmlNode).getText(false); String text = ((XMLText)xmlNode).getText(true);
writer.enableIndent(false); writer.enableIndent(false);
writer.text(ValueDecoder.escapeSpecialCharacter(text)); writer.text(ValueDecoder.escapeSpecialCharacter(text));
}else if(xmlNode instanceof XMLElement){ }else if(xmlNode instanceof XMLElement){
@ -59,13 +59,12 @@ public class XMLDecodeHelper {
writer.enableIndent(false); writer.enableIndent(false);
writer.startTag(element.getTagName()); writer.startTag(element.getTagName());
for(XMLAttribute xmlAttribute : element.listAttributes()){ for(XMLAttribute xmlAttribute : element.listAttributes()){
writer.attribute(xmlAttribute.getName(), writer.attribute(xmlAttribute.getName(), xmlAttribute.getValue());
ValueDecoder.escapeSpecialCharacter(xmlAttribute.getValue()));
} }
for(XMLNode xmlNode : element.getChildNodes()){ for(XMLNode xmlNode : element.getChildNodes()){
if(xmlNode instanceof XMLText){ if(xmlNode instanceof XMLText){
String text = ((XMLText)xmlNode).getText(false); String text = ((XMLText)xmlNode).getText(true);
writer.text(ValueDecoder.escapeSpecialCharacter(text)); writer.text(text);
}else if(xmlNode instanceof XMLElement){ }else if(xmlNode instanceof XMLElement){
writeElement(writer, (XMLElement) xmlNode); writeElement(writer, (XMLElement) xmlNode);
} }

View File

@ -45,7 +45,7 @@ public class XMLSpanParser {
StringReader reader=new StringReader(text); StringReader reader=new StringReader(text);
this.mParser.setInput(reader); this.mParser.setInput(reader);
int type; int type;
while ((type=mParser.nextToken()) !=XmlPullParser.END_DOCUMENT){ while ((type=mParser.next()) !=XmlPullParser.END_DOCUMENT){
event(type); event(type);
} }
} }
@ -58,6 +58,10 @@ public class XMLSpanParser {
onEndTag(); onEndTag();
}else if (type == XmlPullParser.TEXT){ }else if (type == XmlPullParser.TEXT){
onText(); onText();
}else if (type == XmlPullParser.ENTITY_REF){
onEntityRef();
}else if (type == XmlPullParser.IGNORABLE_WHITESPACE){
onText();
} }
} }
@ -95,6 +99,22 @@ public class XMLSpanParser {
mCurrentElement.addText(new XMLText(text)); mCurrentElement.addText(new XMLText(text));
} }
} }
private void onEntityRef() {
String text = getEntity(mParser.getName());
mCurrentElement.addText(new XMLText(text));
}
private String getEntity(String name){
if("amp".equals(name)){
return "&";
}
if("lt".equals(name)){
return "<";
}
if("gt".equals(name)){
return ">";
}
return name;
}
private void onStartDocument() { private void onStartDocument() {
this.mCurrentElement=null; this.mCurrentElement=null;
} }