Difference between revisions of "Masks"

From Lazarus wiki
Jump to navigationJump to search
(Start describing the new Masks unit)
Line 13: Line 13:
{| class="wikitable"
{| class="wikitable"
|mocAnyChar||Treat ? as a wildcard to match exactly one char
|mocAnyChar||Treat ? as a wildcard to match exactly one char

Revision as of 19:35, 25 October 2021

This page describes the Masks unit as per Lazarus version 2.5



The masks unit provides methods for pattern matching using wildcards, sets/ranges and/or literal characters.

Controlling how the mask is interpreted


TMaskOpcodes is defined as set of TMaskOpcode.
The TMaskOpcode enumeration type consist of:

Name Interpretation
mocAnyChar Treat ? as a wildcard to match exactly one char
mocAnyCharOrNone Treat [?] to match any char or the absence of a char
mocAnyText Treat * as a wildcard to mach zero or any mumber of chars
mocRange treat [a-c] to match either 'a', 'b' or 'c'. '-' is treated as a range indicator.

To have a literal '-' in a range, it must be the first character in the range: [-a-c] matches '-', 'a', 'b', or 'c'.

mocSet Treat [a-c] to match either 'a', '-' or 'c'
mocNegateGroup Treat [!a-c] to not match 'a', 'b', or 'c', but match any other char. Requires mocRange and/or mocSet
mocEscapeChar Treat EscapeChar (defaults to '\') to take the next char as a literal, so '\*' is treated as a literal '*'.

Specific Windows Quirks

Windows mask works in a different mode than regular masks, it has many quirks and corner cases inherited from CP/M, then adapted to DOS (8.3) file names and adapted again for long file names.

TWindowsQuirks is defined as set of TWindowsQuirks. The TWindowsQuirk enumeration type consists of:

Name Example mask Interpretation
wqAnyExtension Anything*.* The filename is not required to have an extension
wqFilenameEnd Anything??.abc The '?' matches 1 or 0 chars (except '.')
wqExtension3More Anything.abc Matches Anything.abc but also Anything.abc* (so '*.pas' also matches with 'file.pas.bak')
wqEmptyIsAny Empty string matches anything, so acts like '*'
wqAllByExtension .abc Is treated as *.abc
wqNoExtension Anything*. Matches Anything* without extension