Skip to content

Commit

Permalink
HTMLParser: fix missing handler for ' (closes #2716)
Browse files Browse the repository at this point in the history
StringTools.htmlUnescape() uses ' instead, for some reason, but Flash supports ' too.
  • Loading branch information
joshtynjala committed Jun 19, 2024
1 parent c76ba4a commit 1ec0ace
Showing 1 changed file with 12 additions and 4 deletions.
16 changes: 12 additions & 4 deletions src/openfl/text/_internal/HTMLParser.hx
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ class HTMLParser
private static var __regexBlockIndent:EReg = ~/blockindent\s?=\s?("([^"]+)"|'([^']+)')/i;
private static var __regexClass:EReg = ~/class\s?=\s?("([^"]+)"|'([^']+)')/i;
private static var __regexColor:EReg = ~/color\s?=\s?("#([^"]+)"|'#([^']+)')/i;
private static var __regexEntityApos:EReg = ~/'/g;
private static var __regexEntities:Array<EReg> = [~/&quot;/g, ~/&apos;/g, ~/&amp;/g, ~/&lt;/g, ~/&gt;/g, ~/&nbsp;/g];
private static var __regexCharEntity:EReg = ~/&#(?:([0-9]+)|(x[0-9a-fA-F]+));/g;
private static var __regexFace:EReg = ~/face\s?=\s?("([^"]+)"|'([^']+)')/i;
Expand Down Expand Up @@ -74,7 +75,7 @@ class HTMLParser

if (segments.length == 1)
{
value = StringTools.htmlUnescape(__regexHTMLTag.replace(value, ""));
value = __htmlUnescape(__regexHTMLTag.replace(value, ""));

if (textFormatRanges.length > 1)
{
Expand Down Expand Up @@ -138,7 +139,7 @@ class HTMLParser

if (start < segment.length)
{
sub = StringTools.htmlUnescape(segment.substr(start));
sub = __htmlUnescape(segment.substr(start));
textFormatRanges.push(new TextFormatRange(format, value.length, value.length + sub.length));
value += sub;
noLineBreak = false;
Expand Down Expand Up @@ -280,15 +281,15 @@ class HTMLParser

if (start < segment.length)
{
sub = StringTools.htmlUnescape(segment.substring(start));
sub = __htmlUnescape(segment.substring(start));
textFormatRanges.push(new TextFormatRange(format, value.length, value.length + sub.length));
value += sub;
noLineBreak = false;
}
}
else
{
sub = StringTools.htmlUnescape(segment);
sub = __htmlUnescape(segment);
textFormatRanges.push(new TextFormatRange(format, value.length, value.length + sub.length));
value += sub;
noLineBreak = false;
Expand All @@ -309,5 +310,12 @@ class HTMLParser
{
return regex.matched(2) != null ? regex.matched(2) : regex.matched(3);
}

@:noCompletion private static function __htmlUnescape(s:String):String
{
// for some reason, StringTools.htmlUnescape uses &#039; instead of &apos;
s = __regexEntityApos.replace(s, "'");
return StringTools.htmlUnescape(s);
}
}
#end

0 comments on commit 1ec0ace

Please sign in to comment.