]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/LaTeXHighlighter.cpp
* fix spelling in comments to please John.
[lyx.git] / src / frontends / qt4 / LaTeXHighlighter.cpp
index 225650fcaca6fd66f32091070f0baf463276893d..9a9e5459a48bcb70bde0f51ef1516c21e669d066 100644 (file)
@@ -8,9 +8,10 @@
  * Full author contact details are available in file CREDITS.
  */
 
-#include <config.h>\r
-\r
+#include <config.h>
+
 #include "LaTeXHighlighter.h"
+#include "qt_helpers.h"
 
 #include <QString>
 #include <QTextDocument>
@@ -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);
+       }
+       // <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 = exprWarning.indexIn(text, index + length);
        }
 }