KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > gnu > regexp > RETokenLookAhead


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 JavaDoc os) {
62     os.append("(?");
63     os.append(negative ? '!' : '=');
64     re.dumpAll(os);
65     os.append(')');
66     }
67 }
68
69
Popular Tags