]> git.lyx.org Git - features.git/commitdiff
latexHighlighter: handles multiline reg expression of all sorts of displayed mathemat...
authorBo Peng <bpeng@lyx.org>
Mon, 26 Mar 2007 15:10:59 +0000 (15:10 +0000)
committerBo Peng <bpeng@lyx.org>
Mon, 26 Mar 2007 15:10:59 +0000 (15:10 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@17573 a592a061-630c-0410-9148-cb99ea01b6c8

src/frontends/qt4/QViewSource.C

index 981cbc40ef3c1a30ef055cc53b036b37074f61a9..2a75f4e26105285aa227e1e44a576257dc5d3c9f 100644 (file)
@@ -49,12 +49,43 @@ void latexHighlighter::highlightBlock(QString const & text)
                index = text.indexOf(exprMath, index + length);
        }
        // [ ]
-       QRegExp exprDispMath("\\[[^\\]]*\\]");
-       index = text.indexOf(exprDispMath);
-       while (index >= 0) {
-               int length = exprDispMath.matchedLength();
-               setFormat(index, length, mathFormat);
-               index = text.indexOf(exprDispMath, index + length);
+       QRegExp exprStartDispMath("(\\\\\\[|"
+               "\\\\begin\\{equation\\**\\}|"
+               "\\\\begin\\{eqnarray\\**\\}|"
+               "\\\\begin\\{align(ed|at)*\\**\\}|"
+               "\\\\begin\\{flalign\\**\\}|"
+               "\\\\begin\\{gather\\**\\}|"
+               "\\\\begin\\{multline\\**\\}|"
+               "\\\\begin\\{array\\**\\}|"
+               "\\\\begin\\{cases\\**\\}"
+               ")");
+       QRegExp exprEndDispMath("(\\\\\\]|"
+               "\\\\end\\{equation\\**\\}|"
+               "\\\\end\\{eqnarray\\**\\}|"
+               "\\\\end\\{align(ed|at)*\\**\\}|"
+               "\\\\end\\{flalign\\**\\}|"
+               "\\\\end\\{gather\\**\\}|"
+               "\\\\end\\{multline\\**\\}|"
+               "\\\\end\\{array\\**\\}|"
+               "\\\\end\\{cases\\**\\}"
+               ")");
+       int startIndex = 0;
+       // if previous block was in 'disp math'
+       // start search from 0 (for end disp math)
+       // otherwise, start search from 'begin disp math'
+       if (previousBlockState() != 1)
+               startIndex = text.indexOf(exprStartDispMath);
+       while (startIndex >= 0) {
+               int endIndex = text.indexOf(exprEndDispMath, startIndex);
+               int length;
+               if (endIndex == -1) {
+                       setCurrentBlockState(1);
+                       length = text.length() - startIndex;
+               } else {
+                       length = endIndex - startIndex + exprEndDispMath.matchedLength();
+               }
+               setFormat(startIndex, length, mathFormat);
+               startIndex = text.indexOf(exprStartDispMath, startIndex + length);
        }
        // \whatever
        QRegExp exprKeyword("\\\\[A-Za-z]+");