mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-07 12:32:26 +00:00
Avoid infinite loop with Qt4.5 (asserts instead).
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@28742 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
aff87ada93
commit
2cefb12b22
@ -43,7 +43,7 @@
|
||||
#include "graphics/GraphicsImage.h"
|
||||
#include "graphics/GraphicsLoader.h"
|
||||
|
||||
#include "support/debug.h"
|
||||
#include "support/debug.h"
|
||||
#include "support/gettext.h"
|
||||
#include "support/FileName.h"
|
||||
|
||||
|
@ -13,9 +13,14 @@
|
||||
#include "LaTeXHighlighter.h"
|
||||
#include "qt_helpers.h"
|
||||
|
||||
#include "support/lassert.h"
|
||||
|
||||
#include <QString>
|
||||
#include <QTextDocument>
|
||||
|
||||
|
||||
using namespace lyx::support;
|
||||
|
||||
namespace lyx {
|
||||
namespace frontend {
|
||||
|
||||
@ -68,7 +73,9 @@ void LaTeXHighlighter::highlightBlock(QString const & text)
|
||||
// otherwise, start search from 'begin disp math'
|
||||
if (previousBlockState() != 1)
|
||||
startIndex = text.indexOf(exprStartDispMath);
|
||||
while (startIndex >= 0) {
|
||||
// We try to avoid infinite loops...
|
||||
static size_t max_loop = 1000;
|
||||
for (size_t i = 0; i != max_loop; ++i) {
|
||||
int endIndex = text.indexOf(exprEndDispMath, startIndex);
|
||||
int length;
|
||||
if (endIndex == -1) {
|
||||
@ -79,15 +86,23 @@ void LaTeXHighlighter::highlightBlock(QString const & text)
|
||||
}
|
||||
setFormat(startIndex, length, mathFormat);
|
||||
startIndex = text.indexOf(exprStartDispMath, startIndex + length);
|
||||
if (startIndex == -1)
|
||||
break;
|
||||
}
|
||||
LASSERT(startIndex >= 0, return);
|
||||
|
||||
// \whatever
|
||||
static const QRegExp exprKeyword("\\\\[A-Za-z]+");
|
||||
index = text.indexOf(exprKeyword);
|
||||
while (index >= 0) {
|
||||
for (size_t i = 0; i != max_loop; ++i) {
|
||||
int length = exprKeyword.matchedLength();
|
||||
setFormat(index, length, keywordFormat);
|
||||
index = text.indexOf(exprKeyword, index + length);
|
||||
if (index == -1)
|
||||
break;
|
||||
}
|
||||
LASSERT(index >= 0, return);
|
||||
|
||||
// %comment
|
||||
// Treat a line as a comment starting at a percent sign
|
||||
// * that is the first character in a line
|
||||
@ -97,22 +112,29 @@ void LaTeXHighlighter::highlightBlock(QString const & text)
|
||||
QRegExp exprComment("(?:^|[^\\\\])(?:\\\\\\\\)*(%).*$");
|
||||
text.indexOf(exprComment);
|
||||
index = exprComment.pos(1);
|
||||
while (index >= 0) {
|
||||
for (size_t i = 0; i != max_loop; ++i) {
|
||||
int const length = exprComment.matchedLength()
|
||||
- (index - exprComment.pos(0));
|
||||
setFormat(index, length, commentFormat);
|
||||
text.indexOf(exprComment, index + length);
|
||||
index = exprComment.pos(1);
|
||||
if (index == -1)
|
||||
break;
|
||||
}
|
||||
LASSERT(index >= 0, return);
|
||||
|
||||
// <LyX Warning: ...>
|
||||
QString lyxwarn = qt_("LyX Warning: ");
|
||||
QRegExp exprWarning("<" + lyxwarn + "[^<]*>");
|
||||
index = text.indexOf(exprWarning);
|
||||
while (index >= 0) {
|
||||
for (size_t i = 0; i != max_loop; ++i) {
|
||||
int length = exprWarning.matchedLength();
|
||||
setFormat(index, length, warningFormat);
|
||||
index = text.indexOf(exprWarning, index + length);
|
||||
if (index == -1)
|
||||
break;
|
||||
}
|
||||
LASSERT(index >= 0, return);
|
||||
}
|
||||
|
||||
} // namespace frontend
|
||||
|
Loading…
Reference in New Issue
Block a user