diff options
Diffstat (limited to 'src/RESearch.h')
-rwxr-xr-x | src/RESearch.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/RESearch.h b/src/RESearch.h new file mode 100755 index 0000000..aa85579 --- /dev/null +++ b/src/RESearch.h @@ -0,0 +1,65 @@ +// Scintilla source code edit control +/** @file RESearch.h + ** Interface to the regular expression search library. + **/ +// Written by Neil Hodgson <neilh@scintilla.org> +// Based on the work of Ozan S. Yigit. +// This file is in the public domain. + +#ifndef RESEARCH_H +#define RESEARCH_H + +/* + * The following defines are not meant to be changeable. + * They are for readability only. + */ +#define MAXCHR 256 +#define CHRBIT 8 +#define BITBLK MAXCHR/CHRBIT + +class CharacterIndexer { +public: + virtual char CharAt(int index)=0; + virtual ~CharacterIndexer() { + } +}; + +class RESearch { + +public: + RESearch(CharClassify *charClassTable); + ~RESearch(); + bool GrabMatches(CharacterIndexer &ci); + const char *Compile(const char *pat, int length, bool caseSensitive, bool posix); + int Execute(CharacterIndexer &ci, int lp, int endp); + int Substitute(CharacterIndexer &ci, char *src, char *dst); + + enum {MAXTAG=10}; + enum {MAXNFA=2048}; + enum {NOTFOUND=-1}; + + int bopat[MAXTAG]; + int eopat[MAXTAG]; + char *pat[MAXTAG]; + +private: + void Init(); + void Clear(); + void ChSet(char c); + void ChSetWithCase(char c, bool caseSensitive); + + int PMatch(CharacterIndexer &ci, int lp, int endp, char *ap); + + int bol; + int tagstk[MAXTAG]; /* subpat tag stack */ + char nfa[MAXNFA]; /* automaton */ + int sta; + char bittab[BITBLK]; /* bit table for CCL pre-set bits */ + int failure; + CharClassify *charClass; + bool iswordc(unsigned char x) { + return charClass->IsWord(x); + } +}; + +#endif |