/******************************************************************************* * Copyright (c) 2007, 2008 Edgar Espina. * 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 * *******************************************************************************/ package org.deved.antlride.common.ui.text.highlighting.rules; import org.deved.antlride.common.ui.text.rules.AntlrAbstractRule; import org.deved.antlride.common.ui.text.rules.AntlrAnyDetector; import org.eclipse.jface.text.rules.ICharacterScanner; import org.eclipse.jface.text.rules.IToken; import org.eclipse.jface.text.rules.IWhitespaceDetector; import org.eclipse.jface.text.rules.IWordDetector; import org.eclipse.jface.text.rules.Token; public class AntlrKeyWordHighlight extends AntlrAbstractRule { private String[] fKeywords; private IToken fDefaultToken; public AntlrKeyWordHighlight(IToken successToken, IToken defaultToken, String... keywords) { super(successToken); fKeywords = keywords; fDefaultToken = defaultToken; } public AntlrKeyWordHighlight(IToken successToken, IToken defaultToken, IWordDetector wordDetector, IWhitespaceDetector whitespaceDetector, String... keywords) { super(successToken, wordDetector, whitespaceDetector); fKeywords = keywords; fDefaultToken = defaultToken; } public AntlrKeyWordHighlight(IToken successToken, IToken defaultToken, IWhitespaceDetector whitespaceDetector, String... keywords) { super(successToken, AntlrAnyDetector.instance(), whitespaceDetector); fKeywords = keywords; fDefaultToken = defaultToken; } public AntlrKeyWordHighlight(IToken successToken, IWhitespaceDetector whitespaceDetector, String... keywords) { super(successToken, AntlrAnyDetector.instance(), whitespaceDetector); fKeywords = keywords; fDefaultToken = Token.UNDEFINED; } public AntlrKeyWordHighlight(IToken successToken, String... keywords) { this(successToken, Token.UNDEFINED, keywords); } protected IToken doEvaluate(ICharacterScanner scanner) { consumeWord(scanner); String text = getTextReaded(); if (isKeyword(text)) { return fSuccessToken; } else if (text.length() > 0) { if (fDefaultToken.isUndefined()) { unread(scanner); } return fDefaultToken; } unread(scanner); return Token.UNDEFINED; } private boolean isKeyword(String keyword) { for (String k : fKeywords) { if (k.equals(keyword)) { return true; } } return false; } }