]> Dogcows Code - chaz/yoink/blobdiff - src/moof/string.hh
mesh and other random adjustments
[chaz/yoink] / src / moof / string.hh
index d666aa1eba748037ddb79100d384c7d375dfb877..dd9d7918deb13ef9e27feab36423a66154db410d 100644 (file)
 
 /**
  * \file string.hh
- * Functions related to string manipulations.
+ * Functions and classes related to string manipulation.
  */
 
 #include <string>
 
+#include <boost/noncopyable.hpp>
+
 
 namespace moof {
 
@@ -42,8 +44,152 @@ wstring multi_to_wide(const string& multi);
 string wide_to_multi(const wstring& wide);
 
 
-} // namespace moof
+/**
+ * Class exposing the pattern-matching and substitution methods used in
+ * Lua.
+ */
+class regex : public boost::noncopyable
+{
+public:
+
+       /**
+        * Construct a regex object.
+        */
+       regex() {}
+
+       /**
+        * Construct a regex object with a pattern.
+        * \param pattern The pattern.
+        */
+       regex(const string& pattern);
+
+       /**
+        * Construct a regex object with a pattern and source to match.
+        * \param pattern The pattern.
+        * \param source The source string.
+        */
+       regex(const string& pattern, const string& source);
+
+       /**
+        * Deconstruct the regex.
+        */
+       ~regex();
+
+
+       /**
+        * Get the regex pattern.
+        */
+       string pattern() const;
+
+       /**
+        * Set the regex pattern.
+        */
+       void pattern(const string& pattern);
+
+
+       /**
+        * Match a string against the pattern iteratively.
+        * \param source The source string.
+        */
+       void match(const string& source);
+
+       /**
+        * Get the next match.  If the pattern contains captures, this version
+        * will only get the first capture.
+        * \param match Reference to a string to be assigned the match.
+        * \return True if there was a match to get, false otherwise.
+        */
+       bool get(string& match);
+
+       /**
+        * Get the next match.  Use this version if the pattern contains more
+        * than one capture to get all of the captures.
+        * \param captures Reference to a vector of strings to hold the result.
+        * \return True if there was a match to get, false otherwise.
+        */
+       bool get(std::vector<string>& captures);
+
+
+       /**
+        * Match a string against a pattern all at one time.
+        * \param pattern The pattern.
+        * \param source The source string.
+        * \param position The index of the first character of source to match.
+        * \return The match.
+        */
+       static string match(const string& pattern,
+                                               const string& source,
+                                               int position = 0)
+       {
+               string match;
+               regex::match(match, pattern, source, position);
+               return match;
+       }
+
+       /**
+        * Match a string against a pattern all at one time.
+        * \param match A reference to a string to be assigned the match.
+        * \param pattern The pattern.
+        * \param source The source string.
+        * \param position The index of the first character of source to match.
+        * \return True if a match was made, false otherwise.
+        */
+       static bool match(string& match,
+                                         const string& pattern,
+                                         const string& source,
+                                         int position = 0);
+
+       /**
+        * Match a string against a pattern all at one time.  If the pattern
+        * contains captures, the resulting vector will contain all of the
+        * captures.
+        * \param captures A reference to a vector of strings to contain the
+        * result.
+        * \param pattern The pattern.
+        * \param source The source string.
+        * \param position The index of the first character of source to match.
+        * \return True if a match was made, false otherwise.
+        */
+       static bool match(std::vector<string>& captures,
+                                         const string& pattern,
+                                         const string& source,
+                                         int position = 0);
+
+
+       /**
+        * Substitute a string using a pattern and replacement string.
+        * \param pattern The pattern.
+        * \param source The source string.
+        * \param replacement The replacement string; may also contain
+        * references to captures.
+        * \return The string with any substitutions made.
+        */
+       static string sub(const string& pattern,
+                                         const string& source,
+                                         const string& replacement)
+       {
+               string substitution;
+               regex::sub(substitution, pattern, source, replacement);
+               return substitution;
+       }
+
+       /**
+        * Substitute a string using a pattern and replacement string.
+        * \param substitution A reference to a string to contain the result.
+        * \param pattern The pattern.
+        * \param source The source string.
+        * \param replacement The replacement string; may also contain
+        * references to captures.
+        * \return The number of substitutions made.
+        */
+       static int sub(string& substitution,
+                                  const string& pattern,
+                                  const string& source,
+                                  const string& replacement);
+};
+
 
+} // namespace moof
 
 #endif // _MOOF_STRINGTOOLS_HH_
 
This page took 0.020162 seconds and 4 git commands to generate.