mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-16 12:45:41 +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:
parent
22964c077e
commit
5ad554739c
10 changed files with 306 additions and 23 deletions
|
@ -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
|
2004-12-10 Alain Magloire
|
||||||
Fix for 77874.
|
Fix for 77874.
|
||||||
In order to fix this we removed all of the Eclipse-1.0 classes
|
In order to fix this we removed all of the Eclipse-1.0 classes
|
||||||
|
|
|
@ -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.keywords"), ICColorConstants.C_KEYWORD }, { //$NON-NLS-1$
|
||||||
PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags.builtInTypes"), ICColorConstants.C_TYPE }, { //$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.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.others"), ICColorConstants.C_DEFAULT }, { //$NON-NLS-1$
|
||||||
PreferencesMessages.getString("CEditorPreferencePage.cCommentTaskTags"), PreferenceConstants.EDITOR_TASK_TAG_COLOR } //$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.STRING, ICColorConstants.C_STRING));
|
||||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ICColorConstants.C_STRING + "_bold")); //$NON-NLS-1$
|
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.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.STRING, CEditor.MATCHING_BRACKETS_COLOR));
|
||||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, CEditor.MATCHING_BRACKETS));
|
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, CEditor.MATCHING_BRACKETS));
|
||||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE_COLOR));
|
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));
|
PreferenceConverter.setDefault(store, ICColorConstants.C_DEFAULT, new RGB(0, 0, 0));
|
||||||
store.setDefault(ICColorConstants.C_DEFAULT + "_bold", false); //$NON-NLS-1$
|
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);
|
store.setDefault(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER, false);
|
||||||
PreferenceConverter.setDefault(store, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER_COLOR, new RGB(0, 0, 0));
|
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() {
|
fOverlayStore.addPropertyChangeListener(new IPropertyChangeListener() {
|
||||||
public void propertyChange(PropertyChangeEvent event) {
|
public void propertyChange(PropertyChangeEvent event) {
|
||||||
String p = event.getProperty();
|
String p = event.getProperty();
|
||||||
if (p.equals(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND)
|
// if (p.equals(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND)
|
||||||
|| p.equals(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT)) {
|
// || p.equals(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT)) {
|
||||||
initializeViewerColors(fPreviewViewer);
|
initializeViewerColors(fPreviewViewer);
|
||||||
}
|
// }
|
||||||
|
|
||||||
fPreviewViewer.getDocument().set(fPreviewViewer.getDocument().get());
|
fPreviewViewer.getDocument().set(fPreviewViewer.getDocument().get());
|
||||||
|
fPreviewViewer.invalidateTextPresentation();
|
||||||
//fPreviewViewer.refresh();
|
//fPreviewViewer.refresh();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -90,6 +90,9 @@ CEditorPreferencePage.cCommentTaskTags.singleLine=Single-line comment
|
||||||
CEditorPreferencePage.cCommentTaskTags.keywords=Keywords
|
CEditorPreferencePage.cCommentTaskTags.keywords=Keywords
|
||||||
CEditorPreferencePage.cCommentTaskTags.builtInTypes=Built-in types
|
CEditorPreferencePage.cCommentTaskTags.builtInTypes=Built-in types
|
||||||
CEditorPreferencePage.cCommentTaskTags.strings=Strings
|
CEditorPreferencePage.cCommentTaskTags.strings=Strings
|
||||||
|
CEditorPreferencePage.cCommentTaskTags.operators=Operators
|
||||||
|
CEditorPreferencePage.cCommentTaskTags.braces=Braces
|
||||||
|
CEditorPreferencePage.cCommentTaskTags.numbers=Numbers
|
||||||
CEditorPreferencePage.cCommentTaskTags.others=Others
|
CEditorPreferencePage.cCommentTaskTags.others=Others
|
||||||
CEditorPreferencePage.annotationsPage.presentationOptions=Annotation Presentation Options
|
CEditorPreferencePage.annotationsPage.presentationOptions=Annotation Presentation Options
|
||||||
CEditorPreferencePage.annotationsPage.showInText=Show In Text
|
CEditorPreferencePage.annotationsPage.showInText=Show In Text
|
||||||
|
|
|
@ -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 == ')';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -27,34 +27,41 @@ import org.eclipse.jface.util.PropertyChangeEvent;
|
||||||
*/
|
*/
|
||||||
public final class CCodeScanner extends AbstractCScanner {
|
public final class CCodeScanner extends AbstractCScanner {
|
||||||
|
|
||||||
private static String[] fgConstants= { "NULL", "__DATE__", "__LINE__", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
/** Constants which are additionally colored. */
|
||||||
"__TIME__", "__FILE__", "__STDC__"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
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= {
|
private static String[] fgTokenProperties= {
|
||||||
ICColorConstants.C_KEYWORD,
|
ICColorConstants.C_KEYWORD,
|
||||||
ICColorConstants.C_TYPE,
|
ICColorConstants.C_TYPE,
|
||||||
ICColorConstants.C_STRING,
|
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) {
|
public CCodeScanner(IColorManager manager, IPreferenceStore store) {
|
||||||
super(manager, store);
|
super(manager, store);
|
||||||
initialize();
|
initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* @see AbstractCScanner#getTokenProperties()
|
* @see AbstractCScanner#getTokenProperties()
|
||||||
*/
|
*/
|
||||||
protected String[] getTokenProperties() {
|
protected String[] getTokenProperties() {
|
||||||
return fgTokenProperties;
|
return fgTokenProperties;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* @see AbstractCScanner#createRules()
|
* @see AbstractCScanner#createRules()
|
||||||
*/
|
*/
|
||||||
protected List 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$
|
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()));
|
//rules.add(new WhitespaceRule(new CWhitespaceDetector()));
|
||||||
|
|
||||||
|
|
||||||
// Add word rule for keywords, types, and constants.
|
// Add word rule for keywords, types, and constants.
|
||||||
token= getToken(ICColorConstants.C_DEFAULT);
|
token= getToken(ICColorConstants.C_DEFAULT);
|
||||||
WordRule wordRule= new WordRule(new CWordDetector(), token);
|
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();
|
Iterator i = ParserFactory.getKeywordSet( KeywordSetKey.KEYWORDS, ParserLanguage.C ).iterator();
|
||||||
while( i.hasNext() )
|
while( i.hasNext() )
|
||||||
wordRule.addWord((String) i.next(), token);
|
wordRule.addWord((String) i.next(), token);
|
||||||
token= getToken(ICColorConstants.C_TYPE);
|
token= getToken(ICColorConstants.C_TYPE);
|
||||||
i = ParserFactory.getKeywordSet( KeywordSetKey.TYPES, ParserLanguage.C ).iterator();
|
i = ParserFactory.getKeywordSet( KeywordSetKey.TYPES, ParserLanguage.C ).iterator();
|
||||||
while( i.hasNext() )
|
while( i.hasNext() )
|
||||||
wordRule.addWord((String) i.next(), token);
|
wordRule.addWord((String) i.next(), token);
|
||||||
|
|
||||||
for (int j=0; j<fgConstants.length; j++)
|
for (int j=0; j<fgConstants.length; j++)
|
||||||
wordRule.addWord(fgConstants[j], token);
|
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);
|
PreprocessorRule preprocessorRule = new PreprocessorRule(new CWordDetector(), token);
|
||||||
|
|
||||||
i = ParserFactory.getKeywordSet( KeywordSetKey.PP_DIRECTIVE, ParserLanguage.C ).iterator();
|
i = ParserFactory.getKeywordSet( KeywordSetKey.PP_DIRECTIVE, ParserLanguage.C ).iterator();
|
||||||
|
@ -101,21 +120,21 @@ public final class CCodeScanner extends AbstractCScanner {
|
||||||
return rules;
|
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);
|
super.setRules(rules);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* @see AbstractCScanner#affectsBehavior(PropertyChangeEvent)
|
* @see AbstractCScanner#affectsBehavior(PropertyChangeEvent)
|
||||||
*/
|
*/
|
||||||
public boolean affectsBehavior(PropertyChangeEvent event) {
|
public boolean affectsBehavior(PropertyChangeEvent event) {
|
||||||
return super.affectsBehavior(event);
|
return super.affectsBehavior(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* @see AbstractCScanner#adaptToPreferenceChange(PropertyChangeEvent)
|
* @see AbstractCScanner#adaptToPreferenceChange(PropertyChangeEvent)
|
||||||
*/
|
*/
|
||||||
public void adaptToPreferenceChange(PropertyChangeEvent event) {
|
public void adaptToPreferenceChange(PropertyChangeEvent event) {
|
||||||
|
|
|
@ -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 == '<');
|
||||||
|
}
|
||||||
|
}
|
|
@ -34,6 +34,9 @@ public final class CppCodeScanner extends AbstractCScanner {
|
||||||
ICColorConstants.C_KEYWORD,
|
ICColorConstants.C_KEYWORD,
|
||||||
ICColorConstants.C_TYPE,
|
ICColorConstants.C_TYPE,
|
||||||
ICColorConstants.C_STRING,
|
ICColorConstants.C_STRING,
|
||||||
|
ICColorConstants.C_OPERATOR,
|
||||||
|
ICColorConstants.C_BRACES,
|
||||||
|
ICColorConstants.C_NUMBER,
|
||||||
ICColorConstants.C_DEFAULT
|
ICColorConstants.C_DEFAULT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -95,7 +98,19 @@ public final class CppCodeScanner extends AbstractCScanner {
|
||||||
preprocessorRule.addWord((String) iter.next(), token);
|
preprocessorRule.addWord((String) iter.next(), token);
|
||||||
|
|
||||||
rules.add(preprocessorRule);
|
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));
|
setDefaultReturnToken(getToken(ICColorConstants.C_DEFAULT));
|
||||||
return rules;
|
return rules;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,12 @@ public interface ICColorConstants {
|
||||||
String C_TYPE= "c_type"; //$NON-NLS-1$
|
String C_TYPE= "c_type"; //$NON-NLS-1$
|
||||||
/* The color key for string and character literals in C code. */
|
/* The color key for string and character literals in C code. */
|
||||||
String C_STRING= "c_string"; //$NON-NLS-1$
|
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. */
|
/* The color key for everthing in C code for which no other color is specified. */
|
||||||
String C_DEFAULT= "c_default"; //$NON-NLS-1$
|
String C_DEFAULT= "c_default"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
|
|
@ -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';
|
||||||
|
}
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue