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(),
+ {
+ {"!", "!"},
+ {"\"", """},
+ {"#", "#"},
+ {"$", "$"},
+ {"%", "%"},
+ {"&", "&"},
+ {"'", "'"},
+ {"(", "("},
+ {")", ")"},
+ {"*", "*"},
+ {"+", "+"},
+ {",", ","},
+ {"-", "−"},
+ {".", "."},
+ {"/", "/"},
+ {":", ":"},
+ {";", ";"},
+ {"<", "<"},
+ {"=", "="},
+ {">", ">"},
+ {"?", "?"},
+ {"@", "@"},
+ {"[", "["},
+ {"\\", "\"},
+ {"]", "]"},
+ {"^", "ˆ"},
+ {"_", "_"},
+ {"`", "`"},
+ {"{", "{"},
+ {"|", "|"},
+ {"}", "}"},
+ {"~", "˜"},
+ {"¡", "¡"},
+ {"¢", "¢"},
+ {"£", "£"},
+ {"¤", "¤"},
+ {"¥", "¥"},
+ {"¦", "&brkbar;"},
+ {"§", "§"},
+ {"¨", "¨"},
+ {"©", "©"},
+ {"ª", "ª"},
+ {"«", "«"},
+ {"¬", "¬"},
+ {"®", "®"},
+ {"¯", "¯"},
+ {"°", "°"},
+ {"±", "±"},
+ {"²", "²"},
+ {"³", "³"},
+ {"´", "´"},
+ {"µ", "µ"},
+ {"¶", "¶"},
+ {"·", "·"},
+ {"¸", "¸"},
+ {"¹", "¹"},
+ {"º", "º"},
+ {"»", "»;"},
+ {"¼", "¼"},
+ {"½", "½"},
+ {"¾", "¾"},
+ {"¿", "¿"},
+ {"À", "À"},
+ {"Á", "Á"},
+ {"Â", "Â"},
+ {"Ã", "Ã"},
+ {"Ä", "Ä"},
+ {"Å", "Å"},
+ {"Æ", "Æ"},
+ {"Ç", "Ç"},
+ {"È", "È"},
+ {"É", "É"},
+ {"Ê", "Ê"},
+ {"Ë", "Ë"},
+ {"Ì", "Ì"},
+ {"Í", "Í"},
+ {"Î", "Î"},
+ {"Ï", "Ï"},
+ {"Ð", "Ð"},
+ {"Ñ", "Ñ"},
+ {"Ò", "Ò"},
+ {"Ó", "Ó"},
+ {"Ô", "Ô"},
+ {"Õ", "Õ"},
+ {"Ö", "Ö"},
+ {"×", "×"},
+ {"Ø", "Ø"},
+ {"Ù", "Ù;"},
+ {"Ú", "Ú"},
+ {"Û", "Û"},
+ {"Ü", "Ü"},
+ {"Ý", "Ý"},
+ {"Þ", "Þ"},
+ {"ß", "ß"},
+ {"à", "à"},
+ {"á", "á"},
+ {"â", "â"},
+ {"ã", "ã"},
+ {"ä", "ä"},
+ {"å", "å"},
+ {"æ", "æ"},
+ {"ç", "ç"},
+ {"è", "è"},
+ {"é", "é"},
+ {"ê", "ê"},
+ {"ë", "ë"},
+ {"ì", "ì"},
+ {"í", "í"},
+ {"î", "î"},
+ {"ï", "ï"},
+ {"ð", "ð"},
+ {"ñ", "ñ"},
+ {"ò", "ò"},
+ {"ó", "ó"},
+ {"ô", "ô"},
+ {"õ", "õ"},
+ {"ö", "ö"},
+ {"÷", "÷"},
+ {"ø", "ø"},
+ {"ù", "ù"},
+ {"ú", "ú"},
+ {"û", "û"},
+ {"ü", "ü"},
+ {"ý", "ý"},
+ {"þ", "þ"},
+ {"ÿ", "ÿ"}
+ }));
+}
+
+Value expr_unescapeHtml3(const std::vector<Value> &args) {
+ return Value(utils::StringUtils::replaceMap(
+ args[0].asString(),
+ {
+ {"!", "!"},
+ {""", "\""},
+ {"#", "#"},
+ {"$", "$"},
+ {"%", "%"},
+ {"&", "&"},
+ {"'", "'"},
+ {"(", "("},
+ {")", ")"},
+ {"*", "*"},
+ {"+", "+"},
+ {",", ","},
+ {"−", "-"},
+ {".", "."},
+ {"/", "/"},
+ {":", ":"},
+ {";", ";"},
+ {"<", "<"},
+ {"=", "="},
+ {">", ">"},
+ {"?", "?"},
+ {"@", "@"},
+ {"[", "["},
+ {"\", "\\"},
+ {"]", "]"},
+ {"ˆ", "^"},
+ {"_", "_"},
+ {"`", "`"},
+ {"{", "{"},
+ {"|", "|"},
+ {"}", "}"},
+ {"˜", "~"},
+ {"¡", "¡"},
+ {"¢", "¢"},
+ {"£", "£"},
+ {"¤", "¤"},
+ {"¥", "¥"},
+ {"&brkbar;", "¦"},
+ {"§", "§"},
+ {"¨", "¨"},
+ {"©", "©"},
+ {"ª", "ª"},
+ {"«", "«"},
+ {"¬", "¬"},
+ {"®", "®"},
+ {"¯", "¯"},
+ {"°", "°"},
+ {"±", "±"},
+ {"²", "²"},
+ {"³", "³"},
+ {"´", "´"},
+ {"µ", "µ"},
+ {"¶", "¶"},
+ {"·", "·"},
+ {"¸", "¸"},
+ {"¹", "¹"},
+ {"º", "º"},
+ {"»;", "»"},
+ {"¼", "¼"},
+ {"½", "½"},
+ {"¾", "¾"},
+ {"¿", "¿"},
+ {"À", "À"},
+ {"Á", "Á"},
+ {"Â", "Â"},
+ {"Ã", "Ã"},
+ {"Ä", "Ä"},
+ {"Å", "Å"},
+ {"Æ", "Æ"},
+ {"Ç", "Ç"},
+ {"È", "È"},
+ {"É", "É"},
+ {"Ê", "Ê"},
+ {"Ë", "Ë"},
+ {"Ì", "Ì"},
+ {"Í", "Í"},
+ {"Î", "Î"},
+ {"Ï", "Ï"},
+ {"Ð", "Ð"},
+ {"Ñ", "Ñ"},
+ {"Ò", "Ò"},
+ {"Ó", "Ó"},
+ {"Ô", "Ô"},
+ {"Õ", "Õ"},
+ {"Ö", "Ö"},
+ {"×", "×"},
+ {"Ø", "Ø"},
+ {"Ù;", "Ù"},
+ {"Ú", "Ú"},
+ {"Û", "Û"},
+ {"Ü", "Ü"},
+ {"Ý", "Ý"},
+ {"Þ", "Þ"},
+ {"ß", "ß"},
+ {"à", "à"},
+ {"á", "á"},
+ {"â", "â"},
+ {"ã", "ã"},
+ {"ä", "ä"},
+ {"å", "å"},
+ {"æ", "æ"},
+ {"ç", "ç"},
+ {"è", "è"},
+ {"é", "é"},
+ {"ê", "ê"},
+ {"ë", "ë"},
+ {"ì", "ì"},
+ {"í", "í"},
+ {"î", "î"},
+ {"ï", "ï"},
+ {"ð", "ð"},
+ {"ñ", "ñ"},
+ {"ò", "ò"},
+ {"ó", "ó"},
+ {"ô", "ô"},
+ {"õ", "õ"},
+ {"ö", "ö"},
+ {"÷", "÷"},
+ {"ø", "ø"},
+ {"ù", "ù"},
+ {"ú", "ú"},
+ {"û", "û"},
+ {"ü", "ü"},
+ {"ý", "ý"},
+ {"þ", "þ"},
+ {"ÿ", "ÿ"}
+ }));
+}
+
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("¥ & < «" == 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", "¥ & < «");
+ 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", "¥ & < «");
+ REQUIRE("¥ & < «" == expr({flow_file_a}).asString());
+}
+
TEST_CASE("Encode CSV", "[expressionEncodeCSV]") { // NOLINT
auto expr = expression::compile("${message:escapeCsv()}");