package com.liferay.ide.velocity.vaulttec.ui.editor.text;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.jface.text.rules.IRule;
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 org.eclipse.jface.text.rules.WordRule;
import com.liferay.ide.velocity.vaulttec.ui.IColorConstants;
import com.liferay.ide.velocity.vaulttec.ui.VelocityColorProvider;
import com.liferay.ide.velocity.vaulttec.ui.editor.VelocityEditorEnvironment;
import com.liferay.ide.velocity.vaulttec.ui.model.Directive;
/**
* DOCUMENT ME!
*
* @version $Revision: 7 $
* @author <a href="mailto:akmal.sarhan@gmail.com">Akmal Sarhan </a>
*/
public class VelocityCodeScanner extends RuleBasedScanner
{
public VelocityCodeScanner(VelocityColorProvider manager)
{
List rules = new ArrayList();
// Add generic whitespace rule
rules.add(new WhitespaceRule(new WhitespaceDetector()));
// Add word rule for directives
Token token = (Token) manager.getToken(IColorConstants.DIRECTIVE);
WordRule wordRule = new WordRule(new DirectiveDetector(), token);
token = (Token) manager.getToken(IColorConstants.DIRECTIVE);
// System directives
String[] directives = Directive.DIRECTIVES;
for (int i = directives.length - 1; i >= 0; i--)
{
wordRule.addWord(directives[i], token);
}
// User directives
Iterator userDirectives = VelocityEditorEnvironment.getParser().getUserDirectives().iterator();
while (userDirectives.hasNext())
{
wordRule.addWord((String) userDirectives.next(), token);
}
rules.add(wordRule);
// Add pattern rule for formal references
token = (Token) manager.getToken(IColorConstants.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.REFERENCE);
rules.add(new WordPatternRule(new IdentifierDetector(), "$!", null, token));
rules.add(new WordPatternRule(new IdentifierDetector(), "$", null, token));
// token = new Token(new
// TextAttribute(aProvider.getColor(IColorConstants.TAG), null,
// SWT.BOLD));
// rules.add(new TagRule(token));
// token = new Token(new
// TextAttribute(aProvider.getColor(IColorConstants.COMMENT)));
IRule[] result = new IRule[rules.size()];
rules.toArray(result);
setRules(result);
}
}