You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by bq...@apache.org on 2018/04/16 18:02:35 UTC

nifi-minifi-cpp git commit: MINIFICPP-446 Add escape/unescape HTML3 EL functions

Repository: nifi-minifi-cpp
Updated Branches:
  refs/heads/master 83f4ce88a -> 6a3faa392


MINIFICPP-446 Add escape/unescape HTML3 EL functions

This closes #297.

Signed-off-by: Bin Qiu <be...@gmail.com>


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/6a3faa39
Tree: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/tree/6a3faa39
Diff: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/diff/6a3faa39

Branch: refs/heads/master
Commit: 6a3faa392c38ab47089199a66c3171770bc468f9
Parents: 83f4ce8
Author: Andrew I. Christianson <an...@andyic.org>
Authored: Wed Apr 11 11:46:13 2018 -0400
Committer: Bin Qiu <be...@gmail.com>
Committed: Mon Apr 16 11:00:53 2018 -0700

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


http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/6a3faa39/extensions/expression-language/Expression.cpp
----------------------------------------------------------------------
diff --git a/extensions/expression-language/Expression.cpp b/extensions/expression-language/Expression.cpp
index cd5199b..2590465 100644
--- a/extensions/expression-language/Expression.cpp
+++ b/extensions/expression-language/Expression.cpp
@@ -198,6 +198,272 @@ Value expr_unescapeJson(const std::vector<Value> &args) {
   }
 }
 
+Value expr_escapeHtml3(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;"}
+      }));
+}
+
+Value expr_unescapeHtml3(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;", "ÿ"}
+      }));
+}
+
 Value expr_escapeXml(const std::vector<Value> &args) {
   return Value(utils::StringUtils::replaceMap(
       args[0].asString(),
@@ -606,6 +872,10 @@ Expression make_dynamic_function(const std::string &function_name,
     return make_dynamic_function_incomplete<expr_escapeXml>(function_name, args, 0);
   } else if (function_name == "unescapeXml") {
     return make_dynamic_function_incomplete<expr_unescapeXml>(function_name, args, 0);
+  } else if (function_name == "escapeHtml3") {
+    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 == "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/6a3faa39/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 12c60ca..a2fc972 100644
--- a/libminifi/test/expression-language-tests/ExpressionLanguageTests.cpp
+++ b/libminifi/test/expression-language-tests/ExpressionLanguageTests.cpp
@@ -1065,6 +1065,30 @@ TEST_CASE("Encode Decode XML", "[expressionEncodeDecodeXML]") {  // NOLINT
   REQUIRE("Zero > One < \"two!\" & 'true'" == expr({flow_file_a}).asString());
 }
 
+TEST_CASE("Encode HTML3", "[expressionEncodeHTML3]") {  // NOLINT
+  auto expr = expression::compile("${message:escapeHtml3()}");
+
+  auto flow_file_a = std::make_shared<MockFlowFile>();
+  flow_file_a->addAttribute("message", "¥ & < «");
+  REQUIRE("&yen; &amp; &lt; &laquo;" == expr({flow_file_a}).asString());
+}
+
+TEST_CASE("Decode HTML3", "[expressionDecodeHTML3]") {  // NOLINT
+  auto expr = expression::compile("${message:unescapeHtml3()}");
+
+  auto flow_file_a = std::make_shared<MockFlowFile>();
+  flow_file_a->addAttribute("message", "&yen; &amp; &lt; &laquo;");
+  REQUIRE("¥ & < «" == expr({flow_file_a}).asString());
+}
+
+TEST_CASE("Encode Decode HTML3", "[expressionEncodeDecodeHTML3]") {  // NOLINT
+  auto expr = expression::compile("${message:escapeHtml3():unescapeHtml3()}");
+
+  auto flow_file_a = std::make_shared<MockFlowFile>();
+  flow_file_a->addAttribute("message", "&yen; &amp; &lt; &laquo;");
+  REQUIRE("&yen; &amp; &lt; &laquo;" == expr({flow_file_a}).asString());
+}
+
 TEST_CASE("Encode CSV", "[expressionEncodeCSV]") {  // NOLINT
   auto expr = expression::compile("${message:escapeCsv()}");