package com.liferay.ide.velocity.vaulttec.ui.editor.text;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.text.rules.IRule;
import org.eclipse.jface.text.rules.IWhitespaceDetector;
import org.eclipse.jface.text.rules.PatternRule;
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.WordPatternRule;
import com.liferay.ide.velocity.vaulttec.ui.IColorConstants;
import com.liferay.ide.velocity.vaulttec.ui.VelocityColorProvider;
/**
* DOCUMENT ME!
*
* @version $Revision: 7 $
* @author <a href="mailto:akmal.sarhan@gmail.com">Akmal Sarhan </a>
*/
public class VelocityStringScanner extends RuleBasedScanner
{
public VelocityStringScanner(VelocityColorProvider manager)
{
List rules = new ArrayList();
// Add generic whitespace rule
rules.add(new WhitespaceRule(new WhitespaceDetector()));
// Add pattern rule for formal references
Token token = (Token) manager.getToken(IColorConstants.STRING_REFERENCE);
rules.add(new PatternRule("$!{", "}", token, (char) 0, true));
rules.add(new PatternRule("${", "}", token, (char) 0, true));
// Add pattern rule for shorthand references
token = (Token) manager.getToken(IColorConstants.STRING_REFERENCE);
rules.add(new WordPatternRule(new IdentifierDetector(), "$!", null, token));
rules.add(new WordPatternRule(new IdentifierDetector(), "$", null, token));
IRule[] result = new IRule[rules.size()];
rules.toArray(result);
setRules(result);
setDefaultReturnToken(manager.getToken(IColorConstants.STRING));
}
private class WhitespaceDetector implements IWhitespaceDetector
{
public boolean isWhitespace(char aChar)
{
return ((aChar == ' ') || (aChar == '\t'));
}
}
}