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.
This commit is contained in:
Guillaume Munch 2016-07-15 17:45:47 +01:00
parent 7eea0b6fa8
commit 10f6eb2e7e
3 changed files with 14 additions and 5 deletions

View File

@ -453,7 +453,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);

View File

@ -20,8 +20,9 @@ namespace lyx {
namespace frontend {
LaTeXHighlighter::LaTeXHighlighter(QTextDocument * parent)
: QSyntaxHighlighter(parent)
LaTeXHighlighter::LaTeXHighlighter(QTextDocument * parent,
bool const at_letter)
: QSyntaxHighlighter(parent), at_letter_(at_letter)
{
auto blend = [](QColor color1, QColor color2) {
int r = 0.5 * (color1.red() + color2.red());
@ -91,7 +92,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();

View File

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