You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.5 KiB
65 lines
1.5 KiB
// 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
|
|
|