<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">On Thu, Oct 21, 2021 at 11:30 AM José Mejuto via lazarus <<a href="mailto:lazarus@lists.lazarus-ide.org">lazarus@lists.lazarus-ide.org</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Now you need to match a string that starts with a number and the second <br>
char must be a letter, with a set it will be too large and unclear:<br>
<br>
"[0123456789][abcdefghijklmnopqrstuvwxyz]*"<br></blockquote><div><br></div><div>With all Unicode characters included it would be even larger.  :)</div><div>Your code supports full Unicode also in the mask itself which is impressive.</div><div><br></div><div>I would like to get opinions of the "Legacy" constructors and functions in the current code.</div><div>They use constant MaskOpCodesNoEscape which makes the mask behave more close to the earlier mask implementation.</div><div>For example :</div><div><div> constructor TMaskUTF8.CreateLegacy(const aMask: String; aCaseSensitive: Boolean);</div></div><div>and</div><div><div> function MatchesMaskLegacy(const FileName, Mask: String; CaseSensitive: Boolean): Boolean;</div></div><div><br></div><div>As the comment for MaskOpCodesNoEscape says:</div><div><div>  // Interpret [?] as literal question mark instead of 0..1 chars wildcard.</div><div>  // Disable backslash escaping characters like "\?".</div><div>  // Leave out eMaskOpcodeAnyCharOrNone and eMaskOpcodeEscapeChar</div></div><div><br></div><div>The constructors and functions without "Legacy" allow backslash escaping and treat [?] as a wildcard.</div><div>It can be seen as the default behavior because "Create" is the default constructor name by convention. It is also the default behavior in José's original code.</div><div>I allowed it because the new syntax is an improvement. It is intuitive and more expressive.</div><div>Now, should we emphasize backwards compatibility and use MaskOpCodesNoEscape by default?</div><div>The new improved syntax would then have constructors and functions with different names, "Extended" maybe.</div><div>How does Delphi do it? Should we be Delphi compatible here?</div><div>Interestingly there are no standards for Mask syntax. They have evolved and diverted freely. Thus we cannot follow standards.</div><div><br></div><div>Juha</div><div><br></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>