From 21e8cee5891c99448f5ca1390c8a633946b9c47d Mon Sep 17 00:00:00 2001 From: Jan Sundermeyer Date: Sat, 11 Jan 2025 17:19:09 +0100 Subject: [PATCH] fix highlight trigger for macros does not work for math highlights --- src/latexeditorview.cpp | 18 +++++++++++++++++- src/usermacro.cpp | 28 ++++++++++++++++++++++++---- src/usermacro.h | 4 +++- 3 files changed, 44 insertions(+), 6 deletions(-) diff --git a/src/latexeditorview.cpp b/src/latexeditorview.cpp index 9b55088d54..f40dff737c 100644 --- a/src/latexeditorview.cpp +++ b/src/latexeditorview.cpp @@ -116,7 +116,23 @@ bool DefaultInputBinding::runMacros(QKeyEvent *event, QEditor *editor) foreach (const Macro &m, completerConfig->userMacros) { if (!m.isActiveForTrigger(Macro::ST_REGEX)) continue; if (!m.isActiveForLanguage(language)) continue; - if (!(m.isActiveForFormat(line.getFormatAt(column)) || (column > 0 && m.isActiveForFormat(line.getFormatAt(column - 1))))) continue; //two checks, so it works at beginning and end of an environment + if(m.hasFormatTriggers()){ + // check formats at column from overlays + QList formats=m.getFormatExcludeTriggers(); + if(!formats.isEmpty()){ + QFormatRange fr = line.getOverlayAt(column, formats); + if(fr.isValid()){ + continue; + } + } + formats=m.getFormatTriggers(); + if(!formats.isEmpty()){ + QFormatRange fr = line.getOverlayAt(column, formats); + if(!fr.isValid()){ + continue; + } + } + } const QRegularExpression &r = m.triggerRegex; QRegularExpressionMatch match=r.match(prev); if (match.hasMatch()) { diff --git a/src/usermacro.cpp b/src/usermacro.cpp index daab1725d2..39dc89f04b 100644 --- a/src/usermacro.cpp +++ b/src/usermacro.cpp @@ -248,11 +248,31 @@ bool Macro::isActiveForLanguage(QLanguageDefinition *lang) const return triggerLanguage.isEmpty() || triggerLanguages.contains(lang); } -bool Macro::isActiveForFormat(int format) const +/*! + * \brief check if any format trigger are set + * Included or excluded formats are considered + * \return + */ +bool Macro::hasFormatTriggers() const { - if (!triggerFormatsUnprocessed.isEmpty() || !triggerFormatExcludesUnprocessed.isEmpty()) (const_cast(this))->initTriggerFormats(); - // if no trigger format is specified, the macro is active for all formats. - return (triggerFormats.isEmpty() || triggerFormats.contains(format)) && (!triggerFormatExcludes.contains(format)); + if (!triggerFormatsUnprocessed.isEmpty() || !triggerFormatExcludesUnprocessed.isEmpty()) (const_cast(this))->initTriggerFormats(); + return !triggerFormats.isEmpty() || !triggerFormatExcludes.isEmpty(); +} +/*! + * \brief return the list of format triggers + * \return + */ +QList Macro::getFormatTriggers() const +{ + return triggerFormats; +} +/*! + * \brief return the list of format triggers which should be excluded + * \return + */ +QList Macro::getFormatExcludeTriggers() const +{ + return triggerFormatExcludes; } bool Macro::save(const QString &fileName) const { diff --git a/src/usermacro.h b/src/usermacro.h index d426439905..79dda0b28e 100644 --- a/src/usermacro.h +++ b/src/usermacro.h @@ -54,7 +54,9 @@ class Macro void parseTriggerLanguage(QLanguageFactory *langFactory); bool isActiveForTrigger(SpecialTrigger trigger) const; bool isActiveForLanguage(QLanguageDefinition *lang) const; - bool isActiveForFormat(int format) const; + bool hasFormatTriggers() const; + QListgetFormatTriggers() const; + QListgetFormatExcludeTriggers() const; bool load(const QString &fileName); bool loadFromText(const QString &text);