Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
246 changes: 126 additions & 120 deletions Source/HtmlRenderer/Core/Utils/HtmlUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ internal static class HtmlUtils
/// the html decode only pairs
/// </summary>
private static readonly Dictionary<string, char> _decodeOnly = new Dictionary<string, char>(StringComparer.InvariantCultureIgnoreCase);
private static readonly Dictionary<string, char> _decodeOnlyCaseSensitive = new Dictionary<string, char>(StringComparer.InvariantCulture);

#endregion

Expand Down Expand Up @@ -96,68 +97,68 @@ static HtmlUtils()
_decodeOnly["divide"] = Convert.ToChar(247);

// ISO 8859-1 Characters
_decodeOnly["Agrave"] = Convert.ToChar(192);
_decodeOnly["Aacute"] = Convert.ToChar(193);
_decodeOnly["Acirc"] = Convert.ToChar(194);
_decodeOnly["Atilde"] = Convert.ToChar(195);
_decodeOnly["Auml"] = Convert.ToChar(196);
_decodeOnly["Aring"] = Convert.ToChar(197);
_decodeOnly["AElig"] = Convert.ToChar(198);
_decodeOnly["Ccedil"] = Convert.ToChar(199);
_decodeOnly["Egrave"] = Convert.ToChar(200);
_decodeOnly["Eacute"] = Convert.ToChar(201);
_decodeOnly["Ecirc"] = Convert.ToChar(202);
_decodeOnly["Euml"] = Convert.ToChar(203);
_decodeOnly["Igrave"] = Convert.ToChar(204);
_decodeOnly["Iacute"] = Convert.ToChar(205);
_decodeOnly["Icirc"] = Convert.ToChar(206);
_decodeOnly["Iuml"] = Convert.ToChar(207);
_decodeOnly["ETH"] = Convert.ToChar(208);
_decodeOnly["Ntilde"] = Convert.ToChar(209);
_decodeOnly["Ograve"] = Convert.ToChar(210);
_decodeOnly["Oacute"] = Convert.ToChar(211);
_decodeOnly["Ocirc"] = Convert.ToChar(212);
_decodeOnly["Otilde"] = Convert.ToChar(213);
_decodeOnly["Ouml"] = Convert.ToChar(214);
_decodeOnly["Oslash"] = Convert.ToChar(216);
_decodeOnly["Ugrave"] = Convert.ToChar(217);
_decodeOnly["Uacute"] = Convert.ToChar(218);
_decodeOnly["Ucirc"] = Convert.ToChar(219);
_decodeOnly["Uuml"] = Convert.ToChar(220);
_decodeOnly["Yacute"] = Convert.ToChar(221);
_decodeOnly["THORN"] = Convert.ToChar(222);
_decodeOnlyCaseSensitive["Agrave"] = Convert.ToChar(192);
_decodeOnlyCaseSensitive["Aacute"] = Convert.ToChar(193);
_decodeOnlyCaseSensitive["Acirc"] = Convert.ToChar(194);
_decodeOnlyCaseSensitive["Atilde"] = Convert.ToChar(195);
_decodeOnlyCaseSensitive["Auml"] = Convert.ToChar(196);
_decodeOnlyCaseSensitive["Aring"] = Convert.ToChar(197);
_decodeOnlyCaseSensitive["AElig"] = Convert.ToChar(198);
_decodeOnlyCaseSensitive["Ccedil"] = Convert.ToChar(199);
_decodeOnlyCaseSensitive["Egrave"] = Convert.ToChar(200);
_decodeOnlyCaseSensitive["Eacute"] = Convert.ToChar(201);
_decodeOnlyCaseSensitive["Ecirc"] = Convert.ToChar(202);
_decodeOnlyCaseSensitive["Euml"] = Convert.ToChar(203);
_decodeOnlyCaseSensitive["Igrave"] = Convert.ToChar(204);
_decodeOnlyCaseSensitive["Iacute"] = Convert.ToChar(205);
_decodeOnlyCaseSensitive["Icirc"] = Convert.ToChar(206);
_decodeOnlyCaseSensitive["Iuml"] = Convert.ToChar(207);
_decodeOnlyCaseSensitive["ETH"] = Convert.ToChar(208);
_decodeOnlyCaseSensitive["Ntilde"] = Convert.ToChar(209);
_decodeOnlyCaseSensitive["Ograve"] = Convert.ToChar(210);
_decodeOnlyCaseSensitive["Oacute"] = Convert.ToChar(211);
_decodeOnlyCaseSensitive["Ocirc"] = Convert.ToChar(212);
_decodeOnlyCaseSensitive["Otilde"] = Convert.ToChar(213);
_decodeOnlyCaseSensitive["Ouml"] = Convert.ToChar(214);
_decodeOnlyCaseSensitive["Oslash"] = Convert.ToChar(216);
_decodeOnlyCaseSensitive["Ugrave"] = Convert.ToChar(217);
_decodeOnlyCaseSensitive["Uacute"] = Convert.ToChar(218);
_decodeOnlyCaseSensitive["Ucirc"] = Convert.ToChar(219);
_decodeOnlyCaseSensitive["Uuml"] = Convert.ToChar(220);
_decodeOnlyCaseSensitive["Yacute"] = Convert.ToChar(221);
_decodeOnlyCaseSensitive["THORN"] = Convert.ToChar(222);
_decodeOnly["szlig"] = Convert.ToChar(223);
_decodeOnly["agrave"] = Convert.ToChar(224);
_decodeOnly["aacute"] = Convert.ToChar(225);
_decodeOnly["acirc"] = Convert.ToChar(226);
_decodeOnly["atilde"] = Convert.ToChar(227);
_decodeOnly["auml"] = Convert.ToChar(228);
_decodeOnly["aring"] = Convert.ToChar(229);
_decodeOnly["aelig"] = Convert.ToChar(230);
_decodeOnly["ccedil"] = Convert.ToChar(231);
_decodeOnly["egrave"] = Convert.ToChar(232);
_decodeOnly["eacute"] = Convert.ToChar(233);
_decodeOnly["ecirc"] = Convert.ToChar(234);
_decodeOnly["euml"] = Convert.ToChar(235);
_decodeOnly["igrave"] = Convert.ToChar(236);
_decodeOnly["iacute"] = Convert.ToChar(237);
_decodeOnly["icirc"] = Convert.ToChar(238);
_decodeOnly["iuml"] = Convert.ToChar(239);
_decodeOnly["eth"] = Convert.ToChar(240);
_decodeOnly["ntilde"] = Convert.ToChar(241);
_decodeOnly["ograve"] = Convert.ToChar(242);
_decodeOnly["oacute"] = Convert.ToChar(243);
_decodeOnly["ocirc"] = Convert.ToChar(244);
_decodeOnly["otilde"] = Convert.ToChar(245);
_decodeOnly["ouml"] = Convert.ToChar(246);
_decodeOnly["oslash"] = Convert.ToChar(248);
_decodeOnly["ugrave"] = Convert.ToChar(249);
_decodeOnly["uacute"] = Convert.ToChar(250);
_decodeOnly["ucirc"] = Convert.ToChar(251);
_decodeOnly["uuml"] = Convert.ToChar(252);
_decodeOnly["yacute"] = Convert.ToChar(253);
_decodeOnly["thorn"] = Convert.ToChar(254);
_decodeOnly["yuml"] = Convert.ToChar(255);
_decodeOnlyCaseSensitive["agrave"] = Convert.ToChar(224);
_decodeOnlyCaseSensitive["aacute"] = Convert.ToChar(225);
_decodeOnlyCaseSensitive["acirc"] = Convert.ToChar(226);
_decodeOnlyCaseSensitive["atilde"] = Convert.ToChar(227);
_decodeOnlyCaseSensitive["auml"] = Convert.ToChar(228);
_decodeOnlyCaseSensitive["aring"] = Convert.ToChar(229);
_decodeOnlyCaseSensitive["aelig"] = Convert.ToChar(230);
_decodeOnlyCaseSensitive["ccedil"] = Convert.ToChar(231);
_decodeOnlyCaseSensitive["egrave"] = Convert.ToChar(232);
_decodeOnlyCaseSensitive["eacute"] = Convert.ToChar(233);
_decodeOnlyCaseSensitive["ecirc"] = Convert.ToChar(234);
_decodeOnlyCaseSensitive["euml"] = Convert.ToChar(235);
_decodeOnlyCaseSensitive["igrave"] = Convert.ToChar(236);
_decodeOnlyCaseSensitive["iacute"] = Convert.ToChar(237);
_decodeOnlyCaseSensitive["icirc"] = Convert.ToChar(238);
_decodeOnlyCaseSensitive["iuml"] = Convert.ToChar(239);
_decodeOnlyCaseSensitive["eth"] = Convert.ToChar(240);
_decodeOnlyCaseSensitive["ntilde"] = Convert.ToChar(241);
_decodeOnlyCaseSensitive["ograve"] = Convert.ToChar(242);
_decodeOnlyCaseSensitive["oacute"] = Convert.ToChar(243);
_decodeOnlyCaseSensitive["ocirc"] = Convert.ToChar(244);
_decodeOnlyCaseSensitive["otilde"] = Convert.ToChar(245);
_decodeOnlyCaseSensitive["ouml"] = Convert.ToChar(246);
_decodeOnlyCaseSensitive["oslash"] = Convert.ToChar(248);
_decodeOnlyCaseSensitive["ugrave"] = Convert.ToChar(249);
_decodeOnlyCaseSensitive["uacute"] = Convert.ToChar(250);
_decodeOnlyCaseSensitive["ucirc"] = Convert.ToChar(251);
_decodeOnlyCaseSensitive["uuml"] = Convert.ToChar(252);
_decodeOnlyCaseSensitive["yacute"] = Convert.ToChar(253);
_decodeOnlyCaseSensitive["thorn"] = Convert.ToChar(254);
_decodeOnlyCaseSensitive["yuml"] = Convert.ToChar(255);

// Math Symbols Supported by HTML
_decodeOnly["forall"] = Convert.ToChar(8704);
Expand Down Expand Up @@ -200,65 +201,65 @@ static HtmlUtils()
_decodeOnly["sdot"] = Convert.ToChar(8901);

// Greek Letters Supported by HTML
_decodeOnly["Alpha"] = Convert.ToChar(913);
_decodeOnly["Beta"] = Convert.ToChar(914);
_decodeOnly["Gamma"] = Convert.ToChar(915);
_decodeOnly["Delta"] = Convert.ToChar(916);
_decodeOnly["Epsilon"] = Convert.ToChar(917);
_decodeOnly["Zeta"] = Convert.ToChar(918);
_decodeOnly["Eta"] = Convert.ToChar(919);
_decodeOnly["Theta"] = Convert.ToChar(920);
_decodeOnly["Iota"] = Convert.ToChar(921);
_decodeOnly["Kappa"] = Convert.ToChar(922);
_decodeOnly["Lambda"] = Convert.ToChar(923);
_decodeOnly["Mu"] = Convert.ToChar(924);
_decodeOnly["Nu"] = Convert.ToChar(925);
_decodeOnly["Xi"] = Convert.ToChar(926);
_decodeOnly["Omicron"] = Convert.ToChar(927);
_decodeOnly["Pi"] = Convert.ToChar(928);
_decodeOnly["Rho"] = Convert.ToChar(929);
_decodeOnly["Sigma"] = Convert.ToChar(931);
_decodeOnly["Tau"] = Convert.ToChar(932);
_decodeOnly["Upsilon"] = Convert.ToChar(933);
_decodeOnly["Phi"] = Convert.ToChar(934);
_decodeOnly["Chi"] = Convert.ToChar(935);
_decodeOnly["Psi"] = Convert.ToChar(936);
_decodeOnly["Omega"] = Convert.ToChar(937);
_decodeOnly["alpha"] = Convert.ToChar(945);
_decodeOnly["beta"] = Convert.ToChar(946);
_decodeOnly["gamma"] = Convert.ToChar(947);
_decodeOnly["delta"] = Convert.ToChar(948);
_decodeOnly["epsilon"] = Convert.ToChar(949);
_decodeOnly["zeta"] = Convert.ToChar(950);
_decodeOnly["eta"] = Convert.ToChar(951);
_decodeOnly["theta"] = Convert.ToChar(952);
_decodeOnly["iota"] = Convert.ToChar(953);
_decodeOnly["kappa"] = Convert.ToChar(954);
_decodeOnly["lambda"] = Convert.ToChar(955);
_decodeOnly["mu"] = Convert.ToChar(956);
_decodeOnly["nu"] = Convert.ToChar(957);
_decodeOnly["xi"] = Convert.ToChar(958);
_decodeOnly["omicron"] = Convert.ToChar(959);
_decodeOnly["pi"] = Convert.ToChar(960);
_decodeOnly["rho"] = Convert.ToChar(961);
_decodeOnly["sigmaf"] = Convert.ToChar(962);
_decodeOnly["sigma"] = Convert.ToChar(963);
_decodeOnly["tau"] = Convert.ToChar(964);
_decodeOnly["upsilon"] = Convert.ToChar(965);
_decodeOnly["phi"] = Convert.ToChar(966);
_decodeOnly["chi"] = Convert.ToChar(967);
_decodeOnly["psi"] = Convert.ToChar(968);
_decodeOnly["omega"] = Convert.ToChar(969);
_decodeOnlyCaseSensitive["Alpha"] = Convert.ToChar(913);
_decodeOnlyCaseSensitive["Beta"] = Convert.ToChar(914);
_decodeOnlyCaseSensitive["Gamma"] = Convert.ToChar(915);
_decodeOnlyCaseSensitive["Delta"] = Convert.ToChar(916);
_decodeOnlyCaseSensitive["Epsilon"] = Convert.ToChar(917);
_decodeOnlyCaseSensitive["Zeta"] = Convert.ToChar(918);
_decodeOnlyCaseSensitive["Eta"] = Convert.ToChar(919);
_decodeOnlyCaseSensitive["Theta"] = Convert.ToChar(920);
_decodeOnlyCaseSensitive["Iota"] = Convert.ToChar(921);
_decodeOnlyCaseSensitive["Kappa"] = Convert.ToChar(922);
_decodeOnlyCaseSensitive["Lambda"] = Convert.ToChar(923);
_decodeOnlyCaseSensitive["Mu"] = Convert.ToChar(924);
_decodeOnlyCaseSensitive["Nu"] = Convert.ToChar(925);
_decodeOnlyCaseSensitive["Xi"] = Convert.ToChar(926);
_decodeOnlyCaseSensitive["Omicron"] = Convert.ToChar(927);
_decodeOnlyCaseSensitive["Pi"] = Convert.ToChar(928);
_decodeOnlyCaseSensitive["Rho"] = Convert.ToChar(929);
_decodeOnlyCaseSensitive["Sigma"] = Convert.ToChar(931);
_decodeOnlyCaseSensitive["Tau"] = Convert.ToChar(932);
_decodeOnlyCaseSensitive["Upsilon"] = Convert.ToChar(933);
_decodeOnlyCaseSensitive["Phi"] = Convert.ToChar(934);
_decodeOnlyCaseSensitive["Chi"] = Convert.ToChar(935);
_decodeOnlyCaseSensitive["Psi"] = Convert.ToChar(936);
_decodeOnlyCaseSensitive["Omega"] = Convert.ToChar(937);
_decodeOnlyCaseSensitive["alpha"] = Convert.ToChar(945);
_decodeOnlyCaseSensitive["beta"] = Convert.ToChar(946);
_decodeOnlyCaseSensitive["gamma"] = Convert.ToChar(947);
_decodeOnlyCaseSensitive["delta"] = Convert.ToChar(948);
_decodeOnlyCaseSensitive["epsilon"] = Convert.ToChar(949);
_decodeOnlyCaseSensitive["zeta"] = Convert.ToChar(950);
_decodeOnlyCaseSensitive["eta"] = Convert.ToChar(951);
_decodeOnlyCaseSensitive["theta"] = Convert.ToChar(952);
_decodeOnlyCaseSensitive["iota"] = Convert.ToChar(953);
_decodeOnlyCaseSensitive["kappa"] = Convert.ToChar(954);
_decodeOnlyCaseSensitive["lambda"] = Convert.ToChar(955);
_decodeOnlyCaseSensitive["mu"] = Convert.ToChar(956);
_decodeOnlyCaseSensitive["nu"] = Convert.ToChar(957);
_decodeOnlyCaseSensitive["xi"] = Convert.ToChar(958);
_decodeOnlyCaseSensitive["omicron"] = Convert.ToChar(959);
_decodeOnlyCaseSensitive["pi"] = Convert.ToChar(960);
_decodeOnlyCaseSensitive["rho"] = Convert.ToChar(961);
_decodeOnlyCaseSensitive["sigmaf"] = Convert.ToChar(962);
_decodeOnlyCaseSensitive["sigma"] = Convert.ToChar(963);
_decodeOnlyCaseSensitive["tau"] = Convert.ToChar(964);
_decodeOnlyCaseSensitive["upsilon"] = Convert.ToChar(965);
_decodeOnlyCaseSensitive["phi"] = Convert.ToChar(966);
_decodeOnlyCaseSensitive["chi"] = Convert.ToChar(967);
_decodeOnlyCaseSensitive["psi"] = Convert.ToChar(968);
_decodeOnlyCaseSensitive["omega"] = Convert.ToChar(969);
_decodeOnly["thetasym"] = Convert.ToChar(977);
_decodeOnly["upsih"] = Convert.ToChar(978);
_decodeOnly["piv"] = Convert.ToChar(982);

// Other Entities Supported by HTML
_decodeOnly["OElig"] = Convert.ToChar(338);
_decodeOnly["oelig"] = Convert.ToChar(339);
_decodeOnly["Scaron"] = Convert.ToChar(352);
_decodeOnly["scaron"] = Convert.ToChar(353);
_decodeOnly["Yuml"] = Convert.ToChar(376);
_decodeOnlyCaseSensitive["OElig"] = Convert.ToChar(338);
_decodeOnlyCaseSensitive["oelig"] = Convert.ToChar(339);
_decodeOnlyCaseSensitive["Scaron"] = Convert.ToChar(352);
_decodeOnlyCaseSensitive["scaron"] = Convert.ToChar(353);
_decodeOnlyCaseSensitive["Yuml"] = Convert.ToChar(376);
_decodeOnly["fnof"] = Convert.ToChar(402);
_decodeOnly["circ"] = Convert.ToChar(710);
_decodeOnly["tilde"] = Convert.ToChar(732);
Expand All @@ -270,13 +271,13 @@ static HtmlUtils()
_decodeOnly["ldquo"] = Convert.ToChar(8220);
_decodeOnly["rdquo"] = Convert.ToChar(8221);
_decodeOnly["bdquo"] = Convert.ToChar(8222);
_decodeOnly["dagger"] = Convert.ToChar(8224);
_decodeOnly["Dagger"] = Convert.ToChar(8225);
_decodeOnlyCaseSensitive["dagger"] = Convert.ToChar(8224);
_decodeOnlyCaseSensitive["Dagger"] = Convert.ToChar(8225);
_decodeOnly["bull"] = Convert.ToChar(8226);
_decodeOnly["hellip"] = Convert.ToChar(8230);
_decodeOnly["permil"] = Convert.ToChar(8240);
_decodeOnly["prime"] = Convert.ToChar(8242);
_decodeOnly["Prime"] = Convert.ToChar(8243);
_decodeOnlyCaseSensitive["prime"] = Convert.ToChar(8242);
_decodeOnlyCaseSensitive["Prime"] = Convert.ToChar(8243);
_decodeOnly["lsaquo"] = Convert.ToChar(8249);
_decodeOnly["rsaquo"] = Convert.ToChar(8250);
_decodeOnly["oline"] = Convert.ToChar(8254);
Expand Down Expand Up @@ -397,7 +398,12 @@ private static string DecodeHtmlCharByName(string str)
{
var key = str.Substring(idx + 1, endIdx - idx - 1);
char c;
if (_decodeOnly.TryGetValue(key, out c))
if (_decodeOnlyCaseSensitive.TryGetValue(key, out c))
{
str = str.Remove(idx, endIdx - idx + 1);
str = str.Insert(idx, c.ToString());
}
else if(_decodeOnly.TryGetValue(key, out c))
{
str = str.Remove(idx, endIdx - idx + 1);
str = str.Insert(idx, c.ToString());
Expand Down