- // $ $
- QRegExp exprMath("\\$[^\\$]*\\$");
- int index = text.indexOf(exprMath);
- while (index >= 0) {
- int length = exprMath.matchedLength();
- setFormat(index, length, mathFormat);
- index = text.indexOf(exprMath, 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]+");
- index = text.indexOf(exprKeyword);
- while (index >= 0) {
- int length = exprKeyword.matchedLength();
- setFormat(index, length, keywordFormat);
- index = text.indexOf(exprKeyword, index + length);
- }
- // comment
- QRegExp exprComment("(^|[^\\\\])%.*$");
- index = text.indexOf(exprComment);
- while (index >= 0) {
- int const length = exprComment.matchedLength();
- setFormat(index, length, commentFormat);
- index = text.indexOf(exprComment, index + length);