]> git.lyx.org Git - features.git/commitdiff
Proper fix to avoid an infinite loop with Qt4.5.
authorVincent van Ravesteijn <vfr@lyx.org>
Mon, 9 Mar 2009 19:54:47 +0000 (19:54 +0000)
committerVincent van Ravesteijn <vfr@lyx.org>
Mon, 9 Mar 2009 19:54:47 +0000 (19:54 +0000)
see:
http://www.qtsoftware.com/developer/faqs/why-does-qstring-indexof-qregexp-cause-a-crash-or-hang-in-qt-4.5

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@28746 a592a061-630c-0410-9148-cb99ea01b6c8

src/frontends/qt4/GuiLog.cpp
src/frontends/qt4/LaTeXHighlighter.cpp

index 2ddadc9226af3b684354f14dc0578ebfe8d489c5..466c75fa4c832e442bbcacc6c562d6e4742cbeef 100644 (file)
@@ -68,27 +68,27 @@ void LogHighlighter::highlightBlock(QString const & text)
 {
        // Info
        QRegExp exprInfo("^(Document Class:|LaTeX Font Info:|File:|Package:|Language:|Underfull|Overfull|\\(|\\\\).*$");
-       int index = text.indexOf(exprInfo);
+       int index = exprInfo.indexIn(text);
        while (index >= 0) {
                int length = exprInfo.matchedLength();
                setFormat(index, length, infoFormat);
-               index = text.indexOf(exprInfo, index + length);
+               index = exprInfo.indexIn(text, index + length);
        }
        // LaTeX Warning:
        QRegExp exprWarning("^LaTeX Warning.*$");
-       index = text.indexOf(exprWarning);
+       index = exprWarning.indexIn(text);
        while (index >= 0) {
                int length = exprWarning.matchedLength();
                setFormat(index, length, warningFormat);
-               index = text.indexOf(exprWarning, index + length);
+               index = exprWarning.indexIn(text, index + length);
        }
        // ! error
        QRegExp exprError("^!.*$");
-       index = text.indexOf(exprError);
+       index = exprError.indexIn(text);
        while (index >= 0) {
                int length = exprError.matchedLength();
                setFormat(index, length, errorFormat);
-               index = text.indexOf(exprError, index + length);
+               index = exprError.indexIn(text, index + length);
        }
 }
 
index 00f8064af9e081573b634513401140bd2a6cddd7..9a9e5459a48bcb70bde0f51ef1516c21e669d066 100644 (file)
@@ -35,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("(\\\\\\[|"
@@ -67,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);
@@ -78,15 +78,15 @@ 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
        // Treat a line as a comment starting at a percent sign
@@ -95,23 +95,23 @@ void LaTeXHighlighter::highlightBlock(QString const & text)
        // ** an even number of backslashes
        // ** any character other than a backslash
        QRegExp exprComment("(?:^|[^\\\\])(?:\\\\\\\\)*(%).*$"); 
-       text.indexOf(exprComment);
+       exprComment.indexIn(text);
        index = exprComment.pos(1);
        while (index >= 0) {
                int const length = exprComment.matchedLength() 
                                 - (index - exprComment.pos(0));
                setFormat(index, length, commentFormat);
-               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 = text.indexOf(exprWarning);
+       index = exprWarning.indexIn(text);
        while (index >= 0) {
                int length = exprWarning.matchedLength();
                setFormat(index, length, warningFormat);
-               index = text.indexOf(exprWarning, index + length);
+               index = exprWarning.indexIn(text, index + length);
        }
 }