namespace frontend {
-LaTeXHighlighter::LaTeXHighlighter(QTextDocument * parent, bool at_letter, bool keyval, bool optsnippet)
- : QSyntaxHighlighter(parent), at_letter_(at_letter), keyval_(keyval), optsnippet_(optsnippet)
+LaTeXHighlighter::LaTeXHighlighter(QTextDocument * parent, bool at_letter, bool keyval)
+ : QSyntaxHighlighter(parent), at_letter_(at_letter), keyval_(keyval)
+{
+ setupColors();
+}
+
+
+void LaTeXHighlighter::setupColors()
{
auto blend = [](QColor color1, QColor color2) {
int r = 0.5 * (color1.red() + color2.red());
}
-void LaTeXHighlighter::highlightBlock(QString const & text_in)
+void LaTeXHighlighter::highlightBlock(QString const & text)
{
- QString const text = (optsnippet_) ? '[' + text_in + ']' : text_in;
// keyval
if (keyval_) {
// Highlight key-val options. Used in some option widgets.
- static const QRegularExpression exprKeyvalkey("[^=,]+");
- static const QRegularExpression exprKeyvalval("[^,]+");
+ // 1. The keys. Might or might not have values
+ static QRegularExpression exprKeyvalkey("[^=,}]+");
+ // 2. These are grouped values such as "key1={val,val},key2=val"
+ static QRegularExpression exprKeyvalgval("[^=,{]+{[^}]+}");
+ // 3. And normal values if we don't find grouped ones
+ static QRegularExpression exprKeyvalval("[^,]+");
QRegularExpressionMatch matchkey = exprKeyvalkey.match(text);
int kvindex = matchkey.capturedStart(0);
while (kvindex >= 0) {
int length = matchkey.capturedLength(0);
setFormat(kvindex, length, keyFormat);
- QRegularExpressionMatch matchval =
- exprKeyvalval.match(text, kvindex + length);
- int kvvindex = matchval.capturedStart(0);
- if (kvvindex > 0) {
- length += matchval.capturedLength(0);
- setFormat(kvvindex, length, valFormat);
+ if (text.size() > kvindex + length && text.at(kvindex + length) == '=') {
+ QRegularExpressionMatch matchgval =
+ exprKeyvalgval.match(text, kvindex + length);
+ int kvvindex = matchgval.capturedStart(0);
+ if (kvvindex > 0) {
+ int vlength = matchgval.capturedLength(0);
+ length += vlength;
+ setFormat(kvvindex, vlength, valFormat);
+ } else {
+ QRegularExpressionMatch matchval =
+ exprKeyvalval.match(text, kvindex + length);
+ kvvindex = matchval.capturedStart(0);
+ if (kvvindex > 0) {
+ int vlength = matchval.capturedLength(0);
+ length += vlength;
+ setFormat(kvvindex, vlength, valFormat);
+ }
+ }
}
matchkey = exprKeyvalkey.match(text, kvindex + length);
kvindex = matchkey.capturedStart(0);