summaryrefslogtreecommitdiffstats
path: root/Source/cmStringReplaceHelper.h
diff options
context:
space:
mode:
authorMarc Chevrier <marc.chevrier@sap.com>2018-04-03 13:09:53 (GMT)
committerMarc Chevrier <marc.chevrier@sap.com>2018-04-16 13:04:14 (GMT)
commitcdae12f8f86730e075598118ebe5fd2f11746af7 (patch)
tree9e8dfbd6dffbdcb571126f78346af549e176ce48 /Source/cmStringReplaceHelper.h
parent912c2a6c7f4c0e0f478740254d063f4f9cd2c892 (diff)
downloadCMake-cdae12f8f86730e075598118ebe5fd2f11746af7.zip
CMake-cdae12f8f86730e075598118ebe5fd2f11746af7.tar.gz
CMake-cdae12f8f86730e075598118ebe5fd2f11746af7.tar.bz2
string() Refactoring: creates an helper for REGEX REPLACE
Diffstat (limited to 'Source/cmStringReplaceHelper.h')
-rw-r--r--Source/cmStringReplaceHelper.h69
1 files changed, 69 insertions, 0 deletions
diff --git a/Source/cmStringReplaceHelper.h b/Source/cmStringReplaceHelper.h
new file mode 100644
index 0000000..938325a
--- /dev/null
+++ b/Source/cmStringReplaceHelper.h
@@ -0,0 +1,69 @@
+/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
+ file Copyright.txt or https://cmake.org/licensing for details. */
+#ifndef cmStringReplaceHelper_h
+#define cmStringReplaceHelper_h
+
+#include "cmsys/RegularExpression.hxx"
+
+#include <string>
+#include <vector>
+
+class cmMakefile;
+
+class cmStringReplaceHelper
+{
+public:
+ cmStringReplaceHelper(const std::string& regex,
+ const std::string& replace_expr,
+ cmMakefile* makefile = nullptr);
+
+ bool IsRegularExpressionValid() const
+ {
+ return this->RegularExpression.is_valid();
+ }
+ bool IsReplaceExpressionValid() const
+ {
+ return this->ValidReplaceExpression;
+ }
+
+ bool Replace(const std::string& input, std::string& output);
+
+ const std::string& GetError() { return this->ErrorString; }
+
+private:
+ class RegexReplacement
+ {
+ public:
+ RegexReplacement(const char* s)
+ : Number(-1)
+ , Value(s)
+ {
+ }
+ RegexReplacement(const std::string& s)
+ : Number(-1)
+ , Value(s)
+ {
+ }
+ RegexReplacement(int n)
+ : Number(n)
+ , Value()
+ {
+ }
+ RegexReplacement() {}
+
+ int Number;
+ std::string Value;
+ };
+
+ void ParseReplaceExpression();
+
+ std::string ErrorString;
+ std::string RegExString;
+ cmsys::RegularExpression RegularExpression;
+ bool ValidReplaceExpression = true;
+ std::string ReplaceExpression;
+ std::vector<RegexReplacement> Replacements;
+ cmMakefile* Makefile = nullptr;
+};
+
+#endif