--- /dev/null
+#include "anionisyntaxhighlighter.h"
+
+#include <QSqlRecord>
+
+#include <RenameParser/RenameEngine>
+#include "renameutils.h"
+
+#include <QDebug>
+
+AniAddSyntaxHighlighter::AniAddSyntaxHighlighter(QObject *parent) :
+ QSyntaxHighlighter(parent)
+{
+ HighlightingRule rule;
+
+ variable.setForeground( QColor(211, 54, 130));
+ builtinVariable.setForeground( QColor(220, 50, 47));
+ function.setForeground( QColor( 38, 139, 210));
+ builtinFunction.setForeground( QColor(108, 113, 196));
+ number.setForeground( QColor( 42, 161, 152));
+ string.setForeground( QColor(133, 153, 0));
+ operatorFormat.setForeground( Qt::darkRed);
+ comment.setForeground( Qt::gray);
+
+ rule.pattern = QRegExp("0|[1-9][0-9]*");
+ rule.format = number;
+ highlightingRules << rule;
+
+ const QString name("[a-zA-Z][a-zA-Z0-9]*");
+
+ rule.pattern = QRegExp(name);
+ rule.format = variable;
+ highlightingRules << rule;
+
+ rule.pattern = QRegExp("\\$\\s*" + name);
+ rule.format = function;
+ highlightingRules << rule;
+
+ {
+ QSqlRecord r;
+ RenameParser::Environment env;
+ LocalMyList::setupRenameEnv(r, env);
+ const QStringList variables = env.keys();
+
+ rule.pattern = QRegExp("\\b" + variables.join(QChar('|')) + "\\b");
+ rule.format = builtinVariable;
+ highlightingRules.append(rule);
+ }
+ {
+ const QStringList functions = RenameParser::RenameEngine::registeredFunctions();
+
+ rule.pattern = QRegExp("\\$\\s*(?:" + functions.join(QChar('|')) + ")\\b");
+ rule.format = builtinFunction;
+ highlightingRules << rule;
+ }
+
+ rule.pattern = QRegExp(":?=|[:|?\\[\\]]");
+ rule.format = operatorFormat;
+ highlightingRules << rule;
+
+ rule.pattern = QRegExp("\"[^\"]*\"|'[^']*'");
+ rule.format = string;
+ highlightingRules << rule;
+
+ rule.pattern = QRegExp("^//.*$");
+ rule.format = comment;
+ highlightingRules << rule;
+
+ commentStartExpression = QRegExp("/\\*");
+ commentEndExpression = QRegExp("\\*/");
+}
+
+void AniAddSyntaxHighlighter::highlightBlock(const QString &text)
+{
+ for (const HighlightingRule &rule : highlightingRules)
+ {
+ QRegExp expression(rule.pattern);
+ int index = expression.indexIn(text);
+ while (index >= 0) {
+ int length = expression.matchedLength();
+ setFormat(index, length, rule.format);
+ index = expression.indexIn(text, index + length);
+ }
+ }
+ setCurrentBlockState(0);
+
+ int startIndex = 0;
+ if (previousBlockState() != 1)
+ startIndex = commentStartExpression.indexIn(text);
+
+ while (startIndex >= 0)
+ {
+ int endIndex = commentEndExpression.indexIn(text, startIndex);
+ int commentLength;
+ if (endIndex == -1)
+ {
+ setCurrentBlockState(1);
+ commentLength = text.length() - startIndex;
+ }
+ else
+ {
+ commentLength = endIndex - startIndex
+ + commentEndExpression.matchedLength();
+ }
+ setFormat(startIndex, commentLength, comment);
+ startIndex = commentStartExpression.indexIn(text, startIndex + commentLength);
+ }
+}
--- /dev/null
+#ifndef ANIADDSYNTAXHIGHLIGHTER_H
+#define ANIADDSYNTAXHIGHLIGHTER_H
+
+#include <QSyntaxHighlighter>
+
+class AniAddSyntaxHighlighter : public QSyntaxHighlighter
+{
+ Q_OBJECT
+public:
+ explicit AniAddSyntaxHighlighter(QObject *parent = 0);
+
+protected:
+ void highlightBlock(const QString &text);
+
+private:
+ struct HighlightingRule
+ {
+ QRegExp pattern;
+ QTextCharFormat format;
+ };
+ QVector<HighlightingRule> highlightingRules;
+
+ QRegExp commentStartExpression;
+ QRegExp commentEndExpression;
+
+ QTextCharFormat builtinVariable;
+ QTextCharFormat builtinFunction;
+ QTextCharFormat variable;
+ QTextCharFormat function;
+ QTextCharFormat comment;
+ QTextCharFormat operatorFormat;
+ QTextCharFormat string;
+ QTextCharFormat number;
+};
+
+#endif // ANIADDSYNTAXHIGHLIGHTER_H
#include <QSqlRecord>
#include "fonts.h"
+#include "anionisyntaxhighlighter.h"
static const char *rulesStrAniAdd =
"AT := [%ATr%, %ATe%, %ATk%]\n"
ui->scriptLanguage->addItems(parsers);
originalParserType = RenameParser::RenameEngine::ParserType(LocalMyList::instance()->settings()->get("renameLanguage").toInt());
setParserType(originalParserType);
+
+ inputHighlighter = new AniAddSyntaxHighlighter(this);
+ resultHighlighter = new AniAddSyntaxHighlighter(this);
+ scriptHighlighter = 0;
+
+ inputHighlighter->setDocument(ui->input->document());
+ resultHighlighter->setDocument(ui->result->document());
+
+ if (parserType() == RenameParser::RenameEngine::AniAdd)
+ {
+ scriptHighlighter = new AniAddSyntaxHighlighter(this);
+ scriptHighlighter->setDocument(ui->renameScript->document());
+ }
+
}
RenameSettingsDialog::~RenameSettingsDialog()
{
rulesEngine->setCurrentParserType(RenameParser::RenameEngine::ParserType(ui->scriptLanguage->currentIndex()));
on_input_textChanged();
+
+ if (parserType() == RenameParser::RenameEngine::AniAdd)
+ {
+ if (!scriptHighlighter)
+ {
+ scriptHighlighter = new AniAddSyntaxHighlighter(this);
+ scriptHighlighter->setDocument(ui->renameScript->document());
+ }
+ }
+ else if (scriptHighlighter)
+ {
+ delete scriptHighlighter;
+ scriptHighlighter = 0;
+ }
}
void RenameSettingsDialog::updateResult(const RenameParser::Environment &env)
#include <RenameParser/RenameEngine>
namespace Ui {
- class RenameSettingsDialog;
+ class RenameSettingsDialog;
}
class QAbstractButton;
+class AniAddSyntaxHighlighter;
class RenameSettingsDialog : public QDialog
{
- Q_OBJECT
+ Q_OBJECT
Q_PROPERTY(QString renameString READ renameString WRITE setRenameString)
public:
- explicit RenameSettingsDialog(QWidget *parent = 0);
- ~RenameSettingsDialog();
+ explicit RenameSettingsDialog(QWidget *parent = 0);
+ ~RenameSettingsDialog();
QString renameString() const;
void setRenameString(const QString &renameString);
private:
void updateResult(const RenameParser::Environment &env);
- Ui::RenameSettingsDialog *ui;
+ Ui::RenameSettingsDialog *ui;
RenameParser::RenameEngine *environmentEngine;
QString originalEnv;
RenameParser::RenameEngine::ParserType originalParserType;
QString originalScript;
+
+ AniAddSyntaxHighlighter *inputHighlighter;
+ AniAddSyntaxHighlighter *resultHighlighter;
+ AniAddSyntaxHighlighter *scriptHighlighter;
};
#endif // RENAMESETTINGSDIALOG_H