diff --git a/application/settings.cpp b/application/settings.cpp index be5e1c1..f3bb8d7 100644 --- a/application/settings.cpp +++ b/application/settings.cpp @@ -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); diff --git a/application/settings.h b/application/settings.h index be97ac1..4f867a3 100644 --- a/application/settings.h +++ b/application/settings.h @@ -12,6 +12,7 @@ #include #include +#include #include 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; }; diff --git a/gui/editorautocorrectionoptionpage.ui b/gui/editorautocorrectionoptionpage.ui index 1fefa99..21eb7b5 100644 --- a/gui/editorautocorrectionoptionpage.ui +++ b/gui/editorautocorrectionoptionpage.ui @@ -28,28 +28,75 @@ - insert title from filename if none present + Insert title from filename if none present - trim whitespaces + Trim whitespaces - format names like "an example_name" to "An Example Name" + Format names like "an example_name" to "An Example Name" - fix umlauts (replaces ae with ä for example) + Fix umlauts (replaces ae with ä for example) + + + + + + + Custom substitution + + + + + + + + + + Custom substitution + + + true + + + + + + Match pattern + + + + + + + Replacement + + + + + + + regular expression + + + + + + + replacement (use \1, \2, … for capture expressions) diff --git a/gui/settingsdialog.cpp b/gui/settingsdialog.cpp index 2396704..4fdf15d 100644 --- a/gui/settingsdialog.cpp +++ b/gui/settingsdialog.cpp @@ -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()); } diff --git a/gui/tagfieldedit.cpp b/gui/tagfieldedit.cpp index c1fc45f..f26cc7b 100644 --- a/gui/tagfieldedit.cpp +++ b/gui/tagfieldedit.cpp @@ -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; }