namespace lyx {
namespace frontend {
-LaTeXHighlighter::LaTeXHighlighter(QTextDocument * parent)
- : QSyntaxHighlighter(parent)
+
+LaTeXHighlighter::LaTeXHighlighter(QTextDocument * parent, bool at_letter)
+ : QSyntaxHighlighter(parent), at_letter_(at_letter)
{
- keywordFormat.setForeground(Qt::darkBlue);
+ auto blend = [](QColor color1, QColor color2) {
+ int r = 0.5 * (color1.red() + color2.red());
+ int g = 0.5 * (color1.green() + color2.green());
+ int b = 0.5 * (color1.blue() + color2.blue());
+ return QColor(r, g, b);
+ };
+ QPalette palette = QPalette();
+ QColor text_color = palette.color(QPalette::Active, QPalette::Text);
+ keywordFormat.setForeground(blend(Qt::blue, text_color));
keywordFormat.setFontWeight(QFont::Bold);
- commentFormat.setForeground(Qt::darkGray);
- mathFormat.setForeground(Qt::red);
+ commentFormat.setForeground(palette.color(QPalette::Disabled,
+ QPalette::Text));
+ mathFormat.setForeground(blend(Qt::red, text_color));
warningFormat.setForeground(Qt::red);
warningFormat.setFontWeight(QFont::Bold);
}
startIndex = exprStartDispMath.indexIn(text, startIndex + length);
}
// \whatever
- static const QRegExp exprKeyword("\\\\[A-Za-z]+");
+ static const QRegExp exprKeywordAtOther("\\\\[A-Za-z]+");
+ // \wh@tever
+ static const QRegExp exprKeywordAtLetter("\\\\[A-Za-z@]+");
+ QRegExp const & exprKeyword = at_letter_ ? exprKeywordAtLetter
+ : exprKeywordAtOther;
index = exprKeyword.indexIn(text);
while (index >= 0) {
int length = exprKeyword.matchedLength();
// %comment
// Treat a line as a comment starting at a percent sign
// * that is the first character in a line
- // * that is preceded by
+ // * that is preceded by
// ** an even number of backslashes
// ** any character other than a backslash
- QRegExp exprComment("(?:^|[^\\\\])(?:\\\\\\\\)*(%).*$");
+ QRegExp exprComment("(?:^|[^\\\\])(?:\\\\\\\\)*(%).*$");
exprComment.indexIn(text);
index = exprComment.pos(1);
while (index >= 0) {
- int const length = exprComment.matchedLength()
+ int const length = exprComment.matchedLength()
- (index - exprComment.pos(0));
setFormat(index, length, commentFormat);
exprComment.indexIn(text, index + length);