ADD: Multi-rename - case sensitive find and replace

This commit is contained in:
Alexander Koblov 2022-04-09 16:56:01 +03:00
commit d89b2cf458
3 changed files with 33 additions and 2 deletions

View file

@ -420,6 +420,20 @@ object frmMultiRename: TfrmMultiRename
ParentFont = False
TabOrder = 1
end
object cbCaseSens: TCheckBox
AnchorSideLeft.Control = cbRegExp
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = cbRegExp
Left = 140
Height = 19
Hint = 'Case sensitive'
Top = 88
Width = 42
BorderSpacing.Left = 12
Caption = 'A≠a'
OnChange = cbNameStyleChange
TabOrder = 4
end
end
object btnEditor: TBitBtn
AnchorSideLeft.Control = gbCounter

View file

@ -12,6 +12,8 @@
{"hash":35724926,"name":"tfrmmultirename.lbreplace.caption","sourcebytes":[82,101,38,112,108,97,99,101,46,46,46],"value":"Re&place..."},
{"hash":20463635,"name":"tfrmmultirename.cbregexp.caption","sourcebytes":[82,101,103,117,108,97,114,32,101,38,120,112,114,101,115,115,105,111,110,115],"value":"Regular e&xpressions"},
{"hash":121437630,"name":"tfrmmultirename.cbusesubs.caption","sourcebytes":[38,85,115,101,32,115,117,98,115,116,105,116,117,116,105,111,110],"value":"&Use substitution"},
{"hash":219672053,"name":"tfrmmultirename.cbcasesens.hint","sourcebytes":[67,97,115,101,32,115,101,110,115,105,116,105,118,101],"value":"Case sensitive"},
{"hash":5223265,"name":"tfrmmultirename.cbcasesens.caption","sourcebytes":[65,226,137,160,97],"value":"A\u2260a"},
{"hash":174873218,"name":"tfrmmultirename.gbcounter.caption","sourcebytes":[67,111,117,110,116,101,114],"value":"Counter"},
{"hash":42119666,"name":"tfrmmultirename.lbstnb.caption","sourcebytes":[83,38,116,97,114,116,32,78,117,109,98,101,114],"value":"S&tart Number"},
{"hash":49,"name":"tfrmmultirename.edpoc.text","sourcebytes":[49],"value":"1"},

View file

@ -3,7 +3,7 @@
-------------------------------------------------------------------------
Multi-Rename Tool dialog window
Copyright (C) 2007-2021 Alexander Koblov (alexx2000@mail.ru)
Copyright (C) 2007-2022 Alexander Koblov (alexx2000@mail.ru)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -66,6 +66,7 @@ type
FReplace: string;
FRegExp: boolean;
FUseSubs: boolean;
FCaseSens: Boolean;
FCounter: string;
FInterval: string;
FWidth: integer;
@ -82,6 +83,7 @@ type
property Replace: string read FReplace write FReplace;
property RegExp: boolean read FRegExp write FRegExp;
property UseSubs: boolean read FUseSubs write FUseSubs;
property CaseSens: Boolean read FCaseSens write FCaseSens;
property Counter: string read FCounter write FCounter;
property Interval: string read FInterval write FInterval;
property Width: integer read FWidth write FWidth;
@ -120,6 +122,8 @@ type
{ TfrmMultiRename }
TfrmMultiRename = class(TAloneForm, IFormCommands)
cbCaseSens: TCheckBox;
pnlButtons: TPanel;
StringGrid: TStringGrid;
pnlOptions: TPanel;
pnlOptionsLeft: TPanel;
@ -460,6 +464,7 @@ begin
FReplace := '';
FRegExp := False;
FUseSubs := False;
FCaseSens := False;
FCounter := '1';
FInterval := '1';
FWidth := 0;
@ -972,6 +977,7 @@ begin
AMultiRenamePreset.Replace := AConfig.GetValue(ANode, 'Replace', '');
AMultiRenamePreset.RegExp := AConfig.GetValue(ANode, 'RegExp', False);
AMultiRenamePreset.UseSubs := AConfig.GetValue(ANode, 'UseSubs', False);
AMultiRenamePreset.CaseSens := AConfig.GetValue(ANode, 'CaseSensitive', False);
AMultiRenamePreset.Counter := AConfig.GetValue(ANode, 'Counter', '1');
AMultiRenamePreset.Interval := AConfig.GetValue(ANode, 'Interval', '1');
AMultiRenamePreset.Width := AConfig.GetValue(ANode, 'Width', 0);
@ -1070,6 +1076,7 @@ begin
FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Replace := edReplace.Text;
FMultiRenamePresetList.MultiRenamePreset[PresetIndex].RegExp := cbRegExp.Checked;
FMultiRenamePresetList.MultiRenamePreset[PresetIndex].UseSubs := cbUseSubs.Checked;
FMultiRenamePresetList.MultiRenamePreset[PresetIndex].CaseSens := cbCaseSens.Checked;
FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Counter := edPoc.Text;
FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Interval := edInterval.Text;
FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Width := cmbxWidth.ItemIndex;
@ -1122,6 +1129,7 @@ begin
AConfig.AddValue(SubNode, 'Replace', FMultiRenamePresetList.MultiRenamePreset[i].Replace);
AConfig.AddValue(SubNode, 'RegExp', FMultiRenamePresetList.MultiRenamePreset[i].RegExp);
AConfig.AddValue(SubNode, 'UseSubs', FMultiRenamePresetList.MultiRenamePreset[i].UseSubs);
AConfig.AddValue(SubNode, 'CaseSensitive', FMultiRenamePresetList.MultiRenamePreset[i].CaseSens);
AConfig.AddValue(SubNode, 'Counter', FMultiRenamePresetList.MultiRenamePreset[i].Counter);
AConfig.AddValue(SubNode, 'Interval', FMultiRenamePresetList.MultiRenamePreset[i].Interval);
AConfig.AddValue(SubNode, 'Width', FMultiRenamePresetList.MultiRenamePreset[i].Width);
@ -2027,6 +2035,7 @@ function TfrmMultiRename.FreshText(ItemIndex: integer): string;
var
I: integer;
bError: boolean;
Flags: TReplaceFlags;
sTmpName, sTmpExt: string;
begin
bError := False;
@ -2050,6 +2059,7 @@ begin
begin
if cbRegExp.Checked then
try
FRegExp.ModifierI := not cbCaseSens.Checked;
Result := UTF16ToUTF8(FRegExp.Replace(CeUtf8ToUtf16(Result), CeUtf8ToUtf16(edReplace.Text), cbUseSubs.Checked));
except
Result := rsMsgErrRegExpSyntax;
@ -2057,11 +2067,14 @@ begin
end
else
begin
Flags:= [rfReplaceAll];
if not cbCaseSens.Checked then
Flags+= [rfIgnoreCase];
// Many at once, split find and replace by |
if (FReplaceText.Count = 0) then
FReplaceText.Add('');
for I := 0 to FFindText.Count - 1 do
Result := StringReplace(Result, FFindText[I], FReplaceText[Min(I, FReplaceText.Count - 1)], [rfReplaceAll, rfIgnoreCase]);
Result := UTF8StringReplace(Result, FFindText[I], FReplaceText[Min(I, FReplaceText.Count - 1)], Flags);
end;
end;
@ -2232,6 +2245,7 @@ begin
edReplace.Text := '';
cbRegExp.Checked := False;
cbUseSubs.Checked := False;
cbCaseSens.Checked := False;
cbNameMaskStyle.ItemIndex := 0;
cmbExtensionStyle.ItemIndex := 0;
edPoc.Text := '1';
@ -2566,6 +2580,7 @@ begin
edReplace.Text := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Replace;
cbRegExp.Checked := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].RegExp;
cbUseSubs.Checked := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].UseSubs;
cbCaseSens.Checked := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].CaseSens;
edPoc.Text := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Counter;
edInterval.Text := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Interval;
cmbxWidth.ItemIndex := FMultiRenamePresetList.MultiRenamePreset[PresetIndex].Width;