blob: 952a945a9c8141e17fc5297100a8344a82d134e0 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
/*******************************************************************************
* Copyright (c) 2000, 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jface.text.rules;
import org.eclipse.core.runtime.Assert;
/**
* An implementation of <code>IRule</code> detecting a numerical value.
*/
public class NumberRule implements IRule {
/** Internal setting for the un-initialized column constraint */
protected static final int UNDEFINED= -1;
/** The token to be returned when this rule is successful */
protected IToken fToken;
/** The column constraint */
protected int fColumn= UNDEFINED;
/**
* Creates a rule which will return the specified
* token when a numerical sequence is detected.
*
* @param token the token to be returned
*/
public NumberRule(IToken token) {
Assert.isNotNull(token);
fToken= token;
}
/**
* Sets a column constraint for this rule. If set, the rule's token
* will only be returned if the pattern is detected starting at the
* specified column. If the column is smaller then 0, the column
* constraint is considered removed.
*
* @param column the column in which the pattern starts
*/
public void setColumnConstraint(int column) {
if (column < 0)
column= UNDEFINED;
fColumn= column;
}
@Override
public IToken evaluate(ICharacterScanner scanner) {
int c= scanner.read();
if (Character.isDigit((char)c)) {
if (fColumn == UNDEFINED || (fColumn == scanner.getColumn() - 1)) {
do {
c= scanner.read();
} while (Character.isDigit((char) c));
scanner.unread();
return fToken;
}
}
scanner.unread();
return Token.UNDEFINED;
}
}
|