diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog index e8f39c5a4d9..d5d90b8db48 100644 --- a/core/org.eclipse.cdt.ui/ChangeLog +++ b/core/org.eclipse.cdt.ui/ChangeLog @@ -1,3 +1,14 @@ +2004-12-12 Alain Magloire + PR 80631 Patch form Przemek Tomaszewski + * src/org/eclipse/cdt/internal.ui/preferences/CEditorPreferencePage.java + * src/org/eclipse/cdt/internal.ui/preferences/CEditorPreferencePage.properties + * src/org/eclipse/cdt/internal/ui/text/CBraceRule.java + * src/org/eclipse/cdt/internal/ui/text/CCodeScanner.java + * src/org/eclipse/cdt/internal/ui/text/CppCodeScanner.java + * src/org/eclipse/cdt/internal/ui/text/ICColorConstants.java + * src/org/eclipse/cdt/internal/ui/text/NumberRule.java + * src/org/eclipse/cdt/internal/ui/text/SingleCharRule.java + 2004-12-10 Alain Magloire Fix for 77874. In order to fix this we removed all of the Eclipse-1.0 classes diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CEditorPreferencePage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CEditorPreferencePage.java index 2c3fd2f441c..dcd38b0b03d 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CEditorPreferencePage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CEditorPreferencePage.java @@ -72,6 +72,9 @@ public class CEditorPreferencePage extends PreferencePage implements IWorkbenchP PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags.keywords"), ICColorConstants.C_KEYWORD }, { //$NON-NLS-1$ PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags.builtInTypes"), ICColorConstants.C_TYPE }, { //$NON-NLS-1$ PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags.strings"), ICColorConstants.C_STRING }, { //$NON-NLS-1$ + PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags.operators"), ICColorConstants.C_OPERATOR }, { //$NON-NLS-1$ + PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags.braces"), ICColorConstants.C_BRACES }, { //$NON-NLS-1$ + PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags.numbers"), ICColorConstants.C_NUMBER }, { //$NON-NLS-1$ PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags.others"), ICColorConstants.C_DEFAULT }, { //$NON-NLS-1$ PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags"), PreferenceConstants.EDITOR_TASK_TAG_COLOR } //$NON-NLS-1$ }; @@ -169,7 +172,13 @@ public class CEditorPreferencePage extends PreferencePage implements IWorkbenchP overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ICColorConstants.C_STRING)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ICColorConstants.C_STRING + "_bold")); //$NON-NLS-1$ overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ICColorConstants.C_DEFAULT)); - overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ICColorConstants.C_DEFAULT + "_bold")); //$NON-NLS-1$ + overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ICColorConstants.C_DEFAULT + "_bold")); //$NON-NLS-1$ + overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ICColorConstants.C_BRACES)); + overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ICColorConstants.C_BRACES + "_bold")); //$NON-NLS-1$ + overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ICColorConstants.C_NUMBER)); + overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ICColorConstants.C_NUMBER + "_bold")); //$NON-NLS-1$ + overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ICColorConstants.C_OPERATOR)); + overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ICColorConstants.C_OPERATOR + "_bold")); //$NON-NLS-1$ overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, CEditor.MATCHING_BRACKETS_COLOR)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, CEditor.MATCHING_BRACKETS)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE_COLOR)); @@ -251,7 +260,16 @@ public class CEditorPreferencePage extends PreferencePage implements IWorkbenchP PreferenceConverter.setDefault(store, ICColorConstants.C_DEFAULT, new RGB(0, 0, 0)); store.setDefault(ICColorConstants.C_DEFAULT + "_bold", false); //$NON-NLS-1$ - PreferenceConverter.setDefault(store, CEditor.LINKED_POSITION_COLOR, new RGB(0, 200, 100)); + PreferenceConverter.setDefault(store, ICColorConstants.C_OPERATOR, new RGB(0, 0, 0)); + store.setDefault(ICColorConstants.C_DEFAULT + "_bold", false); //$NON-NLS-1$ + + PreferenceConverter.setDefault(store, ICColorConstants.C_BRACES, new RGB(0, 0, 0)); + store.setDefault(ICColorConstants.C_DEFAULT + "_bold", false); //$NON-NLS-1$ + + PreferenceConverter.setDefault(store, ICColorConstants.C_NUMBER, new RGB(0, 0, 0)); + store.setDefault(ICColorConstants.C_DEFAULT + "_bold", false); //$NON-NLS-1$ + + PreferenceConverter.setDefault(store, CEditor.LINKED_POSITION_COLOR, new RGB(0, 200, 100)); store.setDefault(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER, false); PreferenceConverter.setDefault(store, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER_COLOR, new RGB(0, 0, 0)); @@ -489,12 +507,13 @@ public class CEditorPreferencePage extends PreferencePage implements IWorkbenchP fOverlayStore.addPropertyChangeListener(new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { String p = event.getProperty(); - if (p.equals(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND) - || p.equals(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT)) { +// if (p.equals(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND) +// || p.equals(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT)) { initializeViewerColors(fPreviewViewer); - } +// } fPreviewViewer.getDocument().set(fPreviewViewer.getDocument().get()); + fPreviewViewer.invalidateTextPresentation(); //fPreviewViewer.refresh(); } }); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.properties b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.properties index 2fd367348a5..a13b9dcc8e5 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.properties +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.properties @@ -90,6 +90,9 @@ CEditorPreferencePage.cCommentTaskTags.singleLine=Single-line comment CEditorPreferencePage.cCommentTaskTags.keywords=Keywords CEditorPreferencePage.cCommentTaskTags.builtInTypes=Built-in types CEditorPreferencePage.cCommentTaskTags.strings=Strings +CEditorPreferencePage.cCommentTaskTags.operators=Operators +CEditorPreferencePage.cCommentTaskTags.braces=Braces +CEditorPreferencePage.cCommentTaskTags.numbers=Numbers CEditorPreferencePage.cCommentTaskTags.others=Others CEditorPreferencePage.annotationsPage.presentationOptions=Annotation Presentation Options CEditorPreferencePage.annotationsPage.showInText=Show In Text diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CBraceRule.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CBraceRule.java new file mode 100644 index 00000000000..085b488196b --- /dev/null +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CBraceRule.java @@ -0,0 +1,31 @@ +package org.eclipse.cdt.internal.ui.text; + +import org.eclipse.jface.text.rules.IToken; + +/** + * Braces rule. + * + * @author P.Tomaszewski + */ +public class CBraceRule extends SingleCharRule +{ + + /** + * Creates new rule. + * @param token Style token. + */ + public CBraceRule(IToken token) + { + super(token); + } + + /** + * @see org.eclipse.cdt.internal.ui.text.SingleCharRule#isRuleChar(int) + */ + protected boolean isRuleChar(int ch) + { + return ch == '{' || ch == '}' || ch == '[' || ch == ']' || ch == '(' || ch == ')'; + } + + +} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCodeScanner.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCodeScanner.java index 278342e1180..d53a2065cc3 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCodeScanner.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CCodeScanner.java @@ -27,34 +27,41 @@ import org.eclipse.jface.util.PropertyChangeEvent; */ public final class CCodeScanner extends AbstractCScanner { - private static String[] fgConstants= { "NULL", "__DATE__", "__LINE__", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - "__TIME__", "__FILE__", "__STDC__"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + /** Constants which are additionally colored. */ + private static String[] fgConstants= { "NULL", "__DATE__", "__LINE__", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + "__TIME__", "__FILE__", "__STDC__", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + "bool", "TRUE", "FALSE"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - + /** Properties for tokens. */ private static String[] fgTokenProperties= { ICColorConstants.C_KEYWORD, ICColorConstants.C_TYPE, ICColorConstants.C_STRING, - ICColorConstants.C_DEFAULT + ICColorConstants.C_OPERATOR, + ICColorConstants.C_BRACES, + ICColorConstants.C_NUMBER, + ICColorConstants.C_DEFAULT, }; /** - * Creates a C code scanner + * Creates a C code scanner. + * @param manager Color manager. + * @param store Preference store. */ public CCodeScanner(IColorManager manager, IPreferenceStore store) { super(manager, store); initialize(); } - /* + /** * @see AbstractCScanner#getTokenProperties() */ protected String[] getTokenProperties() { return fgTokenProperties; } - /* + /** * @see AbstractCScanner#createRules() */ protected List createRules() { @@ -67,10 +74,9 @@ public final class CCodeScanner extends AbstractCScanner { rules.add(new SingleLineRule("'", "'", token, '\\')); //$NON-NLS-1$ //$NON-NLS-2$ - // Add generic whitespace rule. + // Add generic white space rule. //rules.add(new WhitespaceRule(new CWhitespaceDetector())); - // Add word rule for keywords, types, and constants. token= getToken(ICColorConstants.C_DEFAULT); WordRule wordRule= new WordRule(new CWordDetector(), token); @@ -79,16 +85,29 @@ public final class CCodeScanner extends AbstractCScanner { Iterator i = ParserFactory.getKeywordSet( KeywordSetKey.KEYWORDS, ParserLanguage.C ).iterator(); while( i.hasNext() ) wordRule.addWord((String) i.next(), token); - token= getToken(ICColorConstants.C_TYPE); + token= getToken(ICColorConstants.C_TYPE); i = ParserFactory.getKeywordSet( KeywordSetKey.TYPES, ParserLanguage.C ).iterator(); while( i.hasNext() ) wordRule.addWord((String) i.next(), token); for (int j=0; j' || ch == '<'); + } +} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CppCodeScanner.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CppCodeScanner.java index 15e75721c17..eabd50bb2ad 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CppCodeScanner.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CppCodeScanner.java @@ -34,6 +34,9 @@ public final class CppCodeScanner extends AbstractCScanner { ICColorConstants.C_KEYWORD, ICColorConstants.C_TYPE, ICColorConstants.C_STRING, + ICColorConstants.C_OPERATOR, + ICColorConstants.C_BRACES, + ICColorConstants.C_NUMBER, ICColorConstants.C_DEFAULT }; @@ -95,7 +98,19 @@ public final class CppCodeScanner extends AbstractCScanner { preprocessorRule.addWord((String) iter.next(), token); rules.add(preprocessorRule); - + + token = getToken(ICColorConstants.C_NUMBER); + NumberRule numberRule = new NumberRule(token); + rules.add(numberRule); + + token = getToken(ICColorConstants.C_OPERATOR); + COperatorRule opRule = new COperatorRule(token); + rules.add(opRule); + + token = getToken(ICColorConstants.C_BRACES); + CBraceRule braceRule = new CBraceRule(token); + rules.add(braceRule); + setDefaultReturnToken(getToken(ICColorConstants.C_DEFAULT)); return rules; } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/ICColorConstants.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/ICColorConstants.java index 285f10b35f8..1456b18d41a 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/ICColorConstants.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/ICColorConstants.java @@ -30,6 +30,12 @@ public interface ICColorConstants { String C_TYPE= "c_type"; //$NON-NLS-1$ /* The color key for string and character literals in C code. */ String C_STRING= "c_string"; //$NON-NLS-1$ + /** The color key for operators. */ + String C_OPERATOR = "c_operators"; + /** The color key for braces. */ + String C_BRACES = "c_braces"; + /** The color key for numbers. */ + String C_NUMBER = "c_numbers"; /* The color key for everthing in C code for which no other color is specified. */ String C_DEFAULT= "c_default"; //$NON-NLS-1$ diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/NumberRule.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/NumberRule.java new file mode 100644 index 00000000000..4e25001131c --- /dev/null +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/NumberRule.java @@ -0,0 +1,99 @@ +package org.eclipse.cdt.internal.ui.text; + +import org.eclipse.jface.text.rules.ICharacterScanner; +import org.eclipse.jface.text.rules.IRule; +import org.eclipse.jface.text.rules.IToken; +import org.eclipse.jface.text.rules.Token; + +/** + * Recognizes numbers; + * + * @author P.Tomaszewski + */ +public class NumberRule implements IRule +{ + /** Style token. */ + private IToken token; + + + /** + * Creates new number rule. + * @param token Style token. + */ + public NumberRule(IToken token) + { + super(); + this.token = token; + } + + /** + * @see org.eclipse.jface.text.rules.IRule#evaluate(org.eclipse.jface.text.rules.ICharacterScanner) + */ + public IToken evaluate(ICharacterScanner scanner) + { + int startCh = scanner.read(); + int ch; + + if (isNumberStart(startCh)) + { + ch = scanner.read(); + boolean hexNumber = ch == 'x'; + boolean decNumber = false; + if (!hexNumber) + { + decNumber = Character.isDigit((char)ch); + } + if (!hexNumber && !decNumber) + { + scanner.unread(); + // If minus only it should be qualified as operator. + if (startCh == '-') + { + scanner.unread(); + return Token.UNDEFINED; + } + return token; + } + if (hexNumber) + { + do + { + ch = scanner.read(); + } while (isHexNumberPart((char)ch)); + } + else if (decNumber) + { + do + { + ch = scanner.read(); + } while (Character.isDigit((char)ch)); + } + scanner.unread(); + return token; + } + scanner.unread(); + return Token.UNDEFINED; + } + + /** + * Checks if start of number. + * @param ch Char to check. + * @return true if Number. + */ + private boolean isNumberStart(int ch) + { + return ch == '-' || Character.isDigit((char)ch); + } + + /** + * Checks if part of hex number; + * @param ch Char to check. + * @return true + */ + private boolean isHexNumberPart(int ch) + { + return Character.isDigit((char)ch) || ch == 'a' || ch == 'b' + || ch == 'c' || ch == 'd' || ch == 'e' || ch == 'f' || ch == 'A' + || ch == 'B' || ch == 'C' || ch == 'D' || ch == 'E' || ch == 'F'; + } +} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/SingleCharRule.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/SingleCharRule.java new file mode 100644 index 00000000000..378f83b1cf0 --- /dev/null +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/SingleCharRule.java @@ -0,0 +1,50 @@ +package org.eclipse.cdt.internal.ui.text; + +import org.eclipse.jface.text.rules.ICharacterScanner; +import org.eclipse.jface.text.rules.IRule; +import org.eclipse.jface.text.rules.IToken; +import org.eclipse.jface.text.rules.Token; + +/** + * Checks for single char. + * + * @author P.Tomaszewski + */ +public abstract class SingleCharRule implements IRule +{ + + /** Style token. */ + private IToken token; + + /** + * Creates new rule. + * @param token Style token. + */ + public SingleCharRule(IToken token) + { + super(); + this.token = token; + } + + /** + * @see org.eclipse.jface.text.rules.IRule#evaluate(org.eclipse.jface.text.rules.ICharacterScanner) + */ + public IToken evaluate(ICharacterScanner scanner) + { + int ch = scanner.read(); + + if (isRuleChar(ch)) + { + return token; + } + scanner.unread(); + return Token.UNDEFINED; + } + + /** + * Checks if char is rule char. + * @param ch Char to check. + * @return true if rule char. + */ + protected abstract boolean isRuleChar(int ch); +}