From b4ab834a2195db1ee7b423caa52916c6b909a80d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Tue, 23 Nov 2021 22:17:31 +0100 Subject: [PATCH] Fixed DefineEditText - ampersand in link href --- CHANGELOG.md | 1 + .../flash/tags/DefineEditTextTag.java | 33 +++++++++++++++---- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index db0493a04..5ff79476b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ All notable changes to this project will be documented in this file. - AS1/2 - tellTarget when single - AS1/2 - use slash syntax in get/setvariable only in eval/set - AS1/2 - get/setProperty when propertyindex is string +- DefineEditText - ampersand in link href ## [14.6.0] - 2021-11-22 ### Added diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java index a87fb2821..9435f16a0 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java @@ -76,6 +76,7 @@ import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; +import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; @@ -402,6 +403,9 @@ public class DefineEditTextTag extends TextTag { // todo: parse the following attribute: // align break; + case "a": + // todo: handle link - href, target attributes + break; case "b": style = style.clone(); style.bold = true; @@ -419,13 +423,13 @@ public class DefineEditTextTag extends TextTag { break; case "font": style = style.clone(); - String color = attributes.getValue("color"); + String color = unescape(attributes.getValue("color")); if (color != null) { if (color.startsWith("#")) { style.textColor = new RGBA(Color.decode(color)); } } - String size = attributes.getValue("size"); + String size = unescape(attributes.getValue("size")); if (size != null && size.length() > 0) { char firstChar = size.charAt(0); if (firstChar != '+' && firstChar != '-') { @@ -436,7 +440,7 @@ public class DefineEditTextTag extends TextTag { // todo: parse relative sizes } } - String face = attributes.getValue("face"); + String face = unescape(attributes.getValue("face")); { if (face != null && face.length() > 0) { style.fontFace = face; @@ -458,7 +462,6 @@ public class DefineEditTextTag extends TextTag { ret.add(cs); break; } - //ret = entitiesReplace(ret); } @Override @@ -480,19 +483,35 @@ public class DefineEditTextTag extends TextTag { } } + private String unescape(String txt) { + txt = txt.replace("/{entity-nbsp}", "\u00A0"); + txt = txt.replace("/{entity-lt}", "<"); + txt = txt.replace("/{entity-gt}", ">"); + txt = txt.replace("/{entity-quot}", "\""); + txt = txt.replace("/{entity-amp}", "&"); + return txt; + } + @Override public void characters(char[] ch, int start, int length) throws SAXException { - String txt = new String(ch, start, length); + String txt = unescape(new String(ch, start, length)); TextStyle style = styles.peek(); addCharacters(ret, txt, style); } }; + + str = str.replace(" ", "/{entity-nbsp}"); + str = str.replace("<", "/{entity-lt}"); + str = str.replace(">", "/{entity-gt}"); + str = str.replace(""", "/{entity-quot}"); + str = str.replace("&", "/{entity-amp}"); + str = str.replace("&", "&"); + str = " \n" + "]>" + str + ""; saxParser.parse(new ByteArrayInputStream(str.getBytes(Utf8Helper.charset)), handler); } catch (ParserConfigurationException | SAXException | IOException ex) { - Logger.getLogger(DefineEditTextTag.class.getName()).log(Level.SEVERE, null, ex); + Logger.getLogger(DefineEditTextTag.class.getName()).log(Level.SEVERE, "Error parsing text " + getCharacterId(), ex); } } else { addCharacters(ret, str, style);