/*******************************************************************************
* Copyright (c) 2007, 2008 Edgar Espina.
* 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 org.deved.antlride.stringtemplate.internal.ui.text.partitions;
import java.util.ArrayList;
import java.util.List;
import org.deved.antlride.common.ui.text.partitions.AntlrBasePartitionScanner;
import org.deved.antlride.stringtemplate.internal.ui.text.partitions.rules.StringTemplateBuildInStringPartition;
import org.deved.antlride.stringtemplate.internal.ui.text.partitions.rules.StringTemplateDoubleAngleBracketPartition;
import org.deved.antlride.stringtemplate.internal.ui.text.partitions.rules.StringTemplateMapPartition;
import org.deved.antlride.stringtemplate.internal.ui.text.partitions.rules.StringTemplateTemplateBodyPartition;
import org.deved.antlride.stringtemplate.internal.ui.text.partitions.rules.StringTemplateTemplatePartition;
import org.eclipse.jface.text.rules.EndOfLineRule;
import org.eclipse.jface.text.rules.IPredicateRule;
import org.eclipse.jface.text.rules.IRule;
import org.eclipse.jface.text.rules.IToken;
import org.eclipse.jface.text.rules.MultiLineRule;
import org.eclipse.jface.text.rules.SingleLineRule;
import org.eclipse.jface.text.rules.Token;
public class StringTemplatePartitionScanner extends AntlrBasePartitionScanner {
public StringTemplatePartitionScanner() {
// rules
List<IRule> rules = new ArrayList<IRule>();
// multi line comment
IToken stComment = new Token(StringTemplatePartitions.COMMENT);
rules.add(new MultiLineRule("<!", "!>", stComment));
rules.add(new MultiLineRule("$!", "!$", stComment));
// stg line comment comments
IToken stgComment = new Token(
StringTemplatePartitions.STG_SINGLE_LINE_COMMENT);
rules.add(new EndOfLineRule("//", stgComment));
//stg doc comment
// stgComment = new Token(StringTemplatePartitions.STG_DOC_COMMENT);
// rules.add(new MultiLineRule("/**", "*/", stgComment));
//stg multi line comment
stgComment = new Token(StringTemplatePartitions.STG_MULTI_LINE_COMMENT);
rules.add(new MultiLineRule("/*", "*/", stgComment));
//map
rules.add(new StringTemplateMapPartition(new Token(StringTemplatePartitions.MAP)));
// template
rules.add(new StringTemplateTemplatePartition(new Token(
StringTemplatePartitions.TEMPLATE)));
// build in string
rules.add(new StringTemplateBuildInStringPartition(new Token(
StringTemplatePartitions.BUILD_IN_STRING)));
// template region
rules.add(new MultiLineRule("$", "$", new Token(
StringTemplatePartitions.TEMPLATE_BODY)));
rules.add(new StringTemplateTemplateBodyPartition(new Token(
StringTemplatePartitions.TEMPLATE_BODY)));
// String literal
rules.add(new SingleLineRule("\"", "\"", new Token(
StringTemplatePartitions.STRING), '\\'));
// <<|>>
IToken doubleAngleBracketToken = new Token(
StringTemplatePartitions.DOUBLE_ANGLE_BRACKETS);
rules.add(new StringTemplateDoubleAngleBracketPartition(
doubleAngleBracketToken, "<"));
rules.add(new StringTemplateDoubleAngleBracketPartition(
doubleAngleBracketToken, ">"));
rules.add(new SingleLineRule("<@", ">", new Token(
StringTemplatePartitions.TEMPLATE_REGION)));
rules.add(new SingleLineRule("<\\", ">", new Token(
StringTemplatePartitions.ESPECIAL_CHARACTERS), '\\'));
// to array
setPredicateRules((IPredicateRule[]) rules
.toArray(new IPredicateRule[rules.size()]));
rules.clear();
}
}