18
18
import org.eclipse.jface.text.rules.Token;
20
20
public class GNUFileEntryRule implements IPredicateRule {
22
* The default token to be returned on success and if nothing else has been
25
protected IToken fileToken;
27
protected IWordDetector fDetector = new IWordDetector() {
30
public boolean isWordPart(char c) {
31
return Character.isJavaIdentifierPart(c) || c == '/' || c == '.' || c == '-';
35
public boolean isWordStart(char c) {
36
return Character.isJavaIdentifierPart(c) || c == '/' || c == '.';
41
private boolean started = false;
43
private IWhitespaceDetector fWsDetector = new IWhitespaceDetector() {
45
public boolean isWhitespace(char character) {
46
return Character.isWhitespace(character);
50
/** The column constraint */
51
protected int fColumn = UNDEFINED;
53
/** Internal setting for the un-initialized column constraint */
54
protected static final int UNDEFINED = -1;
56
/** Buffer used for pattern detection */
57
private StringBuffer fBuffer = new StringBuffer();
59
private String fStartingSequence = "* ";
61
public GNUFileEntryRule(IToken fileToken) {
62
this.fileToken = fileToken;
66
public IToken evaluate(ICharacterScanner scanner) {
67
return evaluate(scanner, false);
71
public IToken evaluate(ICharacterScanner scanner, boolean resume) {
72
int c = scanner.read();
74
if (started == false) {
75
for (int i = 0; i < fStartingSequence.length(); i++) {
76
fBuffer.append((char) c);
77
if (fStartingSequence.charAt(i) != c) {
78
unreadBuffer(scanner);
79
return Token.UNDEFINED;
83
} else if (c == ',') { // we are continuing after a comma (perhaps we have multiple entries
84
fBuffer.append((char) c);
86
while (c != ICharacterScanner.EOF && fWsDetector.isWhitespace((char)c)) {
87
fBuffer.append((char) c);
91
return ((GNUElementScanner)scanner).getDefaultToken();
94
boolean haveFilePart = false;
96
while (c != ICharacterScanner.EOF) {
97
if (fDetector.isWordPart((char) c)) {
98
fBuffer.append((char) c);
101
else if (c == '\\') {
102
fBuffer.append((char) c);
104
if (c == ICharacterScanner.EOF) {
105
unreadBuffer(scanner);
106
return Token.UNDEFINED;
108
fBuffer.append((char) c);
116
unreadBuffer(scanner);
117
return Token.UNDEFINED;
128
* Returns the characters in the buffer to the scanner.
131
* the scanner to be used
133
protected void unreadBuffer(ICharacterScanner scanner) {
134
for (int i = fBuffer.length() - 1; i >= 0; i--)
140
public IToken getSuccessToken() {
22
* The default token to be returned on success and if nothing else has been
25
protected IToken fileToken;
27
protected IWordDetector fDetector = new IWordDetector() {
30
public boolean isWordPart(char c) {
31
return Character.isJavaIdentifierPart(c) || c == '/' || c == '.' || c == '-';
35
public boolean isWordStart(char c) {
36
return Character.isJavaIdentifierPart(c) || c == '/' || c == '.';
41
private boolean started = false;
43
private IWhitespaceDetector fWsDetector = new IWhitespaceDetector() {
45
public boolean isWhitespace(char character) {
46
return Character.isWhitespace(character);
50
/** Internal setting for the un-initialized column constraint */
51
protected static final int UNDEFINED = -1;
53
/** Buffer used for pattern detection */
54
private StringBuffer fBuffer = new StringBuffer();
56
private String fStartingSequence = "* ";
58
public GNUFileEntryRule(IToken fileToken) {
59
this.fileToken = fileToken;
63
public IToken evaluate(ICharacterScanner scanner) {
64
return evaluate(scanner, false);
68
public IToken evaluate(ICharacterScanner scanner, boolean resume) {
69
int c = scanner.read();
71
if (started == false) {
72
for (int i = 0; i < fStartingSequence.length(); i++) {
73
fBuffer.append((char) c);
74
if (fStartingSequence.charAt(i) != c) {
75
unreadBuffer(scanner);
76
return Token.UNDEFINED;
80
} else if (c == ',') { // we are continuing after a comma (perhaps we have multiple entries
81
fBuffer.append((char) c);
83
while (c != ICharacterScanner.EOF && fWsDetector.isWhitespace((char)c)) {
84
fBuffer.append((char) c);
88
return ((GNUElementScanner)scanner).getDefaultToken();
91
boolean haveFilePart = false;
93
while (c != ICharacterScanner.EOF) {
94
if (fDetector.isWordPart((char) c)) {
95
fBuffer.append((char) c);
99
fBuffer.append((char) c);
101
if (c == ICharacterScanner.EOF) {
102
unreadBuffer(scanner);
103
return Token.UNDEFINED;
105
fBuffer.append((char) c);
113
unreadBuffer(scanner);
114
return Token.UNDEFINED;
125
* Returns the characters in the buffer to the scanner.
128
* the scanner to be used
130
private void unreadBuffer(ICharacterScanner scanner) {
131
for (int i = fBuffer.length() - 1; i >= 0; i--) {
138
public IToken getSuccessToken() {