package org.python.pydev.editor;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.rules.ICharacterScanner;
import org.eclipse.jface.text.rules.IRule;
import org.eclipse.jface.text.rules.IToken;
import org.eclipse.jface.text.rules.Token;
public class PyDecoratorRule implements IRule {
private IToken decoratorToken;
public PyDecoratorRule(IToken decoratorToken) {
this.decoratorToken = decoratorToken;
}
public boolean isWordPart(int c) {
return c != '\n' && c != '\r' && c != '(' && c != -1;
}
@Override
public IToken evaluate(ICharacterScanner scanner) {
int c = scanner.read();
if (c != '@') {
scanner.unread();
return Token.UNDEFINED;
}
PyCodeScanner codeScanner = (PyCodeScanner) scanner;
String currLineContents;
try {
int diffOffset = -1; // we don't want to get the current '@'
currLineContents = codeScanner.getLineContentsToCursor(diffOffset);
} catch (BadLocationException e) {
scanner.unread();
return Token.UNDEFINED;
}
if (currLineContents.trim().length() == 0) {
// Ok, it's a decorator
do {
c = scanner.read();
} while (isWordPart(c));
scanner.unread();
return this.decoratorToken;
}
scanner.unread();
return Token.UNDEFINED;
}
}