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