/******************************************************************************* * Copyright (c) 2008 Scott Stanchfield, based on ANTLR-Eclipse plugin * by Torsten Juergeleit. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors * Torsten Juergeleit - original ANTLR Eclipse plugin * Scott Stanchfield - modifications for ANTXR *******************************************************************************/ package com.javadude.antxr.eclipse.ui.editor.text; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.text.TextAttribute; import org.eclipse.jface.text.rules.IRule; import org.eclipse.jface.text.rules.IToken; import org.eclipse.jface.text.rules.RuleBasedScanner; 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 com.javadude.antxr.eclipse.ui.AntxrColorProvider; import com.javadude.antxr.eclipse.ui.IColorConstants; /** * An ANTXR and Java aware code scanner. */ public class AntxrCodeScanner extends RuleBasedScanner { /** ANTXR keywords we care about */ public static final String[] ANTXR_KEYWORDS = new String[] { "header", "options", "tokens", "returns", "exception" }; /** Java keywords we care about */ public static final String[] JAVA_KEYWORDS = new String[] { "abstract", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue", "default", "do", "double", "else", "extends", "false", "final", "finally", "float", "for", "goto", "if", "implements", "import", "instanceof", "int", "interface", "long", "native", "new", "null", "package", "private", "protected", "public", "return", "short", "static", "super", "switch", "synchronized", "this", "throw", "throws", "transient", "true", "try", "void", "volatile", "while" }; /** * Create an instance of a code scanner for syntax highlighting * @param aColorProvider The color mapping */ public AntxrCodeScanner(AntxrColorProvider aColorProvider) { IToken keyword = new Token(new TextAttribute(aColorProvider.getColor( IColorConstants.KEYWORD), null, SWT.BOLD)); IToken other = new Token(new TextAttribute(aColorProvider.getColor( IColorConstants.DEFAULT))); List<IRule> rules = new ArrayList<IRule>(); // Add generic whitespace rule rules.add(new WhitespaceRule(new WhitespaceDetector())); // Add word rule for ANTXR keywords WordRule wordRule = new WordRule(new WordDetector(), other); for (int i = 0; i < AntxrCodeScanner.ANTXR_KEYWORDS.length; i++) { wordRule.addWord(AntxrCodeScanner.ANTXR_KEYWORDS[i], keyword); } for (int i = 0; i < AntxrCodeScanner.JAVA_KEYWORDS.length; i++) { wordRule.addWord(AntxrCodeScanner.JAVA_KEYWORDS[i], keyword); } rules.add(wordRule); IRule[] result = new IRule[rules.size()]; rules.toArray(result); setRules(result); } }