Debugger: Adjustments to syntax highlighter.
SyntaxHighlighter/CLanguageFamilySyntaxHighlighter/SourceView: - TeamTypeInformation is now passed as a parameter when requesting parsing, so highlighters can make use of it to identify types. Adjust callers. CLanguageFamilySyntaxHighlightInfo: - Use TeamTypeInformation to check if identifiers map to types, and highlight accordingly if they do.
This commit is contained in:
parent
d21bcbb0ac
commit
4d9388f389
@ -13,6 +13,7 @@
|
||||
|
||||
|
||||
class LineDataSource;
|
||||
class TeamTypeInformation;
|
||||
|
||||
|
||||
enum syntax_highlight_type {
|
||||
@ -48,6 +49,7 @@ public:
|
||||
virtual ~SyntaxHighlighter();
|
||||
|
||||
virtual status_t ParseText(LineDataSource* source,
|
||||
TeamTypeInformation* typeInfo,
|
||||
SyntaxHighlightInfo*& _info) = 0;
|
||||
// caller owns the returned info
|
||||
};
|
||||
|
@ -10,6 +10,8 @@
|
||||
|
||||
#include "CLanguageTokenizer.h"
|
||||
#include "LineDataSource.h"
|
||||
#include "TeamTypeInformation.h"
|
||||
#include "TypeLookupConstraints.h"
|
||||
|
||||
|
||||
using namespace CLanguage;
|
||||
@ -167,11 +169,13 @@ private:
|
||||
|
||||
|
||||
CLanguageFamilySyntaxHighlightInfo::CLanguageFamilySyntaxHighlightInfo(
|
||||
LineDataSource* source, Tokenizer* tokenizer)
|
||||
LineDataSource* source, Tokenizer* tokenizer,
|
||||
TeamTypeInformation* typeInfo)
|
||||
:
|
||||
SyntaxHighlightInfo(),
|
||||
fHighlightSource(source),
|
||||
fTokenizer(tokenizer),
|
||||
fTypeInfo(typeInfo),
|
||||
fLineInfos(10, true)
|
||||
{
|
||||
fHighlightSource->AcquireReference();
|
||||
@ -310,11 +314,14 @@ CLanguageFamilySyntaxHighlightInfo::_ParseLine(int32 line,
|
||||
syntax_highlight_type
|
||||
CLanguageFamilySyntaxHighlightInfo::_MapTokenToSyntaxType(const Token& token)
|
||||
{
|
||||
static TypeLookupConstraints constraints;
|
||||
|
||||
switch (token.type) {
|
||||
case TOKEN_IDENTIFIER:
|
||||
// TODO: recognize types
|
||||
if (IsLanguageKeyword(token))
|
||||
return SYNTAX_HIGHLIGHT_KEYWORD;
|
||||
else if (fTypeInfo->TypeExistsByName(token.string, constraints))
|
||||
return SYNTAX_HIGHLIGHT_TYPE;
|
||||
break;
|
||||
|
||||
case TOKEN_CONSTANT:
|
||||
|
@ -16,12 +16,15 @@ namespace CLanguage {
|
||||
class Tokenizer;
|
||||
}
|
||||
|
||||
class TeamTypeInformation;
|
||||
|
||||
|
||||
class CLanguageFamilySyntaxHighlightInfo : public SyntaxHighlightInfo {
|
||||
public:
|
||||
CLanguageFamilySyntaxHighlightInfo(
|
||||
LineDataSource* source,
|
||||
CLanguage::Tokenizer* tokenizer);
|
||||
CLanguage::Tokenizer* tokenizer,
|
||||
TeamTypeInformation* info);
|
||||
virtual ~CLanguageFamilySyntaxHighlightInfo();
|
||||
|
||||
virtual int32 GetLineHighlightRanges(int32 line,
|
||||
@ -44,6 +47,7 @@ private:
|
||||
private:
|
||||
LineDataSource* fHighlightSource;
|
||||
CLanguage::Tokenizer* fTokenizer;
|
||||
TeamTypeInformation* fTypeInfo;
|
||||
LineInfoList fLineInfos;
|
||||
};
|
||||
|
||||
|
@ -31,7 +31,7 @@ CLanguageFamilySyntaxHighlighter::~CLanguageFamilySyntaxHighlighter()
|
||||
|
||||
status_t
|
||||
CLanguageFamilySyntaxHighlighter::ParseText(LineDataSource* source,
|
||||
SyntaxHighlightInfo*& _info)
|
||||
TeamTypeInformation* typeInfo, SyntaxHighlightInfo*& _info)
|
||||
{
|
||||
Tokenizer* tokenizer = new(std::nothrow) Tokenizer();
|
||||
if (tokenizer == NULL)
|
||||
@ -39,7 +39,7 @@ CLanguageFamilySyntaxHighlighter::ParseText(LineDataSource* source,
|
||||
ObjectDeleter<Tokenizer> deleter(tokenizer);
|
||||
|
||||
_info = new(std::nothrow) CLanguageFamilySyntaxHighlightInfo(source,
|
||||
tokenizer);
|
||||
tokenizer, typeInfo);
|
||||
if (_info == NULL)
|
||||
return B_NO_MEMORY;
|
||||
|
||||
|
@ -15,6 +15,7 @@ public:
|
||||
virtual ~CLanguageFamilySyntaxHighlighter();
|
||||
|
||||
virtual status_t ParseText(LineDataSource* source,
|
||||
TeamTypeInformation* typeInfo,
|
||||
SyntaxHighlightInfo*& _info);
|
||||
// caller owns the returned info
|
||||
};
|
||||
|
@ -76,7 +76,7 @@ static rgb_color kSyntaxColors[] = {
|
||||
{0, 0x64, 0, 255}, // SYNTAX_HIGHLIGHT_PREPROCESSOR_KEYWORD
|
||||
{0, 0, 0, 255}, // SYNTAX_HIGHLIGHT_IDENTIFIER
|
||||
{0x44, 0x8a, 0, 255}, // SYNTAX_HIGHLIGHT_OPERATOR
|
||||
{0, 0, 0, 255}, // SYNTAX_HIGHLIGHT_TYPE
|
||||
{0x70, 0x70, 0x70, 255}, // SYNTAX_HIGHLIGHT_TYPE
|
||||
{0x85, 0x19, 0x19, 255}, // SYNTAX_HIGHLIGHT_NUMERIC_LITERAL
|
||||
{0x3f, 0x48, 0x84, 255}, // SYNTAX_HIGHLIGHT_STRING_LITERAL
|
||||
{0xa1, 0x64, 0xe, 255}, // SYNTAX_HIGHLIGHT_COMMENT
|
||||
@ -2254,7 +2254,8 @@ SourceView::SetSourceCode(SourceCode* sourceCode)
|
||||
if (highlighter != NULL) {
|
||||
BReference<SyntaxHighlighter> syntaxReference(highlighter,
|
||||
true);
|
||||
highlighter->ParseText(fSourceCode, fCurrentSyntaxInfo);
|
||||
highlighter->ParseText(fSourceCode,
|
||||
fTeam->GetTeamTypeInformation(), fCurrentSyntaxInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user