/* * Copyright (c) 2004- michael lawley and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser General Public License version 2.1 as published by the Free Software Foundation * which accompanies this distribution, and is available by writing to * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * Contributors: * michael lawley * * * */ package tefkat.plugin; 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.IWordDetector; 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.WordRule; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.widgets.Display; /** * @author lawley * */ public class TefkatModelRuleBasedScanner extends RuleBasedScanner { public static final Color MULTILINE_COMMENT_COLOR = new Color(Display.getCurrent(), new RGB(0, 80, 0)); private static Color DEFAULT_TAG_COLOR = new Color(Display.getCurrent(), new RGB(0, 0, 0)); private static final Color KEYWORD_COLOR = new Color(Display.getCurrent(), new RGB(0, 0, 160)); private static final Color COMMENT_COLOR = new Color(Display.getCurrent(), new RGB(0, 160, 0)); private static final Color STRING_COLOR = new Color(Display.getCurrent(), new RGB(160, 0, 160)); private static final Color URI_COLOR = new Color(Display.getCurrent(), new RGB(160, 80, 80)); private static final String[] keywords = { "TRANSFORMATION", "IMPORT", "CLASS", "ABSTRACT", "RULE", "NAMESPACE", "INCLUDE", "EXTENDS", "OVERRIDES", "PATTERN", "TEMPLATE", "FORALL", "EXACT", "DYNAMIC", "WHERE", "MAKE", "SET", "WITH", "FROM", // "REMEMBER", "RECALL", "LINKING", "LINKS", "TRUE", "FALSE", "true", "false", "IF", "THEN", "ELSEIF", "ELSE", "ENDIF", "BEFORE", "IN", "MAP", "AND", "OR", "NOT", "UNDEF" }; public TefkatModelRuleBasedScanner() { setDefaultReturnToken(new Token(new TextAttribute(DEFAULT_TAG_COLOR))); IToken multiCommentToken = new Token(new TextAttribute(MULTILINE_COMMENT_COLOR)); IToken keywordToken = new Token(new TextAttribute(KEYWORD_COLOR, null, SWT.BOLD)); IToken commentToken = new Token(new TextAttribute(COMMENT_COLOR)); IToken stringToken = new Token(new TextAttribute(STRING_COLOR, null, SWT.BOLD)); IToken uriToken = new Token(new TextAttribute(URI_COLOR, null, SWT.BOLD)); WordRule keywordRule = new WordRule(new IWordDetector() { public boolean isWordStart(char c) { return (c >= 'A' && c <= 'Z'); } public boolean isWordPart(char c) { return (c >= 'A' && c <= 'Z'); } }); for (int i = 0; i < keywords.length; i++) { keywordRule.addWord(keywords[i], keywordToken); } List rules = new ArrayList(); rules.add(new MultiLineRule("/*", "*/", multiCommentToken)); rules.add(new SingleLineRule("\"", "\"", stringToken, '\\')); rules.add(new SingleLineRule("<", ">", uriToken)); rules.add(new EndOfLineRule("IMPORT", uriToken)); rules.add(new EndOfLineRule("NAMESPACE", uriToken)); rules.add(new EndOfLineRule("INCLUDE", uriToken)); rules.add(new EndOfLineRule("//", commentToken)); rules.add(keywordRule); rules.add(new SingleLineRule("true", null, keywordToken)); rules.add(new SingleLineRule("false", null, keywordToken)); IRule[] ruleArray = new IRule[rules.size()]; rules.toArray(ruleArray); setRules(ruleArray); } }