* Full author contact details are available in file CREDITS.
*/
+#include <config.h>
+
#include "LaTeXHighlighter.h"
+#include "qt_helpers.h"
#include <QString>
#include <QTextDocument>
keywordFormat.setFontWeight(QFont::Bold);
commentFormat.setForeground(Qt::darkGray);
mathFormat.setForeground(Qt::red);
+ 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);
+ 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);
}
}