nescrulebasedscanner.java

来自「plugin for eclipse」· Java 代码 · 共 83 行

JAVA
83
字号
package isis.tinydt.editors.nesceditor;

import isis.tinydt.TinydtPlugin;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.jface.text.TextAttribute;
import org.eclipse.jface.text.rules.EndOfLineRule;
import org.eclipse.jface.text.rules.IRule;
import org.eclipse.jface.text.rules.IToken;
import org.eclipse.jface.text.rules.MultiLineRule;
import org.eclipse.jface.text.rules.RuleBasedScanner;
import org.eclipse.jface.text.rules.SingleLineRule;
import org.eclipse.jface.text.rules.Token;
import org.eclipse.jface.text.rules.WhitespaceRule;
import org.eclipse.jface.text.rules.WordRule;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Display;

public class NesCRuleBasedScanner extends RuleBasedScanner implements INesCSyntax 
{
	private static Color DEF= new Color(Display.getCurrent(), new RGB(0, 0, 0));

	public NesCRuleBasedScanner() 
	{
		int i;
		
		NesCColorProvider provider = TinydtPlugin.getDefault().getColorProvider();
		IToken keyword = new Token(new TextAttribute(provider
				.getColor(NesCColorProvider.KEYWORD), provider
				.getColor(NesCColorProvider.BACKGROUND), SWT.BOLD));
		IToken type = new Token(new TextAttribute(provider
				.getColor(NesCColorProvider.TYPE), provider
				.getColor(NesCColorProvider.BACKGROUND), SWT.BOLD));
		IToken string = new Token(new TextAttribute(provider
				.getColor(NesCColorProvider.STRING)));
		IToken comment = new Token(new TextAttribute(provider
				.getColor(NesCColorProvider.SINGLE_LINE_COMMENT)));
		
		IToken multicomment = new Token(new TextAttribute(provider
				.getColor(NesCColorProvider.MULTI_LINE_COMMENT)));
		
		IToken other = new Token(new TextAttribute(DEF));
        
	    //setDefaultReturnToken(other);
	    List rules = new ArrayList();
        
	    // Add rules for multi-line comments
        rules.add(new MultiLineRule("/*", "*/", comment, (char)0, true ));

	    // Add rule for single line comments.
	    rules.add(new EndOfLineRule("//", comment));

	     // Add rule for strings and character constants.
	    rules.add(new SingleLineRule("\"", "\"", string, '\\'));
	    rules.add(new SingleLineRule("'", "'", string, '\\'));	    	   

        // Add generic whitespace rule.
        rules.add(new WhitespaceRule(new NesCWhiteSpaceDetector()));
 
	    // Add word rule for keywords, types, and constants.
	    WordRule wordRule = new WordRule(new NesCWordDetector(),other);
	    for(i=0; i<reservedwords.length; i++)
	    	wordRule.addWord(reservedwords[i], keyword);
	    for(i=0; i<c_keywords.length; i++)
	    	wordRule.addWord(c_keywords[i], keyword);	    
	    for(i=0; i<types.length; i++)
	      wordRule.addWord(types[i], type);
	    for(i=0; i<constants.length; i++)
	      wordRule.addWord(constants[i], type);
	    rules.add(wordRule);
	
	    IRule[] result = new IRule[rules.size()];
	    rules.toArray(result);
	    setRules(result);
	}
}


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?