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:
@@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
|
|
||||||
class LineDataSource;
|
class LineDataSource;
|
||||||
|
class TeamTypeInformation;
|
||||||
|
|
||||||
|
|
||||||
enum syntax_highlight_type {
|
enum syntax_highlight_type {
|
||||||
@@ -48,6 +49,7 @@ public:
|
|||||||
virtual ~SyntaxHighlighter();
|
virtual ~SyntaxHighlighter();
|
||||||
|
|
||||||
virtual status_t ParseText(LineDataSource* source,
|
virtual status_t ParseText(LineDataSource* source,
|
||||||
|
TeamTypeInformation* typeInfo,
|
||||||
SyntaxHighlightInfo*& _info) = 0;
|
SyntaxHighlightInfo*& _info) = 0;
|
||||||
// caller owns the returned info
|
// caller owns the returned info
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -10,6 +10,8 @@
|
|||||||
|
|
||||||
#include "CLanguageTokenizer.h"
|
#include "CLanguageTokenizer.h"
|
||||||
#include "LineDataSource.h"
|
#include "LineDataSource.h"
|
||||||
|
#include "TeamTypeInformation.h"
|
||||||
|
#include "TypeLookupConstraints.h"
|
||||||
|
|
||||||
|
|
||||||
using namespace CLanguage;
|
using namespace CLanguage;
|
||||||
@@ -167,11 +169,13 @@ private:
|
|||||||
|
|
||||||
|
|
||||||
CLanguageFamilySyntaxHighlightInfo::CLanguageFamilySyntaxHighlightInfo(
|
CLanguageFamilySyntaxHighlightInfo::CLanguageFamilySyntaxHighlightInfo(
|
||||||
LineDataSource* source, Tokenizer* tokenizer)
|
LineDataSource* source, Tokenizer* tokenizer,
|
||||||
|
TeamTypeInformation* typeInfo)
|
||||||
:
|
:
|
||||||
SyntaxHighlightInfo(),
|
SyntaxHighlightInfo(),
|
||||||
fHighlightSource(source),
|
fHighlightSource(source),
|
||||||
fTokenizer(tokenizer),
|
fTokenizer(tokenizer),
|
||||||
|
fTypeInfo(typeInfo),
|
||||||
fLineInfos(10, true)
|
fLineInfos(10, true)
|
||||||
{
|
{
|
||||||
fHighlightSource->AcquireReference();
|
fHighlightSource->AcquireReference();
|
||||||
@@ -310,11 +314,14 @@ CLanguageFamilySyntaxHighlightInfo::_ParseLine(int32 line,
|
|||||||
syntax_highlight_type
|
syntax_highlight_type
|
||||||
CLanguageFamilySyntaxHighlightInfo::_MapTokenToSyntaxType(const Token& token)
|
CLanguageFamilySyntaxHighlightInfo::_MapTokenToSyntaxType(const Token& token)
|
||||||
{
|
{
|
||||||
|
static TypeLookupConstraints constraints;
|
||||||
|
|
||||||
switch (token.type) {
|
switch (token.type) {
|
||||||
case TOKEN_IDENTIFIER:
|
case TOKEN_IDENTIFIER:
|
||||||
// TODO: recognize types
|
|
||||||
if (IsLanguageKeyword(token))
|
if (IsLanguageKeyword(token))
|
||||||
return SYNTAX_HIGHLIGHT_KEYWORD;
|
return SYNTAX_HIGHLIGHT_KEYWORD;
|
||||||
|
else if (fTypeInfo->TypeExistsByName(token.string, constraints))
|
||||||
|
return SYNTAX_HIGHLIGHT_TYPE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TOKEN_CONSTANT:
|
case TOKEN_CONSTANT:
|
||||||
|
|||||||
@@ -16,12 +16,15 @@ namespace CLanguage {
|
|||||||
class Tokenizer;
|
class Tokenizer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class TeamTypeInformation;
|
||||||
|
|
||||||
|
|
||||||
class CLanguageFamilySyntaxHighlightInfo : public SyntaxHighlightInfo {
|
class CLanguageFamilySyntaxHighlightInfo : public SyntaxHighlightInfo {
|
||||||
public:
|
public:
|
||||||
CLanguageFamilySyntaxHighlightInfo(
|
CLanguageFamilySyntaxHighlightInfo(
|
||||||
LineDataSource* source,
|
LineDataSource* source,
|
||||||
CLanguage::Tokenizer* tokenizer);
|
CLanguage::Tokenizer* tokenizer,
|
||||||
|
TeamTypeInformation* info);
|
||||||
virtual ~CLanguageFamilySyntaxHighlightInfo();
|
virtual ~CLanguageFamilySyntaxHighlightInfo();
|
||||||
|
|
||||||
virtual int32 GetLineHighlightRanges(int32 line,
|
virtual int32 GetLineHighlightRanges(int32 line,
|
||||||
@@ -44,6 +47,7 @@ private:
|
|||||||
private:
|
private:
|
||||||
LineDataSource* fHighlightSource;
|
LineDataSource* fHighlightSource;
|
||||||
CLanguage::Tokenizer* fTokenizer;
|
CLanguage::Tokenizer* fTokenizer;
|
||||||
|
TeamTypeInformation* fTypeInfo;
|
||||||
LineInfoList fLineInfos;
|
LineInfoList fLineInfos;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ CLanguageFamilySyntaxHighlighter::~CLanguageFamilySyntaxHighlighter()
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
CLanguageFamilySyntaxHighlighter::ParseText(LineDataSource* source,
|
CLanguageFamilySyntaxHighlighter::ParseText(LineDataSource* source,
|
||||||
SyntaxHighlightInfo*& _info)
|
TeamTypeInformation* typeInfo, SyntaxHighlightInfo*& _info)
|
||||||
{
|
{
|
||||||
Tokenizer* tokenizer = new(std::nothrow) Tokenizer();
|
Tokenizer* tokenizer = new(std::nothrow) Tokenizer();
|
||||||
if (tokenizer == NULL)
|
if (tokenizer == NULL)
|
||||||
@@ -39,7 +39,7 @@ CLanguageFamilySyntaxHighlighter::ParseText(LineDataSource* source,
|
|||||||
ObjectDeleter<Tokenizer> deleter(tokenizer);
|
ObjectDeleter<Tokenizer> deleter(tokenizer);
|
||||||
|
|
||||||
_info = new(std::nothrow) CLanguageFamilySyntaxHighlightInfo(source,
|
_info = new(std::nothrow) CLanguageFamilySyntaxHighlightInfo(source,
|
||||||
tokenizer);
|
tokenizer, typeInfo);
|
||||||
if (_info == NULL)
|
if (_info == NULL)
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ public:
|
|||||||
virtual ~CLanguageFamilySyntaxHighlighter();
|
virtual ~CLanguageFamilySyntaxHighlighter();
|
||||||
|
|
||||||
virtual status_t ParseText(LineDataSource* source,
|
virtual status_t ParseText(LineDataSource* source,
|
||||||
|
TeamTypeInformation* typeInfo,
|
||||||
SyntaxHighlightInfo*& _info);
|
SyntaxHighlightInfo*& _info);
|
||||||
// caller owns the returned info
|
// caller owns the returned info
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ static rgb_color kSyntaxColors[] = {
|
|||||||
{0, 0x64, 0, 255}, // SYNTAX_HIGHLIGHT_PREPROCESSOR_KEYWORD
|
{0, 0x64, 0, 255}, // SYNTAX_HIGHLIGHT_PREPROCESSOR_KEYWORD
|
||||||
{0, 0, 0, 255}, // SYNTAX_HIGHLIGHT_IDENTIFIER
|
{0, 0, 0, 255}, // SYNTAX_HIGHLIGHT_IDENTIFIER
|
||||||
{0x44, 0x8a, 0, 255}, // SYNTAX_HIGHLIGHT_OPERATOR
|
{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
|
{0x85, 0x19, 0x19, 255}, // SYNTAX_HIGHLIGHT_NUMERIC_LITERAL
|
||||||
{0x3f, 0x48, 0x84, 255}, // SYNTAX_HIGHLIGHT_STRING_LITERAL
|
{0x3f, 0x48, 0x84, 255}, // SYNTAX_HIGHLIGHT_STRING_LITERAL
|
||||||
{0xa1, 0x64, 0xe, 255}, // SYNTAX_HIGHLIGHT_COMMENT
|
{0xa1, 0x64, 0xe, 255}, // SYNTAX_HIGHLIGHT_COMMENT
|
||||||
@@ -2254,7 +2254,8 @@ SourceView::SetSourceCode(SourceCode* sourceCode)
|
|||||||
if (highlighter != NULL) {
|
if (highlighter != NULL) {
|
||||||
BReference<SyntaxHighlighter> syntaxReference(highlighter,
|
BReference<SyntaxHighlighter> syntaxReference(highlighter,
|
||||||
true);
|
true);
|
||||||
highlighter->ParseText(fSourceCode, fCurrentSyntaxInfo);
|
highlighter->ParseText(fSourceCode,
|
||||||
|
fTeam->GetTeamTypeInformation(), fCurrentSyntaxInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user