commit 1dc8278fefa5477fb745468fac3fabdd322cb415
Author: Guillaume Munch <[email protected]>
Date:   Fri Jul 15 17:45:47 2016 +0100

    LaTeX highlighter: make at a letter in the user preamble
    
    Syntax highlighting now provides the appropriate cue that the user preamble 
is
    inside \makeatletter…\makeatother.
    
    (cherry picked from commit 10f6eb2e7eeffc757b7f54059524441e90008240)
---
 src/frontends/qt4/GuiDocument.cpp      |    3 ++-
 src/frontends/qt4/LaTeXHighlighter.cpp |   10 +++++++---
 src/frontends/qt4/LaTeXHighlighter.h   |    4 +++-
 status.22x                             |    5 ++++-
 4 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/src/frontends/qt4/GuiDocument.cpp 
b/src/frontends/qt4/GuiDocument.cpp
index e6d93fa..aad6201 100644
--- a/src/frontends/qt4/GuiDocument.cpp
+++ b/src/frontends/qt4/GuiDocument.cpp
@@ -452,7 +452,8 @@ PreambleModule::PreambleModule() : current_id_(0)
 {
        // This is not a memory leak. The object will be destroyed
        // with this.
-       (void) new LaTeXHighlighter(preambleTE->document());
+       // @ is letter in the LyX user preamble
+       (void) new LaTeXHighlighter(preambleTE->document(), true);
        preambleTE->setFont(guiApp->typewriterSystemFont());
        preambleTE->setWordWrapMode(QTextOption::NoWrap);
        setFocusProxy(preambleTE);
diff --git a/src/frontends/qt4/LaTeXHighlighter.cpp 
b/src/frontends/qt4/LaTeXHighlighter.cpp
index 81e6f57..c655b36 100644
--- a/src/frontends/qt4/LaTeXHighlighter.cpp
+++ b/src/frontends/qt4/LaTeXHighlighter.cpp
@@ -31,8 +31,8 @@ QColor blend(QColor color1, QColor color2) {
 }
 
 
-LaTeXHighlighter::LaTeXHighlighter(QTextDocument * parent)
-       : QSyntaxHighlighter(parent)
+LaTeXHighlighter::LaTeXHighlighter(QTextDocument * parent, bool at_letter)
+       : QSyntaxHighlighter(parent), at_letter_(at_letter)
 {
        QPalette palette = QPalette();
        QColor text_color = palette.color(QPalette::Active, QPalette::Text);
@@ -96,7 +96,11 @@ void LaTeXHighlighter::highlightBlock(QString const & text)
                startIndex = exprStartDispMath.indexIn(text, startIndex + 
length);
        }
        // \whatever
-       static const QRegExp exprKeyword("\\\\[A-Za-z]+");
+       static const QRegExp exprKeywordAtOther("\\\\[A-Za-z]+");
+       // \wh@tever
+       static const QRegExp exprKeywordAtLetter("\\\\[A-Za-z@]+");
+       QRegExp const & exprKeyword = at_letter_ ? exprKeywordAtLetter
+                                                : exprKeywordAtOther;
        index = exprKeyword.indexIn(text);
        while (index >= 0) {
                int length = exprKeyword.matchedLength();
diff --git a/src/frontends/qt4/LaTeXHighlighter.h 
b/src/frontends/qt4/LaTeXHighlighter.h
index 51da367..c780b9f 100644
--- a/src/frontends/qt4/LaTeXHighlighter.h
+++ b/src/frontends/qt4/LaTeXHighlighter.h
@@ -25,7 +25,7 @@ namespace frontend {
 class LaTeXHighlighter : public QSyntaxHighlighter
 {
 public:
-       LaTeXHighlighter(QTextDocument * parent);
+       explicit LaTeXHighlighter(QTextDocument * parent, bool at_letter = 
false);
 
 protected:
        void highlightBlock(QString const & text);
@@ -35,6 +35,8 @@ private:
        QTextCharFormat keywordFormat;
        QTextCharFormat mathFormat;
        QTextCharFormat warningFormat;
+       // is at a letter? (as in the preamble)
+       bool const at_letter_;
 };
 
 } // namespace frontend
diff --git a/status.22x b/status.22x
index 6a05597..f4bc1bc 100644
--- a/status.22x
+++ b/status.22x
@@ -21,9 +21,12 @@ What's new
 
 * USER INTERFACE
 
-* When changing zoom level, show current value in status bar (bug
+- When changing zoom level, show current value in status bar (bug
   10212).
 
+- Names containing @ are now recognised by the syntax highlighter in the
+  preamble.
+
 
 * DOCUMENTATION AND LOCALIZATION
 

Reply via email to