package com.liferay.ide.velocity.scanner; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.rules.EndOfLineRule; import org.eclipse.jface.text.rules.IPredicateRule; 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.WordPatternRule; import org.eclipse.jface.text.source.ISourceViewer; import com.liferay.ide.velocity.ui.editor.xml.IEditorConfiguration; import com.liferay.ide.velocity.ui.editor.xml.IgnoreCasePatternRule; import com.liferay.ide.velocity.vaulttec.ui.VelocityColorProvider; import com.liferay.ide.velocity.vaulttec.ui.editor.VelocityEditorEnvironment; import com.liferay.ide.velocity.vaulttec.ui.editor.text.EmptyCommentDetector; /** * This scanner recognizes the Velocity strings and comments. */ public class VelocityPartitionScanner extends RuleBasedPartitionScanner implements IEditorConfiguration { public final static String[] TYPES = new String[] { IDocument.DEFAULT_CONTENT_TYPE, SINGLE_LINE_COMMENT, MULTI_LINE_COMMENT, DOC_COMMENT, PARSED_STRING, UNPARSED_STRING, TAG_PARTITION, CDATA_PARTITION, SCRIPT_PARTITION, PROC_PARTITION, TEXT }; VelocityColorProvider cp = null; /** * Creates the partitioner and sets up the appropriate rules. */ public VelocityPartitionScanner() { cp = VelocityEditorEnvironment.getColorProvider(); List rules = new ArrayList(); org.eclipse.jface.text.rules.IToken comment = cp.getToken(MULTI_LINE_COMMENT, true); org.eclipse.jface.text.rules.IToken proc_inst = cp.getToken(PROC_PARTITION, true); org.eclipse.jface.text.rules.IToken script = cp.getToken(SCRIPT_PARTITION, true); org.eclipse.jface.text.rules.IToken cdata = cp.getToken(CDATA_PARTITION, true); org.eclipse.jface.text.rules.IToken tag = cp.getToken(TAG_PARTITION, true); // org.eclipse.jface.text.rules.IToken text = cp.getToken(TEXT, true); rules.add(new MultiLineRule("<!--", "-->", comment)); // rules.add(new MultiLineRule("<?", "?>", proc_inst)); // rules.add(new MultiLineRule("<%", "%>", proc_inst)); // rules.add(new MultiLineRule("<#", "#>", proc_inst)); rules.add(new MultiLineRule("<![CDATA[", "]]>", proc_inst)); rules.add(new MultiLineRule("<![", "]>", proc_inst)); rules.add(new IgnoreCasePatternRule("<script", "</script>", script, '\0', false, false)); rules.add(new IgnoreCasePatternRule("<pre>", "</pre>", cdata, '\0', false, false)); rules.add(new HTMLTagRule("<", ">", tag, '\0', true)); // Add rule for single line comments rules.add(new EndOfLineRule("##", cp.getToken(SINGLE_LINE_COMMENT, true))); // Add rule for strings rules.add(new SingleLineRule("\"", "\"", cp.getToken(PARSED_STRING, true), '\\')); // Add rule for character constants. rules.add(new SingleLineRule("'", "'", cp.getToken(UNPARSED_STRING, true), '\\')); // Add rules for multi-line comments and doc comments rules.add(new MultiLineRule("#**", "*#", cp.getToken(DOC_COMMENT, true))); rules.add(new MultiLineRule("#*", "*#", cp.getToken(MULTI_LINE_COMMENT, true))); // Add special empty comment word rules rules.add(new WordPatternRule(new EmptyCommentDetector(), "#***#", null, cp.getToken(DOC_COMMENT, true))); rules.add(new WordPatternRule(new EmptyCommentDetector(), "#**#", null, cp.getToken(MULTI_LINE_COMMENT, true))); IPredicateRule[] result = new IPredicateRule[rules.size()]; rules.toArray(result); setPredicateRules(result); } /* * (non-Javadoc) * @see com.googlecode.veloeclipse.vaulttec.ui.editor.xml.IEditorConfiguration#getPreferences() */ public IPreferenceStore getPreferences() { return null; } /* * (non-Javadoc) * @see com.googlecode.veloeclipse.vaulttec.ui.editor.xml.IEditorConfiguration#getLineWidth(org.eclipse.jface.text.source.ISourceViewer) */ public int getLineWidth(ISourceViewer isourceviewer) { return 0; } /* * (non-Javadoc) * @see com.googlecode.veloeclipse.vaulttec.ui.editor.xml.IEditorConfiguration#getTabWidth(org.eclipse.jface.text.source.ISourceViewer) */ public int getTabWidth(ISourceViewer isourceviewer) { return 0; } /* * (non-Javadoc) * @see com.googlecode.veloeclipse.vaulttec.ui.editor.xml.IEditorConfiguration#getTab(org.eclipse.jface.text.source.ISourceViewer) */ public String getTab(ISourceViewer isourceviewer) { return null; } }