PageRenderTime 65ms CodeModel.GetById 59ms app.highlight 4ms RepoModel.GetById 1ms app.codeStats 0ms

/jEdit/tags/jedit-4-0-pre5/gnu/regexp/RETokenLookAhead.java

#
Java | 68 lines | 38 code | 6 blank | 24 comment | 8 complexity | 71247d1b97362fab6a90113112fe9e14 MD5 | raw file
 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 */
19package gnu.regexp;
20
21/**
22 * @since gnu.regexp 1.1.3
23 * @author Shashank Bapat
24 */
25final 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