]> git.saurik.com Git - wxWidgets.git/blob - src/stc/scintilla/include/PosRegExp.h
fixed bug 128581
[wxWidgets.git] / src / stc / scintilla / include / PosRegExp.h
1 #ifndef POSREGEXP_H
2 #define POSREGEXP_H
3
4 #define MatchesNum 0x10
5
6 enum EOps
7 {
8 ReBlockOps = 0x1000,
9 ReMul, // *
10 RePlus, // +
11 ReQuest, // ?
12 ReNGMul, // *?
13 ReNGPlus, // +?
14 ReNGQuest, // ??
15 ReRangeN, // {n,}
16 ReRangeNM, // {n,m}
17 ReNGRangeN, // {n,}?
18 ReNGRangeNM, // {n,m}?
19 ReOr, // |
20 ReBehind = 0x1100, // ?#n
21 ReNBehind = 0x1200, // ?~n
22 ReAhead = 0x1300, // ?=
23 ReNAhead = 0x1400, // ?!
24
25 ReSymbolOps = 0x2000,
26 ReEmpty,
27 ReSymb, // a b \W \s ...
28 ReEnum, // []
29 ReNEnum, // [^]
30 ReBrackets, // (...)
31 ReBkTrace = 0x2100, // \yN
32 ReBkBrack = 0x2200 // \N
33 };
34
35 enum ESymbols
36 {
37 ReAnyChr = 0x4000, // .
38 ReSoL, // ^
39 ReEoL, // $
40 ReDigit, // \d
41 ReNDigit, // \D
42 ReWordSymb, // \w
43 ReNWordSymb, // \W
44 ReWSpace, // \s
45 ReNWSpace, // \S
46 ReUCase, // \u
47 ReNUCase , // \l
48 ReWBound, // \b
49 ReNWBound, // \B
50 RePreNW, // \c
51 ReStart, // \m
52 ReEnd, // \M
53
54 ReChr = 0x0 // Char in Lower Byte
55 };
56 enum ETempSymb
57 {
58 ReTemp = 0x7000,
59 ReLBrack, ReRBrack,
60 ReEnumS, ReEnumE, ReNEnumS,
61 ReRangeS, ReRangeE, ReNGRangeE, ReFrToEnum
62 };
63
64 #define BackSlash '\\'
65
66 typedef union SCharData
67 {
68 int IArr[8];
69 char CArr[32];
70 void SetBit(unsigned char Bit);
71 void ClearBit(unsigned char Bit);
72 bool GetBit(unsigned char Bit);
73 } *PCharData;
74
75 typedef struct SRegInfo
76 {
77 SRegInfo();
78 ~SRegInfo();
79
80 EOps Op;
81 union{
82 SRegInfo *Param;
83 int Symb;
84 PCharData ChrClass;
85 }un;
86 int s,e;
87 SRegInfo *Parent;
88 SRegInfo *Next;
89 } *PRegInfo;
90
91 typedef struct SMatches
92 {
93 int s[MatchesNum];
94 int e[MatchesNum];
95 int CurMatch;
96 } *PMatches;
97
98 typedef class PosRegExp
99 {
100 PRegInfo Info;
101 PMatches BkTrace;
102 bool NoCase,Extend,NoMoves;
103 bool Error;
104 int *Exprn;
105 int posParse;
106 int posEnd,posStart;
107 int posBkStr;
108 int FirstChar;
109
110 bool SetExprLow(const char *Expr);
111 bool SetStructs(PRegInfo &Info,int st,int end);
112 void Optimize();
113 bool CheckSymb(int Symb,bool Inc);
114 bool LowParse(PRegInfo Re);
115 bool LowParseRe(PRegInfo &Next);
116 bool LowCheckNext(PRegInfo Re);
117 bool ParseRe(int posStr);
118 bool QuickCheck();
119 public:
120 PMatches Matches;
121 int Ok, CurMatch;
122
123 void *param;
124 char (*CharAt)(int pos, void *param);
125
126 PosRegExp();
127 ~PosRegExp();
128
129 bool isok();
130 bool SetNoMoves(bool Moves);
131 bool SetBkTrace(int posStr,PMatches Trace);
132 bool SetExpr(const char *Expr);
133 bool Parse(int posStr, int posStop, PMatches Mtch);
134 bool Parse(int posStr,int posSol, int posEol, PMatches Mtch, int Moves = -1);
135 bool Evaluate(char *Expr, int posStr, PMatches Mtch, char **Res);
136 } *PPosRegExp;
137
138 #endif /* POSREGEXP_H */