| /*=============================================================================# |
| # Copyright (c) 2005, 2021 Stephan Wahlbrink and others. |
| # |
| # This program and the accompanying materials are made available under the |
| # terms of the Eclipse Public License 2.0 which is available at |
| # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 |
| # which is available at https://www.apache.org/licenses/LICENSE-2.0. |
| # |
| # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 |
| # |
| # Contributors: |
| # Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation |
| #=============================================================================*/ |
| |
| package org.eclipse.statet.r.ui.editors; |
| |
| import static org.eclipse.statet.r.ui.text.rd.IRdTextTokens.COMMENT; |
| import static org.eclipse.statet.r.ui.text.rd.IRdTextTokens.PLATFORM_SPECIF; |
| import static org.eclipse.statet.r.ui.text.rd.IRdTextTokens.TASK_TAG; |
| |
| import java.util.Map; |
| import java.util.Set; |
| |
| import org.eclipse.jface.preference.IPreferenceStore; |
| import org.eclipse.jface.text.ITextDoubleClickStrategy; |
| import org.eclipse.jface.text.source.ISourceViewer; |
| |
| import org.eclipse.statet.ecommons.text.ICharPairMatcher; |
| import org.eclipse.statet.ecommons.text.PairMatcher; |
| import org.eclipse.statet.ecommons.text.ui.presentation.SingleTokenScanner; |
| import org.eclipse.statet.ecommons.text.ui.settings.TextStyleManager; |
| import org.eclipse.statet.ecommons.ui.ISettingsChangedHandler; |
| |
| import org.eclipse.statet.base.ext.ui.text.CommentScanner; |
| import org.eclipse.statet.internal.r.ui.RUIPlugin; |
| import org.eclipse.statet.ltk.ui.LTKUIPreferences; |
| import org.eclipse.statet.ltk.ui.sourceediting.ISourceEditor; |
| import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfiguration; |
| import org.eclipse.statet.ltk.ui.sourceediting.assist.ContentAssist; |
| import org.eclipse.statet.r.core.RCore; |
| import org.eclipse.statet.r.core.RCoreAccess; |
| import org.eclipse.statet.r.core.source.RDocumentConstants; |
| import org.eclipse.statet.r.core.source.RdDocumentContentInfo; |
| import org.eclipse.statet.r.ui.text.rd.RdCodeScanner; |
| import org.eclipse.statet.r.ui.text.rd.RdDoubleClickStrategy; |
| |
| |
| /** |
| * Default Configuration for SourceViewer of R documentations. |
| */ |
| public class RdSourceViewerConfiguration extends SourceEditorViewerConfiguration |
| implements ISettingsChangedHandler { |
| |
| |
| private static final String[] CONTENT_TYPES= RDocumentConstants.RDOC_CONTENT_TYPES.toArray( |
| new String[RDocumentConstants.RDOC_CONTENT_TYPES.size()] ); |
| |
| private static final char[][] BRACKETS = { { '{', '}' } }; |
| |
| |
| private final RdDoubleClickStrategy fDoubleClickStrategy; |
| |
| private RCoreAccess fRCoreAccess; |
| |
| |
| public RdSourceViewerConfiguration(final int flags) { |
| this(flags, null, null, null, null); |
| } |
| |
| public RdSourceViewerConfiguration(final int flags, |
| final ISourceEditor sourceEditor, |
| final RCoreAccess access, |
| final IPreferenceStore preferenceStore, final TextStyleManager textStyles) { |
| super(RdDocumentContentInfo.INSTANCE, flags, sourceEditor); |
| setCoreAccess(access); |
| |
| setup((preferenceStore != null) ? preferenceStore : RUIPlugin.getInstance().getEditorPreferenceStore(), |
| LTKUIPreferences.getEditorDecorationPreferences(), |
| LTKUIPreferences.getAssistPreferences() ); |
| setTextStyles(textStyles); |
| this.fDoubleClickStrategy = new RdDoubleClickStrategy(); |
| } |
| |
| protected void setCoreAccess(final RCoreAccess access) { |
| this.fRCoreAccess = (access != null) ? access : RCore.getWorkbenchAccess(); |
| } |
| |
| |
| @Override |
| protected void initTextStyles() { |
| setTextStyles(RUIPlugin.getInstance().getRdTextStyles()); |
| } |
| |
| @Override |
| protected void initScanners() { |
| final TextStyleManager textStyles= getTextStyles(); |
| |
| addScanner(RDocumentConstants.RDOC_DEFAULT_CONTENT_TYPE, |
| new RdCodeScanner(textStyles) ); |
| addScanner(RDocumentConstants.RDOC_COMMENT_CONTENT_TYPE, |
| new CommentScanner(textStyles, COMMENT, TASK_TAG, this.fRCoreAccess.getPrefs()) ); |
| addScanner(RDocumentConstants.RDOC_COMMENT_CONTENT_TYPE, |
| new SingleTokenScanner(textStyles, PLATFORM_SPECIF ) ); |
| } |
| |
| |
| @Override |
| public String[] getConfiguredContentTypes(final ISourceViewer sourceViewer) { |
| return CONTENT_TYPES; |
| } |
| |
| |
| @Override |
| public ICharPairMatcher getPairMatcher() { |
| return new PairMatcher(BRACKETS, getDocumentContentInfo(), |
| new String[] { RDocumentConstants.RDOC_DEFAULT_CONTENT_TYPE }, '\\'); |
| } |
| |
| @Override |
| public ITextDoubleClickStrategy getDoubleClickStrategy(final ISourceViewer sourceViewer, final String contentType) { |
| return this.fDoubleClickStrategy; |
| } |
| |
| |
| @Override |
| public String[] getDefaultPrefixes(final ISourceViewer sourceViewer, final String contentType) { |
| return new String[] { "%", "" }; //$NON-NLS-1$ //$NON-NLS-2$ |
| } |
| |
| @Override |
| public void handleSettingsChanged(final Set<String> groupIds, final Map<String, Object> options) { |
| options.put(ISettingsChangedHandler.PREFERENCEACCESS_KEY, this.fRCoreAccess.getPrefs()); |
| super.handleSettingsChanged(groupIds, options); |
| } |
| |
| |
| @Override |
| protected ContentAssist createContentAssistant(final ISourceViewer sourceViewer) { |
| return null; |
| } |
| |
| } |