Repository: nifi-minifi-cpp
Updated Branches:
  refs/heads/master 8ea78747e -> d14db2cbb


MINIFICPP-455 Added HTML4 escape/unescape

This closes #300.

Signed-off-by: Marc Parisi <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/commit/d14db2cb
Tree: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/tree/d14db2cb
Diff: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/diff/d14db2cb

Branch: refs/heads/master
Commit: d14db2cbb826ff03fd83876dbba4e4f209d442db
Parents: 8ea7874
Author: Andrew I. Christianson <[email protected]>
Authored: Tue Apr 17 13:20:48 2018 -0400
Committer: Marc Parisi <[email protected]>
Committed: Wed Apr 18 06:38:02 2018 -0400

----------------------------------------------------------------------
 extensions/expression-language/Expression.cpp   | 574 +++++++++++++++++++
 .../ExpressionLanguageTests.cpp                 |  24 +
 2 files changed, 598 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/d14db2cb/extensions/expression-language/Expression.cpp
----------------------------------------------------------------------
diff --git a/extensions/expression-language/Expression.cpp 
b/extensions/expression-language/Expression.cpp
index 2590465..c6f6d87 100644
--- a/extensions/expression-language/Expression.cpp
+++ b/extensions/expression-language/Expression.cpp
@@ -331,6 +331,291 @@ Value expr_escapeHtml3(const std::vector<Value> &args) {
       }));
 }
 
+Value expr_escapeHtml4(const std::vector<Value> &args) {
+  return Value(utils::StringUtils::replaceMap(
+      args[0].asString(),
+      {
+          {"!", "&excl;"},
+          {"\"", "&quot;"},
+          {"#", "&num;"},
+          {"$", "&dollar;"},
+          {"%", "&percnt;"},
+          {"&", "&amp;"},
+          {"'", "&apos;"},
+          {"(", "&lpar;"},
+          {")", "&rpar;"},
+          {"*", "&ast;"},
+          {"+", "&plus;"},
+          {",", "&comma;"},
+          {"-", "&minus;"},
+          {".", "&period;"},
+          {"/", "&sol;"},
+          {":", "&colon;"},
+          {";", "&semi;"},
+          {"<", "&lt;"},
+          {"=", "&equals;"},
+          {">", "&gt;"},
+          {"?", "&quest;"},
+          {"@", "&commat;"},
+          {"[", "&lsqb;"},
+          {"\\", "&bsol;"},
+          {"]", "&rsqb;"},
+          {"^", "&circ;"},
+          {"_", "&lowbar;"},
+          {"`", "&grave;"},
+          {"{", "&lcub;"},
+          {"|", "&verbar;"},
+          {"}", "&rcub;"},
+          {"~", "&tilde;"},
+          {"¡", "&iexcl;"},
+          {"¢", "&cent;"},
+          {"£", "&pound;"},
+          {"¤", "&curren;"},
+          {"Â¥", "&yen;"},
+          {"¦", "&brkbar;"},
+          {"§", "&sect;"},
+          {"¨", "&uml;"},
+          {"©", "&copy;"},
+          {"ª", "&ordf;"},
+          {"«", "&laquo;"},
+          {"¬", "&not;"},
+          {"®", "&reg;"},
+          {"¯", "&macr;"},
+          {"°", "&deg;"},
+          {"±", "&plusmn;"},
+          {"²", "&sup2;"},
+          {"³", "&sup3;"},
+          {"´", "&acute;"},
+          {"µ", "&micro;"},
+          {"¶", "&para;"},
+          {"·", "&middot;"},
+          {"¸", "&cedil;"},
+          {"¹", "&sup1;"},
+          {"º", "&ordm;"},
+          {"»", "&raquo;;"},
+          {"¼", "&frac14;"},
+          {"½", "&frac12;"},
+          {"¾", "&frac34;"},
+          {"¿", "&iquest;"},
+          {"À", "&Agrave;"},
+          {"Á", "&Aacute;"},
+          {"Â", "&Acirc;"},
+          {"Ã", "&Atilde;"},
+          {"Ä", "&Auml;"},
+          {"Å", "&Aring;"},
+          {"Æ", "&AElig;"},
+          {"Ç", "&Ccedil;"},
+          {"È", "&Egrave;"},
+          {"É", "&Eacute;"},
+          {"Ê", "&Ecirc;"},
+          {"Ë", "&Euml;"},
+          {"Ì", "&Igrave;"},
+          {"Í", "&Iacute;"},
+          {"Î", "&Icirc;"},
+          {"Ï", "&Iuml;"},
+          {"Ð", "&ETH;"},
+          {"Ñ", "&Ntilde;"},
+          {"Ò", "&Ograve;"},
+          {"Ó", "&Oacute;"},
+          {"Ô", "&Ocirc;"},
+          {"Õ", "&Otilde;"},
+          {"Ö", "&Ouml;"},
+          {"×", "&times;"},
+          {"Ø", "&Oslash;"},
+          {"Ù", "&Ugrave;;"},
+          {"Ú", "&Uacute;"},
+          {"Û", "&Ucirc;"},
+          {"Ü", "&Uuml;"},
+          {"Ý", "&Yacute;"},
+          {"Þ", "&THORN;"},
+          {"ß", "&szlig;"},
+          {"à", "&agrave;"},
+          {"á", "&aacute;"},
+          {"â", "&acirc;"},
+          {"ã", "&atilde;"},
+          {"ä", "&auml;"},
+          {"Ã¥", "&aring;"},
+          {"æ", "&aelig;"},
+          {"ç", "&ccedil;"},
+          {"è", "&egrave;"},
+          {"é", "&eacute;"},
+          {"ê", "&ecirc;"},
+          {"ë", "&euml;"},
+          {"ì", "&igrave;"},
+          {"í", "&iacute;"},
+          {"î", "&icirc;"},
+          {"ï", "&iuml;"},
+          {"ð", "&eth;"},
+          {"ñ", "&ntilde;"},
+          {"ò", "&ograve;"},
+          {"ó", "&oacute;"},
+          {"ô", "&ocirc;"},
+          {"õ", "&otilde;"},
+          {"ö", "&ouml;"},
+          {"÷", "&divide;"},
+          {"ø", "&oslash;"},
+          {"ù", "&ugrave;"},
+          {"ú", "&uacute;"},
+          {"û", "&ucirc;"},
+          {"ü", "&uuml;"},
+          {"ý", "&yacute;"},
+          {"þ", "&thorn;"},
+          {"ÿ", "&yuml;"},
+          {"\u0192", "&fnof;"},
+          {"\u0391", "&Alpha;"},
+          {"\u0392", "&Beta;"},
+          {"\u0393", "&Gamma;"},
+          {"\u0394", "&Delta;"},
+          {"\u0395", "&Epsilon;"},
+          {"\u0396", "&Zeta;"},
+          {"\u0397", "&Eta;"},
+          {"\u0398", "&Theta;"},
+          {"\u0399", "&Iota;"},
+          {"\u039A", "&Kappa;"},
+          {"\u039B", "&Lambda;"},
+          {"\u039C", "&Mu;"},
+          {"\u039D", "&Nu;"},
+          {"\u039E", "&Xi;"},
+          {"\u039F", "&Omicron;"},
+          {"\u03A0", "&Pi;"},
+          {"\u03A1", "&Rho;"},
+          {"\u03A3", "&Sigma;"},
+          {"\u03A4", "&Tau;"},
+          {"\u03A5", "&Upsilon;"},
+          {"\u03A6", "&Phi;"},
+          {"\u03A7", "&Chi;"},
+          {"\u03A8", "&Psi;"},
+          {"\u03A9", "&Omega;"},
+          {"\u03B1", "&alpha;"},
+          {"\u03B2", "&beta;"},
+          {"\u03B3", "&gamma;"},
+          {"\u03B4", "&delta;"},
+          {"\u03B5", "&epsilon;"},
+          {"\u03B6", "&zeta;"},
+          {"\u03B7", "&eta;"},
+          {"\u03B8", "&theta;"},
+          {"\u03B9", "&iota;"},
+          {"\u03BA", "&kappa;"},
+          {"\u03BB", "&lambda;"},
+          {"\u03BC", "&mu;"},
+          {"\u03BD", "&nu;"},
+          {"\u03BE", "&xi;"},
+          {"\u03BF", "&omicron;"},
+          {"\u03C0", "&pi;"},
+          {"\u03C1", "&rho;"},
+          {"\u03C2", "&sigmaf;"},
+          {"\u03C3", "&sigma;"},
+          {"\u03C4", "&tau;"},
+          {"\u03C5", "&upsilon;"},
+          {"\u03C6", "&phi;"},
+          {"\u03C7", "&chi;"},
+          {"\u03C8", "&psi;"},
+          {"\u03C9", "&omega;"},
+          {"\u03D1", "&thetasym;"},
+          {"\u03D2", "&upsih;"},
+          {"\u03D6", "&piv;"},
+          {"\u2022", "&bull;"},
+          {"\u2026", "&hellip;"},
+          {"\u2032", "&prime;"},
+          {"\u2033", "&Prime;"},
+          {"\u203E", "&oline;"},
+          {"\u2044", "&frasl;"},
+          {"\u2118", "&weierp;"},
+          {"\u2111", "&image;"},
+          {"\u211C", "&real;"},
+          {"\u2122", "&trade;"},
+          {"\u2135", "&alefsym;"},
+          {"\u2190", "&larr;"},
+          {"\u2191", "&uarr;"},
+          {"\u2192", "&rarr;"},
+          {"\u2193", "&darr;"},
+          {"\u2194", "&harr;"},
+          {"\u21B5", "&crarr;"},
+          {"\u21D0", "&lArr;"},
+          {"\u21D1", "&uArr;"},
+          {"\u21D2", "&rArr;"},
+          {"\u21D3", "&dArr;"},
+          {"\u21D4", "&hArr;"},
+          {"\u2200", "&forall;"},
+          {"\u2202", "&part;"},
+          {"\u2203", "&exist;"},
+          {"\u2205", "&empty;"},
+          {"\u2207", "&nabla;"},
+          {"\u2208", "&isin;"},
+          {"\u2209", "&notin;"},
+          {"\u220B", "&ni;"},
+          {"\u220F", "&prod;"},
+          {"\u2211", "&sum;"},
+          {"\u2212", "&minus;"},
+          {"\u2217", "&lowast;"},
+          {"\u221A", "&radic;"},
+          {"\u221D", "&prop;"},
+          {"\u221E", "&infin;"},
+          {"\u2220", "&ang;"},
+          {"\u2227", "&and;"},
+          {"\u2228", "&or;"},
+          {"\u2229", "&cap;"},
+          {"\u222A", "&cup;"},
+          {"\u222B", "&int;"},
+          {"\u2234", "&there4;"},
+          {"\u223C", "&sim;"},
+          {"\u2245", "&cong;"},
+          {"\u2248", "&asymp;"},
+          {"\u2260", "&ne;"},
+          {"\u2261", "&equiv;"},
+          {"\u2264", "&le;"},
+          {"\u2265", "&ge;"},
+          {"\u2282", "&sub;"},
+          {"\u2283", "&sup;"},
+          {"\u2284", "&nsub;"},
+          {"\u2286", "&sube;"},
+          {"\u2287", "&supe;"},
+          {"\u2295", "&oplus;"},
+          {"\u2297", "&otimes;"},
+          {"\u22A5", "&perp;"},
+          {"\u22C5", "&sdot;"},
+          {"\u2308", "&lceil;"},
+          {"\u2309", "&rceil;"},
+          {"\u230A", "&lfloor;"},
+          {"\u230B", "&rfloor;"},
+          {"\u2329", "&lang;"},
+          {"\u232A", "&rang;"},
+          {"\u25CA", "&loz;"},
+          {"\u2660", "&spades;"},
+          {"\u2663", "&clubs;"},
+          {"\u2665", "&hearts;"},
+          {"\u2666", "&diams;"},
+          {"\u0152", "&OElig;"},
+          {"\u0153", "&oelig;"},
+          {"\u0160", "&Scaron;"},
+          {"\u0161", "&scaron;"},
+          {"\u0178", "&Yuml;"},
+          {"\u02C6", "&circ;"},
+          {"\u02DC", "&tilde;"},
+          {"\u2002", "&ensp;"},
+          {"\u2003", "&emsp;"},
+          {"\u2009", "&thinsp;"},
+          {"\u200C", "&zwnj;"},
+          {"\u200D", "&zwj;"},
+          {"\u200E", "&lrm;"},
+          {"\u200F", "&rlm;"},
+          {"\u2013", "&ndash;"},
+          {"\u2014", "&mdash;"},
+          {"\u2018", "&lsquo;"},
+          {"\u2019", "&rsquo;"},
+          {"\u201A", "&sbquo;"},
+          {"\u201C", "&ldquo;"},
+          {"\u201D", "&rdquo;"},
+          {"\u201E", "&bdquo;"},
+          {"\u2020", "&dagger;"},
+          {"\u2021", "&Dagger;"},
+          {"\u2030", "&permil;"},
+          {"\u2039", "&lsaquo;"},
+          {"\u203A", "&rsaquo;"},
+          {"\u20AC", "&euro;"}
+      }));
+}
+
 Value expr_unescapeHtml3(const std::vector<Value> &args) {
   return Value(utils::StringUtils::replaceMap(
       args[0].asString(),
@@ -464,6 +749,291 @@ Value expr_unescapeHtml3(const std::vector<Value> &args) {
       }));
 }
 
+Value expr_unescapeHtml4(const std::vector<Value> &args) {
+  return Value(utils::StringUtils::replaceMap(
+      args[0].asString(),
+      {
+          {"&excl;", "!"},
+          {"&quot;", "\""},
+          {"&num;", "#"},
+          {"&dollar;", "$"},
+          {"&percnt;", "%"},
+          {"&amp;", "&"},
+          {"&apos;", "'"},
+          {"&lpar;", "("},
+          {"&rpar;", ")"},
+          {"&ast;", "*"},
+          {"&plus;", "+"},
+          {"&comma;", ","},
+          {"&minus;", "-"},
+          {"&period;", "."},
+          {"&sol;", "/"},
+          {"&colon;", ":"},
+          {"&semi;", ";"},
+          {"&lt;", "<"},
+          {"&equals;", "="},
+          {"&gt;", ">"},
+          {"&quest;", "?"},
+          {"&commat;", "@"},
+          {"&lsqb;", "["},
+          {"&bsol;", "\\"},
+          {"&rsqb;", "]"},
+          {"&circ;", "^"},
+          {"&lowbar;", "_"},
+          {"&grave;", "`"},
+          {"&lcub;", "{"},
+          {"&verbar;", "|"},
+          {"&rcub;", "}"},
+          {"&tilde;", "~"},
+          {"&iexcl;", "¡"},
+          {"&cent;", "¢"},
+          {"&pound;", "£"},
+          {"&curren;", "¤"},
+          {"&yen;", "Â¥"},
+          {"&brkbar;", "¦"},
+          {"&sect;", "§"},
+          {"&uml;", "¨"},
+          {"&copy;", "©"},
+          {"&ordf;", "ª"},
+          {"&laquo;", "«"},
+          {"&not;", "¬"},
+          {"&reg;", "®"},
+          {"&macr;", "¯"},
+          {"&deg;", "°"},
+          {"&plusmn;", "±"},
+          {"&sup2;", "²"},
+          {"&sup3;", "³"},
+          {"&acute;", "´"},
+          {"&micro;", "µ"},
+          {"&para;", "¶"},
+          {"&middot;", "·"},
+          {"&cedil;", "¸"},
+          {"&sup1;", "¹"},
+          {"&ordm;", "º"},
+          {"&raquo;;", "»"},
+          {"&frac14;", "¼"},
+          {"&frac12;", "½"},
+          {"&frac34;", "¾"},
+          {"&iquest;", "¿"},
+          {"&Agrave;", "À"},
+          {"&Aacute;", "Á"},
+          {"&Acirc;", "Â"},
+          {"&Atilde;", "Ã"},
+          {"&Auml;", "Ä"},
+          {"&Aring;", "Å"},
+          {"&AElig;", "Æ"},
+          {"&Ccedil;", "Ç"},
+          {"&Egrave;", "È"},
+          {"&Eacute;", "É"},
+          {"&Ecirc;", "Ê"},
+          {"&Euml;", "Ë"},
+          {"&Igrave;", "Ì"},
+          {"&Iacute;", "Í"},
+          {"&Icirc;", "Î"},
+          {"&Iuml;", "Ï"},
+          {"&ETH;", "Ð"},
+          {"&Ntilde;", "Ñ"},
+          {"&Ograve;", "Ò"},
+          {"&Oacute;", "Ó"},
+          {"&Ocirc;", "Ô"},
+          {"&Otilde;", "Õ"},
+          {"&Ouml;", "Ö"},
+          {"&times;", "×"},
+          {"&Oslash;", "Ø"},
+          {"&Ugrave;;", "Ù"},
+          {"&Uacute;", "Ú"},
+          {"&Ucirc;", "Û"},
+          {"&Uuml;", "Ü"},
+          {"&Yacute;", "Ý"},
+          {"&THORN;", "Þ"},
+          {"&szlig;", "ß"},
+          {"&agrave;", "à"},
+          {"&aacute;", "á"},
+          {"&acirc;", "â"},
+          {"&atilde;", "ã"},
+          {"&auml;", "ä"},
+          {"&aring;", "Ã¥"},
+          {"&aelig;", "æ"},
+          {"&ccedil;", "ç"},
+          {"&egrave;", "è"},
+          {"&eacute;", "é"},
+          {"&ecirc;", "ê"},
+          {"&euml;", "ë"},
+          {"&igrave;", "ì"},
+          {"&iacute;", "í"},
+          {"&icirc;", "î"},
+          {"&iuml;", "ï"},
+          {"&eth;", "ð"},
+          {"&ntilde;", "ñ"},
+          {"&ograve;", "ò"},
+          {"&oacute;", "ó"},
+          {"&ocirc;", "ô"},
+          {"&otilde;", "õ"},
+          {"&ouml;", "ö"},
+          {"&divide;", "÷"},
+          {"&oslash;", "ø"},
+          {"&ugrave;", "ù"},
+          {"&uacute;", "ú"},
+          {"&ucirc;", "û"},
+          {"&uuml;", "ü"},
+          {"&yacute;", "ý"},
+          {"&thorn;", "þ"},
+          {"&yuml;", "ÿ"},
+          {"&fnof;", "\u0192"},
+          {"&Alpha;", "\u0391"},
+          {"&Beta;", "\u0392"},
+          {"&Gamma;", "\u0393"},
+          {"&Delta;", "\u0394"},
+          {"&Epsilon;", "\u0395"},
+          {"&Zeta;", "\u0396"},
+          {"&Eta;", "\u0397"},
+          {"&Theta;", "\u0398"},
+          {"&Iota;", "\u0399"},
+          {"&Kappa;", "\u039A"},
+          {"&Lambda;", "\u039B"},
+          {"&Mu;", "\u039C"},
+          {"&Nu;", "\u039D"},
+          {"&Xi;", "\u039E"},
+          {"&Omicron;", "\u039F"},
+          {"&Pi;", "\u03A0"},
+          {"&Rho;", "\u03A1"},
+          {"&Sigma;", "\u03A3"},
+          {"&Tau;", "\u03A4"},
+          {"&Upsilon;", "\u03A5"},
+          {"&Phi;", "\u03A6"},
+          {"&Chi;", "\u03A7"},
+          {"&Psi;", "\u03A8"},
+          {"&Omega;", "\u03A9"},
+          {"&alpha;", "\u03B1"},
+          {"&beta;", "\u03B2"},
+          {"&gamma;", "\u03B3"},
+          {"&delta;", "\u03B4"},
+          {"&epsilon;", "\u03B5"},
+          {"&zeta;", "\u03B6"},
+          {"&eta;", "\u03B7"},
+          {"&theta;", "\u03B8"},
+          {"&iota;", "\u03B9"},
+          {"&kappa;", "\u03BA"},
+          {"&lambda;", "\u03BB"},
+          {"&mu;", "\u03BC"},
+          {"&nu;", "\u03BD"},
+          {"&xi;", "\u03BE"},
+          {"&omicron;", "\u03BF"},
+          {"&pi;", "\u03C0"},
+          {"&rho;", "\u03C1"},
+          {"&sigmaf;", "\u03C2"},
+          {"&sigma;", "\u03C3"},
+          {"&tau;", "\u03C4"},
+          {"&upsilon;", "\u03C5"},
+          {"&phi;", "\u03C6"},
+          {"&chi;", "\u03C7"},
+          {"&psi;", "\u03C8"},
+          {"&omega;", "\u03C9"},
+          {"&thetasym;", "\u03D1"},
+          {"&upsih;", "\u03D2"},
+          {"&piv;", "\u03D6"},
+          {"&bull;", "\u2022"},
+          {"&hellip;", "\u2026"},
+          {"&prime;", "\u2032"},
+          {"&Prime;", "\u2033"},
+          {"&oline;", "\u203E"},
+          {"&frasl;", "\u2044"},
+          {"&weierp;", "\u2118"},
+          {"&image;", "\u2111"},
+          {"&real;", "\u211C"},
+          {"&trade;", "\u2122"},
+          {"&alefsym;", "\u2135"},
+          {"&larr;", "\u2190"},
+          {"&uarr;", "\u2191"},
+          {"&rarr;", "\u2192"},
+          {"&darr;", "\u2193"},
+          {"&harr;", "\u2194"},
+          {"&crarr;", "\u21B5"},
+          {"&lArr;", "\u21D0"},
+          {"&uArr;", "\u21D1"},
+          {"&rArr;", "\u21D2"},
+          {"&dArr;", "\u21D3"},
+          {"&hArr;", "\u21D4"},
+          {"&forall;", "\u2200"},
+          {"&part;", "\u2202"},
+          {"&exist;", "\u2203"},
+          {"&empty;", "\u2205"},
+          {"&nabla;", "\u2207"},
+          {"&isin;", "\u2208"},
+          {"&notin;", "\u2209"},
+          {"&ni;", "\u220B"},
+          {"&prod;", "\u220F"},
+          {"&sum;", "\u2211"},
+          {"&minus;", "\u2212"},
+          {"&lowast;", "\u2217"},
+          {"&radic;", "\u221A"},
+          {"&prop;", "\u221D"},
+          {"&infin;", "\u221E"},
+          {"&ang;", "\u2220"},
+          {"&and;", "\u2227"},
+          {"&or;", "\u2228"},
+          {"&cap;", "\u2229"},
+          {"&cup;", "\u222A"},
+          {"&int;", "\u222B"},
+          {"&there4;", "\u2234"},
+          {"&sim;", "\u223C"},
+          {"&cong;", "\u2245"},
+          {"&asymp;", "\u2248"},
+          {"&ne;", "\u2260"},
+          {"&equiv;", "\u2261"},
+          {"&le;", "\u2264"},
+          {"&ge;", "\u2265"},
+          {"&sub;", "\u2282"},
+          {"&sup;", "\u2283"},
+          {"&nsub;", "\u2284"},
+          {"&sube;", "\u2286"},
+          {"&supe;", "\u2287"},
+          {"&oplus;", "\u2295"},
+          {"&otimes;", "\u2297"},
+          {"&perp;", "\u22A5"},
+          {"&sdot;", "\u22C5"},
+          {"&lceil;", "\u2308"},
+          {"&rceil;", "\u2309"},
+          {"&lfloor;", "\u230A"},
+          {"&rfloor;", "\u230B"},
+          {"&lang;", "\u2329"},
+          {"&rang;", "\u232A"},
+          {"&loz;", "\u25CA"},
+          {"&spades;", "\u2660"},
+          {"&clubs;", "\u2663"},
+          {"&hearts;", "\u2665"},
+          {"&diams;", "\u2666"},
+          {"&OElig;", "\u0152"},
+          {"&oelig;", "\u0153"},
+          {"&Scaron;", "\u0160"},
+          {"&scaron;", "\u0161"},
+          {"&Yuml;", "\u0178"},
+          {"&circ;", "\u02C6"},
+          {"&tilde;", "\u02DC"},
+          {"&ensp;", "\u2002"},
+          {"&emsp;", "\u2003"},
+          {"&thinsp;", "\u2009"},
+          {"&zwnj;", "\u200C"},
+          {"&zwj;", "\u200D"},
+          {"&lrm;", "\u200E"},
+          {"&rlm;", "\u200F"},
+          {"&ndash;", "\u2013"},
+          {"&mdash;", "\u2014"},
+          {"&lsquo;", "\u2018"},
+          {"&rsquo;", "\u2019"},
+          {"&sbquo;", "\u201A"},
+          {"&ldquo;", "\u201C"},
+          {"&rdquo;", "\u201D"},
+          {"&bdquo;", "\u201E"},
+          {"&dagger;", "\u2020"},
+          {"&Dagger;", "\u2021"},
+          {"&permil;", "\u2030"},
+          {"&lsaquo;", "\u2039"},
+          {"&rsaquo;", "\u203A"},
+          {"&euro;", "\u20AC"}
+      }));
+}
+
 Value expr_escapeXml(const std::vector<Value> &args) {
   return Value(utils::StringUtils::replaceMap(
       args[0].asString(),
@@ -876,6 +1446,10 @@ Expression make_dynamic_function(const std::string 
&function_name,
     return make_dynamic_function_incomplete<expr_escapeHtml3>(function_name, 
args, 0);
   } else if (function_name == "unescapeHtml3") {
     return make_dynamic_function_incomplete<expr_unescapeHtml3>(function_name, 
args, 0);
+  } else if (function_name == "escapeHtml4") {
+    return make_dynamic_function_incomplete<expr_escapeHtml4>(function_name, 
args, 0);
+  } else if (function_name == "unescapeHtml4") {
+    return make_dynamic_function_incomplete<expr_unescapeHtml4>(function_name, 
args, 0);
   } else if (function_name == "escapeCsv") {
     return make_dynamic_function_incomplete<expr_escapeCsv>(function_name, 
args, 0);
   } else if (function_name == "unescapeCsv") {

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/d14db2cb/libminifi/test/expression-language-tests/ExpressionLanguageTests.cpp
----------------------------------------------------------------------
diff --git 
a/libminifi/test/expression-language-tests/ExpressionLanguageTests.cpp 
b/libminifi/test/expression-language-tests/ExpressionLanguageTests.cpp
index a2fc972..421d263 100644
--- a/libminifi/test/expression-language-tests/ExpressionLanguageTests.cpp
+++ b/libminifi/test/expression-language-tests/ExpressionLanguageTests.cpp
@@ -1089,6 +1089,30 @@ TEST_CASE("Encode Decode HTML3", 
"[expressionEncodeDecodeHTML3]") {  // NOLINT
   REQUIRE("&yen; &amp; &lt; &laquo;" == expr({flow_file_a}).asString());
 }
 
+TEST_CASE("Encode HTML4", "[expressionEncodeHTML4]") {  // NOLINT
+  auto expr = expression::compile("${message:escapeHtml4()}");
+
+  auto flow_file_a = std::make_shared<MockFlowFile>();
+  flow_file_a->addAttribute("message", "¥ & Φ < «");
+  REQUIRE("&yen; &amp; &Phi; &lt; &laquo;" == expr({flow_file_a}).asString());
+}
+
+TEST_CASE("Decode HTML4", "[expressionDecodeHTML4]") {  // NOLINT
+  auto expr = expression::compile("${message:unescapeHtml4()}");
+
+  auto flow_file_a = std::make_shared<MockFlowFile>();
+  flow_file_a->addAttribute("message", "&yen; &iota; &amp; &lt; &laquo;");
+  REQUIRE("¥ ι & < «" == expr({flow_file_a}).asString());
+}
+
+TEST_CASE("Encode Decode HTML4", "[expressionEncodeDecodeHTML4]") {  // NOLINT
+  auto expr = expression::compile("${message:escapeHtml4():unescapeHtml4()}");
+
+  auto flow_file_a = std::make_shared<MockFlowFile>();
+  flow_file_a->addAttribute("message", "&yen; &amp; &lt; &Pi; &laquo;");
+  REQUIRE("&yen; &amp; &lt; &Pi; &laquo;" == expr({flow_file_a}).asString());
+}
+
 TEST_CASE("Encode CSV", "[expressionEncodeCSV]") {  // NOLINT
   auto expr = expression::compile("${message:escapeCsv()}");
 

Reply via email to