[13] | 1 | package com.framsticks.framclipse.syntaxColoring; |
---|
| 2 | |
---|
| 3 | import java.util.ArrayList; |
---|
| 4 | import java.util.List; |
---|
| 5 | |
---|
| 6 | import org.eclipse.jface.text.TextAttribute; |
---|
| 7 | import org.eclipse.jface.text.rules.EndOfLineRule; |
---|
| 8 | import org.eclipse.jface.text.rules.IRule; |
---|
| 9 | import org.eclipse.jface.text.rules.IToken; |
---|
| 10 | import org.eclipse.jface.text.rules.MultiLineRule; |
---|
| 11 | import org.eclipse.jface.text.rules.RuleBasedScanner; |
---|
| 12 | import org.eclipse.jface.text.rules.SingleLineRule; |
---|
| 13 | import org.eclipse.jface.text.rules.Token; |
---|
| 14 | import org.eclipse.jface.text.rules.WordRule; |
---|
| 15 | import org.eclipse.swt.SWT; |
---|
| 16 | |
---|
| 17 | import com.framsticks.framclipse.Framclipse; |
---|
| 18 | |
---|
| 19 | |
---|
| 20 | public class FramscriptCodeScanner extends RuleBasedScanner { |
---|
| 21 | |
---|
| 22 | public final static String[] keywords = { "asm", "break", "call", "case", "continue", |
---|
| 23 | "default", "do", "else", "for", "function", "global", "goto", "if", "return", "switch", |
---|
| 24 | "typeof", "var", "while", }; |
---|
| 25 | |
---|
| 26 | public final static String[] operators = { "(", ")", "[", "]", "{", "}", "}", "=", "<", ">", |
---|
| 27 | "*", "/", "+", "-", "!", ";", "." }; |
---|
| 28 | |
---|
| 29 | public FramscriptCodeScanner() { |
---|
| 30 | ColorManager colorManager = Framclipse.getDefault().getColorManager(); |
---|
| 31 | IToken keyword = new Token(new TextAttribute(colorManager |
---|
| 32 | .getColor(FramclipseColors.KEYWORD), null, SWT.BOLD)); |
---|
| 33 | IToken comment = new Token(new TextAttribute(colorManager |
---|
| 34 | .getColor(FramclipseColors.COMMENT))); |
---|
| 35 | IToken string = new Token(new TextAttribute(colorManager.getColor(FramclipseColors.STRING))); |
---|
| 36 | IToken number = new Token(new TextAttribute(colorManager.getColor(FramclipseColors.NUMBER))); |
---|
| 37 | IToken code = new Token(new TextAttribute(colorManager.getColor(FramclipseColors.CODE))); |
---|
| 38 | IToken operator = new Token(new TextAttribute(colorManager |
---|
| 39 | .getColor(FramclipseColors.OPERATOR))); |
---|
| 40 | |
---|
| 41 | List<IRule> rules = new ArrayList<IRule>(); |
---|
| 42 | rules.add(new EndOfLineRule("//", comment)); |
---|
| 43 | rules.add(new MultiLineRule("/*", "*/", comment)); |
---|
| 44 | rules.add(new SingleLineRule("\"", "\"", string, '\\')); |
---|
| 45 | rules.add(new SingleLineRule("\'", "\'", string, '\\')); |
---|
| 46 | |
---|
| 47 | WordRule numberRule = new WordRule(new FramscriptNumberDetector(), number); |
---|
| 48 | rules.add(numberRule); |
---|
| 49 | |
---|
| 50 | WordRule operatorRule = new WordRule(new FramscriptOperatorDetector(), code); |
---|
| 51 | for (int i = 0; i < operators.length; i++) { |
---|
| 52 | operatorRule.addWord(operators[i], operator); |
---|
| 53 | } |
---|
| 54 | rules.add(operatorRule); |
---|
| 55 | |
---|
| 56 | WordRule keywordRule = new WordRule(new FramscriptWordDetector(), code); |
---|
| 57 | for (int i = 0; i < keywords.length; i++) { |
---|
| 58 | keywordRule.addWord(keywords[i], keyword); |
---|
| 59 | } |
---|
| 60 | rules.add(keywordRule); |
---|
| 61 | |
---|
| 62 | setDefaultReturnToken(code); |
---|
| 63 | |
---|
| 64 | IRule[] result = new IRule[rules.size()]; |
---|
| 65 | result = rules.toArray(result); |
---|
| 66 | setRules(result); |
---|
| 67 | } |
---|
| 68 | } |
---|