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);
}
{
// $ $
static const QRegExp exprMath("\\$[^\\$]*\\$");
- int index = text.indexOf(exprMath);
+ int index = exprMath.indexIn(text);
while (index >= 0) {
int length = exprMath.matchedLength();
setFormat(index, length, mathFormat);
- index = text.indexOf(exprMath, index + length);
+ index = exprMath.indexIn(text, index + length);
}
// [ ]
static const QRegExp exprStartDispMath("(\\\\\\[|"
// start search from 0 (for end disp math)
// otherwise, start search from 'begin disp math'
if (previousBlockState() != 1)
- startIndex = text.indexOf(exprStartDispMath);
+ startIndex = exprStartDispMath.indexIn(text);
while (startIndex >= 0) {
- int endIndex = text.indexOf(exprEndDispMath, startIndex);
+ int endIndex = exprEndDispMath.indexIn(text, startIndex);
int length;
if (endIndex == -1) {
setCurrentBlockState(1);
length = endIndex - startIndex + exprEndDispMath.matchedLength();
}
setFormat(startIndex, length, mathFormat);
- startIndex = text.indexOf(exprStartDispMath, startIndex + length);
+ startIndex = exprStartDispMath.indexIn(text, startIndex + length);
}
// \whatever
- static const QRegExp exprKeyword("\\\\[A-Za-z]+");
- index = text.indexOf(exprKeyword);
+ 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();
setFormat(index, length, keywordFormat);
- index = text.indexOf(exprKeyword, index + length);
+ index = exprKeyword.indexIn(text, index + length);
}
// %comment
// Treat a line as a comment starting at a percent sign
// ** an even number of backslashes
// ** any character other than a backslash
QRegExp exprComment("(?:^|[^\\\\])(?:\\\\\\\\)*(%).*$");
- text.indexOf(exprComment);
+ exprComment.indexIn(text);
index = exprComment.pos(1);
while (index >= 0) {
int const length = exprComment.matchedLength()
- (index - exprComment.pos(0));
setFormat(index, length, commentFormat);
- text.indexOf(exprComment, index + length);
+ exprComment.indexIn(text, index + length);
index = exprComment.pos(1);
}
- // <LyX Warning: ...> ... </LyX Warning>
- QString opening = QRegExp::escape(qt_("<LyX Warning:"));
- QString closing = QRegExp::escape(qt_("</LyX Warning>"));
- QRegExp exprWarning(opening + "[^<]*" + closing);
- index = text.indexOf(exprWarning);
+ // <LyX Warning: ...>
+ QString lyxwarn = qt_("LyX Warning: ");
+ QRegExp exprWarning("<" + lyxwarn + "[^<]*>");
+ index = exprWarning.indexIn(text);
while (index >= 0) {
int length = exprWarning.matchedLength();
setFormat(index, length, warningFormat);
- index = text.indexOf(exprWarning, index + length);
+ index = exprWarning.indexIn(text, index + length);
}
}