/******************************************************************************* * Copyright © 2000, 2013 IBM Corporation and others. * 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: * IBM Corporation - initial API and implementation * *******************************************************************************/ package org.eclipse.edt.ide.ui.internal.editor; import java.util.ArrayList; import java.util.List; import org.eclipse.edt.compiler.internal.EGLSQLKeywordHandler; import org.eclipse.edt.ide.ui.internal.preferences.ColorProvider; 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.NumberRule; import org.eclipse.jface.text.rules.SingleLineRule; import org.eclipse.jface.text.rules.Token; import org.eclipse.jface.text.rules.WhitespaceRule; public class SQLCodeScanner extends AbstractCodeScanner { public static String[] keywords = EGLSQLKeywordHandler.getSQLKeywordNamesToLowerCase(); private ColorProvider colorProvider = null; /** * Creates a EGL code scanner */ public SQLCodeScanner(ColorProvider provider) { super(); colorProvider = provider; setRules(); } /** * Sets up the rules for different types of things we highlight * in the SQL EGL text. Here are the differences between SQL and * the rest of the EGL file. * 1. SQL doesn't support multi-line comments or system words, * so they aren't included. * 2. SQL comments begin with -- instead of //. * 3. SQL literals start with single quote instead of double quote. */ public void setRules() { Token currentToken = null; TextAttribute attr = null; // ColorProvider.other = new Token(ColorProvider.DEFAULT); // ColorProvider.keyword = new Token(ColorProvider.KEYWORD); // ColorProvider.singleLineComment = new Token(ColorProvider.SINGLE_LINE_COMMENT); // // ColorProvider.multiLineComment = new Token(ColorProvider.MULTI_LINE_COMMENT); // ColorProvider.literal = new Token(ColorProvider.LITERAL); // // ColorProvider.systemWord = new Token(ColorProvider.SYSTEM_WORD); List rules = new ArrayList(); // Jeff 10-24 Changed to use new method of getting Tokens // Add rule for SQL single line comments. attr = colorProvider.getTextAttribute(ColorProvider.SINGLE_LINE_COMMENT); currentToken = new Token(attr); rules.add(new EndOfLineRule(CodeConstants.EGL_SQL_SINGLE_LINE_COMMENT, currentToken)); //$NON-NLS-1$ // //Add rules for multi-line comments. // attr = colorProvider.getTextAttribute(ColorProvider.MULTI_LINE_COMMENT); // currentToken = new Token(attr); // rules.add(new MultiLineRule("/*", "*/", currentToken)); //$NON-NLS-1$ //$NON-NLS-2$ // Add rule for strings and character constants. attr = colorProvider.getTextAttribute(ColorProvider.LITERAL); currentToken = new Token(attr); rules.add(new SingleLineRule(CodeConstants.EGL_SQL_STRING_COMMENT, CodeConstants.EGL_SQL_STRING_COMMENT, currentToken, '\\')); //$NON-NLS-1$ //$NON-NLS-2$ // Add generic number rule. attr = colorProvider.getTextAttribute(ColorProvider.DEFAULT); currentToken = new Token(attr); rules.add(new NumberRule(currentToken)); // Add generic whitespace rule. rules.add(new WhitespaceRule(new EGLWhitespaceDetector())); // Add rules for all keywords EGLWordRule wordRule = new EGLWordRule(new EGLWordDetector(), currentToken); // currentToken still set for Default attr = colorProvider.getTextAttribute(ColorProvider.KEYWORD); currentToken = new Token(attr); for (int i = 0; i < keywords.length; i++) { wordRule.addWord((String) keywords[i], currentToken); } // attr = colorProvider.getTextAttribute(ColorProvider.SYSTEM_WORD); // currentToken = new Token(attr); // for (int i = 0; i < systemWords.size(); i++) { // wordRule.addWord((String) systemWords.get(i), currentToken); // } rules.add(wordRule); attr = colorProvider.getTextAttribute(ColorProvider.DEFAULT); currentToken = new Token(attr); setDefaultReturnToken(currentToken); result = new IRule[rules.size()]; rules.toArray(result); setRules(result); } }