summaryrefslogtreecommitdiffstats
path: root/Source/cmRegularExpression.h
diff options
context:
space:
mode:
authorBill Hoffman <bill.hoffman@kitware.com>2000-08-29 19:26:29 (GMT)
committerBill Hoffman <bill.hoffman@kitware.com>2000-08-29 19:26:29 (GMT)
commit1f42f521cea8b953f4ad7ef5ca0d4c6d49c42a88 (patch)
treea7b88a2e4397167c0d6c72c9cf0fcf8f91dcd024 /Source/cmRegularExpression.h
parentd6bdba1096f36268e414f32829e22159e983031a (diff)
downloadCMake-1f42f521cea8b953f4ad7ef5ca0d4c6d49c42a88.zip
CMake-1f42f521cea8b953f4ad7ef5ca0d4c6d49c42a88.tar.gz
CMake-1f42f521cea8b953f4ad7ef5ca0d4c6d49c42a88.tar.bz2
NEW: move from tools and config to create CMake
Diffstat (limited to 'Source/cmRegularExpression.h')
-rw-r--r--Source/cmRegularExpression.h214
1 files changed, 214 insertions, 0 deletions
diff --git a/Source/cmRegularExpression.h b/Source/cmRegularExpression.h
new file mode 100644
index 0000000..fd11293
--- /dev/null
+++ b/Source/cmRegularExpression.h
@@ -0,0 +1,214 @@
+/*=========================================================================
+
+ Program: Insight Segmentation & Registration Toolkit
+ Module: $RCSfile$
+ Language: C++
+ Date: $Date$
+ Version: $Revision$
+
+
+ Copyright (c) 2000 National Library of Medicine
+ All rights reserved.
+
+ See COPYRIGHT.txt for copyright details.
+
+=========================================================================*/
+/// Original Copyright notice:
+// Copyright (C) 1991 Texas Instruments Incorporated.
+//
+// Permission is granted to any individual or institution to use, copy, modify,
+// and distribute this software, provided that this complete copyright and
+// permission notice is maintained, intact, in all copies and supporting
+// documentation.
+//
+// Texas Instruments Incorporated provides this software "as is" without
+// express or implied warranty.
+//
+// .LIBRARY vbl
+// .HEADER Basics Package
+// .INCLUDE cmRegularExpression.h
+// .FILE cmRegularExpression.cxx
+//
+#ifndef cmRegularExpression_h
+#define cmRegularExpression_h
+
+#include <string>
+
+const int NSUBEXP = 10;
+
+//: Pattern matching with regular expressions
+// A regular expression allows a programmer to specify complex
+// patterns that can be searched for and matched against the
+// character string of a string object. In its simplest form, a
+// regular expression is a sequence of characters used to
+// search for exact character matches. However, many times the
+// exact sequence to be found is not known, or only a match at
+// the beginning or end of a string is desired. The vbl regu-
+// lar expression class implements regular expression pattern
+// matching as is found and implemented in many UNIX commands
+// and utilities.
+//
+// Example: The perl code
+//
+// $filename =~ m"([a-z]+)\.cc";
+// print $1;
+//
+// Is written as follows in C++
+//
+// vbl_reg_exp re("([a-z]+)\\.cc");
+// re.find(filename);
+// cerr << re.match(1);
+//
+//
+// The regular expression class provides a convenient mechanism
+// for specifying and manipulating regular expressions. The
+// regular expression object allows specification of such pat-
+// terns by using the following regular expression metacharac-
+// ters:
+//
+// ^ Matches at beginning of a line
+//
+// $ Matches at end of a line
+//
+// . Matches any single character
+//
+// [ ] Matches any character(s) inside the brackets
+//
+// [^ ] Matches any character(s) not inside the brackets
+//
+// - Matches any character in range on either side of a dash
+//
+// * Matches preceding pattern zero or more times
+//
+// + Matches preceding pattern one or more times
+//
+// ? Matches preceding pattern zero or once only
+//
+// () Saves a matched expression and uses it in a later match
+//
+// Note that more than one of these metacharacters can be used
+// in a single regular expression in order to create complex
+// search patterns. For example, the pattern [^ab1-9] says to
+// match any character sequence that does not begin with the
+// characters "ab" followed by numbers in the series one
+// through nine.
+//
+class cmRegularExpression {
+public:
+ inline cmRegularExpression (); // cmRegularExpression with program=NULL
+ inline cmRegularExpression (char const*); // cmRegularExpression with compiled char*
+ cmRegularExpression (cmRegularExpression const&); // Copy constructor
+ inline ~cmRegularExpression(); // Destructor
+
+ void compile (char const*); // Compiles char* --> regexp
+ bool find (char const*); // true if regexp in char* arg
+ bool find (std::string const&); // true if regexp in char* arg
+ inline long start() const; // Index to start of first find
+ inline long end() const; // Index to end of first find
+
+ bool operator== (cmRegularExpression const&) const; // Equality operator
+ inline bool operator!= (cmRegularExpression const&) const; // Inequality operator
+ bool deep_equal (cmRegularExpression const&) const; // Same regexp and state?
+
+ inline bool is_valid() const; // true if compiled regexp
+ inline void set_invalid(); // Invalidates regexp
+
+ // awf added
+ int start(int n) const;
+ int end(int n) const;
+ std::string match(int n) const;
+
+private:
+ const char* startp[NSUBEXP];
+ const char* endp[NSUBEXP];
+ char regstart; // Internal use only
+ char reganch; // Internal use only
+ const char* regmust; // Internal use only
+ int regmlen; // Internal use only
+ char* program;
+ int progsize;
+ const char* searchstring;
+};
+
+// cmRegularExpression -- Creates an empty regular expression.
+
+inline cmRegularExpression::cmRegularExpression () {
+ this->program = NULL;
+}
+
+
+// cmRegularExpression -- Creates a regular expression from string s, and
+// compiles s.
+
+
+inline cmRegularExpression::cmRegularExpression (const char* s) {
+ this->program = NULL;
+ compile(s);
+}
+
+// ~cmRegularExpression -- Frees space allocated for regular expression.
+
+inline cmRegularExpression::~cmRegularExpression () {
+//#ifndef WIN32
+ delete [] this->program;
+//#endif
+}
+
+// Start --
+
+inline long cmRegularExpression::start () const {
+ return(this->startp[0] - searchstring);
+}
+
+
+// End -- Returns the start/end index of the last item found.
+
+
+inline long cmRegularExpression::end () const {
+ return(this->endp[0] - searchstring);
+}
+
+
+// operator!= //
+
+inline bool cmRegularExpression::operator!= (const cmRegularExpression& r) const {
+ return(!(*this == r));
+}
+
+
+// is_valid -- Returns true if a valid regular expression is compiled
+// and ready for pattern matching.
+
+inline bool cmRegularExpression::is_valid () const {
+ return (this->program != NULL);
+}
+
+
+// set_invalid -- Invalidates regular expression.
+
+inline void cmRegularExpression::set_invalid () {
+//#ifndef WIN32
+ delete [] this->program;
+//#endif
+ this->program = NULL;
+}
+
+// -- Return start index of nth submatch. start(0) is the start of the full match.
+inline int cmRegularExpression::start(int n) const
+{
+ return this->startp[n] - searchstring;
+}
+
+// -- Return end index of nth submatch. end(0) is the end of the full match.
+inline int cmRegularExpression::end(int n) const
+{
+ return this->endp[n] - searchstring;
+}
+
+// -- Return nth submatch as a string.
+inline std::string cmRegularExpression::match(int n) const
+{
+ return std::string(this->startp[n], this->endp[n] - this->startp[n]);
+}
+
+#endif // cmRegularExpressionh