ReNamer:Scripts:RegEx Case Convertion: Difference between revisions

From den4b Wiki
Jump to navigation Jump to search
(Created page with 'The script compensates for the lack of ReNamer's RegEx engine to change case of captured groups of the RegEx. User needs to provide REGEX and CHANGE_CASE parameters to the script...')
 
m (Text replacement - "</source>" to "</syntaxhighlight>")
 
(12 intermediate revisions by 2 users not shown)
Line 1: Line 1:
The script compensates for the lack of ReNamer's RegEx engine to change case of captured groups of the RegEx.
{{Up|ReNamer:Scripts}}
 
The script compensates for the lack of the ability of ReNamer's RegEx engine to change case of groups captured by RegEx.
 
User needs to provide REGEX and CHANGE_CASE parameters to the script controls. The exact form of the CHANGE_CASE string is explained in the legend below the main controls.
User needs to provide REGEX and CHANGE_CASE parameters to the script controls. The exact form of the CHANGE_CASE string is explained in the legend below the main controls.


== Tested ==
== Tested ==


* ReNamer 5.50
* ReNamer 5.74.4 Beta


== Code ==
== Code ==
Line 10: Line 13:
Author: krtek. Date: 26 July 2009.
Author: krtek. Date: 26 July 2009.


<source>
<syntaxhighlight lang="pascal">
const
const


Line 18: Line 21:
CHANGE_CASE = '102';   
CHANGE_CASE = '102';   


SKIP_EXTENTION = true;         //true or false
SKIP_EXTENTION = true;         //true or false
CASE_SENSITIVE = False;        //Should searching with regex be case sensitive? Default: False
CASE_SENSITIVE = False;        //Should searching with regex be case sensitive? Default: False
FULL_MATCH_CHECK = True;      //Should the script warn you if regex didn't match the full filename? Default: True;
FULL_MATCH_CHECK = True;      //Should the script warn you if regex didn't match the full filename? Default: True;
Line 33: Line 36:
//If the CHANGE_CASE string is shorten then number of capturing groups then the last digit is used till the end of regex.
//If the CHANGE_CASE string is shorten then number of capturing groups then the last digit is used till the end of regex.
//If the CHANGE_CASE string is longer, spare digits are ignored.  
//If the CHANGE_CASE string is longer, spare digits are ignored.  
//eg. '102' means that first matched brackets will be uppercased, second - won't be changed and third (and every brackets after it) - lowercased.
//eg. '102' means that first matched brackets will be uppercased,
// second - won't be changed and third (and every brackets after it) - lowercased.




Line 47: Line 51:


var
var
   Matches, SubPatterns : TStringsArray;
   Matches, SubPatterns : TWideStringArray;
   TempFilename, FileNameProcessedPart : WideString;
   TempFilename, FileNameProcessedPart : WideString;
   start_pos, end_pos, i, j : Integer;
   start_pos, end_pos, i, j : Integer;
   Initialized, TimeToExit, NotAFullMatch, CheckIfFullMatch : Boolean;
   Initialized, TimeToExit, NotAFullMatch, CheckIfFullMatch : Boolean;
   CaseFlagss : array of Integer;
   CaseFlags : array of Integer;
   CaseFlag : Integer;
   CaseFlag : Integer;
   Answer : WideString;
   Answer : WideString;
Line 84: Line 88:
   CheckIfFullMatch:=FULL_MATCH_CHECK;
   CheckIfFullMatch:=FULL_MATCH_CHECK;
   Initialized:=true;
   Initialized:=true;
   CaseFlagss:=SetCaseFlags(CHANGE_CASE);
   CaseFlags:=SetCaseFlags(CHANGE_CASE);
end;
end;


Line 134: Line 138:
         3 : TempFilename:=TempFileName+WideUpperCase(SubPatterns[i]);
         3 : TempFilename:=TempFileName+WideUpperCase(SubPatterns[i]);
         4 : TempFilename:=TempFileName+WideCaseInvert(SubPatterns[i]);
         4 : TempFilename:=TempFileName+WideCaseInvert(SubPatterns[i]);
         5 : TempFilename:=TempFileName+WideUpperCase(SubPatterns[i][1])+WideLowerCase(WideCopy(SubPatterns[i], 2, Length(SubPatterns[i])-1));
         5 : TempFilename:=TempFileName+WideUpperCase(SubPatterns[i][1])+
              WideLowerCase(WideCopy(SubPatterns[i], 2, Length(SubPatterns[i])-1));
            
            
         else
         else
           begin   
           begin   
             ShowMessage('The value of CHANGE_CASE constant is invalid. Check legend for info.');
             WideShowMessage('The value of CHANGE_CASE constant is invalid. Check legend for info.');
             TimeToExit:=True;
             TimeToExit:=True;
             break;
             break;
Line 154: Line 159:
     if CheckIfFullMatch then     
     if CheckIfFullMatch then     
       begin
       begin
         if not WideInputQuery('RegEx didn''t match the full filename.', 'Old filename:'+#10+FileName+#10+#10+'Proposed new filename: '+#10+TempFileName+WideExtractFileExt(FileName)+#10+#10+'What should we do?'#10+#10+'Pressing OK button = Rename that file'+#10+'Pressing Cancek button = Skip that file'+#10+'Type '''+BREAK_STRING+''' in the text field to exit the script or '''+FOR_ALL_STRING+''' if you want to continue with all the files.'+#10, Answer) then
         if not WideInputQuery('RegEx didn''t match the full filename.', 'Old filename:'+#10+FileName+#10+#10+
          exit
          'Proposed new filename: '+#10+TempFileName+WideExtractFileExt(FileName)+#10+#10+
          'What should we do?'#10+#10+'Pressing OK button = Rename that file'+#10+
          'Pressing Cancek button = Skip that file'+#10+'Type '''+BREAK_STRING+
          ''' in the text field to exit the script or '''+FOR_ALL_STRING+
          ''' if you want to continue with all the files.'+#10, Answer) then Exit
         else if WideSameText(WideLowerCase(Answer),BREAK_STRING) then  
         else if WideSameText(WideLowerCase(Answer),BREAK_STRING) then  
           begin
           begin
Line 168: Line 177:
           Answer:=STANDARD_ANSWER;
           Answer:=STANDARD_ANSWER;
       end;
       end;
 


   if SKIP_EXTENTION then   
   if SKIP_EXTENTION then   
     FileName:=TempFileName+WideExtractFileExt(FileName)
     FileName:=TempFileName+WideExtractFileExt(FileName)
   else FileName:=TempFileName;
   else FileName:=TempFileName;
 


end
end
Line 179: Line 186:
   
   
end.
end.
</source>
</syntaxhighlight>




== Code 2 ==


Thanks to the Stefan's involvement there exists also a version of the script that uses dialog boxes to ask user for needed data so no direct changes to the script are needed.
Thanks to the Stefan's involvement there exists also a version of the script that uses dialog boxes to ask user for required data so no direct changes to the script are needed.
 
== Code 2 ==


Author: krtek & Stefan. Date: 27 July 2009.
Author: krtek & Stefan. Date: 27 July 2009.


<source>
<syntaxhighlight lang="pascal">
const
const


Line 199: Line 205:
          
          


DEFAULT_REGEX = '(.+) - (.+) - (.+)';  //exchanged with InputBox
DEFAULT_REGEX = '(.+) - (.+) - (.+)';  //exchanged with InputQuery
DEFAULT_CHANGE_CASE = '102';   
DEFAULT_CHANGE_CASE = '102';   


Line 212: Line 218:
//If the CHANGE_CASE string is shorten then number of capturing groups then the last digit is used till the end of regex.
//If the CHANGE_CASE string is shorten then number of capturing groups then the last digit is used till the end of regex.
//If the CHANGE_CASE string is longer, spare digits are ignored.  
//If the CHANGE_CASE string is longer, spare digits are ignored.  
//eg. '102' means that first matched brackets will be uppercased, second - won't be changed and third (and every brackets after it) - lowercased.
//eg. '102' means that first matched brackets will be uppercased,
 
//second - won't be changed and third (and every brackets after it) - lowercased.




Line 226: Line 232:


var
var
   Matches, SubPatterns : TStringsArray;
   Matches, SubPatterns : TWideStringArray;
   TempFilename, FileNameProcessedPart : WideString;
   TempFilename, FileNameProcessedPart : WideString;
   start_pos, end_pos, i: Integer;
   start_pos, end_pos, i: Integer;
Line 271: Line 277:
     ChangeCase := DEFAULT_CHANGE_CASE;
     ChangeCase := DEFAULT_CHANGE_CASE;
    
    
   If not WideInputQuery(SCRIPT_NAME, 'Choose case for every single match group ( )'+#10+'of your RegEx:' +#10 + Regex +#10 +#10 + Info, ChangeCase ) then  
   If not WideInputQuery(SCRIPT_NAME, 'Choose case for every single match group ( )'+#10+
    'of your RegEx:' +#10 + Regex +#10 +#10 + Info, ChangeCase ) then  
   begin
   begin
     TimeToExit := true;
     TimeToExit := true;
     exit;
     exit;
   end;
   end;


end;
end;
Line 313: Line 319:
   Initialized:=true;
   Initialized:=true;
end;
end;




begin
begin
 
    
    
if not TimeToExit then
if not TimeToExit then
Line 360: Line 364:
         3 : TempFilename:=TempFileName+WideUpperCase(SubPatterns[i]);
         3 : TempFilename:=TempFileName+WideUpperCase(SubPatterns[i]);
         4 : TempFilename:=TempFileName+WideCaseInvert(SubPatterns[i]);
         4 : TempFilename:=TempFileName+WideCaseInvert(SubPatterns[i]);
         5 : TempFilename:=TempFileName+WideUpperCase(SubPatterns[i][1])+WideLowerCase(WideCopy(SubPatterns[i], 2, Length(SubPatterns[i])-1));
         5 : TempFilename:=TempFileName+WideUpperCase(SubPatterns[i][1])+
              WideLowerCase(WideCopy(SubPatterns[i], 2, Length(SubPatterns[i])-1));
            
            
         else
         else
           begin   
           begin   
             ShowMessage('The value of ChangeCase parameter is invalid.' +#10+'ChangeCase string cannot contain '+inttostr(CaseFlag)+ '.'+#10+'Check legend for info.' +#10 +#10 +'Script will be terminated.');
             WideShowMessage('The value of ChangeCase parameter is invalid.' +#10+
              'ChangeCase string cannot contain '+inttostr(CaseFlag)+ '.'+#10+
              'Check legend for info.' +#10 +#10 +'Script will be terminated.');
             TimeToExit:=True;
             TimeToExit:=True;
             break;
             break;
Line 374: Line 381:
    
    
   if start_pos < Length(FileNameProcessedPart) then
   if start_pos < Length(FileNameProcessedPart) then
     TempFilename:=TempFileName+WideCopy(FileNameProcessedPart, start_pos, Length(FileNameProcessedPart)-start_pos+1);
     TempFilename:=TempFileName+WideCopy(FileNameProcessedPart,
      start_pos, Length(FileNameProcessedPart)-start_pos+1);
   
   


Line 380: Line 388:
     if CheckIfFullMatch then     
     if CheckIfFullMatch then     
       begin
       begin
         if not WideInputQuery('RegEx didn''t match the full filename.', 'Old filename:'+#10+FileName+#10+#10+'Proposed new filename: '+#10+TempFileName+WideExtractFileExt(FileName)+#10+#10+'What should we do?'#10+#10+'Pressing OK button = Rename that file'+#10+'Pressing Cancek button = Skip that file'+#10+'Type '''+BREAK_STRING+''' in the text field to exit the script or '''+FOR_ALL_STRING+''' if you want to continue with all the files.'+#10, Answer) then
         if not WideInputQuery('RegEx didn''t match the full filename.',
          exit
          'Old filename:'+#10+FileName+#10+#10+'Proposed new filename: '+#10+
          TempFileName+WideExtractFileExt(FileName)+#10+#10+'What should we do?'#10+#10+
          'Pressing OK button = Rename that file'+#10+'Pressing Cancek button = Skip that file'+#10+
          'Type '''+BREAK_STRING+''' in the text field to exit the script or '''+FOR_ALL_STRING+
          ''' if you want to continue with all the files.'+#10, Answer) then Exit
         else if WideSameText(WideLowerCase(Answer),BREAK_STRING) then  
         else if WideSameText(WideLowerCase(Answer),BREAK_STRING) then  
           begin
           begin
Line 395: Line 407:
       end;
       end;
    
    
   if SKIP_EXTENTION then   
   if SKIP_EXTENTION then   
     FileName:=TempFileName+WideExtractFileExt(FileName)
     FileName:=TempFileName+WideExtractFileExt(FileName)
   else FileName:=TempFileName;
   else FileName:=TempFileName;
 


end
end
Line 405: Line 415:
   
   
end.
end.
</source>
</syntaxhighlight>

Latest revision as of 15:03, 8 February 2017

The script compensates for the lack of the ability of ReNamer's RegEx engine to change case of groups captured by RegEx.

User needs to provide REGEX and CHANGE_CASE parameters to the script controls. The exact form of the CHANGE_CASE string is explained in the legend below the main controls.

Tested

  • ReNamer 5.74.4 Beta

Code

Author: krtek. Date: 26 July 2009.

const

//SCRIPT CONTROLS:

REGEX = '(.+) - (.+) - (.+)';
CHANGE_CASE = '102';  

SKIP_EXTENTION = true;         //true or false
CASE_SENSITIVE = False;        //Should searching with regex be case sensitive? Default: False
FULL_MATCH_CHECK = True;       //Should the script warn you if regex didn't match the full filename? Default: True;
         

//Legend for CHANGE_CASE parameter:
//1. Capitalize Every Word
//2. lowercase
//3. UPPERCASE
//4. iNVERT cASE
//5. First letter capital
//0. No changes
//You may specify case for every capturing group (brackets) in regex as a string of appropriate digits.
//If the CHANGE_CASE string is shorten then number of capturing groups then the last digit is used till the end of regex.
//If the CHANGE_CASE string is longer, spare digits are ignored. 
//eg. '102' means that first matched brackets will be uppercased,
// second - won't be changed and third (and every brackets after it) - lowercased.



//END OF SCRIPT CONTROLS


BREAK_STRING = 'BREAK';
FOR_ALL_STRING = 'DO NOT ASK';
STANDARD_ANSWER = BREAK_STRING+' to exit, '+FOR_ALL_STRING+' to continue';



var
  Matches, SubPatterns : TWideStringArray;
  TempFilename, FileNameProcessedPart : WideString;
  start_pos, end_pos, i, j : Integer;
  Initialized, TimeToExit, NotAFullMatch, CheckIfFullMatch : Boolean;
  CaseFlags : array of Integer;
  CaseFlag : Integer;
  Answer : WideString;
  


function SetCaseFlags(s : WideString) : array of Integer;
var
i : Integer;
LoopEnd : Integer;
CaseIDs : array of Integer;

begin

  SetLength(CaseIDs,Length(s));
 
  LoopEnd:=Length(s)-1;
  for i:=0 to LoopEnd do
    begin
      CaseIDs[i]:= StrToInt(WideCopy(s,1,1));
      s:=WideCopy(s,2,Length(s)-1);
    end;

  result:= CaseIDs;
end;


procedure Initialize;

begin
  Answer:=STANDARD_ANSWER;
  CheckIfFullMatch:=FULL_MATCH_CHECK;
  Initialized:=true;
  CaseFlags:=SetCaseFlags(CHANGE_CASE);
end;



begin
  
if not TimeToExit then
begin

  if not Initialized then Initialize;

  TempFilename:='';
  end_pos:=0;
  start_pos:=1;
  SetLength(SubPatterns,0);
  SetLength(Matches,0);
  NotAFullMatch:=false;
  
  if SKIP_EXTENTION then
    FileNameProcessedPart:=WideStripExtension(FileName)
  else 
    FileNameProcessedPart:=FileName;
  
  
  Matches:=MatchesRegEx(FileNameProcessedPart, REGEX, CASE_SENSITIVE);
  if Length(Matches) <= 0 then exit;
  if Matches[0] <> FileNameProcessedPart then NotAFullMatch:=true;
  SubPatterns:=SubMatchesRegEx(Matches[0],REGEX,CASE_SENSITIVE);
  if Length(SubPatterns) <=0 then exit;
  
  for i:=0 to Length(SubPatterns)-1 do
    if SubPatterns[i]<>'' then
    begin
      end_pos:=WidePos(SubPatterns[i], Matches[0])-1;
      TempFileName:=TempFileName+WideCopy(Matches[0], start_pos, end_pos-start_pos+1);
      start_pos:=end_pos+Length(SubPatterns[i])+1;
      

      if i < length(CaseFlags)  then
        CaseFlag:=CaseFlags[i]
      else 
        CaseFlag:=CaseFlags[Length(CaseFlags)-1];
        
      case CaseFlag of
        0 : TempFilename:=TempFileName+SubPatterns[i];
        1 : TempFilename:=TempFileName+WideCaseCapitalize(SubPatterns[i]);   
        2 : TempFilename:=TempFileName+WideLowerCase(SubPatterns[i]);
        3 : TempFilename:=TempFileName+WideUpperCase(SubPatterns[i]);
        4 : TempFilename:=TempFileName+WideCaseInvert(SubPatterns[i]);
        5 : TempFilename:=TempFileName+WideUpperCase(SubPatterns[i][1])+
              WideLowerCase(WideCopy(SubPatterns[i], 2, Length(SubPatterns[i])-1));
          
        else
          begin  
            WideShowMessage('The value of CHANGE_CASE constant is invalid. Check legend for info.');
            TimeToExit:=True;
            break;
          end;
     end;

   end;
  
  
  if start_pos < Length(FileNameProcessedPart) then
    TempFilename:=TempFileName+WideCopy(FileNameProcessedPart, start_pos, Length(FileNameProcessedPart)-start_pos+1);
 

  if NotAFullMatch then
    if CheckIfFullMatch then    
       begin
         if not WideInputQuery('RegEx didn''t match the full filename.', 'Old filename:'+#10+FileName+#10+#10+
           'Proposed new filename: '+#10+TempFileName+WideExtractFileExt(FileName)+#10+#10+
           'What should we do?'#10+#10+'Pressing OK button = Rename that file'+#10+
           'Pressing Cancek button = Skip that file'+#10+'Type '''+BREAK_STRING+
           ''' in the text field to exit the script or '''+FOR_ALL_STRING+
           ''' if you want to continue with all the files.'+#10, Answer) then Exit
         else if WideSameText(WideLowerCase(Answer),BREAK_STRING) then 
           begin
             TimeToExit:=True;
             exit;
           end
         else if WideSameText(WideLowerCase(Answer),FOR_ALL_STRING) then 
           begin
             CheckIfFullMatch:=False;
           end
         else
           Answer:=STANDARD_ANSWER;
       end;

  if SKIP_EXTENTION then   
    FileName:=TempFileName+WideExtractFileExt(FileName)
  else FileName:=TempFileName;

end
else exit;
 
end.


Code 2

Thanks to the Stefan's involvement there exists also a version of the script that uses dialog boxes to ask user for required data so no direct changes to the script are needed.

Author: krtek & Stefan. Date: 27 July 2009.

const

//SCRIPT CONTROLS:

SKIP_EXTENTION = true;     //true or false
CASE_SENSITIVE = False;    //Should searching with regex be case sensitive? Default: False
FULL_MATCH_CHECK = True;   //Should the script warn you if regex didn't match the full filename? Default: True;
        

DEFAULT_REGEX = '(.+) - (.+) - (.+)';  //exchanged with InputQuery
DEFAULT_CHANGE_CASE = '102';  

//Legend for CHANGE_CASE parameter:
//0. No changes
//1. Capitalize Every Word
//2. lowercase
//3. UPPERCASE
//4. iNVERT cASE
//5. First letter capital
//You may specify case for every capturing group (brackets) in regex as a string of appropriate digits.
//If the CHANGE_CASE string is shorten then number of capturing groups then the last digit is used till the end of regex.
//If the CHANGE_CASE string is longer, spare digits are ignored. 
//eg. '102' means that first matched brackets will be uppercased,
//second - won't be changed and third (and every brackets after it) - lowercased.


//END OF SCRIPT CONTROLS


BREAK_STRING = 'BREAK';
FOR_ALL_STRING = 'DO NOT ASK';
STANDARD_ANSWER = BREAK_STRING+' to exit, '+FOR_ALL_STRING+' to continue';
SCRIPT_NAME = 'krtek''s CaseChanger';


var
  Matches, SubPatterns : TWideStringArray;
  TempFilename, FileNameProcessedPart : WideString;
  start_pos, end_pos, i: Integer;
  Initialized, TimeToExit, NotAFullMatch, CheckIfFullMatch : Boolean;
  CaseFlags : array of Integer;
  CaseFlag : Integer;
  Answer, Regex, ChangeCase, Info  : WideString;
  


function BoolToStr(condition : boolean) : WideString;
begin
   If condition Then
        result := 'True'
     Else
        result := 'False';
end;


procedure procGetUserInput;
begin

    
    Info := Info + #10 + 'Note: check script source for this settings:' +#10
    Info := Info + 'SKIP_EXTENTION: '   + #9 + BoolToStr(SKIP_EXTENTION) +#10 
    Info := Info + 'CASE_SENSITIVE: '   + #9 + BoolToStr(CASE_SENSITIVE) +#10 
    Info := Info + 'FULL_MATCH_CHECK: ' + #9 + BoolToStr(FULL_MATCH_CHECK) +#10 
    Regex:=DEFAULT_REGEX;
    If not WideInputQuery(SCRIPT_NAME, 'Match this RegEx on file name:' +#10 +Info, Regex) then 
    begin
      TimeToExit := true;
      exit;
    end;
 
  
  Info := '0. No changes' +#10
  Info := Info + '1. Capitalize Every Word' +#10
    Info := Info + '2. lowercase' +#10
    Info := Info + '3. UPPERCASE' +#10
    Info := Info + '4. iNVERT cASE' +#10
    Info := Info + '5. First letter capital' +#10 +#10
    Info := Info + 'F.ex.:' +#9 + 'use case type 1 for first match ( ),' +#10 +#9 
    Info := Info + '0 for second and 3 for third' +#10 +#9 + '=> 103' +#10 +#10
    ChangeCase := DEFAULT_CHANGE_CASE;
  
  If not WideInputQuery(SCRIPT_NAME, 'Choose case for every single match group ( )'+#10+
    'of your RegEx:' +#10 + Regex +#10 +#10 + Info, ChangeCase ) then 
  begin
    TimeToExit := true;
    exit;
  end;

end;

  

function SetCaseFlags(s : WideString) : array of Integer;
var
i : Integer;
LoopEnd : Integer;
CaseIDs : array of Integer;

begin

  SetLength(CaseIDs,Length(s));
 
  LoopEnd:=Length(s)-1;
  for i:=0 to LoopEnd do
    begin
      CaseIDs[i]:= StrToInt(WideCopy(s,1,1));
      s:=WideCopy(s,2,Length(s)-1);
    end;

  result:= CaseIDs;
end;


procedure Initialize;

begin
  Answer:=STANDARD_ANSWER;
  CheckIfFullMatch:=FULL_MATCH_CHECK;
  FilePath := 'not used';   //just to shut up the compiler
  procGetUserInput;
  CaseFlags:=SetCaseFlags(ChangeCase);
  Initialized:=true;
end;


begin
  
if not TimeToExit then
begin

  if not Initialized then Initialize;
  
  TempFilename:='';
  end_pos:=0;
  start_pos:=1;
  SetLength(SubPatterns,0);
  SetLength(Matches,0);
  NotAFullMatch:=false;
  
  if SKIP_EXTENTION then
    FileNameProcessedPart:=WideStripExtension(FileName)
  else 
    FileNameProcessedPart:=FileName;

  Matches:=MatchesRegEx(FileNameProcessedPart, Regex, CASE_SENSITIVE);
  if Length(Matches) <= 0 then exit;
  if Matches[0] <> FileNameProcessedPart then NotAFullMatch:=true;
  SubPatterns:=SubMatchesRegEx(Matches[0],Regex,CASE_SENSITIVE);
  if Length(SubPatterns) <=0 then exit;
  
  for i:=0 to Length(SubPatterns)-1 do
    if SubPatterns[i]<>'' then
    begin
      end_pos:=WidePos(SubPatterns[i], Matches[0])-1;
      TempFileName:=TempFileName+WideCopy(Matches[0], start_pos, end_pos-start_pos+1);
      start_pos:=end_pos+Length(SubPatterns[i])+1;
      
      if i < length(CaseFlags)  then
        CaseFlag:=CaseFlags[i]
      else 
        CaseFlag:=CaseFlags[Length(CaseFlags) -1];
        
      case CaseFlag of
        0 : TempFilename:=TempFileName+SubPatterns[i];
        1 : TempFilename:=TempFileName+WideCaseCapitalize(SubPatterns[i]);   
        2 : TempFilename:=TempFileName+WideLowerCase(SubPatterns[i]);
        3 : TempFilename:=TempFileName+WideUpperCase(SubPatterns[i]);
        4 : TempFilename:=TempFileName+WideCaseInvert(SubPatterns[i]);
        5 : TempFilename:=TempFileName+WideUpperCase(SubPatterns[i][1])+
              WideLowerCase(WideCopy(SubPatterns[i], 2, Length(SubPatterns[i])-1));
          
        else
          begin  
            WideShowMessage('The value of ChangeCase parameter is invalid.' +#10+
              'ChangeCase string cannot contain '+inttostr(CaseFlag)+ '.'+#10+
              'Check legend for info.' +#10 +#10 +'Script will be terminated.');
            TimeToExit:=True;
            break;
          end;
     end;

   end;
  
  
  if start_pos < Length(FileNameProcessedPart) then
    TempFilename:=TempFileName+WideCopy(FileNameProcessedPart,
      start_pos, Length(FileNameProcessedPart)-start_pos+1);
 

  if NotAFullMatch then
    if CheckIfFullMatch then    
       begin
         if not WideInputQuery('RegEx didn''t match the full filename.',
           'Old filename:'+#10+FileName+#10+#10+'Proposed new filename: '+#10+
           TempFileName+WideExtractFileExt(FileName)+#10+#10+'What should we do?'#10+#10+
           'Pressing OK button = Rename that file'+#10+'Pressing Cancek button = Skip that file'+#10+
           'Type '''+BREAK_STRING+''' in the text field to exit the script or '''+FOR_ALL_STRING+
           ''' if you want to continue with all the files.'+#10, Answer) then Exit
         else if WideSameText(WideLowerCase(Answer),BREAK_STRING) then 
           begin
             TimeToExit:=True;
             exit;
           end
         else if WideSameText(WideLowerCase(Answer),FOR_ALL_STRING) then 
           begin
             CheckIfFullMatch:=False;
           end
         else
           Answer:=STANDARD_ANSWER;
       end;
   
  if SKIP_EXTENTION then   
    FileName:=TempFileName+WideExtractFileExt(FileName)
  else FileName:=TempFileName;

end
else exit;
 
end.