Package com.googlecode.goclipse.ui.text

Source Code of com.googlecode.goclipse.ui.text.GoScanner

package com.googlecode.goclipse.ui.text;

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

import melnorme.lang.ide.ui.text.coloring.AbstractLangScanner;

import org.eclipse.cdt.ui.text.ITokenStoreFactory;
import org.eclipse.jface.text.rules.IRule;
import org.eclipse.jface.text.rules.IToken;
import org.eclipse.jface.text.rules.WhitespaceRule;
import org.eclipse.jface.text.rules.WordRule;

import com.googlecode.goclipse.ui.GoUIPreferenceConstants;

public class GoScanner extends AbstractLangScanner {
 
  private static String tokenPrefProperties[] = new String[] {
    GoUIPreferenceConstants.SYNTAX_COLORING__TEXT.key,
    GoUIPreferenceConstants.SYNTAX_COLORING__KEYWORD.key,
    GoUIPreferenceConstants.SYNTAX_COLORING__VALUE.key,
    GoUIPreferenceConstants.SYNTAX_COLORING__PRIMITIVE.key,
    GoUIPreferenceConstants.SYNTAX_COLORING__BUILTIN_FUNCTION.key,
//    GoUIPreferenceConstants.SYNTAX_COLORING__OPERATOR.key,
    GoUIPreferenceConstants.SYNTAX_COLORING__STRING.key,
  };
 
  public GoScanner(ITokenStoreFactory tokenStoreFactory) {
    super(tokenStoreFactory.createTokenStore(tokenPrefProperties));
   
    final List<IRule> rules = new ArrayList<IRule>();
   
    // Add generic whitespace rule.
    rules.add(new WhitespaceRule(new LangWhitespaceDetector()));
   
   
    final IToken tkDefault = getToken(GoUIPreferenceConstants.SYNTAX_COLORING__TEXT.key);
   
    WordRule wordRule = new WordRule(new JavaWordDetector(), tkDefault);
   
    final IToken keyword         = getToken(GoUIPreferenceConstants.SYNTAX_COLORING__KEYWORD.key);
    final IToken value           = getToken(GoUIPreferenceConstants.SYNTAX_COLORING__VALUE.key);
    final IToken primitive       = getToken(GoUIPreferenceConstants.SYNTAX_COLORING__PRIMITIVE.key);
    final IToken builtinFunction = getToken(GoUIPreferenceConstants.SYNTAX_COLORING__BUILTIN_FUNCTION.key);
    final IToken textToken       = getToken(GoUIPreferenceConstants.SYNTAX_COLORING__TEXT.key);
    setDefaultReturnToken(textToken);
   
    // add tokens for each reserved word
    wordRule.addWord("break",       keyword);
    wordRule.addWord("default",     keyword);
    wordRule.addWord("func",        keyword);
    wordRule.addWord("interface",   keyword);
    wordRule.addWord("select",      keyword);
    wordRule.addWord("case",        keyword);
    wordRule.addWord("defer",       keyword);
    wordRule.addWord("go",          keyword);
    wordRule.addWord("map",         keyword);
    wordRule.addWord("struct",      keyword);
    wordRule.addWord("chan",        keyword);
    wordRule.addWord("else",        keyword);
    wordRule.addWord("goto",        keyword);
    wordRule.addWord("package",     keyword);
    wordRule.addWord("switch",      keyword);
    wordRule.addWord("const",       keyword);
    wordRule.addWord("fallthrough", keyword);
    wordRule.addWord("if",          keyword);
    wordRule.addWord("range",       keyword);
    wordRule.addWord("type",        keyword);
    wordRule.addWord("continue",    keyword);
    wordRule.addWord("for",         keyword);
    wordRule.addWord("import",      keyword);
    wordRule.addWord("return",      keyword);
    wordRule.addWord("var",         keyword);

    wordRule.addWord("append",  builtinFunction);
    wordRule.addWord("cap",     builtinFunction);
    wordRule.addWord("close",   builtinFunction);
    wordRule.addWord("complex", builtinFunction);
    wordRule.addWord("copy",    builtinFunction);
    wordRule.addWord("delete",  builtinFunction);
    wordRule.addWord("imag",    builtinFunction);
    wordRule.addWord("len",     builtinFunction);
    wordRule.addWord("make",    builtinFunction);
    wordRule.addWord("new",     builtinFunction);
    wordRule.addWord("panic",   builtinFunction);
    wordRule.addWord("print",   builtinFunction);
    wordRule.addWord("println", builtinFunction);
    wordRule.addWord("real",    builtinFunction);
    wordRule.addWord("recover", builtinFunction);

    wordRule.addWord("nil",   value);
    wordRule.addWord("true",  value);
    wordRule.addWord("false", value);
    wordRule.addWord("iota",  value);

    wordRule.addWord("uint8", primitive);
    wordRule.addWord("uint16", primitive);
    wordRule.addWord("uint32", primitive);
    wordRule.addWord("uint64", primitive);
    wordRule.addWord("int8", primitive);
    wordRule.addWord("int16", primitive);
    wordRule.addWord("int32", primitive);
    wordRule.addWord("int64", primitive);
    wordRule.addWord("float32", primitive);
    wordRule.addWord("float64", primitive);
    wordRule.addWord("complex64",  primitive);
    wordRule.addWord("complex128", primitive);
    wordRule.addWord("rune",       primitive);
    wordRule.addWord("byte",       primitive);
    wordRule.addWord("uint",       primitive);
    wordRule.addWord("int",        primitive);
    wordRule.addWord("uintptr",    primitive);
   
    wordRule.addWord("string", primitive);
    wordRule.addWord("bool",   primitive);
    wordRule.addWord("error",  primitive);
   
    // Note: operator matching is not actually working, WordRule cant be used for this
   
//    final IToken operator        = getToken(GoUIPreferenceConstants.SYNTAX_COLORING__OPERATOR.key);
//
//    wordRule.addWord("+",   operator);
//    wordRule.addWord("&",   operator);
//    wordRule.addWord("+=",  operator);
//    wordRule.addWord("&=",  operator);
//    wordRule.addWord("&&",  operator);
//    wordRule.addWord("==",  operator);
//    wordRule.addWord("!=",  operator);
//    wordRule.addWord("(",   operator);
//    wordRule.addWord(")",   operator);
//    wordRule.addWord("-",   operator);
//    wordRule.addWord("|",   operator);
//    wordRule.addWord("-=",  operator);
//    wordRule.addWord("|=",  operator);
//    wordRule.addWord("||",  operator);
//    wordRule.addWord("<",   operator);
//    wordRule.addWord("<=",  operator);
//    wordRule.addWord("[",   operator);
//    wordRule.addWord("]",   operator);
//    wordRule.addWord("*",   operator);
//    wordRule.addWord("^",   operator);
//    wordRule.addWord("*=",  operator);
//    wordRule.addWord("^=",  operator);
//    wordRule.addWord("<-",  operator);
//    wordRule.addWord(">",   operator);
//    wordRule.addWord(">=",  operator);
//    wordRule.addWord("{",   operator);
//    wordRule.addWord("}",   operator);
//    wordRule.addWord("/",   operator);
//    wordRule.addWord("<<",  operator);
//    wordRule.addWord("/=",  operator);
//    wordRule.addWord("<<=", operator);
//    wordRule.addWord("++",  operator);
//    wordRule.addWord("=",   operator);
//    wordRule.addWord(":=",  operator);
//    wordRule.addWord(",",   operator);
//    wordRule.addWord(";",   operator);
//    wordRule.addWord("%",   operator);
//    wordRule.addWord(">>",  operator);
//    wordRule.addWord("%=",  operator);
//    wordRule.addWord(">>=", operator);
//    wordRule.addWord("--",  operator);
//    wordRule.addWord("!",   operator);
//    wordRule.addWord("...", operator);
//    wordRule.addWord(":",   operator);
//    wordRule.addWord("&^",  operator);
//    wordRule.addWord("&^=", operator);
   
    rules.add(wordRule);
   
    setRules(rules);
  }
 
}
TOP

Related Classes of com.googlecode.goclipse.ui.text.GoScanner

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.