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 10f6eb2e7e)
This commit is contained in:
Guillaume Munch 2016-07-15 17:45:47 +01:00
parent 8a42918b2f
commit 1dc8278fef
4 changed files with 16 additions and 6 deletions

View File

@ -452,7 +452,8 @@ PreambleModule::PreambleModule() : current_id_(0)
{ {
// This is not a memory leak. The object will be destroyed // This is not a memory leak. The object will be destroyed
// with this. // 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->setFont(guiApp->typewriterSystemFont());
preambleTE->setWordWrapMode(QTextOption::NoWrap); preambleTE->setWordWrapMode(QTextOption::NoWrap);
setFocusProxy(preambleTE); setFocusProxy(preambleTE);

View File

@ -31,8 +31,8 @@ QColor blend(QColor color1, QColor color2) {
} }
LaTeXHighlighter::LaTeXHighlighter(QTextDocument * parent) LaTeXHighlighter::LaTeXHighlighter(QTextDocument * parent, bool at_letter)
: QSyntaxHighlighter(parent) : QSyntaxHighlighter(parent), at_letter_(at_letter)
{ {
QPalette palette = QPalette(); QPalette palette = QPalette();
QColor text_color = palette.color(QPalette::Active, QPalette::Text); 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); startIndex = exprStartDispMath.indexIn(text, startIndex + length);
} }
// \whatever // \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); index = exprKeyword.indexIn(text);
while (index >= 0) { while (index >= 0) {
int length = exprKeyword.matchedLength(); int length = exprKeyword.matchedLength();

View File

@ -25,7 +25,7 @@ namespace frontend {
class LaTeXHighlighter : public QSyntaxHighlighter class LaTeXHighlighter : public QSyntaxHighlighter
{ {
public: public:
LaTeXHighlighter(QTextDocument * parent); explicit LaTeXHighlighter(QTextDocument * parent, bool at_letter = false);
protected: protected:
void highlightBlock(QString const & text); void highlightBlock(QString const & text);
@ -35,6 +35,8 @@ private:
QTextCharFormat keywordFormat; QTextCharFormat keywordFormat;
QTextCharFormat mathFormat; QTextCharFormat mathFormat;
QTextCharFormat warningFormat; QTextCharFormat warningFormat;
// is at a letter? (as in the preamble)
bool const at_letter_;
}; };
} // namespace frontend } // namespace frontend

View File

@ -21,9 +21,12 @@ What's new
* USER INTERFACE * 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). 10212).
- Names containing @ are now recognised by the syntax highlighter in the
preamble.
* DOCUMENTATION AND LOCALIZATION * DOCUMENTATION AND LOCALIZATION