/* * JBoss by Red Hat * Copyright 2006-2009, Red Hat Middleware, LLC, and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.ide.eclipse.freemarker.editor; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.TextAttribute; import org.eclipse.jface.text.contentassist.ContentAssistant; import org.eclipse.jface.text.contentassist.IContentAssistant; import org.eclipse.jface.text.hyperlink.IHyperlinkDetector; import org.eclipse.jface.text.presentation.IPresentationReconciler; import org.eclipse.jface.text.presentation.PresentationReconciler; import org.eclipse.jface.text.rules.DefaultDamagerRepairer; import org.eclipse.jface.text.rules.IToken; import org.eclipse.jface.text.rules.Token; import org.eclipse.jface.text.source.IAnnotationHover; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.ui.editors.text.TextSourceViewerConfiguration; import org.jboss.ide.eclipse.freemarker.Constants; /** * @author <a href="mailto:joe@binamics.com">Joe Hudson</a> */ public class Configuration extends TextSourceViewerConfiguration { private ColorManager colorManager; private XMLTagScanner xmlTagScanner; private DirectiveScanner directiveScanner; private Editor editor; public Configuration(IPreferenceStore preferenceStore, ColorManager colorManager, Editor editor) { super(preferenceStore); this.editor = editor; this.colorManager = colorManager; } public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) { return PartitionScanner.PARTITIONS; } public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) { PresentationReconciler reconciler = new PresentationReconciler(); IToken defaultToken = null; DefaultDamagerRepairer dr = null; NonRuleBasedDamagerRepairer ndr = null; defaultToken = new Token( new TextAttribute( colorManager.getColor(Constants.COLOR_DIRECTIVE))); ContentScanner contentScanner = new ContentScanner(defaultToken, colorManager); for (int i=0; i<PartitionScanner.DIRECTIVES.length; i++) { dr = new DefaultDamagerRepairer(contentScanner); reconciler.setDamager(dr, PartitionScanner.DIRECTIVES[i]); reconciler.setRepairer(dr, PartitionScanner.DIRECTIVES[i]); } dr = new DefaultDamagerRepairer(contentScanner); reconciler.setDamager(dr, PartitionScanner.FTL_DIRECTIVE); reconciler.setRepairer(dr, PartitionScanner.FTL_DIRECTIVE); dr = new DefaultDamagerRepairer(contentScanner); reconciler.setDamager(dr, PartitionScanner.FTL_DIRECTIVE_END); reconciler.setRepairer(dr, PartitionScanner.FTL_DIRECTIVE_END); ndr = new NonRuleBasedDamagerRepairer( new TextAttribute( colorManager.getColor(Constants.COLOR_XML_COMMENT))); reconciler.setDamager(ndr, PartitionScanner.XML_COMMENT); reconciler.setRepairer(ndr, PartitionScanner.XML_COMMENT); ndr = new NonRuleBasedDamagerRepairer( new TextAttribute( colorManager.getColor(Constants.COLOR_STRING))); reconciler.setDamager(ndr, PartitionScanner.STRING); reconciler.setRepairer(ndr, PartitionScanner.STRING); ndr = new NonRuleBasedDamagerRepairer( new TextAttribute( colorManager.getColor(Constants.COLOR_COMMENT))); reconciler.setDamager(ndr, PartitionScanner.FTL_COMMENT); reconciler.setRepairer(ndr, PartitionScanner.FTL_COMMENT); defaultToken = new Token( new TextAttribute( colorManager.getColor(Constants.COLOR_INTERPOLATION))); dr = new DefaultDamagerRepairer(new ContentScanner(defaultToken, colorManager)); reconciler.setDamager(dr, PartitionScanner.FTL_INTERPOLATION); reconciler.setRepairer(dr, PartitionScanner.FTL_INTERPOLATION); defaultToken = new Token( new TextAttribute( colorManager.getColor(Constants.COLOR_XML_TAG))); dr = new DefaultDamagerRepairer(new ContentScanner(defaultToken, colorManager)); reconciler.setDamager(dr, PartitionScanner.XML_TAG); reconciler.setRepairer(dr, PartitionScanner.XML_TAG); return reconciler; } public IContentAssistant getContentAssistant(ISourceViewer aSourceViewer) { ContentAssistant assistant = new ContentAssistant(); CompletionProcessor completionProcessor = new CompletionProcessor(editor); assistant.setContentAssistProcessor(completionProcessor, IDocument.DEFAULT_CONTENT_TYPE); for (int i=0; i<PartitionScanner.DIRECTIVES.length; i++) { assistant.setContentAssistProcessor(completionProcessor, PartitionScanner.DIRECTIVES[i]); } assistant.setContentAssistProcessor(completionProcessor, PartitionScanner.FTL_DIRECTIVE); assistant.setContentAssistProcessor(completionProcessor, PartitionScanner.FTL_DIRECTIVE_END); assistant.setContentAssistProcessor(completionProcessor, PartitionScanner.FTL_COMMENT); assistant.setContentAssistProcessor(completionProcessor, PartitionScanner.FTL_INTERPOLATION); assistant.setContentAssistProcessor(completionProcessor, PartitionScanner.XML_COMMENT); assistant.setContentAssistProcessor(completionProcessor, PartitionScanner.XML_TAG); assistant.enableAutoInsert(true); assistant.enableAutoActivation(true); return assistant; } public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) { return new AnnotationHover(); } public IHyperlinkDetector[] getHyperlinkDetectors(ISourceViewer sourceViewer) { IHyperlinkDetector[] detectors = super.getHyperlinkDetectors(sourceViewer); if (null == detectors) detectors = new IHyperlinkDetector[0]; IHyperlinkDetector[] detectorsNew = new IHyperlinkDetector[detectors.length+1]; System.arraycopy(detectors, 0, detectorsNew, 0, detectors.length); detectorsNew[detectorsNew.length-1] = new MacroHyperlinkDetector(sourceViewer, editor); return detectorsNew; } }