From f0747a6b4f63058d9ac4434d93e0169963204cb6 Mon Sep 17 00:00:00 2001 From: REAndroid Date: Sun, 7 May 2023 21:19:08 +0200 Subject: [PATCH] fix styled string parser --- .../apk/xmldecoder/XMLDecodeHelper.java | 9 ++++--- .../reandroid/xml/parser/XMLSpanParser.java | 24 +++++++++++++++++-- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/reandroid/apk/xmldecoder/XMLDecodeHelper.java b/src/main/java/com/reandroid/apk/xmldecoder/XMLDecodeHelper.java index 67499bb..55a24f5 100644 --- a/src/main/java/com/reandroid/apk/xmldecoder/XMLDecodeHelper.java +++ b/src/main/java/com/reandroid/apk/xmldecoder/XMLDecodeHelper.java @@ -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); } diff --git a/src/main/java/com/reandroid/xml/parser/XMLSpanParser.java b/src/main/java/com/reandroid/xml/parser/XMLSpanParser.java index ab0fe0e..9e8e08f 100644 --- a/src/main/java/com/reandroid/xml/parser/XMLSpanParser.java +++ b/src/main/java/com/reandroid/xml/parser/XMLSpanParser.java @@ -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; }