Created
December 28, 2010 23:08
-
-
Save samuell/757880 to your computer and use it in GitHub Desktop.
Add Operator Highligting to PyDev for Eclipse
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/org.python.pydev/src/org/python/pydev/editor/PyCodeScanner.java b/org.python.pydev/src/org/python/pydev/editor/PyCodeScanner.java | |
index 3e527cb..a4bb900 100644 | |
--- a/org.python.pydev/src/org/python/pydev/editor/PyCodeScanner.java | |
+++ b/org.python.pydev/src/org/python/pydev/editor/PyCodeScanner.java | |
@@ -47,6 +47,7 @@ public class PyCodeScanner extends RuleBasedScanner { | |
private IToken numberToken ; | |
private IToken classNameToken; | |
private IToken funcNameToken ; | |
+ private IToken operatorToken ; | |
private String[] keywords; | |
@@ -99,6 +100,24 @@ public class PyCodeScanner extends RuleBasedScanner { | |
} | |
+ static private class OperatorDetector implements IWordDetector{ | |
+ | |
+ /** | |
+ * @see org.eclipse.jface.text.rules.IWordDetector#isWordStart(char) | |
+ */ | |
+ public boolean isWordStart(char c) { | |
+ return c == '(' || c == ')' || c == '+' || c == '-' || c == '*' || c == '%' || c == '='; | |
+ } | |
+ | |
+ /** | |
+ * @see org.eclipse.jface.text.rules.IWordDetector#isWordPart(char) | |
+ */ | |
+ public boolean isWordPart(char c) { | |
+ return c == '='; | |
+ } | |
+ | |
+ } | |
+ | |
static public class NumberDetector implements IWordDetector{ | |
/** | |
@@ -183,6 +202,8 @@ public class PyCodeScanner extends RuleBasedScanner { | |
funcNameToken = new Token( colorCache.getFuncNameTextAttribute() ); | |
+ operatorToken = new Token( colorCache.getOperatorTextAttribute() ); | |
+ | |
setDefaultReturnToken(defaultToken); | |
List<IRule> rules = new ArrayList<IRule>(); | |
@@ -206,7 +227,7 @@ public class PyCodeScanner extends RuleBasedScanner { | |
} | |
rules.add(wordRule); | |
- | |
+ rules.add(new WordRule(new OperatorDetector(), operatorToken)); | |
rules.add(new WordRule(new DecoratorDetector(), decoratorToken)); | |
rules.add(new WordRule(new NumberDetector(), numberToken)); | |
diff --git a/org.python.pydev/src/org/python/pydev/editor/preferences/PydevEditorPrefs.java b/org.python.pydev/src/org/python/pydev/editor/preferences/PydevEditorPrefs.java | |
index 1dba717..4fc6ddf 100644 | |
--- a/org.python.pydev/src/org/python/pydev/editor/preferences/PydevEditorPrefs.java | |
+++ b/org.python.pydev/src/org/python/pydev/editor/preferences/PydevEditorPrefs.java | |
@@ -290,6 +290,7 @@ public class PydevEditorPrefs extends AbstractPydevPrefs { | |
localStore.setValue(STRING_COLOR, fOverlayStore.getString(STRING_COLOR)); | |
localStore.setValue(COMMENT_COLOR, fOverlayStore.getString(COMMENT_COLOR)); | |
localStore.setValue(BACKQUOTES_COLOR, fOverlayStore.getString(BACKQUOTES_COLOR)); | |
+ localStore.setValue(OPERATOR_COLOR, fOverlayStore.getString(OPERATOR_COLOR)); | |
localStore.setValue(KEYWORD_STYLE, fOverlayStore.getInt(KEYWORD_STYLE)); | |
@@ -302,7 +303,7 @@ public class PydevEditorPrefs extends AbstractPydevPrefs { | |
localStore.setValue(STRING_STYLE, fOverlayStore.getInt(STRING_STYLE)); | |
localStore.setValue(COMMENT_STYLE, fOverlayStore.getInt(COMMENT_STYLE)); | |
localStore.setValue(BACKQUOTES_STYLE, fOverlayStore.getInt(BACKQUOTES_STYLE)); | |
- | |
+ localStore.setValue(OPERATOR_STYLE, fOverlayStore.getInt(OPERATOR_STYLE)); | |
this.updateLabelExample(PyFormatStd.getFormat(), localStore); | |
} | |
diff --git a/org.python.pydev/src/org/python/pydev/plugin/preferences/AbstractPydevPrefs.java b/org.python.pydev/src/org/python/pydev/plugin/preferences/AbstractPydevPrefs.java | |
index 76cc65c..e129ec9 100644 | |
--- a/org.python.pydev/src/org/python/pydev/plugin/preferences/AbstractPydevPrefs.java | |
+++ b/org.python.pydev/src/org/python/pydev/plugin/preferences/AbstractPydevPrefs.java | |
@@ -164,6 +164,9 @@ public abstract class AbstractPydevPrefs extends PreferencePage implements IWork | |
public static final String FUNC_NAME_COLOR = "FUNC_NAME_COLOR"; | |
public static final RGB DEFAULT_FUNC_NAME_COLOR = new RGB(0, 0, 0); | |
+ public static final String OPERATOR_COLOR = "OPERATOR_COLOR"; | |
+ public static final RGB DEFAULT_OPERATOR_COLOR = new RGB(255, 0, 0); | |
+ | |
//see initializeDefaultColors for selection defaults | |
public static final String CONNECT_TIMEOUT = "CONNECT_TIMEOUT"; | |
public static final int DEFAULT_CONNECT_TIMEOUT = 20000; | |
@@ -199,6 +202,9 @@ public abstract class AbstractPydevPrefs extends PreferencePage implements IWork | |
public static final String FUNC_NAME_STYLE = "FUNC_NAME_STYLE"; | |
public static final int DEFAULT_FUNC_NAME_STYLE = SWT.BOLD; | |
+ public static final String OPERATOR_STYLE = "OPERATOR_STYLE"; | |
+ public static final int DEFAULT_OPERATOR_STYLE = SWT.NORMAL; | |
+ | |
/** | |
* Defaults | |
@@ -215,6 +221,7 @@ public abstract class AbstractPydevPrefs extends PreferencePage implements IWork | |
{"Backquotes", BACKQUOTES_COLOR, null}, | |
{"Class Name", CLASS_NAME_COLOR, null}, | |
{"Function Name", FUNC_NAME_COLOR, null}, | |
+ {"Operators", OPERATOR_COLOR, null}, | |
}; | |
protected final String[][] fAppearanceFontListModel= new String[][] { | |
@@ -229,6 +236,7 @@ public abstract class AbstractPydevPrefs extends PreferencePage implements IWork | |
{"Backquotes", BACKQUOTES_STYLE, null}, | |
{"Class Name", CLASS_NAME_STYLE, null}, | |
{"Function Name", FUNC_NAME_STYLE, null}, | |
+ {"Operators", OPERATOR_STYLE, null}, | |
}; | |
protected OverlayPreferenceStore fOverlayStore; | |
@@ -336,6 +344,7 @@ public abstract class AbstractPydevPrefs extends PreferencePage implements IWork | |
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, BACKQUOTES_COLOR)); | |
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, CLASS_NAME_COLOR)); | |
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, FUNC_NAME_COLOR)); | |
+ overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, OPERATOR_COLOR)); | |
//font style | |
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, CODE_STYLE)); | |
@@ -348,6 +357,7 @@ public abstract class AbstractPydevPrefs extends PreferencePage implements IWork | |
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, BACKQUOTES_STYLE)); | |
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, CLASS_NAME_STYLE)); | |
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, FUNC_NAME_STYLE)); | |
+ overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, OPERATOR_STYLE)); | |
OverlayPreferenceStore.OverlayKey[] keys= new OverlayPreferenceStore.OverlayKey[overlayKeys.size()]; | |
overlayKeys.toArray(keys); | |
diff --git a/org.python.pydev/src/org/python/pydev/plugin/preferences/IPydevPreferencesProvider.java b/org.python.pydev/src/org/python/pydev/plugin/preferences/IPydevPreferencesProvider.java | |
index 2a47543..44c0049 100644 | |
--- a/org.python.pydev/src/org/python/pydev/plugin/preferences/IPydevPreferencesProvider.java | |
+++ b/org.python.pydev/src/org/python/pydev/plugin/preferences/IPydevPreferencesProvider.java | |
@@ -38,7 +38,8 @@ public interface IPydevPreferencesProvider { | |
TextAttribute getConsolePromptTextAttribute(); | |
- RGB getConsoleBackgroundRGB(); | |
+ TextAttribute getOperatorTextAttribute(); | |
+ RGB getConsoleBackgroundRGB(); | |
} | |
diff --git a/org.python.pydev/src/org/python/pydev/plugin/preferences/PydevPrefsInitializer.java b/org.python.pydev/src/org/python/pydev/plugin/preferences/PydevPrefsInitializer.java | |
index f2e3722..b3562c2 100644 | |
--- a/org.python.pydev/src/org/python/pydev/plugin/preferences/PydevPrefsInitializer.java | |
+++ b/org.python.pydev/src/org/python/pydev/plugin/preferences/PydevPrefsInitializer.java | |
@@ -73,6 +73,7 @@ public class PydevPrefsInitializer extends AbstractPreferenceInitializer{ | |
node.put(PydevEditorPrefs.BACKQUOTES_COLOR,StringConverter.asString(PydevEditorPrefs.DEFAULT_BACKQUOTES_COLOR)); | |
node.put(PydevEditorPrefs.CLASS_NAME_COLOR, StringConverter.asString(PydevEditorPrefs.DEFAULT_CLASS_NAME_COLOR)); | |
node.put(PydevEditorPrefs.FUNC_NAME_COLOR, StringConverter.asString(PydevEditorPrefs.DEFAULT_FUNC_NAME_COLOR)); | |
+ node.put(PydevEditorPrefs.OPERATOR_COLOR, StringConverter.asString(PydevEditorPrefs.DEFAULT_OPERATOR_COLOR)); | |
//for selection colors see initializeDefaultColors() | |
//font style | |
@@ -86,6 +87,7 @@ public class PydevPrefsInitializer extends AbstractPreferenceInitializer{ | |
node.putInt(PydevEditorPrefs.BACKQUOTES_STYLE, PydevEditorPrefs.DEFAULT_BACKQUOTES_STYLE); | |
node.putInt(PydevEditorPrefs.CLASS_NAME_STYLE, PydevEditorPrefs.DEFAULT_CLASS_NAME_STYLE); | |
node.putInt(PydevEditorPrefs.FUNC_NAME_STYLE, PydevEditorPrefs.DEFAULT_FUNC_NAME_STYLE); | |
+ node.putInt(PydevEditorPrefs.OPERATOR_STYLE, PydevEditorPrefs.DEFAULT_OPERATOR_STYLE); | |
//no UI | |
node.putInt(PydevEditorPrefs.CONNECT_TIMEOUT, PydevEditorPrefs.DEFAULT_CONNECT_TIMEOUT); | |
diff --git a/org.python.pydev/src/org/python/pydev/ui/ColorAndStyleCache.java b/org.python.pydev/src/org/python/pydev/ui/ColorAndStyleCache.java | |
index 651e652..227b99a 100644 | |
--- a/org.python.pydev/src/org/python/pydev/ui/ColorAndStyleCache.java | |
+++ b/org.python.pydev/src/org/python/pydev/ui/ColorAndStyleCache.java | |
@@ -137,6 +137,19 @@ public class ColorAndStyleCache extends ColorCache{ | |
return new TextAttribute(getNamedColor( | |
PydevEditorPrefs.FUNC_NAME_COLOR), null, preferences.getInt(PydevEditorPrefs.FUNC_NAME_STYLE)); | |
} | |
+ | |
+ @SuppressWarnings("unchecked") | |
+ public TextAttribute getOperatorTextAttribute() { | |
+ List<IPydevPreferencesProvider> participants = ExtensionHelper.getParticipants(ExtensionHelper.PYDEV_PREFERENCES_PROVIDER); | |
+ for (IPydevPreferencesProvider iPydevPreferencesProvider : participants) { | |
+ TextAttribute textAttribute = iPydevPreferencesProvider.getOperatorTextAttribute(); | |
+ if(textAttribute != null){ | |
+ return textAttribute; | |
+ } | |
+ } | |
+ return new TextAttribute(getNamedColor( | |
+ PydevEditorPrefs.OPERATOR_COLOR), null, preferences.getInt(PydevEditorPrefs.OPERATOR_STYLE)); | |
+ } | |
@SuppressWarnings("unchecked") | |
public TextAttribute getCommentTextAttribute() { |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment