package net.lucky_dip.hamleditor.editor.scanners;
import java.util.ArrayList;
import java.util.List;
import net.lucky_dip.hamleditor.editor.HamlWordDetector;
import org.eclipse.jface.text.rules.IPredicateRule;
import org.eclipse.jface.text.rules.IToken;
import org.eclipse.jface.text.rules.MultiLineRule;
import org.eclipse.jface.text.rules.RuleBasedPartitionScanner;
import org.eclipse.jface.text.rules.SingleLineRule;
import org.eclipse.jface.text.rules.Token;
import org.eclipse.jface.text.rules.WordPatternRule;
public class HamlPartitionScanner extends RuleBasedPartitionScanner
{
private static HamlPartitionScanner instance;
public final static String HAML_DOCTYPE = "__haml_doctype";
public final static String HAML_COMMENT = "__haml_comment";
public final static String HAML_RUBY = "__haml_ruby";
public final static String HAML_CLASS = "__haml_class";
public final static String HAML_ID = "__haml_id";
public final static String HAML_ELEMENT = "__haml_element";
public final static String[] HAML_PARTITION_TYPES = new String[] { HAML_DOCTYPE, HAML_RUBY, HAML_CLASS, HAML_ID,
HAML_COMMENT, HAML_ELEMENT };
public static boolean IsHAMLPartitionType(String contentType)
{
for (String partitionType : HAML_PARTITION_TYPES)
{
if (contentType.equals(partitionType))
return true;
}
return false;
}
/**
* @return the singleton instance of the scanner
*/
public static HamlPartitionScanner getInstance()
{
if (instance == null)
{
instance = new HamlPartitionScanner();
}
return instance;
}
/**
* Constructor.
*/
private HamlPartitionScanner()
{
super();
IToken doctype = new Token(HAML_DOCTYPE);
IToken comment = new Token(HAML_COMMENT);
IToken element = new Token(HAML_ELEMENT);
IToken classToken = new Token(HAML_CLASS);
IToken idToken = new Token(HAML_ID);
IToken rubyToken = new Token(HAML_RUBY);
List<IPredicateRule> rules = new ArrayList<IPredicateRule>();
rules.add(new WordPatternRule(new HamlWordDetector(), "%", "", element));
rules.add(new SingleLineRule("!!!", "", doctype, (char) 0, false));
rules.add(new MultiLineRule("<!--", "-->", comment, (char) 0, true));
rules.add(new SingleLineRule("/", null, comment));
rules.add(new WordPatternRule(new HamlWordDetector(), ".", "", classToken));
rules.add(new WordPatternRule(new HamlWordDetector(), "#", "", idToken));
rules.add(new SingleLineRule("=", "", rubyToken, (char) 0, true, false));
rules.add(new SingleLineRule("~", "", rubyToken, (char) 0, true, false));
rules.add(new SingleLineRule("[", "]", rubyToken, (char) 0, true, false));
rules.add(new SingleLineRule("-", "", rubyToken, (char) 0, true, false));
rules.add(new SingleLineRule("{", "}", rubyToken, (char) 0, true));
setPredicateRules(rules.toArray(new IPredicateRule[rules.size()]));
}
}