Add custom substitution to auto correction features

This commit is contained in:
Martchus 2020-09-08 19:37:23 +02:00
parent bcefa83c0a
commit ba34ae38a5
5 changed files with 81 additions and 4 deletions

View File

@ -81,6 +81,11 @@ void restore()
v.editor.autoCompletition.trimWhitespaces = settings.value(QStringLiteral("trimwhitespaces"), true).toBool();
v.editor.autoCompletition.formatNames = settings.value(QStringLiteral("formatnames"), false).toBool();
v.editor.autoCompletition.fixUmlauts = settings.value(QStringLiteral("fixumlauts"), false).toBool();
settings.beginGroup(QStringLiteral("customsubst"));
v.editor.autoCompletition.customSubstitution.enabled = settings.value(QStringLiteral("enabled")).toBool();
v.editor.autoCompletition.customSubstitution.regex = settings.value(QStringLiteral("regex")).toRegularExpression();
v.editor.autoCompletition.customSubstitution.replacement = settings.value(QStringLiteral("replacement")).toString();
settings.endGroup();
settings.endGroup();
v.editor.backupDirectory = settings.value(QStringLiteral("tempdir")).toString().toStdString();
v.editor.hideCoverButtons = settings.value(QStringLiteral("hidecoverbtn"), false).toBool();
@ -225,6 +230,11 @@ void save()
settings.setValue(QStringLiteral("trimwhitespaces"), v.editor.autoCompletition.trimWhitespaces);
settings.setValue(QStringLiteral("formatnames"), v.editor.autoCompletition.formatNames);
settings.setValue(QStringLiteral("fixumlauts"), v.editor.autoCompletition.fixUmlauts);
settings.beginGroup(QStringLiteral("customsubst"));
settings.setValue(QStringLiteral("enabled"), v.editor.autoCompletition.customSubstitution.enabled);
settings.setValue(QStringLiteral("regex"), v.editor.autoCompletition.customSubstitution.regex);
settings.setValue(QStringLiteral("replacement"), v.editor.autoCompletition.customSubstitution.replacement);
settings.endGroup();
settings.endGroup();
settings.setValue(QStringLiteral("tempdir"), QString::fromStdString(v.editor.backupDirectory));
settings.setValue(QStringLiteral("hidecoverbtn"), v.editor.hideCoverButtons);

View File

@ -12,6 +12,7 @@
#include <qtutilities/settingsdialog/qtsettings.h>
#include <QByteArray>
#include <QRegularExpression>
#include <QString>
namespace Settings {
@ -22,12 +23,19 @@ enum class AdoptFields { Never, WithinDirectory, Always };
enum class MultipleTagHandling { SingleEditorPerTarget, SeparateEditors };
struct CustomSubstitution {
QRegularExpression regex;
QString replacement;
bool enabled = false;
};
struct AutoCompletition {
AutoCompletition();
bool insertTitleFromFilename = false;
bool trimWhitespaces = true;
bool formatNames = false;
bool fixUmlauts = false;
CustomSubstitution customSubstitution;
KnownFieldModel fields;
};

View File

@ -28,28 +28,75 @@
<item>
<widget class="QCheckBox" name="insertTitleFromFilenameCheckBox">
<property name="text">
<string>insert title from filename if none present</string>
<string>Insert title from filename if none present</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="trimWhitespacesCheckBox">
<property name="text">
<string>trim whitespaces</string>
<string>Trim whitespaces</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="formatNamesCheckBox">
<property name="text">
<string>format names like &quot;an example_name&quot; to &quot;An Example Name&quot;</string>
<string>Format names like &quot;an example_name&quot; to &quot;An Example Name&quot;</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="fixUmlautsCheckBox">
<property name="text">
<string>fix umlauts (replaces ae with ä for example)</string>
<string>Fix umlauts (replaces ae with ä for example)</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="customSubstitutionCheckBox">
<property name="text">
<string>Custom substitution</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="customSubstitutionGroupBox">
<property name="title">
<string>Custom substitution</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="matchLabel">
<property name="text">
<string>Match pattern</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="replacementLabel">
<property name="text">
<string>Replacement</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="regularExpressionLineEdit">
<property name="placeholderText">
<string>regular expression</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="replacementLineEdit">
<property name="placeholderText">
<string>replacement (use \1, \2, … for capture expressions)</string>
</property>
</widget>
</item>

View File

@ -219,6 +219,10 @@ bool EditorAutoCorrectionOptionPage::apply()
settings.trimWhitespaces = ui()->trimWhitespacesCheckBox->isChecked();
settings.formatNames = ui()->formatNamesCheckBox->isChecked();
settings.fixUmlauts = ui()->fixUmlautsCheckBox->isChecked();
auto &subst = settings.customSubstitution;
subst.enabled = ui()->customSubstitutionGroupBox->isChecked();
subst.regex = QRegularExpression(ui()->regularExpressionLineEdit->text());
subst.replacement = ui()->replacementLineEdit->text();
if (m_model) {
settings.fields.setItems(m_model->items());
}
@ -234,6 +238,10 @@ void EditorAutoCorrectionOptionPage::reset()
ui()->trimWhitespacesCheckBox->setChecked(settings.trimWhitespaces);
ui()->formatNamesCheckBox->setChecked(settings.formatNames);
ui()->fixUmlautsCheckBox->setChecked(settings.fixUmlauts);
const auto &subst = settings.customSubstitution;
ui()->customSubstitutionGroupBox->setChecked(subst.enabled);
ui()->regularExpressionLineEdit->setText(subst.regex.pattern());
ui()->replacementLineEdit->setText(subst.replacement);
if (m_model) {
m_model->setItems(settings.fields.items());
}

View File

@ -787,6 +787,10 @@ QString TagFieldEdit::applyAutoCorrection(const QString &textValue)
if (settings.fixUmlauts) {
correctedValue = Utility::fixUmlauts(correctedValue);
}
const auto &subst = settings.customSubstitution;
if (subst.enabled && subst.regex.isValid()) {
correctedValue.replace(subst.regex, subst.replacement);
}
return correctedValue;
}