mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-24 01:15:29 +02:00
Make keyword highlighting dependent on language dialect (follow-up to 175493)
This commit is contained in:
parent
db758116da
commit
bbd2239f57
9 changed files with 282 additions and 308 deletions
|
@ -0,0 +1,49 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2007 Wind River Systems, Inc. and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Anton Leherbauer (Wind River Systems) - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.core.model;
|
||||
|
||||
/**
|
||||
* This is an optional extension interface to {@link ILanguage} which allows
|
||||
* a C/C++ language variant to expose the set of keywords it defines.
|
||||
*
|
||||
* <p>
|
||||
* <strong>EXPERIMENTAL</strong>. This class or interface has been added as
|
||||
* part of a work in progress. There is no guarantee that this API will work or
|
||||
* that it will remain the same. Please do not use this API without consulting
|
||||
* with the CDT team.
|
||||
* </p>
|
||||
*
|
||||
* @since 4.0
|
||||
*/
|
||||
public interface ICLanguageKeywords {
|
||||
|
||||
/**
|
||||
* Get the keywords defined for this language, excluding bult-in types.
|
||||
*
|
||||
* @return an array of keywords, never <code>null</code>
|
||||
*/
|
||||
public abstract String[] getKeywords();
|
||||
|
||||
/**
|
||||
* Get the built-in type names defined for this language.
|
||||
*
|
||||
* @return an array of names, never <code>null</code>
|
||||
*/
|
||||
public abstract String[] getBuiltinTypes();
|
||||
|
||||
/**
|
||||
* Get the preprocessor keywords (directives) defined for this language.
|
||||
*
|
||||
* @return an array of keywords, never <code>null</code>
|
||||
*/
|
||||
public abstract String[] getPreprocessorKeywords();
|
||||
|
||||
}
|
|
@ -11,7 +11,10 @@
|
|||
package org.eclipse.cdt.core.dom.parser.c;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ICodeReaderFactory;
|
||||
import org.eclipse.cdt.core.dom.ast.ASTCompletionNode;
|
||||
|
@ -25,15 +28,18 @@ import org.eclipse.cdt.core.dom.parser.ISourceCodeParser;
|
|||
import org.eclipse.cdt.core.index.IIndex;
|
||||
import org.eclipse.cdt.core.model.AbstractLanguage;
|
||||
import org.eclipse.cdt.core.model.IContributedModelBuilder;
|
||||
import org.eclipse.cdt.core.model.ICLanguageKeywords;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.core.parser.CodeReader;
|
||||
import org.eclipse.cdt.core.parser.IParserLogService;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
import org.eclipse.cdt.core.parser.IScannerInfo;
|
||||
import org.eclipse.cdt.core.parser.KeywordSetKey;
|
||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||
import org.eclipse.cdt.core.parser.ParserMode;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.c.GNUCSourceParser;
|
||||
import org.eclipse.cdt.internal.core.parser.scanner2.DOMScanner;
|
||||
import org.eclipse.cdt.internal.core.parser.token.KeywordSets;
|
||||
import org.eclipse.cdt.internal.core.pdom.dom.IPDOMLinkageFactory;
|
||||
import org.eclipse.cdt.internal.core.pdom.dom.c.PDOMCLinkageFactory;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
|
@ -55,7 +61,7 @@ import org.eclipse.core.runtime.CoreException;
|
|||
*
|
||||
* @since 4.0
|
||||
*/
|
||||
public abstract class AbstractCLanguage extends AbstractLanguage {
|
||||
public abstract class AbstractCLanguage extends AbstractLanguage implements ICLanguageKeywords {
|
||||
|
||||
protected static class NameCollector extends CASTVisitor {
|
||||
{
|
||||
|
@ -75,10 +81,10 @@ public abstract class AbstractCLanguage extends AbstractLanguage {
|
|||
}
|
||||
|
||||
public Object getAdapter(Class adapter) {
|
||||
if (adapter == IPDOMLinkageFactory.class)
|
||||
if (adapter == IPDOMLinkageFactory.class) {
|
||||
return new PDOMCLinkageFactory();
|
||||
else
|
||||
return super.getAdapter(adapter);
|
||||
}
|
||||
return super.getAdapter(adapter);
|
||||
}
|
||||
|
||||
public IASTTranslationUnit getASTTranslationUnit(CodeReader reader, IScannerInfo scanInfo,
|
||||
|
@ -169,4 +175,39 @@ public abstract class AbstractCLanguage extends AbstractLanguage {
|
|||
*/
|
||||
protected abstract ICParserExtensionConfiguration getParserExtensionConfiguration();
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.core.model.ICLanguageKeywords#getKeywords()
|
||||
*/
|
||||
public String[] getKeywords() {
|
||||
Set keywords= KeywordSets.getKeywords(KeywordSetKey.KEYWORDS, ParserLanguage.C);
|
||||
keywords= new HashSet(keywords);
|
||||
List additionalKeywords= getScannerExtensionConfiguration().getAdditionalKeywords().toList();
|
||||
for (Iterator iterator = additionalKeywords.iterator(); iterator.hasNext(); ) {
|
||||
char[] name = (char[]) iterator.next();
|
||||
keywords.add(new String(name));
|
||||
}
|
||||
return (String[]) keywords.toArray(new String[keywords.size()]);
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.core.model.ICLanguageKeywords#getBuiltinTypes()
|
||||
*/
|
||||
public String[] getBuiltinTypes() {
|
||||
Set types= KeywordSets.getKeywords(KeywordSetKey.TYPES, ParserLanguage.C);
|
||||
return (String[]) types.toArray(new String[types.size()]);
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.core.model.ICLanguageKeywords#getPreprocessorKeywords()
|
||||
*/
|
||||
public String[] getPreprocessorKeywords() {
|
||||
Set keywords= KeywordSets.getKeywords(KeywordSetKey.PP_DIRECTIVE, ParserLanguage.C);
|
||||
keywords= new HashSet(keywords);
|
||||
List additionalKeywords= getScannerExtensionConfiguration().getAdditionalPreprocessorKeywords().toList();
|
||||
for (Iterator iterator = additionalKeywords.iterator(); iterator.hasNext(); ) {
|
||||
char[] name = (char[]) iterator.next();
|
||||
keywords.add(new String(name));
|
||||
}
|
||||
return (String[]) keywords.toArray(new String[keywords.size()]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,10 @@
|
|||
package org.eclipse.cdt.core.dom.parser.cpp;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ICodeReaderFactory;
|
||||
import org.eclipse.cdt.core.dom.ast.ASTCompletionNode;
|
||||
|
@ -23,16 +26,19 @@ import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration;
|
|||
import org.eclipse.cdt.core.dom.parser.ISourceCodeParser;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
import org.eclipse.cdt.core.model.AbstractLanguage;
|
||||
import org.eclipse.cdt.core.model.ICLanguageKeywords;
|
||||
import org.eclipse.cdt.core.model.IContributedModelBuilder;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.core.parser.CodeReader;
|
||||
import org.eclipse.cdt.core.parser.IParserLogService;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
import org.eclipse.cdt.core.parser.IScannerInfo;
|
||||
import org.eclipse.cdt.core.parser.KeywordSetKey;
|
||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||
import org.eclipse.cdt.core.parser.ParserMode;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.GNUCPPSourceParser;
|
||||
import org.eclipse.cdt.internal.core.parser.scanner2.DOMScanner;
|
||||
import org.eclipse.cdt.internal.core.parser.token.KeywordSets;
|
||||
import org.eclipse.cdt.internal.core.pdom.dom.IPDOMLinkageFactory;
|
||||
import org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPLinkageFactory;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
|
@ -54,7 +60,7 @@ import org.eclipse.core.runtime.CoreException;
|
|||
*
|
||||
* @since 4.0
|
||||
*/
|
||||
public abstract class AbstractCPPLanguage extends AbstractLanguage {
|
||||
public abstract class AbstractCPPLanguage extends AbstractLanguage implements ICLanguageKeywords {
|
||||
|
||||
protected static class NameCollector extends CPPASTVisitor {
|
||||
{
|
||||
|
@ -74,10 +80,10 @@ public abstract class AbstractCPPLanguage extends AbstractLanguage {
|
|||
}
|
||||
|
||||
public Object getAdapter(Class adapter) {
|
||||
if (adapter == IPDOMLinkageFactory.class)
|
||||
if (adapter == IPDOMLinkageFactory.class) {
|
||||
return new PDOMCPPLinkageFactory();
|
||||
else
|
||||
return super.getAdapter(adapter);
|
||||
}
|
||||
return super.getAdapter(adapter);
|
||||
}
|
||||
|
||||
public IASTTranslationUnit getASTTranslationUnit(CodeReader reader, IScannerInfo scanInfo,
|
||||
|
@ -166,4 +172,39 @@ public abstract class AbstractCPPLanguage extends AbstractLanguage {
|
|||
*/
|
||||
protected abstract AbstractCPPParserExtensionConfiguration getParserExtensionConfiguration();
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.core.model.ICLanguageKeywords#getKeywords()
|
||||
*/
|
||||
public String[] getKeywords() {
|
||||
Set keywords= KeywordSets.getKeywords(KeywordSetKey.KEYWORDS, ParserLanguage.CPP);
|
||||
keywords= new HashSet(keywords);
|
||||
List additionalKeywords= getScannerExtensionConfiguration().getAdditionalKeywords().toList();
|
||||
for (Iterator iterator = additionalKeywords.iterator(); iterator.hasNext(); ) {
|
||||
char[] name = (char[]) iterator.next();
|
||||
keywords.add(new String(name));
|
||||
}
|
||||
return (String[]) keywords.toArray(new String[keywords.size()]);
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.core.model.ICLanguageKeywords#getBuiltinTypes()
|
||||
*/
|
||||
public String[] getBuiltinTypes() {
|
||||
Set types= KeywordSets.getKeywords(KeywordSetKey.TYPES, ParserLanguage.CPP);
|
||||
return (String[]) types.toArray(new String[types.size()]);
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.core.model.ICLanguageKeywords#getPreprocessorKeywords()
|
||||
*/
|
||||
public String[] getPreprocessorKeywords() {
|
||||
Set keywords= KeywordSets.getKeywords(KeywordSetKey.PP_DIRECTIVE, ParserLanguage.CPP);
|
||||
keywords= new HashSet(keywords);
|
||||
List additionalKeywords= getScannerExtensionConfiguration().getAdditionalPreprocessorKeywords().toList();
|
||||
for (Iterator iterator = additionalKeywords.iterator(); iterator.hasNext(); ) {
|
||||
char[] name = (char[]) iterator.next();
|
||||
keywords.add(new String(name));
|
||||
}
|
||||
return (String[]) keywords.toArray(new String[keywords.size()]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2004, 2005 IBM Corporation and others.
|
||||
* Copyright (c) 2004, 2007 IBM Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
|
@ -8,11 +8,11 @@
|
|||
* Contributors:
|
||||
* IBM - Initial API and implementation
|
||||
* Ed Swartz (Nokia)
|
||||
* Anton Leherbauer (Wind River Systems)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.core.dom.parser.cpp;
|
||||
|
||||
import org.eclipse.cdt.core.dom.parser.GNUScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.parser.GCCKeywords;
|
||||
import org.eclipse.cdt.core.parser.IGCCToken;
|
||||
import org.eclipse.cdt.core.parser.IToken;
|
||||
|
@ -22,8 +22,7 @@ import org.eclipse.cdt.core.parser.util.CharArrayIntMap;
|
|||
/**
|
||||
* @author jcamelon
|
||||
*/
|
||||
public class GPPScannerExtensionConfiguration extends GNUScannerExtensionConfiguration implements
|
||||
IScannerExtensionConfiguration {
|
||||
public class GPPScannerExtensionConfiguration extends GNUScannerExtensionConfiguration {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.parser.scanner2.IScannerConfiguration#supportMinAndMaxOperators()
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 2006 IBM Corporation and others.
|
||||
* Copyright (c) 2000, 2007 IBM Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
|
@ -13,34 +13,25 @@
|
|||
package org.eclipse.cdt.internal.ui.text;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.jface.preference.IPreferenceStore;
|
||||
import org.eclipse.jface.text.rules.IRule;
|
||||
import org.eclipse.jface.text.rules.Token;
|
||||
import org.eclipse.jface.text.rules.WhitespaceRule;
|
||||
import org.eclipse.jface.text.rules.WordRule;
|
||||
import org.eclipse.jface.util.PropertyChangeEvent;
|
||||
|
||||
import org.eclipse.cdt.core.parser.KeywordSetKey;
|
||||
import org.eclipse.cdt.core.parser.ParserFactory;
|
||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||
import org.eclipse.cdt.core.model.ICLanguageKeywords;
|
||||
|
||||
import org.eclipse.cdt.internal.ui.text.util.CWhitespaceDetector;
|
||||
import org.eclipse.cdt.internal.ui.text.util.CWordDetector;
|
||||
|
||||
|
||||
/**
|
||||
* A C code scanner.
|
||||
* A C/C++ code scanner.
|
||||
*/
|
||||
public final class CCodeScanner extends AbstractCScanner {
|
||||
|
||||
/** 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$
|
||||
"EXT_TEXT"}; //$NON-NLS-1$
|
||||
/** Properties for tokens. */
|
||||
private static String[] fgTokenProperties= {
|
||||
ICColorConstants.C_KEYWORD,
|
||||
|
@ -50,26 +41,29 @@ public final class CCodeScanner extends AbstractCScanner {
|
|||
ICColorConstants.C_NUMBER,
|
||||
ICColorConstants.C_DEFAULT,
|
||||
};
|
||||
|
||||
private ICLanguageKeywords fKeywords;
|
||||
|
||||
/**
|
||||
* Creates a C code scanner.
|
||||
* @param manager Color manager.
|
||||
* @param store Preference store.
|
||||
* Creates a C/C++ code scanner.
|
||||
*
|
||||
* @param manager the color manager
|
||||
* @param store the reference store
|
||||
* @param keywords the keywords defined by the language dialect
|
||||
*/
|
||||
public CCodeScanner(IColorManager manager, IPreferenceStore store) {
|
||||
public CCodeScanner(IColorManager manager, IPreferenceStore store, ICLanguageKeywords keywords) {
|
||||
super(manager, store);
|
||||
fKeywords= keywords;
|
||||
initialize();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
/*
|
||||
* @see AbstractCScanner#getTokenProperties()
|
||||
*/
|
||||
protected String[] getTokenProperties() {
|
||||
return fgTokenProperties;
|
||||
}
|
||||
|
||||
/**
|
||||
/*
|
||||
* @see AbstractCScanner#createRules()
|
||||
*/
|
||||
protected List createRules() {
|
||||
|
@ -85,17 +79,15 @@ public final class CCodeScanner extends AbstractCScanner {
|
|||
WordRule wordRule= new WordRule(new CWordDetector(), token);
|
||||
|
||||
token= getToken(ICColorConstants.C_KEYWORD);
|
||||
Iterator i = ParserFactory.getKeywordSet( KeywordSetKey.KEYWORDS, ParserLanguage.C ).iterator();
|
||||
while( i.hasNext() )
|
||||
wordRule.addWord((String) i.next(), token);
|
||||
String[] keywords= fKeywords.getKeywords();
|
||||
for (int i = 0; i < keywords.length; i++) {
|
||||
wordRule.addWord(keywords[i], token);
|
||||
}
|
||||
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);
|
||||
|
||||
String[] types= fKeywords.getBuiltinTypes();
|
||||
for (int i = 0; i < types.length; i++) {
|
||||
wordRule.addWord(types[i], token);
|
||||
}
|
||||
rules.add(wordRule);
|
||||
|
||||
token = getToken(ICColorConstants.C_NUMBER);
|
||||
|
@ -114,25 +106,10 @@ public final class CCodeScanner extends AbstractCScanner {
|
|||
return rules;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.eclipse.jface.text.rules.RuleBasedScanner#setRules(org.eclipse.jface.text.rules.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);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2006 Wind River Systems, Inc. and others.
|
||||
* Copyright (c) 2007 Wind River Systems, Inc. and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
|
@ -8,11 +8,9 @@
|
|||
* Contributors:
|
||||
* Anton Leherbauer (Wind River Systems) - initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.ui.text;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.jface.preference.IPreferenceStore;
|
||||
|
@ -24,9 +22,7 @@ import org.eclipse.jface.text.rules.Token;
|
|||
import org.eclipse.jface.text.rules.WhitespaceRule;
|
||||
import org.eclipse.jface.text.rules.WordRule;
|
||||
|
||||
import org.eclipse.cdt.core.parser.KeywordSetKey;
|
||||
import org.eclipse.cdt.core.parser.ParserFactory;
|
||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||
import org.eclipse.cdt.core.model.ICLanguageKeywords;
|
||||
|
||||
import org.eclipse.cdt.internal.ui.text.util.CWhitespaceDetector;
|
||||
import org.eclipse.cdt.internal.ui.text.util.CWordDetector;
|
||||
|
@ -49,19 +45,18 @@ public class CPreprocessorScanner extends AbstractCScanner {
|
|||
ICColorConstants.C_STRING,
|
||||
ICColorConstants.PP_HEADER
|
||||
};
|
||||
private ICLanguageKeywords fKeywords;
|
||||
|
||||
private boolean fIsCpp;
|
||||
|
||||
/**
|
||||
* Creates a C/C++ preprocessor scanner.
|
||||
*
|
||||
* @param manager the color manager.
|
||||
* @param store the preference store.
|
||||
* @param isCpp if <code>true</code> C++ keywords are used, else C keywords
|
||||
* @param manager the color manager
|
||||
* @param store the preference store
|
||||
* @param keywords the keywords defined by the language dialect
|
||||
*/
|
||||
public CPreprocessorScanner(IColorManager manager, IPreferenceStore store, boolean isCpp) {
|
||||
public CPreprocessorScanner(IColorManager manager, IPreferenceStore store, ICLanguageKeywords keywords) {
|
||||
super(manager, store);
|
||||
fIsCpp= isCpp;
|
||||
fKeywords= keywords;
|
||||
initialize();
|
||||
}
|
||||
|
||||
|
@ -80,14 +75,11 @@ public class CPreprocessorScanner extends AbstractCScanner {
|
|||
|
||||
token= getToken(ICColorConstants.PP_DIRECTIVE);
|
||||
PreprocessorRule preprocessorRule = new PreprocessorRule(new CWordDetector(), token);
|
||||
Iterator iter;
|
||||
if (fIsCpp) {
|
||||
iter = ParserFactory.getKeywordSet( KeywordSetKey.PP_DIRECTIVE, ParserLanguage.CPP ).iterator();
|
||||
} else {
|
||||
iter = ParserFactory.getKeywordSet( KeywordSetKey.PP_DIRECTIVE, ParserLanguage.C ).iterator();
|
||||
token= getToken(ICColorConstants.C_TYPE);
|
||||
String[] ppKeywords= fKeywords.getPreprocessorKeywords();
|
||||
for (int i = 0; i < ppKeywords.length; i++) {
|
||||
preprocessorRule.addWord(ppKeywords[i], token);
|
||||
}
|
||||
while( iter.hasNext() )
|
||||
preprocessorRule.addWord((String) iter.next(), token);
|
||||
|
||||
// add ## operator
|
||||
preprocessorRule.addWord("##", token); //$NON-NLS-1$
|
||||
|
@ -97,19 +89,16 @@ public class CPreprocessorScanner extends AbstractCScanner {
|
|||
WordRule wordRule= new WordRule(new CWordDetector(), defaultToken);
|
||||
|
||||
token= getToken(ICColorConstants.C_KEYWORD);
|
||||
if (fIsCpp) {
|
||||
iter = ParserFactory.getKeywordSet( KeywordSetKey.KEYWORDS, ParserLanguage.CPP ).iterator();
|
||||
} else {
|
||||
iter = ParserFactory.getKeywordSet( KeywordSetKey.KEYWORDS, ParserLanguage.C ).iterator();
|
||||
String[] keywords= fKeywords.getKeywords();
|
||||
for (int i = 0; i < keywords.length; i++) {
|
||||
wordRule.addWord(keywords[i], token);
|
||||
}
|
||||
while( iter.hasNext() )
|
||||
wordRule.addWord((String) iter.next(), token);
|
||||
|
||||
token= getToken(ICColorConstants.C_TYPE);
|
||||
iter = ParserFactory.getKeywordSet( KeywordSetKey.TYPES, ParserLanguage.C ).iterator();
|
||||
while( iter.hasNext() )
|
||||
wordRule.addWord((String) iter.next(), token);
|
||||
rules.add(wordRule);
|
||||
token= getToken(ICColorConstants.C_TYPE);
|
||||
String[] types= fKeywords.getBuiltinTypes();
|
||||
for (int i = 0; i < types.length; i++) {
|
||||
wordRule.addWord(types[i], token);
|
||||
}
|
||||
rules.add(wordRule);
|
||||
|
||||
token = getToken(ICColorConstants.PP_HEADER);
|
||||
CHeaderRule headerRule = new CHeaderRule(token);
|
||||
|
|
|
@ -63,10 +63,10 @@ import org.eclipse.ui.texteditor.IDocumentProvider;
|
|||
import org.eclipse.ui.texteditor.ITextEditor;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.dom.ast.gnu.c.GCCLanguage;
|
||||
import org.eclipse.cdt.core.dom.ast.gnu.cpp.GPPLanguage;
|
||||
import org.eclipse.cdt.core.formatter.DefaultCodeFormatterConstants;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.ICLanguageKeywords;
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.model.ILanguage;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
|
@ -101,13 +101,9 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
|
|||
*/
|
||||
private String fDocumentPartitioning;
|
||||
/**
|
||||
* The C++ source code scanner.
|
||||
* The code scanner.
|
||||
*/
|
||||
private AbstractCScanner fCppCodeScanner;
|
||||
/**
|
||||
* The C source code scanner.
|
||||
*/
|
||||
private AbstractCScanner fCCodeScanner;
|
||||
private AbstractCScanner fCodeScanner;
|
||||
/**
|
||||
* The C multi-line comment scanner.
|
||||
*/
|
||||
|
@ -120,18 +116,14 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
|
|||
* The C string scanner.
|
||||
*/
|
||||
private AbstractCScanner fStringScanner;
|
||||
/**
|
||||
* The preprocessor scanner.
|
||||
*/
|
||||
private AbstractCScanner fPreprocessorScanner;
|
||||
/**
|
||||
* The color manager.
|
||||
*/
|
||||
private IColorManager fColorManager;
|
||||
/**
|
||||
* The C preprocessor scanner.
|
||||
*/
|
||||
private AbstractCScanner fCPreprocessorScanner;
|
||||
/**
|
||||
* The C++ preprocessor scanner.
|
||||
*/
|
||||
private AbstractCScanner fCppPreprocessorScanner;
|
||||
|
||||
/**
|
||||
* Creates a new C source viewer configuration for viewers in the given editor
|
||||
|
@ -162,6 +154,8 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
|
|||
*
|
||||
* @param tools the C text tools collection to be used
|
||||
* @param editor the editor in which the configured viewer will reside
|
||||
*
|
||||
* @deprecated Use {@link #CSourceViewerConfiguration(IColorManager colorManager, IPreferenceStore preferenceStore, ITextEditor editor, String partitioning)} instead.
|
||||
*/
|
||||
public CSourceViewerConfiguration(CTextTools tools, ITextEditor editor) {
|
||||
super(CUIPlugin.getDefault().getCombinedPreferenceStore());
|
||||
|
@ -169,13 +163,9 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
|
|||
fColorManager= tools.getColorManager();
|
||||
fTextEditor= editor;
|
||||
fDocumentPartitioning= fTextTools.getDocumentPartitioning();
|
||||
fCppCodeScanner= (AbstractCScanner) fTextTools.getCppCodeScanner();
|
||||
fCCodeScanner= (AbstractCScanner) fTextTools.getCCodeScanner();
|
||||
fMultilineCommentScanner= (AbstractCScanner) fTextTools.getMultilineCommentScanner();
|
||||
fSinglelineCommentScanner= (AbstractCScanner) fTextTools.getSinglelineCommentScanner();
|
||||
fStringScanner= (AbstractCScanner) fTextTools.getStringScanner();
|
||||
fCPreprocessorScanner= (AbstractCScanner) fTextTools.getCPreprocessorScanner();
|
||||
fCppPreprocessorScanner= (AbstractCScanner) fTextTools.getCppPreprocessorScanner();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -206,21 +196,31 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns the C preprocessor scanner for this configuration.
|
||||
* Returns the preprocessor scanner for this configuration.
|
||||
*
|
||||
* @return the C preprocessor scanner
|
||||
* @return the preprocessor scanner
|
||||
*/
|
||||
protected RuleBasedScanner getCPreprocessorScanner() {
|
||||
return fCPreprocessorScanner;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the C++ preprocessor scanner for this configuration.
|
||||
*
|
||||
* @return the C++ preprocessor scanner
|
||||
*/
|
||||
protected RuleBasedScanner getCppPreprocessorScanner() {
|
||||
return fCppPreprocessorScanner;
|
||||
protected RuleBasedScanner getPreprocessorScanner(ILanguage language) {
|
||||
if (fPreprocessorScanner != null) {
|
||||
return fPreprocessorScanner;
|
||||
}
|
||||
if (isNewSetup()) {
|
||||
AbstractCScanner scanner= null;
|
||||
if (language instanceof ICLanguageKeywords) {
|
||||
scanner= new CPreprocessorScanner(getColorManager(), fPreferenceStore, (ICLanguageKeywords)language);
|
||||
}
|
||||
if (scanner == null) {
|
||||
scanner= new CPreprocessorScanner(getColorManager(), fPreferenceStore, GPPLanguage.getDefault());
|
||||
}
|
||||
fPreprocessorScanner= scanner;
|
||||
} else {
|
||||
if (language instanceof ICLanguageKeywords) {
|
||||
return fTextTools.getCPreprocessorScanner();
|
||||
} else {
|
||||
return fTextTools.getCppPreprocessorScanner();
|
||||
}
|
||||
}
|
||||
return fPreprocessorScanner;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -286,13 +286,9 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
|
|||
*/
|
||||
private void initializeScanners() {
|
||||
Assert.isTrue(isNewSetup());
|
||||
fCppCodeScanner= new CppCodeScanner(getColorManager(), fPreferenceStore);
|
||||
fCCodeScanner= new CCodeScanner(getColorManager(), fPreferenceStore);
|
||||
fMultilineCommentScanner= new CCommentScanner(getColorManager(), fPreferenceStore, ICColorConstants.C_MULTI_LINE_COMMENT);
|
||||
fSinglelineCommentScanner= new CCommentScanner(getColorManager(), fPreferenceStore, ICColorConstants.C_SINGLE_LINE_COMMENT);
|
||||
fStringScanner= new SingleTokenCScanner(getColorManager(), fPreferenceStore, ICColorConstants.C_STRING);
|
||||
fCppPreprocessorScanner= new CPreprocessorScanner(fColorManager, fPreferenceStore, true);
|
||||
fCPreprocessorScanner= new CPreprocessorScanner(fColorManager, fPreferenceStore, false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -302,20 +298,8 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
|
|||
CPresentationReconciler reconciler= new CPresentationReconciler();
|
||||
reconciler.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
|
||||
|
||||
RuleBasedScanner scanner = null;
|
||||
ILanguage language = getLanguage();
|
||||
if (language instanceof GPPLanguage) {
|
||||
scanner = fCppCodeScanner;
|
||||
} else if (language instanceof GCCLanguage) {
|
||||
scanner = fCCodeScanner;
|
||||
} else if (language != null) {
|
||||
ILanguageUI languageUI = (ILanguageUI)language.getAdapter(ILanguageUI.class);
|
||||
if (languageUI != null)
|
||||
scanner = languageUI.getCodeScanner();
|
||||
}
|
||||
if (scanner == null) {
|
||||
scanner= fCppCodeScanner;
|
||||
}
|
||||
ILanguage language= getLanguage();
|
||||
RuleBasedScanner scanner = getCodeScanner(language);
|
||||
|
||||
DefaultDamagerRepairer dr= new DefaultDamagerRepairer(scanner);
|
||||
|
||||
|
@ -340,13 +324,7 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
|
|||
reconciler.setDamager(dr, ICPartitions.C_CHARACTER);
|
||||
reconciler.setRepairer(dr, ICPartitions.C_CHARACTER);
|
||||
|
||||
if (language instanceof GPPLanguage) {
|
||||
dr= new DefaultDamagerRepairer(getCppPreprocessorScanner());
|
||||
} else if (language instanceof GCCLanguage) {
|
||||
dr= new DefaultDamagerRepairer(getCPreprocessorScanner());
|
||||
} else {
|
||||
dr= new DefaultDamagerRepairer(getCppPreprocessorScanner());
|
||||
}
|
||||
dr= new DefaultDamagerRepairer(getPreprocessorScanner(language));
|
||||
if (dr != null) {
|
||||
reconciler.setDamager(new PartitionDamager(), ICPartitions.C_PREPROCESSOR);
|
||||
reconciler.setRepairer(dr, ICPartitions.C_PREPROCESSOR);
|
||||
|
@ -355,6 +333,39 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
|
|||
return reconciler;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the code scanner for the given language
|
||||
*/
|
||||
protected RuleBasedScanner getCodeScanner(ILanguage language) {
|
||||
if (fCodeScanner != null) {
|
||||
return fCodeScanner;
|
||||
}
|
||||
if (isNewSetup()) {
|
||||
RuleBasedScanner scanner= null;
|
||||
if (language instanceof ICLanguageKeywords) {
|
||||
ICLanguageKeywords cLang= (ICLanguageKeywords)language;
|
||||
scanner = new CCodeScanner(getColorManager(), fPreferenceStore, cLang);
|
||||
} else if (language != null) {
|
||||
ILanguageUI languageUI = (ILanguageUI)language.getAdapter(ILanguageUI.class);
|
||||
if (languageUI != null)
|
||||
scanner = languageUI.getCodeScanner();
|
||||
}
|
||||
if (scanner == null) {
|
||||
scanner = new CCodeScanner(getColorManager(), fPreferenceStore, GPPLanguage.getDefault());
|
||||
}
|
||||
if (scanner instanceof AbstractCScanner) {
|
||||
fCodeScanner= (AbstractCScanner)scanner;
|
||||
}
|
||||
return scanner;
|
||||
} else {
|
||||
if (language instanceof ICLanguageKeywords) {
|
||||
return fTextTools.getCCodeScanner();
|
||||
} else {
|
||||
return fTextTools.getCppCodeScanner();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* @see SourceViewerConfiguration#getContentAssistant(ISourceViewer)
|
||||
*/
|
||||
|
@ -610,11 +621,18 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
|
|||
}
|
||||
|
||||
public boolean affectsBehavior(PropertyChangeEvent event) {
|
||||
return fCppCodeScanner.affectsBehavior(event)
|
||||
|| fMultilineCommentScanner.affectsBehavior(event)
|
||||
if (fMultilineCommentScanner.affectsBehavior(event)
|
||||
|| fSinglelineCommentScanner.affectsBehavior(event)
|
||||
|| fStringScanner.affectsBehavior(event)
|
||||
|| fCppPreprocessorScanner.affectsBehavior(event);
|
||||
|| fStringScanner.affectsBehavior(event)) {
|
||||
return true;
|
||||
}
|
||||
if (fCodeScanner != null && fCodeScanner.affectsBehavior(event)) {
|
||||
return true;
|
||||
}
|
||||
if (fPreprocessorScanner != null && fPreprocessorScanner.affectsBehavior(event)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -624,6 +642,7 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
|
|||
* @param event the event to whch to adapt
|
||||
*/
|
||||
public void adaptToPreferenceChange(PropertyChangeEvent event) {
|
||||
Assert.isTrue(!isNewSetup());
|
||||
fTextTools.adaptToPreferenceChange(event);
|
||||
}
|
||||
|
||||
|
@ -673,12 +692,7 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
|
|||
* @return <code>true</code> if event causes a behavioral change
|
||||
*/
|
||||
public boolean affectsTextPresentation(PropertyChangeEvent event) {
|
||||
return fCppCodeScanner.affectsBehavior(event)
|
||||
|| fCCodeScanner.affectsBehavior(event)
|
||||
|| fMultilineCommentScanner.affectsBehavior(event)
|
||||
|| fSinglelineCommentScanner.affectsBehavior(event)
|
||||
|| fStringScanner.affectsBehavior(event)
|
||||
|| fCppPreprocessorScanner.affectsBehavior(event);
|
||||
return affectsBehavior(event);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -694,20 +708,16 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
|
|||
*/
|
||||
public void handlePropertyChangeEvent(PropertyChangeEvent event) {
|
||||
Assert.isTrue(isNewSetup());
|
||||
if (fCppCodeScanner.affectsBehavior(event))
|
||||
fCppCodeScanner.adaptToPreferenceChange(event);
|
||||
if (fCCodeScanner.affectsBehavior(event))
|
||||
fCCodeScanner.adaptToPreferenceChange(event);
|
||||
if (fCodeScanner != null && fCodeScanner.affectsBehavior(event))
|
||||
fCodeScanner.adaptToPreferenceChange(event);
|
||||
if (fMultilineCommentScanner.affectsBehavior(event))
|
||||
fMultilineCommentScanner.adaptToPreferenceChange(event);
|
||||
if (fSinglelineCommentScanner.affectsBehavior(event))
|
||||
fSinglelineCommentScanner.adaptToPreferenceChange(event);
|
||||
if (fStringScanner.affectsBehavior(event))
|
||||
fStringScanner.adaptToPreferenceChange(event);
|
||||
if (fCppPreprocessorScanner.affectsBehavior(event))
|
||||
fCppPreprocessorScanner.adaptToPreferenceChange(event);
|
||||
if (fCPreprocessorScanner.affectsBehavior(event))
|
||||
fCPreprocessorScanner.adaptToPreferenceChange(event);
|
||||
if (fPreprocessorScanner != null && fPreprocessorScanner.affectsBehavior(event))
|
||||
fPreprocessorScanner.adaptToPreferenceChange(event);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -780,7 +790,7 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
|
|||
|
||||
protected ILanguage getLanguage() {
|
||||
if (fTextEditor == null) {
|
||||
return null;
|
||||
return GPPLanguage.getDefault();
|
||||
}
|
||||
ICElement element = CUIPlugin.getDefault().getWorkingCopyManager().getWorkingCopy(fTextEditor.getEditorInput());
|
||||
if (element instanceof ITranslationUnit) {
|
||||
|
@ -810,6 +820,7 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
|
|||
return LanguageManager.getInstance().getLanguage(contentType);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
// fallback
|
||||
return GPPLanguage.getDefault();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2005, 2006 IBM Corporation and others.
|
||||
* Copyright (c) 2005, 2007 IBM Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
|
@ -23,6 +23,8 @@ import org.eclipse.jface.text.rules.RuleBasedScanner;
|
|||
import org.eclipse.jface.util.IPropertyChangeListener;
|
||||
import org.eclipse.jface.util.PropertyChangeEvent;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.gnu.c.GCCLanguage;
|
||||
import org.eclipse.cdt.core.dom.ast.gnu.cpp.GPPLanguage;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
import org.eclipse.cdt.ui.text.ICPartitions;
|
||||
|
||||
|
@ -49,7 +51,7 @@ public class CTextTools {
|
|||
/** The C source code scanner */
|
||||
private CCodeScanner fCodeScanner;
|
||||
/** The C++ source code scanner */
|
||||
private CppCodeScanner fCppCodeScanner;
|
||||
private CCodeScanner fCppCodeScanner;
|
||||
/** The C partitions scanner */
|
||||
private FastCPartitionScanner fPartitionScanner;
|
||||
/** The C multiline comment scanner */
|
||||
|
@ -97,15 +99,15 @@ public class CTextTools {
|
|||
store = CUIPlugin.getDefault().getPreferenceStore();
|
||||
}
|
||||
fColorManager= new CColorManager(autoDisposeOnDisplayDispose);
|
||||
fCodeScanner= new CCodeScanner(fColorManager, store);
|
||||
fCppCodeScanner= new CppCodeScanner(fColorManager, store);
|
||||
fCodeScanner= new CCodeScanner(fColorManager, store, GCCLanguage.getDefault());
|
||||
fCppCodeScanner= new CCodeScanner(fColorManager, store, GPPLanguage.getDefault());
|
||||
fPartitionScanner= new FastCPartitionScanner();
|
||||
|
||||
fMultilineCommentScanner= new CCommentScanner(fColorManager, store, coreStore, ICColorConstants.C_MULTI_LINE_COMMENT);
|
||||
fSinglelineCommentScanner= new CCommentScanner(fColorManager, store, coreStore, ICColorConstants.C_SINGLE_LINE_COMMENT);
|
||||
fStringScanner= new SingleTokenCScanner(fColorManager, store, ICColorConstants.C_STRING);
|
||||
fCPreprocessorScanner= new CPreprocessorScanner(fColorManager, store, false);
|
||||
fCppPreprocessorScanner= new CPreprocessorScanner(fColorManager, store, true);
|
||||
fCPreprocessorScanner= new CPreprocessorScanner(fColorManager, store, GCCLanguage.getDefault());
|
||||
fCppPreprocessorScanner= new CPreprocessorScanner(fColorManager, store, GPPLanguage.getDefault());
|
||||
|
||||
fPreferenceStore = store;
|
||||
fPreferenceStore.addPropertyChangeListener(fPreferenceListener);
|
||||
|
|
|
@ -1,135 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 2006 IBM Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM Corporation - initial API and implementation
|
||||
* QNX Software System
|
||||
* Anton Leherbauer (Wind River Systems)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.text;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.jface.preference.IPreferenceStore;
|
||||
import org.eclipse.jface.text.rules.IRule;
|
||||
import org.eclipse.jface.text.rules.Token;
|
||||
import org.eclipse.jface.text.rules.WhitespaceRule;
|
||||
import org.eclipse.jface.text.rules.WordRule;
|
||||
import org.eclipse.jface.util.PropertyChangeEvent;
|
||||
|
||||
import org.eclipse.cdt.core.parser.KeywordSetKey;
|
||||
import org.eclipse.cdt.core.parser.ParserFactory;
|
||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||
|
||||
import org.eclipse.cdt.internal.ui.text.util.CWhitespaceDetector;
|
||||
import org.eclipse.cdt.internal.ui.text.util.CWordDetector;
|
||||
|
||||
|
||||
/**
|
||||
* A C code scanner.
|
||||
*/
|
||||
public final class CppCodeScanner extends AbstractCScanner {
|
||||
|
||||
private static String[] fgConstants= { "NULL", //$NON-NLS-1$
|
||||
"__DATE__", "__LINE__", "__TIME__", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
"__FILE__", "__STDC__"}; //$NON-NLS-1$ //$NON-NLS-2$
|
||||
|
||||
private static String[] fgTokenProperties= {
|
||||
ICColorConstants.C_KEYWORD,
|
||||
ICColorConstants.C_TYPE,
|
||||
ICColorConstants.C_OPERATOR,
|
||||
ICColorConstants.C_BRACES,
|
||||
ICColorConstants.C_NUMBER,
|
||||
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();
|
||||
Token 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);
|
||||
Iterator iter = ParserFactory.getKeywordSet( KeywordSetKey.KEYWORDS, ParserLanguage.CPP ).iterator();
|
||||
while( iter.hasNext() )
|
||||
wordRule.addWord((String)iter.next(), token);
|
||||
token= getToken(ICColorConstants.C_TYPE);
|
||||
iter = ParserFactory.getKeywordSet( KeywordSetKey.TYPES, ParserLanguage.CPP ).iterator();
|
||||
while( iter.hasNext() )
|
||||
wordRule.addWord((String) iter.next(), token);
|
||||
for (int i=0; i<fgConstants.length; i++)
|
||||
wordRule.addWord(fgConstants[i], token);
|
||||
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);
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Reference in a new issue