2 * $RCSfile: JSConfiguration.java,v $
5 * CH-1700 Fribourg, Switzerland
8 *========================================================================
9 * Modifications history
10 *========================================================================
11 * $Log: not supported by cvs2svn $
12 * Revision 1.2 2004/02/26 02:25:57 agfitzp
13 * renamed packages to match xml & css
15 * Revision 1.1 2004/02/05 03:13:28 agfitzp
16 * Initial submission, outline view is broken due to refactoring
18 * Revision 1.3.2.1 2003/12/12 21:37:24 agfitzp
19 * Experimental work for Classes view
21 * Revision 1.3 2003/12/10 20:19:16 agfitzp
24 * Revision 1.2 2003/06/21 03:48:51 agfitzp
25 * fixed global variables as functions bug
26 * fixed length calculation of instance variables
27 * Automatic outlining is now a preference
29 * Revision 1.1 2003/05/28 15:17:12 agfitzp
30 * net.sourceforge.phpeclipse.js.ui 0.0.1 code base
32 *========================================================================
35 package net.sourceforge.phpeclipse.js.ui.editors;
37 import net.sourceforge.phpeclipse.js.core.parser.JSPartitionScanner;
38 import net.sourceforge.phpeclipse.js.core.parser.JSScanner;
39 import net.sourceforge.phpeclipse.js.core.parser.JSStringScanner;
40 import net.sourceforge.phpeclipse.js.core.parser.NonRuleBasedDamagerRepairer;
41 import net.sourceforge.phpeclipse.js.ui.JSUIPlugin;
42 import net.sourceforge.phpeclipse.js.ui.internal.text.JSCompletionProcessor;
43 import net.sourceforge.phpeclipse.js.ui.preferences.PreferenceNames;
45 import org.eclipse.jface.preference.IPreferenceStore;
46 import org.eclipse.jface.resource.StringConverter;
47 import org.eclipse.jface.text.IDocument;
48 import org.eclipse.jface.text.ITextDoubleClickStrategy;
49 import org.eclipse.jface.text.TextAttribute;
50 import org.eclipse.jface.text.contentassist.ContentAssistant;
51 import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
52 import org.eclipse.jface.text.contentassist.IContentAssistant;
53 import org.eclipse.jface.text.presentation.IPresentationReconciler;
54 import org.eclipse.jface.text.presentation.PresentationReconciler;
55 import org.eclipse.jface.text.rules.DefaultDamagerRepairer;
56 import org.eclipse.jface.text.rules.Token;
57 import org.eclipse.jface.text.source.ISourceViewer;
58 import org.eclipse.jface.text.source.SourceViewerConfiguration;
59 import org.eclipse.swt.SWT;
60 import org.eclipse.swt.graphics.Color;
61 import org.eclipse.swt.graphics.RGB;
66 * @author $Author: jsurfer $, $Date: 2004-09-02 18:23:49 $
68 * @version $Revision: 1.1 $
70 public class JSConfiguration extends SourceViewerConfiguration
72 private JSDoubleClickStrategy doubleClickStrategy;
73 private JSStringScanner stringScanner;
74 private JSScanner scanner;
75 private JSColorManager colorManager;
76 private IPreferenceStore preferences;
79 * Creates a new JSConfiguration object.
83 public JSConfiguration(JSColorManager colorManager)
85 this.colorManager = colorManager;
86 this.preferences = JSUIPlugin.getDefault().getPreferenceStore();
89 public boolean getAutomaticOutliningPreference()
91 return preferences.getBoolean(PreferenceNames.P_AUTO_OUTLINE);
94 protected RGB getColorPreference(String categoryColor)
96 String rgbString = preferences.getString(categoryColor);
98 if (rgbString.length() <= 0)
100 rgbString = preferences.getDefaultString(categoryColor);
101 if(rgbString.length() <= 0)
106 return StringConverter.asRGB(rgbString);
109 public Color getContentColor(String categoryColor)
111 return colorManager.getColor(getColorPreference(categoryColor));
117 * @param sourceViewer
121 public String[] getConfiguredContentTypes(ISourceViewer sourceViewer)
123 return new String[] {
124 IDocument.DEFAULT_CONTENT_TYPE,
125 JSPartitionScanner.JS_COMMENT,
126 JSPartitionScanner.JS_KEYWORD,
127 JSPartitionScanner.JS_STRING };
133 * @param sourceViewer
138 public ITextDoubleClickStrategy getDoubleClickStrategy(ISourceViewer sourceViewer, String contentType)
140 if (doubleClickStrategy == null)
142 doubleClickStrategy = new JSDoubleClickStrategy();
145 return doubleClickStrategy;
153 protected JSScanner getJSScanner()
157 Color defaultColor = getContentColor(PreferenceNames.P_DEFAULT_COLOR);
158 scanner = new JSScanner(defaultColor);
159 scanner.setDefaultReturnToken(new Token(new TextAttribute(defaultColor)));
170 protected JSStringScanner getJSStringScanner()
172 if (stringScanner == null)
174 Color stringColor = getContentColor(PreferenceNames.P_STRING_COLOR);
175 stringScanner = new JSStringScanner(stringColor);
176 stringScanner.setDefaultReturnToken(new Token(new TextAttribute(stringColor)));
179 return stringScanner;
185 * @param sourceViewer
189 public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer)
191 PresentationReconciler reconciler = new PresentationReconciler();
193 DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getJSScanner());
194 reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
195 reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
197 NonRuleBasedDamagerRepairer commentRepairer =
198 new NonRuleBasedDamagerRepairer(new TextAttribute(getContentColor(PreferenceNames.P_COMMENT_COLOR)));
199 reconciler.setDamager(commentRepairer, JSPartitionScanner.JS_COMMENT);
200 reconciler.setRepairer(commentRepairer, JSPartitionScanner.JS_COMMENT);
202 NonRuleBasedDamagerRepairer stringRepairer =
203 new NonRuleBasedDamagerRepairer(new TextAttribute(getContentColor(PreferenceNames.P_STRING_COLOR)));
204 reconciler.setDamager(stringRepairer, JSPartitionScanner.JS_STRING);
205 reconciler.setRepairer(stringRepairer, JSPartitionScanner.JS_STRING);
207 NonRuleBasedDamagerRepairer keywordRepairer =
208 new NonRuleBasedDamagerRepairer(new TextAttribute(getContentColor(PreferenceNames.P_KEYWORD_COLOR), null, SWT.BOLD));
209 reconciler.setDamager(keywordRepairer, JSPartitionScanner.JS_KEYWORD);
210 reconciler.setRepairer(keywordRepairer, JSPartitionScanner.JS_KEYWORD);
217 public IPreferenceStore getPreferences() {
224 public void setPreferences(IPreferenceStore store) {
227 public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
228 ContentAssistant assistant = new ContentAssistant();
229 assistant.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
231 IContentAssistProcessor processor = new JSCompletionProcessor();
232 assistant.setContentAssistProcessor(processor, IDocument.DEFAULT_CONTENT_TYPE);
233 assistant.setContentAssistProcessor(processor, JSPartitionScanner.JS_COMMENT);
234 assistant.setContentAssistProcessor(processor, JSPartitionScanner.JS_STRING);
235 assistant.setContentAssistProcessor(processor, JSPartitionScanner.JS_KEYWORD);
236 assistant.setContentAssistProcessor(processor, JSPartitionScanner.JS_DEFAULT);
237 assistant.setContextInformationPopupOrientation(IContentAssistant.CONTEXT_INFO_ABOVE);
238 assistant.setInformationControlCreator(getInformationControlCreator(sourceViewer));