NEURON
regexp.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 1987, 1988, 1989, 1990, 1991 Stanford University
3  * Copyright (c) 1991 Silicon Graphics, Inc.
4  *
5  * Permission to use, copy, modify, distribute, and sell this software and
6  * its documentation for any purpose is hereby granted without fee, provided
7  * that (i) the above copyright notices and this permission notice appear in
8  * all copies of the software and related documentation, and (ii) the names of
9  * Stanford and Silicon Graphics may not be used in any advertising or
10  * publicity relating to the software without the specific, prior written
11  * permission of Stanford and Silicon Graphics.
12  *
13  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
14  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
15  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
16  *
17  * IN NO EVENT SHALL STANFORD OR SILICON GRAPHICS BE LIABLE FOR
18  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
19  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
20  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
21  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
22  * OF THIS SOFTWARE.
23  */
24 
25 /*
26  * Regexp - regular expression searching
27  */
28 
29 #ifndef iv_regexp_h
30 #define iv_regexp_h
31 
32 #include <InterViews/enter-scope.h>
33 
34 /*
35  * These definitions are from Henry Spencers public-domain regular
36  * expression matching routines.
37  *
38  * Definitions etc. for regexp(3) routines.
39  *
40  * Caveat: this is V8 regexp(3) [actually, a reimplementation thereof],
41  * not the System V one.
42  */
43 #define NSUBEXP 10
44 struct regexp {
45  char *startp[NSUBEXP];
46  char *endp[NSUBEXP];
47  char *textStart;
48  char regstart; /* Internal use only. */
49  char reganch; /* Internal use only. */
50  char *regmust; /* Internal use only. */
51  int regmlen; /* Internal use only. */
52  char program[1]; /* Unwarranted chumminess with compiler. */
53 };
54 
55 /*
56  * The first byte of the regexp internal "program" is actually this magic
57  * number; the start node begins in the second byte. This used to be the octal
58  * integer literal 0234 = 156, which would be implicitly converted to -100 when
59  * narrowing to signed 8 bit char. This conversion was implementation defined
60  * before C++20.
61  */
62 #define REGEXP_MAGIC static_cast<char>(-100)
63 
64 class Regexp {
65 public:
66  Regexp(const char*);
67  Regexp(const char*, int length);
68  ~Regexp();
69 
70  const char* pattern() const;
71  int Search(const char* text, int length, int index, int range);
72  int Match(const char* text, int length, int index);
73  int BeginningOfMatch(int subexp = 0);
74  int EndOfMatch(int subexp = 0);
75 private:
76  char* pattern_;
78 };
79 
80 #endif
short index
Definition: cabvars.h:10
Definition: regexp.h:64
regexp * c_pattern
Definition: regexp.h:77
int Match(const char *text, int length, int index)
Definition: regexp.cpp:206
int EndOfMatch(int subexp=0)
Definition: regexp.cpp:234
int BeginningOfMatch(int subexp=0)
Definition: regexp.cpp:227
char * pattern_
Definition: regexp.h:76
int Search(const char *text, int length, int index, int range)
Definition: regexp.cpp:111
~Regexp()
Definition: regexp.cpp:100
Regexp(const char *)
Definition: regexp.cpp:77
const char * pattern() const
Definition: regexp.cpp:109
#define text
Definition: plot.cpp:85
#define NSUBEXP
Definition: regexp.h:43
Definition: regexp.h:44
char * startp[NSUBEXP]
Definition: regexp.h:45
char * regmust
Definition: regexp.h:50
char reganch
Definition: regexp.h:49
char program[1]
Definition: regexp.h:52
int regmlen
Definition: regexp.h:51
char * textStart
Definition: regexp.h:47
char * endp[NSUBEXP]
Definition: regexp.h:46
char regstart
Definition: regexp.h:48