X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FLaTeXHighlighter.cpp;h=9a9e5459a48bcb70bde0f51ef1516c21e669d066;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=c2f45fd39f657c662fb90cf9a56f61063167cb38;hpb=86af8a28118f486ee14c22a35351064d0a4a32a2;p=lyx.git diff --git a/src/frontends/qt4/LaTeXHighlighter.cpp b/src/frontends/qt4/LaTeXHighlighter.cpp index c2f45fd39f..9a9e5459a4 100644 --- a/src/frontends/qt4/LaTeXHighlighter.cpp +++ b/src/frontends/qt4/LaTeXHighlighter.cpp @@ -8,7 +8,10 @@ * Full author contact details are available in file CREDITS. */ +#include + #include "LaTeXHighlighter.h" +#include "qt_helpers.h" #include #include @@ -23,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); } @@ -30,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("(\\\\\\[|" @@ -62,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); @@ -73,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); } }