1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-30 21:55:31 +02:00

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
This commit is contained in:
Alain Magloire 2004-12-13 01:52:48 +00:00
parent 22964c077e
commit 5ad554739c
10 changed files with 306 additions and 23 deletions

View file

@ -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

View file

@ -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();
}
});

View file

@ -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

View file

@ -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 == ')';
}
}

View file

@ -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<fgConstants.length; j++)
wordRule.addWord(fgConstants[j], token);
rules.add(wordRule);
token = getToken(ICColorConstants.C_TYPE);
rules.add(wordRule);
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);
token = getToken(ICColorConstants.C_TYPE);
PreprocessorRule preprocessorRule = new PreprocessorRule(new CWordDetector(), token);
i = ParserFactory.getKeywordSet( KeywordSetKey.PP_DIRECTIVE, ParserLanguage.C ).iterator();
@ -101,21 +120,21 @@ public final class CCodeScanner extends AbstractCScanner {
return rules;
}
/*
* @see RuleBasedScanner#setRules(IRule[])
/**
* @see org.eclipse.jface.text.rules.RuleBasedScanner#setRules(org.eclipse.jface.text.rules.IRule[])
*/
public void setRules(IRule[] rules) {
public void setRules(IRule[] rules) {
super.setRules(rules);
}
/*
/**
* @see AbstractCScanner#affectsBehavior(PropertyChangeEvent)
*/
public boolean affectsBehavior(PropertyChangeEvent event) {
return super.affectsBehavior(event);
}
/*
/**
* @see AbstractCScanner#adaptToPreferenceChange(PropertyChangeEvent)
*/
public void adaptToPreferenceChange(PropertyChangeEvent event) {

View file

@ -0,0 +1,30 @@
package org.eclipse.cdt.internal.ui.text;
import org.eclipse.jface.text.rules.IToken;
/**
* Rule to recognize operators.
*
* @author P.Tomaszewski
*/
public class COperatorRule extends SingleCharRule
{
/**
* Creates new rule.
* @param token Style token.
*/
public COperatorRule(IToken token)
{
super(token);
}
/**
* @see org.eclipse.cdt.internal.ui.text.SingleCharRule#isRuleChar(int)
*/
public boolean isRuleChar(int ch)
{
return (ch == ';' || ch == '.' || ch == ':' || ch == '=' || ch == '-'
|| ch == '+' || ch == '\\' || ch == '*' || ch == '!' || ch == '%'
|| ch == '^' || ch == '&' || ch == '~' || ch == '>' || ch == '<');
}
}

View file

@ -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;
}

View file

@ -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$

View file

@ -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 <b>true</b> 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 <b>true</b>
*/
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';
}
}

View file

@ -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 <b>true</b> if rule char.
*/
protected abstract boolean isRuleChar(int ch);
}