Search in sources :

Example 11 with IToken

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);
}
Also used : IToken(org.eclipse.jface.text.rules.IToken) PatternRule(org.eclipse.jface.text.rules.PatternRule) TextAttribute(org.eclipse.jface.text.TextAttribute) IToken(org.eclipse.jface.text.rules.IToken) Token(org.eclipse.jface.text.rules.Token) WordRule(org.eclipse.jface.text.rules.WordRule) Document(org.eclipse.jface.text.Document) IDocument(org.eclipse.jface.text.IDocument) RuleBasedScanner(org.eclipse.jface.text.rules.RuleBasedScanner) IRule(org.eclipse.jface.text.rules.IRule) IDocument(org.eclipse.jface.text.IDocument) Test(org.junit.Test)

Example 12 with IToken

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);
}
Also used : IToken(org.eclipse.jface.text.rules.IToken) PatternRule(org.eclipse.jface.text.rules.PatternRule) TextAttribute(org.eclipse.jface.text.TextAttribute) IToken(org.eclipse.jface.text.rules.IToken) Token(org.eclipse.jface.text.rules.Token) WordRule(org.eclipse.jface.text.rules.WordRule) Document(org.eclipse.jface.text.Document) IDocument(org.eclipse.jface.text.IDocument) RuleBasedScanner(org.eclipse.jface.text.rules.RuleBasedScanner) IRule(org.eclipse.jface.text.rules.IRule) IDocument(org.eclipse.jface.text.IDocument) Test(org.junit.Test)

Example 13 with IToken

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;
}
Also used : IToken(org.eclipse.jface.text.rules.IToken)

Example 14 with IToken

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;
}
Also used : IToken(org.eclipse.jface.text.rules.IToken)

Example 15 with IToken

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;
}
Also used : IToken(org.eclipse.jface.text.rules.IToken)

Aggregations

IToken (org.eclipse.jface.text.rules.IToken)26 Token (org.eclipse.jface.text.rules.Token)10 IDocument (org.eclipse.jface.text.IDocument)8 Test (org.junit.Test)8 Document (org.eclipse.jface.text.Document)7 IPartitionTokenScanner (org.eclipse.jface.text.rules.IPartitionTokenScanner)7 IPredicateRule (org.eclipse.jface.text.rules.IPredicateRule)7 MultiLineRule (org.eclipse.jface.text.rules.MultiLineRule)7 RuleBasedPartitionScanner (org.eclipse.jface.text.rules.RuleBasedPartitionScanner)7 TextStyle (org.eclipse.swt.graphics.TextStyle)4 TextAttribute (org.eclipse.jface.text.TextAttribute)3 IRule (org.eclipse.jface.text.rules.IRule)3 RuleBasedScanner (org.eclipse.jface.text.rules.RuleBasedScanner)3 WordRule (org.eclipse.jface.text.rules.WordRule)3 ArrayList (java.util.ArrayList)2 ITokenScanner (org.eclipse.jface.text.rules.ITokenScanner)2 PatternRule (org.eclipse.jface.text.rules.PatternRule)2 Before (org.junit.Before)2 TreeSet (java.util.TreeSet)1 AnchorWordDetector (org.dadacoalition.yedit.editor.scanner.AnchorWordDetector)1