Search in sources :

Example 16 with IToken

use of org.eclipse.jface.text.rules.IToken in project translationstudio8 by heartsome.

the class InnerTagRule method evaluate.

@SuppressWarnings("unchecked")
@Override
public IToken evaluate(ICharacterScanner scanner) {
    int c = scanner.read();
    if (c != ICharacterScanner.EOF && fDetector.isWordStart((char) c)) {
        if (fColumn == UNDEFINED || (fColumn == scanner.getColumn() - 1)) {
            fBuffer.setLength(0);
            do {
                fBuffer.append((char) c);
                c = scanner.read();
            } while (fDetector.isWordPart((char) c) && c != ICharacterScanner.EOF);
            scanner.unread();
            String buffer = fBuffer.toString();
            IToken token = null;
            Set<String> set = fWords.keySet();
            for (String re : set) {
                if (re != null && buffer.matches(re)) {
                    token = (IToken) fWords.get(re);
                    break;
                }
            }
            if (token != null) {
                // 匹配并得到样式
                return token;
            }
            if (fDefaultToken.isUndefined()) {
                unreadBuffer(scanner);
            }
            return fDefaultToken;
        }
    } else {
    }
    scanner.unread();
    return Token.UNDEFINED;
}
Also used : IToken(org.eclipse.jface.text.rules.IToken)

Example 17 with IToken

use of org.eclipse.jface.text.rules.IToken in project translationstudio8 by heartsome.

the class PresentationRepairer method createPresentation.

public void createPresentation(TextPresentation presentation, ITypedRegion region) {
    if (fScanner == null) {
        // will be removed if deprecated constructor will be removed
        addRange(presentation, region.getOffset(), region.getLength(), fDefaultTextStyle);
        return;
    }
    int lastStart = region.getOffset();
    int length = 0;
    boolean firstToken = true;
    IToken lastToken = Token.UNDEFINED;
    TextStyle lastTextStyle = getTokenTextStyle(lastToken);
    fScanner.setRange(fDocument, lastStart, region.getLength());
    while (true) {
        IToken token = fScanner.nextToken();
        if (token.isEOF())
            break;
        TextStyle textStyle = getTokenTextStyle(token);
        if (lastTextStyle != null && lastTextStyle.equals(textStyle)) {
            length += fScanner.getTokenLength();
            firstToken = false;
        } else {
            if (!firstToken)
                addRange(presentation, lastStart, length, lastTextStyle);
            firstToken = false;
            lastToken = token;
            lastTextStyle = textStyle;
            lastStart = fScanner.getTokenOffset();
            length = fScanner.getTokenLength();
        }
    }
    addRange(presentation, lastStart, length, lastTextStyle);
}
Also used : IToken(org.eclipse.jface.text.rules.IToken) TextStyle(org.eclipse.swt.graphics.TextStyle) Point(org.eclipse.swt.graphics.Point)

Example 18 with IToken

use of org.eclipse.jface.text.rules.IToken in project translationstudio8 by heartsome.

the class TagStyleConfigurator method configure.

public static void configure(TextLayout textLayout) {
    String text = textLayout.getText();
    Document doc = new Document(text);
    ITokenScanner scanner = getRecipeScanner(doc);
    scanner.setRange(doc, 0, doc.getLength());
    IToken token;
    while ((token = scanner.nextToken()) != Token.EOF) {
        int offset = scanner.getTokenOffset();
        int length = scanner.getTokenLength();
        Object data = token.getData();
        if (data != null && data instanceof TextStyle) {
            TextStyle textStyle = (TextStyle) data;
            textLayout.setStyle(textStyle, offset, offset + length - 1);
        }
    }
}
Also used : IToken(org.eclipse.jface.text.rules.IToken) TextStyle(org.eclipse.swt.graphics.TextStyle) Document(org.eclipse.jface.text.Document) IDocument(org.eclipse.jface.text.IDocument) ITokenScanner(org.eclipse.jface.text.rules.ITokenScanner)

Example 19 with IToken

use of org.eclipse.jface.text.rules.IToken in project translationstudio8 by heartsome.

the class PresentationRepairer method createPresentation.

public void createPresentation(TextPresentation presentation, ITypedRegion region) {
    if (fScanner == null) {
        // will be removed if deprecated constructor will be removed
        addRange(presentation, region.getOffset(), region.getLength(), fDefaultTextStyle);
        return;
    }
    int lastStart = region.getOffset();
    int length = 0;
    boolean firstToken = true;
    IToken lastToken = Token.UNDEFINED;
    TextStyle lastTextStyle = getTokenTextStyle(lastToken);
    fScanner.setRange(fDocument, lastStart, region.getLength());
    while (true) {
        IToken token = fScanner.nextToken();
        if (token.isEOF())
            break;
        TextStyle textStyle = getTokenTextStyle(token);
        if (lastTextStyle != null && lastTextStyle.equals(textStyle)) {
            length += fScanner.getTokenLength();
            firstToken = false;
        } else {
            if (!firstToken)
                addRange(presentation, lastStart, length, lastTextStyle);
            firstToken = false;
            lastToken = token;
            lastTextStyle = textStyle;
            lastStart = fScanner.getTokenOffset();
            length = fScanner.getTokenLength();
        }
    }
    addRange(presentation, lastStart, length, lastTextStyle);
}
Also used : IToken(org.eclipse.jface.text.rules.IToken) TextStyle(org.eclipse.swt.graphics.TextStyle)

Example 20 with IToken

use of org.eclipse.jface.text.rules.IToken in project translationstudio8 by heartsome.

the class InnerTagRule method evaluate.

@SuppressWarnings("unchecked")
@Override
public IToken evaluate(ICharacterScanner scanner) {
    int c = scanner.read();
    if (c != ICharacterScanner.EOF && fDetector.isWordStart((char) c)) {
        if (fColumn == UNDEFINED || (fColumn == scanner.getColumn() - 1)) {
            fBuffer.setLength(0);
            do {
                fBuffer.append((char) c);
                c = scanner.read();
            } while (fDetector.isWordPart((char) c) && c != ICharacterScanner.EOF);
            scanner.unread();
            String buffer = fBuffer.toString();
            IToken token = null;
            Set<String> set = fWords.keySet();
            for (String re : set) {
                if (re != null && buffer.matches(re)) {
                    token = (IToken) fWords.get(re);
                    break;
                }
            }
            if (token != null) {
                // 匹配并得到样式
                if (ruleType == TYPE_TAG_START_INDEX || ruleType == TYPE_TAG_Content) {
                    start = true;
                    return token;
                } else if (ruleType == TYPE_TAG_END_INDEX && start) {
                    start = false;
                    return token;
                }
            }
            if (fDefaultToken.isUndefined()) {
                unreadBuffer(scanner);
            }
            return fDefaultToken;
        }
    } else {
        // 仍然没有匹配的时候,将 start 状态恢复为 false。
        if (ruleType == TYPE_TAG_Content) {
            start = false;
        }
    }
    scanner.unread();
    return Token.UNDEFINED;
}
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