74a9bfe2465452951c27a6c1d4d98279edff15ba
[org.ibex.core.git] / src / gnu / regexp / RETokenLookAhead.java
1 /*
2  *  gnu/regexp/RETokenOneOf.java
3  *  Copyright (C) 1998-2001 Wes Biggs
4  *
5  *  This library is free software; you can redistribute it and/or modify
6  *  it under the terms of the GNU Lesser General Public License as published
7  *  by the Free Software Foundation; either version 2.1 of the License, or
8  *  (at your option) any later version.
9  *
10  *  This library is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU Lesser General Public License for more details.
14  *
15  *  You should have received a copy of the GNU Lesser General Public License
16  *  along with this program; if not, write to the Free Software
17  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  */
19 package gnu.regexp;
20
21 /**
22  * @since gnu.regexp 1.1.3
23  * @author Shashank Bapat
24  */
25 final class RETokenLookAhead extends REToken
26 {
27   REToken re;
28   boolean negative;
29
30   RETokenLookAhead(REToken re, boolean negative) throws REException {
31     super(0);
32     this.re = re;
33     this.negative = negative;
34   }
35
36   boolean match(CharIndexed input, REMatch mymatch)
37   {
38     REMatch trymatch = (REMatch)mymatch.clone();
39     REMatch trymatch1 = (REMatch)mymatch.clone();
40     REMatch newMatch = null;
41     if (re.match(input, trymatch)) {
42       if (negative) return false;
43       if (next(input, trymatch1))
44         newMatch = trymatch1;
45     }
46
47     if (newMatch != null) {
48       if (negative) return false;
49       //else
50       mymatch.assignFrom(newMatch);
51       return true;
52     }
53     else { // no match
54       if (negative)
55         return next(input, mymatch);
56       //else
57       return false;
58     }
59   }
60
61     void dump(StringBuffer os) {
62         os.append("(?");
63         os.append(negative ? '!' : '=');
64         re.dumpAll(os);
65         os.append(')');
66     }
67 }
68