/*
* $Id$
*
* Copyright (c) 2004-2005 by the TeXlapse Team.
* 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 net.sourceforge.texlipse.editor.scanner;
import java.util.ArrayList;
import java.util.List;
import net.sourceforge.texlipse.editor.ColorManager;
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.RuleBasedScanner;
import org.eclipse.jface.text.rules.Token;
import org.eclipse.jface.text.rules.WhitespaceRule;
import org.eclipse.jface.text.rules.WordRule;
/**
* TexMathScanner is used for "__tex_mathParitition" -content type.
* It uses defined rules to detect sequences and it returns the
* specified token that satisfies a rule. The token defines how the
* characters are presented.
* @see net.sourceforge.texlipse.editor.partitioner.FastLaTeXPartitionScanner
* @author Antti Pirinen
* @author Boris von Loesch
*/
public class TexMathScanner extends RuleBasedScanner {
/**
* A default constructor.
* @param manager
*/
public TexMathScanner(ColorManager manager) {
IToken defaultToken = new Token(
new TextAttribute(
manager.getColor(ColorManager.EQUATION),
null,
manager.getStyle(ColorManager.EQUATION_STYLE)));
IToken commentToken = new Token(
new TextAttribute(
manager.getColor(ColorManager.COMMENT),
null,
manager.getStyle(ColorManager.COMMENT_STYLE)));
//Commands are colored in math color with command styles
IToken commandToken = new Token(
new TextAttribute(
manager.getColor(ColorManager.EQUATION),
null,
manager.getStyle(ColorManager.COMMAND_STYLE)));
// A token that defines how to color special characters (\_, \&, \~ ...)
IToken specialCharToken = new Token(new TextAttribute(manager
.getColor(ColorManager.TEX_SPECIAL),
null,
manager.getStyle(ColorManager.TEX_SPECIAL_STYLE)));
List<IRule> rules = new ArrayList<IRule>();
rules.add(new WhitespaceRule(new WhitespaceDetector()));
rules.add(new TexSpecialCharRule(specialCharToken));
//rules.add(new SingleLineRule("\\%", " ", specialCharToken));
rules.add(new EndOfLineRule("%", commentToken));
/*rules.add(new TexEnvironmentRule("comment", commentToken));
rules.add(new SingleLineRule("\\[", " ", defaultToken));
rules.add(new SingleLineRule("\\]", " ", defaultToken));
rules.add(new SingleLineRule("\\(", " ", defaultToken));
rules.add(new SingleLineRule("\\)", " ", defaultToken));*/
rules.add(new WordRule(new TexWord(), commandToken));
IRule[] result = new IRule[rules.size()];
rules.toArray(result);
setRules(result);
}
}