package tk.eclipse.plugin.htmleditor.editors;
import java.util.ArrayList;
import java.util.List;
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.Token;
/**
* The partition scanner for the <code>HTMLSourceEditor</code>.
* And defines static variables for the parted tokens.
*
* @author Naoki Takezoe
*/
public class HTMLPartitionScanner extends RuleBasedPartitionScanner {
public final static String HTML_DEFAULT = "__html_default";
public final static String HTML_COMMENT = "__html_comment";
public final static String HTML_TAG = "__html_tag";
public final static String HTML_SCRIPT = "__html_script";
public final static String HTML_DOCTYPE = "__html_doctype";
public final static String HTML_DIRECTIVE = "__html_directive";
public final static String JAVASCRIPT = "__html_javascript";
public final static String HTML_CSS = "__html_css";
/**
* The constructor.
*/
public HTMLPartitionScanner() {
IToken htmlComment = new Token(HTML_COMMENT);
IToken htmlTag = new Token(HTML_TAG);
IToken htmlScript = new Token(HTML_SCRIPT);
IToken htmlDoctype = new Token(HTML_DOCTYPE);
IToken htmlDirective = new Token(HTML_DIRECTIVE);
IToken javaScript = new Token(JAVASCRIPT);
IToken htmlCss = new Token(HTML_CSS);
List<IPredicateRule> rules = new ArrayList<IPredicateRule>();
rules.add(new MultiLineRule("<!--", "-->", htmlComment));
rules.add(new MultiLineRule("<%--", "--%>", htmlComment));
rules.add(new DocTypeRule(htmlDoctype));
rules.add(new MultiLineRule("<%@", "%>", htmlDirective));
rules.add(new MultiLineRule("<%", "%>", htmlScript));
rules.add(new MultiLineRule("<![CDATA[", "]]>", htmlDoctype));
rules.add(new MultiLineRule("<?xml", "?>", htmlDoctype));
rules.add(new MultiLineRule("<script", "</script>", javaScript));
rules.add(new MultiLineRule("<style", "</style>", htmlCss));
rules.add(new TagRule(htmlTag));
setPredicateRules(rules.toArray(new IPredicateRule[rules.size()]));
}
}