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

View File

@ -1,4 +1,4 @@
/*
/*
* Copyright (C) 2022 github.com/REAndroid
*
* Licensed under the Apache License, Version 2.0 (the "License");
@ -45,7 +45,7 @@ public class XMLSpanParser {
StringReader reader=new StringReader(text);
this.mParser.setInput(reader);
int type;
while ((type=mParser.nextToken()) !=XmlPullParser.END_DOCUMENT){
while ((type=mParser.next()) !=XmlPullParser.END_DOCUMENT){
event(type);
}
}
@ -58,6 +58,10 @@ public class XMLSpanParser {
onEndTag();
}else if (type == XmlPullParser.TEXT){
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));
}
}
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() {
this.mCurrentElement=null;
}