intial source from ttp://www.sf.net/projects/wdte
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.js.ui / src / net / sourceforge / phpeclipse / js / ui / editors / JSConfiguration.java
1 /*
2  * $RCSfile: JSConfiguration.java,v $
3  *
4  * Copyright 2002
5  * CH-1700 Fribourg, Switzerland
6  * All rights reserved.
7  *
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
14  *
15  * Revision 1.1  2004/02/05 03:13:28  agfitzp
16  * Initial submission, outline view is broken due to refactoring
17  *
18  * Revision 1.3.2.1  2003/12/12 21:37:24  agfitzp
19  * Experimental work for Classes view
20  *
21  * Revision 1.3  2003/12/10 20:19:16  agfitzp
22  * 3.0 port
23  *
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
28  *
29  * Revision 1.1  2003/05/28 15:17:12  agfitzp
30  * net.sourceforge.phpeclipse.js.ui 0.0.1 code base
31  *
32  *========================================================================
33 */
34
35 package net.sourceforge.phpeclipse.js.ui.editors;
36
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;
44
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;
62
63 /**
64  * 
65  *
66  * @author $Author: jsurfer $, $Date: 2004-09-02 18:23:49 $
67  *
68  * @version $Revision: 1.1 $
69  */
70 public class JSConfiguration extends SourceViewerConfiguration
71 {
72         private JSDoubleClickStrategy doubleClickStrategy;
73         private JSStringScanner stringScanner;
74         private JSScanner scanner;
75         private JSColorManager colorManager;
76         private IPreferenceStore preferences;
77
78         /**
79          * Creates a new JSConfiguration object.
80          *
81          * @param colorManager 
82          */
83         public JSConfiguration(JSColorManager colorManager)
84         {
85                 this.colorManager = colorManager;
86                 this.preferences = JSUIPlugin.getDefault().getPreferenceStore();
87         }
88         
89         public boolean getAutomaticOutliningPreference()
90         {
91                 return preferences.getBoolean(PreferenceNames.P_AUTO_OUTLINE);  
92         }
93
94         protected RGB getColorPreference(String categoryColor)
95         {
96                 String rgbString = preferences.getString(categoryColor);
97
98                 if (rgbString.length() <= 0)
99                 {
100                         rgbString = preferences.getDefaultString(categoryColor);
101                         if(rgbString.length() <= 0) 
102                         {
103                                 rgbString = "0,0,0";
104                         }
105                 }
106                 return StringConverter.asRGB(rgbString);
107         }
108
109         public Color getContentColor(String categoryColor)
110         {
111                 return colorManager.getColor(getColorPreference(categoryColor));
112         }
113
114         /**
115          *
116          *
117          * @param sourceViewer 
118          *
119          * @return 
120          */
121         public String[] getConfiguredContentTypes(ISourceViewer sourceViewer)
122         {
123                 return new String[] {
124                         IDocument.DEFAULT_CONTENT_TYPE,
125                         JSPartitionScanner.JS_COMMENT,
126                         JSPartitionScanner.JS_KEYWORD,
127                         JSPartitionScanner.JS_STRING };
128         }
129
130         /**
131          *
132          *
133          * @param sourceViewer 
134          * @param contentType 
135          *
136          * @return 
137          */
138         public ITextDoubleClickStrategy getDoubleClickStrategy(ISourceViewer sourceViewer, String contentType)
139         {
140                 if (doubleClickStrategy == null)
141                 {
142                         doubleClickStrategy = new JSDoubleClickStrategy();
143                 }
144
145                 return doubleClickStrategy;
146         }
147
148         /**
149          *
150          *
151          * @return 
152          */
153         protected JSScanner getJSScanner()
154         {
155                 if (scanner == null)
156                 {
157                         Color defaultColor = getContentColor(PreferenceNames.P_DEFAULT_COLOR);
158                         scanner = new JSScanner(defaultColor);
159                         scanner.setDefaultReturnToken(new Token(new TextAttribute(defaultColor)));
160                 }
161
162                 return scanner;
163         }
164
165         /**
166          *
167          *
168          * @return 
169          */
170         protected JSStringScanner getJSStringScanner()
171         {
172                 if (stringScanner == null)
173                 {
174                         Color stringColor = getContentColor(PreferenceNames.P_STRING_COLOR);
175                         stringScanner = new JSStringScanner(stringColor);
176                         stringScanner.setDefaultReturnToken(new Token(new TextAttribute(stringColor)));
177                 }
178
179                 return stringScanner;
180         }
181
182         /**
183          *
184          *
185          * @param sourceViewer 
186          *
187          * @return 
188          */
189         public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer)
190         {
191                 PresentationReconciler reconciler = new PresentationReconciler();
192
193                 DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getJSScanner());
194                 reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
195                 reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
196
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);
201
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);
206
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);
211
212                 return reconciler;
213         }
214         /**
215          * @return
216          */
217         public IPreferenceStore getPreferences() {
218                 return preferences;
219         }
220
221         /**
222          * @param store
223          */
224         public void setPreferences(IPreferenceStore store) {
225                 preferences = store;
226         }
227         public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
228             ContentAssistant assistant = new ContentAssistant();
229             assistant.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
230
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));
239
240             return assistant;
241           }
242 }