blob: 5fc2ccd3a8b079643bcc60550ab0554e20e1a12a [file] [log] [blame]
package org.eclipse.cdt.internal.ui.text;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
import org.eclipse.cdt.internal.ui.text.util.CWordDetector;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.text.rules.IRule;
import org.eclipse.jface.text.rules.SingleLineRule;
import org.eclipse.jface.text.rules.Token;
import org.eclipse.jface.text.rules.WordRule;
import org.eclipse.jface.util.PropertyChangeEvent;
/**
* A C code scanner.
*/
public final class CppCodeScanner extends AbstractCScanner {
private static String[] fgKeywords= {
"and", "and_eq", "asm", "auto",
"bitand", "bitor", "break",
"case", "catch", "class", "compl", "const", "const_cast", "continue",
"default", "delete", "do", "dynamic_cast",
"else", "enum", "explicit", "export", "extern",
"false", "final", "finally", "for", "friend",
"goto",
"if", "inline",
"mutable",
"namespace", "new", "not", "not_eq",
"operator", "or", "or_eq",
"private", "protected", "public",
"redeclared", "register", "reinterpret_cast", "return", "restrict",
"sizeof", "static", "static_cast", "struct", "switch",
"template", "this", "throw", "true", "try", "typedef", "typeid", "typename",
"union", "using",
"virtual", "volatile",
"while",
"xor", "xor_eq"
};
private static String[] fgTypes= { "bool", "char", "double", "float", "int", "long", "short", "signed", "unsigned", "void", "wchar_t", "_Bool", "_Complex", "_Imaginary"};
private static String[] fgConstants= { "false", "NULL", "true", "__DATE__", "__LINE__", "__TIME__", "__FILE__", "__STDC__"};
private static String[] fgPreprocessor= { "#define", "#undef", "#include", "#error", "#warning", "#pragma", "#ifdef", "#ifndef", "#line", "#undef", "#if", "#else", "#elif", "#endif"};
private static String[] fgTokenProperties= {
ICColorConstants.C_KEYWORD,
ICColorConstants.C_TYPE,
ICColorConstants.C_STRING,
ICColorConstants.C_DEFAULT
};
/**
* Creates a C++ code scanner
*/
public CppCodeScanner(IColorManager manager, IPreferenceStore store) {
super(manager, store);
initialize();
}
/*
* @see AbstractCScanner#getTokenProperties()
*/
protected String[] getTokenProperties() {
return fgTokenProperties;
}
/*
* @see AbstractCScanner#createRules()
*/
protected List createRules() {
List rules= new ArrayList();
// Add rule for strings
Token token= getToken(ICColorConstants.C_STRING);
// Add rule for strings and character constants.
rules.add(new SingleLineRule("'", "'", token, '\\'));
// Add generic whitespace 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);
token= getToken(ICColorConstants.C_KEYWORD);
for (int i=0; i<fgKeywords.length; i++)
wordRule.addWord(fgKeywords[i], token);
token= getToken(ICColorConstants.C_TYPE);
for (int i=0; i<fgTypes.length; i++)
wordRule.addWord(fgTypes[i], token);
for (int i=0; i<fgConstants.length; i++)
wordRule.addWord(fgConstants[i], token);
rules.add(wordRule);
token = getToken(ICColorConstants.C_TYPE);
PreprocessorRule preprocessorRule = new PreprocessorRule(new CWordDetector(), token);
for (int i=0; i<fgPreprocessor.length; i++) {
preprocessorRule.addWord(fgPreprocessor[i], token);
}
rules.add(preprocessorRule);
setDefaultReturnToken(getToken(ICColorConstants.C_DEFAULT));
return rules;
}
/*
* @see RuleBasedScanner#setRules(IRule[])
*/
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) {
if (super.affectsBehavior(event)) {
super.adaptToPreferenceChange(event);
}
}
}