use of org.eclipse.jface.text.rules.IToken in project eclipse.platform.text by eclipse.
the class WordRuleTest method testBug175712_2.
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=175712
@Test
public void testBug175712_2() throws Exception {
IRule[] rules = new IRule[2];
IToken stepToken = new Token(new TextAttribute(null, null, SWT.BOLD));
PatternRule stepRule = new PatternRule("(((", ")", stepToken, (char) 0, false);
stepRule.setColumnConstraint(-1);
rules[1] = stepRule;
IToken titleToken = new Token(new TextAttribute(null, null, SWT.BOLD));
WordRule wordRule = new WordRule(new SimpleWordDetector());
wordRule.addWord("((", titleToken);
rules[0] = wordRule;
IDocument document = new Document("((\n((\n- Cheese\n- Wine");
RuleBasedScanner scanner = new RuleBasedScanner();
scanner.setRules(rules);
scanner.setRange(document, 0, document.getLength());
IToken defaultToken = new Token(this);
scanner.setDefaultReturnToken(defaultToken);
IToken token = scanner.nextToken();
assertSame(titleToken, token);
}
use of org.eclipse.jface.text.rules.IToken in project eclipse.platform.text by eclipse.
the class WordRuleTest method testBug175712_1.
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=175712
@Test
public void testBug175712_1() throws Exception {
IRule[] rules = new IRule[2];
IToken stepToken = new Token(new TextAttribute(null, null, SWT.BOLD));
PatternRule stepRule = new PatternRule("(((", ")", stepToken, (char) 0, false);
stepRule.setColumnConstraint(-1);
rules[1] = stepRule;
IToken titleToken = new Token(new TextAttribute(null, null, SWT.BOLD));
WordRule wordRule = new WordRule(new SimpleWordDetector());
wordRule.addWord("((", titleToken);
rules[0] = wordRule;
IDocument document = new Document("((( \n((\n- Cheese\n- Wine");
RuleBasedScanner scanner = new RuleBasedScanner();
scanner.setRules(rules);
scanner.setRange(document, 0, document.getLength());
IToken defaultToken = new Token(this);
scanner.setDefaultReturnToken(defaultToken);
IToken token = scanner.nextToken();
assertSame(defaultToken, token);
token = scanner.nextToken();
assertSame(defaultToken, token);
token = scanner.nextToken();
assertSame(defaultToken, token);
token = scanner.nextToken();
assertSame(titleToken, token);
}
use of org.eclipse.jface.text.rules.IToken in project linuxtools by eclipse.
the class SuppressionKindRule method evaluate.
@Override
public IToken evaluate(ICharacterScanner scanner) {
IToken result = subrule.evaluate(scanner);
StringBuffer tool = new StringBuffer();
StringBuffer kind = new StringBuffer();
if (!result.isUndefined()) {
boolean match = true;
// move to beginning of token
int tokenLength = ((SuppressionsElementScanner) scanner).getTokenLength();
for (int i = 0; i < tokenLength; i++) {
scanner.unread();
}
// check first char before token is a ':'
match = checkColon(scanner);
if (match) {
// move to beginning of line
int preTokenLength = 0;
while (scanner.getColumn() > 0) {
scanner.unread();
preTokenLength++;
}
// ensure any leading characters are whitespace
boolean foundChar = false;
while (preTokenLength-- > 1) {
// skip colon
int ch = scanner.read();
if (match && !Character.isWhitespace(ch)) {
foundChar = true;
tool.append(Character.toChars(ch));
} else if (foundChar) {
// encountered whitespace after tool name started
match = false;
}
}
// consume colon
scanner.read();
// reset to end of token
for (int i = 0; i < tokenLength; i++) {
int ch = scanner.read();
if (match) {
kind.append(Character.toChars(ch));
}
}
// assert kind is valid for tool
if (match) {
List<String> kindList = kinds.get(tool.toString());
if (kindList == null || !kindList.contains(kind.toString())) {
match = false;
}
} else {
// reset to beginning of token
unreadBuffer(scanner, tokenLength);
}
}
if (!match) {
result = Token.UNDEFINED;
} else {
result = token;
}
}
return result;
}
use of org.eclipse.jface.text.rules.IToken in project linuxtools by eclipse.
the class SuppressionToolRule method evaluate.
@Override
public IToken evaluate(ICharacterScanner scanner) {
IToken result = subrule.evaluate(scanner);
if (!result.isUndefined()) {
boolean match = true;
int tokenLength = ((SuppressionsElementScanner) scanner).getTokenLength();
match = checkColon(scanner);
if (match) {
// move to beginning of token
for (int i = 0; i < tokenLength; i++) {
scanner.unread();
}
// move to beginning of line
int indentLength = 0;
while (scanner.getColumn() > 0) {
scanner.unread();
indentLength++;
}
// ensure any leading characters are whitespace
while (indentLength-- > 0) {
int ch = scanner.read();
if (!Character.isWhitespace(ch)) {
match = false;
}
}
// reset to end of token
for (int i = 0; i < tokenLength; i++) {
scanner.read();
}
}
if (!match) {
unreadBuffer(scanner, tokenLength);
result = Token.UNDEFINED;
} else {
result = token;
}
}
return result;
}
use of org.eclipse.jface.text.rules.IToken in project linuxtools by eclipse.
the class VersionReleaseRule method evaluate.
@Override
public IToken evaluate(ICharacterScanner scanner, boolean resume) {
// if the last token successfully read was not the fPreceedingToke fail
IToken lastToken = getLastToken();
if (lastToken != fPreceedingToken) {
return Token.UNDEFINED;
}
fBuffer.setLength(0);
int state = STATE_START;
int c;
int numPreceedingBlanks = 0;
do {
c = scanner.read();
fBuffer.append((char) c);
// preceeding white space
if (state == STATE_START) {
if (Character.isWhitespace((char) c) || c == '-') {
numPreceedingBlanks++;
} else {
state++;
}
}
// version state (first part of version-release)
if (state == STATE_VERSION) {
// the separator character
if (fBuffer.length() > numPreceedingBlanks && c == CHARS_SEPERATOR) {
state++;
} else // '.' in the version
if (!(Character.isLetterOrDigit((char) c) || c == '.' || c == '_' || c == ':')) {
unreadBuffer(scanner, fBuffer);
return Token.UNDEFINED;
}
} else // release state (second part of version-release)
if (state == STATE_RELEASE) {
// an EOF or EOL indicates success
if (c == ICharacterScanner.EOF || c == '\n') {
state = STATE_DONE;
} else // token) if and only if it is ended by and EOF or EOL
if (Character.isWhitespace((char) c)) {
state++;
fWhiteSpaceBuffer.setLength(0);
fWhiteSpaceBuffer.append(c);
} else if (!(Character.isLetterOrDigit((char) c) || c == '.' || c == '_')) {
// allow digits, characters or '.' in the release
unreadBuffer(scanner, fBuffer);
return Token.UNDEFINED;
}
} else // now looking for an EOF or EOL for success
if (state == STATE_TRAIL) {
// success, unwind the whitespace
if (c == ICharacterScanner.EOF || c == '\n') {
unreadBuffer(scanner, fWhiteSpaceBuffer);
state++;
} else // deal
if (!Character.isWhitespace((char) c)) {
unreadBuffer(scanner, fBuffer);
return Token.UNDEFINED;
} else {
// white space, keep reading
fWhiteSpaceBuffer.append((char) c);
}
}
} while (state != STATE_DONE);
// we've gone through all states until we've reached STATE_DONE, success
return fToken;
}
Aggregations