/*******************************************************************************
* 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;
import static org.eclipse.jface.text.IDocument.DEFAULT_CONTENT_TYPE;
import java.util.Map;
import org.deved.antlride.common.ui.text.AntlrCommonSourceViewerConfiguration;
import org.deved.antlride.stringtemplate.internal.ui.text.highlighting.StringTemplateBuildInStringHighlightScanner;
import org.deved.antlride.stringtemplate.internal.ui.text.highlighting.StringTemplateCodeHighlightScanner;
import org.deved.antlride.stringtemplate.internal.ui.text.highlighting.StringTemplateCommentHighlightScanner;
import org.deved.antlride.stringtemplate.internal.ui.text.highlighting.StringTemplateDoubleAngleBracketHighlightScanner;
import org.deved.antlride.stringtemplate.internal.ui.text.highlighting.StringTemplateEspecialCharactersHighlightScanner;
import org.deved.antlride.stringtemplate.internal.ui.text.highlighting.StringTemplateMapHighlightScanner;
import org.deved.antlride.stringtemplate.internal.ui.text.highlighting.StringTemplateSTGMultilineCommentHighlightScanner;
import org.deved.antlride.stringtemplate.internal.ui.text.highlighting.StringTemplateSTGSinglelineCommentHighlightScanner;
import org.deved.antlride.stringtemplate.internal.ui.text.highlighting.StringTemplateSinglelineStringHighlightScanner;
import org.deved.antlride.stringtemplate.internal.ui.text.highlighting.StringTemplateTemplateBodyHighlightScanner;
import org.deved.antlride.stringtemplate.internal.ui.text.highlighting.StringTemplateTemplateHighlightScanner;
import org.deved.antlride.stringtemplate.internal.ui.text.highlighting.StringTemplateTemplateRegionHighlightScanner;
import org.deved.antlride.stringtemplate.internal.ui.text.partitions.StringTemplatePartitions;
import org.eclipse.dltk.ui.actions.IScriptEditorActionDefinitionIds;
import org.eclipse.dltk.ui.text.AbstractScriptScanner;
import org.eclipse.dltk.ui.text.IColorManager;
import org.eclipse.dltk.ui.text.completion.ContentAssistPreference;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.text.AbstractInformationControlManager;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IInformationControl;
import org.eclipse.jface.text.information.IInformationPresenter;
import org.eclipse.jface.text.information.IInformationProvider;
import org.eclipse.jface.text.information.InformationPresenter;
import org.eclipse.jface.text.reconciler.IReconciler;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.texteditor.ITextEditor;
public class StringTemplateSourceViewerConfiguration extends
AntlrCommonSourceViewerConfiguration {
public StringTemplateSourceViewerConfiguration(IColorManager colorManager,
IPreferenceStore preferenceStore, ITextEditor editor,
String partitioning) {
super(colorManager, preferenceStore, editor, partitioning);
}
@Override
protected void initializeScanners(
Map<String, AbstractScriptScanner> scanners) {
AbstractScriptScanner scanner;
scanner = new StringTemplateCodeHighlightScanner(getColorManager(),
fPreferenceStore);
scanners.put(DEFAULT_CONTENT_TYPE, scanner);
// template
scanner = new StringTemplateTemplateHighlightScanner(getColorManager(),
fPreferenceStore);
scanners.put(StringTemplatePartitions.TEMPLATE, scanner);
// <<|>>
scanner = new StringTemplateDoubleAngleBracketHighlightScanner(
getColorManager(), fPreferenceStore);
scanners.put(StringTemplatePartitions.DOUBLE_ANGLE_BRACKETS, scanner);
// [...]
scanner = new StringTemplateMapHighlightScanner(getColorManager(),
fPreferenceStore);
scanners.put(StringTemplatePartitions.MAP, scanner);
// <@...>
scanner = new StringTemplateTemplateRegionHighlightScanner(
getColorManager(), fPreferenceStore);
scanners.put(StringTemplatePartitions.TEMPLATE_REGION, scanner);
// <\...>
scanner = new StringTemplateEspecialCharactersHighlightScanner(
getColorManager(), fPreferenceStore);
scanners.put(StringTemplatePartitions.ESPECIAL_CHARACTERS, scanner);
// build in string: "<...>"
scanner = new StringTemplateBuildInStringHighlightScanner(
getColorManager(), fPreferenceStore);
scanners.put(StringTemplatePartitions.BUILD_IN_STRING, scanner);
// template body: <...>
scanner = new StringTemplateTemplateBodyHighlightScanner(
getColorManager(), fPreferenceStore);
scanners.put(StringTemplatePartitions.TEMPLATE_BODY, scanner);
// string
scanner = new StringTemplateSinglelineStringHighlightScanner(
getColorManager(), fPreferenceStore);
scanners.put(StringTemplatePartitions.STRING, scanner);
// comment's
scanner = new StringTemplateCommentHighlightScanner(getColorManager(),
fPreferenceStore);
scanners.put(StringTemplatePartitions.COMMENT, scanner);
scanner = new StringTemplateSTGSinglelineCommentHighlightScanner(
getColorManager(), fPreferenceStore);
scanners.put(StringTemplatePartitions.STG_SINGLE_LINE_COMMENT, scanner);
scanner = new StringTemplateSTGMultilineCommentHighlightScanner(
getColorManager(), fPreferenceStore);
scanners.put(StringTemplatePartitions.STG_MULTI_LINE_COMMENT, scanner);
// scanner = new
// StringTemplateSTGDocumentCommentHighlightScanner(getColorManager(),
// fPreferenceStore);
// scanners.put(StringTemplatePartitions.STG_DOC_COMMENT, scanner);
}
@Override
public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) {
return StringTemplatePartitions.PARTITION_TYPES;
}
@Override
public IInformationPresenter getOutlinePresenter(
ISourceViewer sourceViewer, boolean doCodeResolve) {
InformationPresenter presenter;
if (doCodeResolve)
presenter = new StringTemplateInformationPresenter(
getOutlinePresenterControlCreator(sourceViewer,
IScriptEditorActionDefinitionIds.OPEN_STRUCTURE));
else
presenter = new StringTemplateInformationPresenter(
getOutlinePresenterControlCreator(sourceViewer,
IScriptEditorActionDefinitionIds.SHOW_OUTLINE));
presenter
.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
presenter.setAnchor(AbstractInformationControlManager.ANCHOR_GLOBAL);
IInformationProvider provider = new StringTemplateElementProvider(
getEditor(), doCodeResolve);
presenter.setInformationProvider(provider,
IDocument.DEFAULT_CONTENT_TYPE);
initializeQuickOutlineContexts(presenter, provider);
presenter.setSizeConstraints(50, 20, true, false);
return presenter;
}
@Override
protected ContentAssistPreference getContentAssistPreference() {
return StringTemplateContentAssistPreference.getDefault();
}
@Override
protected IInformationControl getOutlineInformationControl(Shell parent,
int shellStyle, int treeStyle, String commandId) {
return new StringTemplateOutlineInformationControl(getEditor(), parent,
shellStyle, treeStyle, commandId);
}
@Override
public IReconciler getReconciler(ISourceViewer sourceViewer) {
return null;
}
}