X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FLaTeXHighlighter.cpp;h=9a9e5459a48bcb70bde0f51ef1516c21e669d066;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=38715471f7bf4a02f75f0d0119020db0cc18e079;hpb=de9eb00a0e1c7ebc81ff84aa0fb4b3ec70697ded;p=lyx.git diff --git a/src/frontends/qt4/LaTeXHighlighter.cpp b/src/frontends/qt4/LaTeXHighlighter.cpp index 38715471f7..9a9e5459a4 100644 --- a/src/frontends/qt4/LaTeXHighlighter.cpp +++ b/src/frontends/qt4/LaTeXHighlighter.cpp @@ -11,6 +11,7 @@ #include #include "LaTeXHighlighter.h" +#include "qt_helpers.h" #include #include @@ -25,6 +26,8 @@ LaTeXHighlighter::LaTeXHighlighter(QTextDocument * parent) keywordFormat.setFontWeight(QFont::Bold); commentFormat.setForeground(Qt::darkGray); mathFormat.setForeground(Qt::red); + warningFormat.setForeground(Qt::red); + warningFormat.setFontWeight(QFont::Bold); } @@ -32,11 +35,11 @@ void LaTeXHighlighter::highlightBlock(QString const & text) { // $ $ 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("(\\\\\\[|" @@ -64,9 +67,9 @@ void LaTeXHighlighter::highlightBlock(QString const & text) // 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); @@ -75,23 +78,40 @@ void LaTeXHighlighter::highlightBlock(QString const & text) 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); + 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 - static const QRegExp exprComment("(^|[^\\\\])%.*$"); - index = text.indexOf(exprComment); + // %comment + // Treat a line as a comment starting at a percent sign + // * that is the first character in a line + // * that is preceded by + // ** an even number of backslashes + // ** any character other than a backslash + 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); - index = text.indexOf(exprComment, index + length); + exprComment.indexIn(text, index + length); + index = exprComment.pos(1); + } + // + QString lyxwarn = qt_("LyX Warning: "); + QRegExp exprWarning("<" + lyxwarn + "[^<]*>"); + index = exprWarning.indexIn(text); + while (index >= 0) { + int length = exprWarning.matchedLength(); + setFormat(index, length, warningFormat); + index = exprWarning.indexIn(text, index + length); } }