/* * Copyright (c) 2012 European Synchrotron Radiation Facility, * Diamond Light Source Ltd. * * 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 fable.framework.ui.editors; 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.IWordDetector; import org.eclipse.jface.text.rules.NumberRule; 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.ui.examples.rcp.texteditor.editors.xml.ColorManager; import fable.framework.ui.internal.IVarKeys; public class KeyAndValueScanner extends RuleBasedScanner { ColorManager manager; public KeyAndValueScanner(ColorManager mg) { manager = mg; IToken valueNumber = new Token(new TextAttribute(manager .getColor(IVarKeys.DEFAULT))); IToken valueString = new Token(new TextAttribute(manager .getColor(IVarKeys.COLOR_GREEN))); IToken option = new Token(new TextAttribute(manager .getColor(IVarKeys.COLOR_BLUE), null, SWT.BOLD)); IToken comment = new Token(new TextAttribute(manager .getColor(IVarKeys.COLOR_GREY), null, SWT.ITALIC)); IToken step = new Token(new TextAttribute(manager .getColor(IVarKeys.COLOR_GREY), null, SWT.BOLD)); IRule[] rules = new IRule[5]; IWordDetector w = new WordDetector() ; //Numbers rules[0] = new NumberRule(valueNumber); //String rules[2] = new WordRule(w, valueString); //Keys rules[1] = new WordRule(w, option); ((WordRule) rules[1]).setColumnConstraint(0); //step rules[3] = new SingleLineRule("#", null, step, (char) 0, true); ((SingleLineRule) rules[3]).setColumnConstraint(0); //comment rules[4] = new SingleLineRule("#", null, comment, (char) 0, true); setRules(rules); } private static final class WordDetector implements IWordDetector { public boolean isWordPart(char c) { c = Character.toLowerCase(c); return Character.isUnicodeIdentifierPart(c); } public boolean isWordStart(char c) { c = Character.toLowerCase(c); return Character.isJavaIdentifierStart(c); } } }