[Lazarus] TMask revisited

José Mejuto joshyfun at gmail.com
Wed Oct 27 13:27:50 CEST 2021

El 26/10/2021 a las 18:48, Bart via lazarus escribió:
> On Tue, Oct 26, 2021 at 1:38 PM José Mejuto via lazarus
> <lazarus at lists.lazarus-ide.org> wrote:
>> You found a bug,

> 3. '-' if it is NOT the first char (or the first after the negating
> !), it is then the indicator for a range


This is a side effect of the found bug, in ranges the only valid syntax 
(without sets enabled) is "char-char".

> So, even '*' is taken as a literal.

Escaping must work the same way (if possible) in all the mask, changing 
behaviour is not desirable as creates confusion. Sometimes when I write 
a mask in RegEx I escape some chars even when they are not needed to be 
escaped because it adds some clarity to the expression, cos if it is 
escaped I know for sure its a literal and no need to check if it matches 
a previous "[" or "{" or "(".

> A '?' in a range is forbidden (EMaskError: Invalid character "?" in
> mask), except for the [?].

It must be escaped to have meaning.

> Given this, I would think that:
> 1. escaping inside a range is not necessary: everything in a range is
> literal except for the 3 cases outlined above.
> 2. having a '?' could also be accepted as long as it is not the first
> character in the range specification, even [!?] could be allowed: any
> char but not a '?'.
> Point 2 would need (probably a minor) change to the CompileRange method.

With the last changed commited in GitHub (fixing the bug) escape would 
be necessary:

Macth strings "[Hell]" and "[Hell["
Mask: "*[\]\[]"

"]" must be escaped in all cases, with ranges and with sets or it will 
be interpreted as a premature closing (ranges).


More information about the lazarus mailing list