Hi Bart,

I did something similar yesterday:

TMask.InitMaskString(const AValue: String; const CaseSensitive: Boolean; *const UseSets: Boolean = True*); TMask.Create(const AValue: String; const CaseSensitive: Boolean = False; *const UseSets: Boolean = True*); TMaskList.Create(const AValue: String; ASeparator: Char = ';'; const CaseSensitive: Boolean = False; *const UseSets: Boolean = True*);

function MatchesMask(const FileName, Mask: String; const CaseSensitive: Boolean = False; *const UseSets: Boolean = True*): Boolean; function MatchesWindowsMask(const FileName, Mask: String; const CaseSensitive: Boolean = False; *const UseSets: Boolean = False*): Boolean; function MatchesMaskList(const FileName, Mask: String; Separator: Char = ';'; const CaseSensitive: Boolean = False; *const UseSets: Boolean = True*): Boolean; function MatchesWindowsMaskList(const FileName, Mask: String; Separator: Char = ';'; const CaseSensitive: Boolean = False; *const UseSets: Boolean = /False/*): Boolean;

The only code change is in TMask.InitMaskString
-      '[': AddCharSet;
+      '[': if fUseSets then
+             AddCharSet
+           else
+             AddChar;

This works fine.

Easy to implement it as Options.

Regards,

Rolf

Am 19.03.2020 um 18:37 schrieb Bart via lazarus:
On Thu, Mar 19, 2020 at 8:25 AM Rolf Wetjen via lazarus
<lazarus@lists.lazarus-ide.org> wrote:

seems that this isn't your favourite option.
Without any context, I cannot comment on this.

Ok, what's about an additional TMask property to control the useage of
sets (default should be true for Delphi compatibility) and additional
options for the MatchesMask and MatchesWindowsMask functions?
It's on my ToDo list (as long as other devels don't object to this.
I intend to have an Options property for that, with for now
moCaseSensitive and moDisableSets.
There will be an overloaded constructor TMask,Create((const AValue:
String; ASeparator: Char = ';'; const Options: TMaskOptions = []);
(By default CaseSensitive and DisableSets must be off for backwards
compatibility)

It will only be for trunk and the next stable major release (so it
won't go into fixes branch) anyhow.




--
Diese E-Mail wurde von Avast Antivirus-Software auf Viren geprüft.
https://www.avast.com/antivirus
Index: components/lazutils/masks.pas
===================================================================
--- components/lazutils/masks.pas       (revision 62701)
+++ components/lazutils/masks.pas       (working copy)
@@ -42,11 +42,12 @@
   private
     FMask: TMaskString;
     fCaseSensitive: Boolean;
+    fUseSets: Boolean;
     fInitialMask: String;
-    procedure InitMaskString(const AValue: String; const CaseSensitive: 
Boolean);
+    procedure InitMaskString(const AValue: String; const CaseSensitive: 
Boolean; const UseSets: Boolean = True);
     procedure ClearMaskString;
   public
-    constructor Create(const AValue: String; const CaseSensitive: Boolean = 
False);
+    constructor Create(const AValue: String; const CaseSensitive: Boolean = 
False; const UseSets: Boolean = True);
     destructor Destroy; override;
 
     function Matches(const AFileName: String): Boolean;
@@ -68,7 +69,7 @@
     function GetCount: Integer;
     function GetItem(Index: Integer): TMask;
   public
-    constructor Create(const AValue: String; ASeparator: Char = ';'; const 
CaseSensitive: Boolean = False);
+    constructor Create(const AValue: String; ASeparator: Char = ';'; const 
CaseSensitive: Boolean = False; const UseSets: Boolean = True);
     destructor Destroy; override;
 
     function Matches(const AFileName: String): Boolean;
@@ -78,10 +79,10 @@
     property Items[Index: Integer]: TMask read GetItem;
   end;
 
-function MatchesMask(const FileName, Mask: String; const CaseSensitive: 
Boolean = False): Boolean;
-function MatchesWindowsMask(const FileName, Mask: String; const CaseSensitive: 
Boolean = False): Boolean;
-function MatchesMaskList(const FileName, Mask: String; Separator: Char = ';'; 
const CaseSensitive: Boolean = False): Boolean;
-function MatchesWindowsMaskList(const FileName, Mask: String; Separator: Char 
= ';'; const CaseSensitive: Boolean = False): Boolean;
+function MatchesMask(const FileName, Mask: String; const CaseSensitive: 
Boolean = False; const UseSets: Boolean = True): Boolean;
+function MatchesWindowsMask(const FileName, Mask: String; const CaseSensitive: 
Boolean = False; const UseSets: Boolean = False): Boolean;
+function MatchesMaskList(const FileName, Mask: String; Separator: Char = ';'; 
const CaseSensitive: Boolean = False; const UseSets: Boolean = True): Boolean;
+function MatchesWindowsMaskList(const FileName, Mask: String; Separator: Char 
= ';'; const CaseSensitive: Boolean = False; const UseSets: Boolean = False): 
Boolean;
 
 implementation
 
@@ -105,11 +106,11 @@
 end;
 
 
-function MatchesMask(const FileName, Mask: String; const CaseSensitive: 
Boolean): Boolean;
+function MatchesMask(const FileName, Mask: String; const CaseSensitive: 
Boolean; const UseSets: Boolean = True): Boolean;
 var
   AMask: TMask;
 begin
-  AMask := TMask.Create(Mask, CaseSensitive);
+  AMask := TMask.Create(Mask, CaseSensitive, UseSets);
   try
     Result := AMask.Matches(FileName);
   finally
@@ -117,11 +118,11 @@
   end;
 end;
 
-function MatchesWindowsMask(const FileName, Mask: String; const CaseSensitive: 
Boolean): Boolean;
+function MatchesWindowsMask(const FileName, Mask: String; const CaseSensitive: 
Boolean; const UseSets: Boolean = False): Boolean;
 var
   AMask: TMask;
 begin
-  AMask := TMask.Create(Mask, CaseSensitive);
+  AMask := TMask.Create(Mask, CaseSensitive, UseSets);
   try
     Result := AMask.MatchesWindowsMask(FileName);
   finally
@@ -129,11 +130,11 @@
   end;
 end;
 
-function MatchesMaskList(const FileName, Mask: String; Separator: Char; const 
CaseSensitive: Boolean): Boolean;
+function MatchesMaskList(const FileName, Mask: String; Separator: Char; const 
CaseSensitive: Boolean; const UseSets: Boolean = True): Boolean;
 var
   AMaskList: TMaskList;
 begin
-  AMaskList := TMaskList.Create(Mask, Separator, CaseSensitive);
+  AMaskList := TMaskList.Create(Mask, Separator, CaseSensitive, UseSets);
   try
     Result := AMaskList.Matches(FileName);
   finally
@@ -141,11 +142,11 @@
   end;
 end;
 
-function MatchesWindowsMaskList(const FileName, Mask: String; Separator: Char; 
const CaseSensitive: Boolean): Boolean;
+function MatchesWindowsMaskList(const FileName, Mask: String; Separator: Char; 
const CaseSensitive: Boolean; const UseSets: Boolean = False): Boolean;
 var
   AMaskList: TMaskList;
 begin
-  AMaskList := TMaskList.Create(Mask, Separator, CaseSensitive);
+  AMaskList := TMaskList.Create(Mask, Separator, CaseSensitive, UseSets);
   try
     Result := AMaskList.MatchesWindowsMask(FileName);
   finally
@@ -155,7 +156,7 @@
 
 { TMask }
 
-procedure TMask.InitMaskString(const AValue: String; const CaseSensitive: 
Boolean);
+procedure TMask.InitMaskString(const AValue: String; const CaseSensitive: 
Boolean; const UseSets: Boolean = True);
 var
   I: Integer;
   SkipAnyText: Boolean;
@@ -293,6 +294,7 @@
 
 begin
   fCaseSensitive:=CaseSensitive;
+  fUseSets:=UseSets;
   SetLength(FMask.Chars, 0);
   FMask.MinLength := 0;
   FMask.MaxLength := 0;
@@ -304,7 +306,10 @@
     case GetCodePoint(AValue,I) of
       '*': AddAnyText;
       '?': AddAnyChar;
-      '[': AddCharSet;
+      '[': if fUseSets then
+             AddCharSet
+           else
+             AddChar;
       else AddChar;
     end;
   end;
@@ -319,12 +324,13 @@
       Dispose(FMask.Chars[I].SetValue);
 end;
 
-constructor TMask.Create(const AValue: String; const CaseSensitive: Boolean);
+constructor TMask.Create(const AValue: String; const CaseSensitive: Boolean; 
const UseSets: Boolean = True);
 
 begin
   fInitialMask := AValue;
   fCaseSensitive := CaseSensitive;
-  InitMaskString(AValue, CaseSensitive);
+  fUseSets:=UseSets;
+  InitMaskString(AValue, CaseSensitive, UseSets);
 end;
 
 destructor TMask.Destroy;
@@ -508,7 +514,7 @@
   Result := FMasks.Count;
 end;
 
-constructor TMaskList.Create(const AValue: String; ASeparator: Char; const 
CaseSensitive: Boolean);
+constructor TMaskList.Create(const AValue: String; ASeparator: Char; const 
CaseSensitive: Boolean; const UseSets: Boolean = True);
 var
   S: TParseStringList;
   I: Integer;
@@ -518,7 +524,7 @@
   S := TParseStringList.Create(AValue, ASeparator);
   try
     for I := 0 to S.Count - 1 do
-      FMasks.Add(TMask.Create(S[I], CaseSensitive));
+      FMasks.Add(TMask.Create(S[I], CaseSensitive, UseSets));
   finally
     S.Free;
   end;
-- 
_______________________________________________
lazarus mailing list
lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus

Reply via email to