Pārlūkot izejas kodu

ADD: Multi-rename - case sensitive find and replace

Alexander Koblov 3 gadi atpakaļ
vecāks
revīzija
d89b2cf458
3 mainītis faili ar 33 papildinājumiem un 2 dzēšanām
  1. 14 0
      src/fmultirename.lfm
  2. 2 0
      src/fmultirename.lrj
  3. 17 2
      src/fmultirename.pas

+ 14 - 0
src/fmultirename.lfm

@@ -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

+ 2 - 0
src/fmultirename.lrj

@@ -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"},

+ 17 - 2
src/fmultirename.pas

@@ -3,7 +3,7 @@
    -------------------------------------------------------------------------
    Multi-Rename Tool dialog window
 
-   Copyright (C) 2007-2021 Alexander Koblov ([email protected])
+   Copyright (C) 2007-2022 Alexander Koblov ([email protected])
 
    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;