2017-02-07 21:39:45 +01:00
|
|
|
|
#include "SqlSyntaxHighlighter.h"
|
|
|
|
|
|
|
2018-12-16 10:17:59 +01:00
|
|
|
|
#include "catalog/PgTypeContainer.h"
|
2017-02-11 08:03:10 +01:00
|
|
|
|
#include "SqlLexer.h"
|
2025-02-23 08:32:15 +01:00
|
|
|
|
#include "util/Colors.h"
|
2017-02-07 21:39:45 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SqlSyntaxHighlighter::SqlSyntaxHighlighter(QTextDocument *parent)
|
|
|
|
|
|
: QSyntaxHighlighter(parent)
|
|
|
|
|
|
{
|
2025-02-23 08:32:15 +01:00
|
|
|
|
const ColorTheme& theme = GetColorTheme();
|
2017-02-07 21:39:45 +01:00
|
|
|
|
|
2025-02-23 08:32:15 +01:00
|
|
|
|
m_keywordFormat.setForeground(theme.keyword);
|
|
|
|
|
|
m_keywordFormat.setFontWeight(QFont::Bold);
|
2017-02-09 21:54:31 +01:00
|
|
|
|
|
2025-02-23 08:32:15 +01:00
|
|
|
|
m_commentFormat.setForeground(theme.comment);
|
2017-02-07 21:39:45 +01:00
|
|
|
|
|
2025-02-23 08:32:15 +01:00
|
|
|
|
m_quotedStringFormat.setForeground(theme.quotedString);
|
2017-02-09 21:54:31 +01:00
|
|
|
|
|
2025-02-23 08:32:15 +01:00
|
|
|
|
m_quotedIdentifierFormat.setForeground(theme.quotedIdentifier);
|
|
|
|
|
|
|
|
|
|
|
|
m_typeFormat.setForeground(theme.type);
|
2017-02-07 21:39:45 +01:00
|
|
|
|
m_typeFormat.setFontWeight(QFont::Bold);
|
2017-09-10 10:13:58 +02:00
|
|
|
|
|
2025-02-23 08:32:15 +01:00
|
|
|
|
m_parameterFormat.setForeground(theme.parameter);
|
2017-09-10 10:13:58 +02:00
|
|
|
|
m_parameterFormat.setFontWeight(QFont::Bold);
|
2017-02-07 21:39:45 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SqlSyntaxHighlighter::~SqlSyntaxHighlighter()
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-12-09 20:21:22 +01:00
|
|
|
|
void SqlSyntaxHighlighter::setTypes(const PgTypeContainer& types)
|
2017-02-07 21:39:45 +01:00
|
|
|
|
{
|
|
|
|
|
|
m_typeNames.clear();
|
2018-10-07 19:40:06 +02:00
|
|
|
|
for (auto&& e : types) {
|
2018-12-16 09:24:27 +01:00
|
|
|
|
m_typeNames.insert(e.objectName());
|
2017-02-07 21:39:45 +01:00
|
|
|
|
}
|
2018-10-07 19:40:06 +02:00
|
|
|
|
rehighlight();
|
2017-02-07 21:39:45 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SqlSyntaxHighlighter::highlightBlock(const QString &text)
|
|
|
|
|
|
{
|
2017-02-26 19:29:50 +01:00
|
|
|
|
int previous_state = previousBlockState();
|
|
|
|
|
|
if (previous_state <= 0)
|
|
|
|
|
|
previous_state = 0;
|
|
|
|
|
|
SqlLexer lexer(text, (LexerState)previous_state);
|
2017-02-07 21:39:45 +01:00
|
|
|
|
int startpos, length;
|
|
|
|
|
|
BasicTokenType tokentype;
|
|
|
|
|
|
QString s;
|
2019-01-29 20:36:07 +01:00
|
|
|
|
while (lexer.nextBasicToken(startpos, length, tokentype, s) && tokentype != BasicTokenType::End) {
|
2017-02-07 21:39:45 +01:00
|
|
|
|
switch (tokentype) {
|
|
|
|
|
|
case BasicTokenType::None:
|
|
|
|
|
|
case BasicTokenType::End: // End of input
|
2017-09-10 10:13:58 +02:00
|
|
|
|
case BasicTokenType::DollarQuote:
|
2017-02-07 21:39:45 +01:00
|
|
|
|
break;
|
2018-01-06 21:22:22 +01:00
|
|
|
|
case BasicTokenType::Symbol: { // can be many things, keyword, object name, operator, ..
|
|
|
|
|
|
auto kw = getPgsqlKeyword(s);
|
|
|
|
|
|
if (kw != nullptr) {
|
|
|
|
|
|
setFormat(startpos, length, m_keywordFormat);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (m_typeNames.count(s.toLower()) > 0) {
|
|
|
|
|
|
setFormat(startpos, length, m_typeFormat);
|
|
|
|
|
|
}
|
2017-02-07 21:39:45 +01:00
|
|
|
|
}
|
|
|
|
|
|
break;
|
2017-02-26 19:29:50 +01:00
|
|
|
|
case BasicTokenType::OpenBlockComment:
|
|
|
|
|
|
setCurrentBlockState((int)lexer.currentState());
|
|
|
|
|
|
case BasicTokenType::BlockComment:
|
2017-02-07 21:39:45 +01:00
|
|
|
|
case BasicTokenType::Comment:
|
|
|
|
|
|
setFormat(startpos, length, m_commentFormat);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case BasicTokenType::QuotedString:
|
|
|
|
|
|
setFormat(startpos, length, m_quotedStringFormat);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case BasicTokenType::QuotedIdentifier:
|
2017-02-09 21:54:31 +01:00
|
|
|
|
setFormat(startpos, length, m_quotedIdentifierFormat);
|
2017-02-07 21:39:45 +01:00
|
|
|
|
break;
|
2017-09-10 10:13:58 +02:00
|
|
|
|
case BasicTokenType::Parameter:
|
|
|
|
|
|
setFormat(startpos, length, m_parameterFormat);
|
|
|
|
|
|
break;
|
2017-02-07 21:39:45 +01:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|