forked from qt-creator/qt-creator
Add common interface for text formats inside syntax highlighter
Change-Id: I87f64446161a57aea0896f68e4eafacef791969b Reviewed-by: Orgad Shaneh <orgads@gmail.com> Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
This commit is contained in:
@@ -42,6 +42,22 @@ using namespace TextEditor;
|
||||
Highlighter::Highlighter(BaseTextDocument *parent)
|
||||
: TextEditor::SyntaxHighlighter(parent)
|
||||
{
|
||||
static QVector<TextEditor::TextStyle> categories;
|
||||
if (categories.isEmpty()) {
|
||||
categories << TextEditor::C_NUMBER
|
||||
<< TextEditor::C_STRING
|
||||
<< TextEditor::C_TYPE
|
||||
<< TextEditor::C_KEYWORD
|
||||
<< TextEditor::C_OPERATOR
|
||||
<< TextEditor::C_PREPROCESSOR
|
||||
<< TextEditor::C_LABEL
|
||||
<< TextEditor::C_COMMENT
|
||||
<< TextEditor::C_DOXYGEN_COMMENT
|
||||
<< TextEditor::C_DOXYGEN_TAG
|
||||
<< TextEditor::C_VISUAL_WHITESPACE
|
||||
<< TextEditor::C_REMOVED_LINE;
|
||||
}
|
||||
setTextFormatCategories(categories);
|
||||
}
|
||||
|
||||
Highlighter::~Highlighter()
|
||||
@@ -49,11 +65,6 @@ Highlighter::~Highlighter()
|
||||
|
||||
}
|
||||
|
||||
void Highlighter::setFormats(const QVector<QTextCharFormat> &formats)
|
||||
{
|
||||
qCopy(formats.begin(), formats.end(), m_formats);
|
||||
}
|
||||
|
||||
void Highlighter::highlightBlock(const QString &text)
|
||||
{
|
||||
const int previousState = previousBlockState();
|
||||
@@ -96,7 +107,7 @@ void Highlighter::highlightBlock(const QString &text)
|
||||
setCurrentBlockState(previousState);
|
||||
BaseTextDocumentLayout::clearParentheses(currentBlock());
|
||||
if (text.length()) // the empty line can still contain whitespace
|
||||
setFormat(0, text.length(), m_formats[GLSLVisualWhitespace]);
|
||||
setFormat(0, text.length(), formatForCategory(GLSLVisualWhitespace));
|
||||
BaseTextDocumentLayout::setFoldingIndent(currentBlock(), foldingIndent);
|
||||
return;
|
||||
}
|
||||
@@ -120,7 +131,7 @@ void Highlighter::highlightBlock(const QString &text)
|
||||
|
||||
if (previousTokenEnd != tk.begin()) {
|
||||
setFormat(previousTokenEnd, tk.begin() - previousTokenEnd,
|
||||
m_formats[GLSLVisualWhitespace]);
|
||||
formatForCategory(GLSLVisualWhitespace));
|
||||
}
|
||||
|
||||
if (tk.is(GLSL::Parser::T_LEFT_PAREN) || tk.is(GLSL::Parser::T_LEFT_BRACE) || tk.is(GLSL::Parser::T_LEFT_BRACKET)) {
|
||||
@@ -157,17 +168,17 @@ void Highlighter::highlightBlock(const QString &text)
|
||||
highlightAsPreprocessor = false;
|
||||
|
||||
if (false /* && i == 0 && tk.is(GLSL::Parser::T_POUND)*/) {
|
||||
highlightLine(text, tk.begin(), tk.length, m_formats[GLSLPreprocessorFormat]);
|
||||
highlightLine(text, tk.begin(), tk.length, formatForCategory(GLSLPreprocessorFormat));
|
||||
highlightAsPreprocessor = true;
|
||||
|
||||
} else if (highlightCurrentWordAsPreprocessor && isPPKeyword(text.midRef(tk.begin(), tk.length))) {
|
||||
setFormat(tk.begin(), tk.length, m_formats[GLSLPreprocessorFormat]);
|
||||
setFormat(tk.begin(), tk.length, formatForCategory(GLSLPreprocessorFormat));
|
||||
|
||||
} else if (tk.is(GLSL::Parser::T_NUMBER)) {
|
||||
setFormat(tk.begin(), tk.length, m_formats[GLSLNumberFormat]);
|
||||
setFormat(tk.begin(), tk.length, formatForCategory(GLSLNumberFormat));
|
||||
|
||||
} else if (tk.is(GLSL::Parser::T_COMMENT)) {
|
||||
highlightLine(text, tk.begin(), tk.length, m_formats[GLSLCommentFormat]);
|
||||
highlightLine(text, tk.begin(), tk.length, formatForCategory(GLSLCommentFormat));
|
||||
|
||||
// we need to insert a close comment parenthesis, if
|
||||
// - the line starts in a C Comment (initalState != 0)
|
||||
@@ -190,9 +201,9 @@ void Highlighter::highlightBlock(const QString &text)
|
||||
} else if (tk.is(GLSL::Parser::T_IDENTIFIER)) {
|
||||
int kind = lex.findKeyword(data.constData() + tk.position, tk.length);
|
||||
if (kind == GLSL::Parser::T_RESERVED)
|
||||
setFormat(tk.position, tk.length, m_formats[GLSLReservedKeyword]);
|
||||
setFormat(tk.position, tk.length, formatForCategory(GLSLReservedKeyword));
|
||||
else if (kind != GLSL::Parser::T_IDENTIFIER)
|
||||
setFormat(tk.position, tk.length, m_formats[GLSLKeywordFormat]);
|
||||
setFormat(tk.position, tk.length, formatForCategory(GLSLKeywordFormat));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -245,7 +256,7 @@ void Highlighter::highlightBlock(const QString &text)
|
||||
void Highlighter::highlightLine(const QString &text, int position, int length,
|
||||
const QTextCharFormat &format)
|
||||
{
|
||||
const QTextCharFormat visualSpaceFormat = m_formats[GLSLVisualWhitespace];
|
||||
const QTextCharFormat visualSpaceFormat = formatForCategory(GLSLVisualWhitespace);
|
||||
|
||||
const int end = position + length;
|
||||
int index = position;
|
||||
@@ -363,15 +374,15 @@ void Highlighter::highlightBlock(const QString &text)
|
||||
const GLSL::Token &tk = tokens.at(i);
|
||||
|
||||
if (tk.is(GLSL::Parser::T_NUMBER)) {
|
||||
setFormat(tk.position, tk.length, m_formats[GLSLNumberFormat]);
|
||||
setFormat(tk.position, tk.length, formatForCategory(GLSLNumberFormat);
|
||||
} else if (tk.is(GLSL::Parser::T_COMMENT)) {
|
||||
setFormat(tk.position, tk.length, Qt::darkGreen); // ### FIXME: m_formats[GLSLCommentFormat]);
|
||||
setFormat(tk.position, tk.length, Qt::darkGreen); // ### FIXME: formatForCategory(GLSLCommentFormat);
|
||||
} else if (tk.is(GLSL::Parser::T_IDENTIFIER)) {
|
||||
int kind = lex.findKeyword(data.constData() + tk.position, tk.length);
|
||||
if (kind == GLSL::Parser::T_RESERVED)
|
||||
setFormat(tk.position, tk.length, m_formats[GLSLReservedKeyword]);
|
||||
setFormat(tk.position, tk.length, formatForCategory(GLSLReservedKeyword);
|
||||
else if (kind != GLSL::Parser::T_IDENTIFIER)
|
||||
setFormat(tk.position, tk.length, m_formats[GLSLKeywordFormat]);
|
||||
setFormat(tk.position, tk.length, formatForCategory(GLSLKeywordFormat);
|
||||
} else if (tk.is(GLSL::Parser::T_LEFT_PAREN) || tk.is(GLSL::Parser::T_LEFT_BRACE) || tk.is(GLSL::Parser::T_LEFT_BRACKET)) {
|
||||
const QChar c = text.at(tk.begin());
|
||||
parentheses.append(Parenthesis(Parenthesis::Opened, c, tk.begin()));
|
||||
|
||||
Reference in New Issue
Block a user