--- a/src/smallut.h
+++ b/src/smallut.h
@@ -63,6 +63,8 @@
extern void stringtolower(std::string& io);
extern std::string stringtolower(const std::string& io);
+extern void stringtoupper(std::string& io);
+extern std::string stringtoupper(const std::string& io);
// Is one string the end part of the other ?
extern int stringisuffcmp(const std::string& s1, const std::string& s2);
@@ -141,6 +143,9 @@
/** Escape things like < or & by turning them into entities */
extern std::string escapeHtml(const std::string& in);
+/** Double-quote and escape to produce C source code string (prog generation) */
+extern std::string makeCString(const std::string& in);
+
/** Replace some chars with spaces (ie: newline chars). */
extern std::string neutchars(const std::string& str, const std::string& chars);
extern void neutchars(const std::string& str, std::string& out,
@@ -188,6 +193,30 @@
s = s.insert(0, len - s.length(), '0');
}
}
+
+// A class to solve platorm/compiler issues for simple regex
+// matches. Uses the appropriate native lib under the hood.
+// This always uses extended regexp syntax.
+class SimpleRegexp {
+public:
+ enum Flags {SRE_NONE = 0, SRE_ICASE = 1, SRE_NOSUB = 2};
+ /// @param nmatch must be >= the number of parenthesed subexp in exp
+ SimpleRegexp(const std::string& exp, int flags, int nmatch = 0);
+ ~SimpleRegexp();
+ /// Match input against exp, return true if matches
+ bool simpleMatch(const std::string& val) const;
+ /// After simpleMatch success, get nth submatch, 0 is the whole
+ /// match, 1 first parentheses, etc.
+ std::string getMatch(const std::string& val, int matchidx) const;
+ /// Calls simpleMatch()
+ bool operator() (const std::string& val) const;
+ /// Check after construction
+ bool ok() const;
+
+ class Internal;
+private:
+ Internal *m;
+};
// Code for static initialization of an stl map. Somewhat like Boost.assign.
// Ref: http://stackoverflow.com/questions/138600/initializing-a-static-stdmapint-int-in-c