From 1dc8278fefa5477fb745468fac3fabdd322cb415 Mon Sep 17 00:00:00 2001 From: Guillaume Munch Date: Fri, 15 Jul 2016 17:45:47 +0100 Subject: [PATCH] LaTeX highlighter: make at a letter in the user preamble MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 e6d93faae5..aad62014e5 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 81e6f5769c..c655b364d9 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 51da3672c1..c780b9ffb7 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 6a05597861..f4bc1bc68d 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