1 #ifndef Header_UserMacro 2 #define Header_UserMacro 3 4 #include "mostQtHeaders.h" 5 #include "latexdocument.h" 6 #include <QJsonDocument> 7 #include <QJsonArray> 8 9 class QLanguageDefinition; 10 class QLanguageFactory; 11 //class LatexDocument; 12 13 14 class Macro 15 { 16 public: 17 enum SpecialTrigger { ST_NO_TRIGGER = 0, 18 ST_REGEX = 1, ST_TXS_START = 2, 19 ST_NEW_FILE = 4, ST_NEW_FROM_TEMPLATE = 8, ST_LOAD_FILE = 0x10, ST_LOAD_THIS_FILE = 0x20, 20 ST_FILE_SAVED = 0x40, ST_FILE_CLOSED = 0x80, ST_MASTER_CHANGED = 0x100, 21 ST_AFTER_TYPESET = 0x200, ST_AFTER_COMMAND_RUN = 0x400 22 }; 23 enum Type { Snippet, Environment, Script }; 24 25 Q_DECLARE_FLAGS(SpecialTriggers, SpecialTrigger) 26 Macro(); 27 Macro(const QString &nname, const Macro::Type ntype, const QString &ntag, const QString &nabbrev, const QString &ntrigger); 28 Macro(const QString &nname, const QString &typedTag, const QString &nabbrev=QString(), const QString &ntrigger=QString()); 29 Macro(const QStringList &fieldList); 30 31 static Macro fromTypedTag(const QString &typedTag); 32 33 QString name, abbrev,description,menu; 34 Type type; 35 QString trigger; 36 QRegExp triggerRegex; 37 bool triggerLookBehind; 38 39 QStringList toStringList() const; 40 41 QString snippet() const; 42 QString script() const; 43 QString shortcut() const; 44 45 bool isEmpty() const; 46 47 void setShortcut(const QString &sc); 48 void setTrigger(const QString &newTrigger); 49 50 QString typedTag() const; 51 void setTypedTag(const QString &m_tag); 52 static QString parseTypedTag(QString typedTag, Macro::Type &retType); 53 54 void parseTriggerLanguage(QLanguageFactory *langFactory); 55 bool isActiveForTrigger(SpecialTrigger trigger) const; 56 bool isActiveForLanguage(QLanguageDefinition *lang) const; 57 bool isActiveForFormat(int format) const; 58 59 bool load(const QString &fileName); 60 bool loadFromText(const QString &text); 61 bool save(const QString &fileName) const; 62 63 LatexDocument *document; 64 65 private: 66 void init(const QString &nname, Macro::Type ntype, const QString &ntag, const QString &nabbrev, const QString &ntrigger); 67 void initTriggerFormats(); 68 69 QString tag; 70 SpecialTriggers triggers; 71 72 QString triggerLanguage; 73 QList<QLanguageDefinition *> triggerLanguages; 74 75 QString triggerFormatsUnprocessed; 76 QList<int> triggerFormats; 77 QString triggerFormatExcludesUnprocessed; 78 QList<int> triggerFormatExcludes; 79 80 QString m_shortcut; 81 }; 82 83 Q_DECLARE_METATYPE(Macro); 84 85 class MacroExecContext { 86 public: MacroExecContext()87 MacroExecContext() { triggerId = Macro::ST_NO_TRIGGER; } MacroExecContext(int triggerType)88 MacroExecContext(int triggerType) { this->triggerId = triggerType; } MacroExecContext(int triggerType,QStringList triggerMatches)89 MacroExecContext(int triggerType, QStringList triggerMatches) { this->triggerId = triggerType; this->triggerMatches = triggerMatches; } 90 91 int triggerId; 92 QStringList triggerMatches; 93 }; 94 95 #endif // USERMACRO_H 96