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