begin
//match individual char exclusion.
if (asource[0] = apattern[0]) then
begin
//given char failed set element exclusion.
result := false;
break;
end else
inc(apattern);
end;
end;
end else
begin
//match for inclusion of given set...
inc(apattern);
result := false;
while (apattern[0] <> ']') do
begin
if (apattern[1] = '-') then
begin
//match char inclusion range.
if (asource[0] >= apattern[0]) and (asource[0] <= apattern[2]) then
begin
//given char matched set range inclusion.
// continue testing...
result := true;
break;
end else
inc(apattern, 3);
end else
begin
//match individual char inclusion.
if (asource[0] = apattern[0]) then
begin
//given char matched set element inclusion.
// continue testing...
result := true;
break;
end else
inc(apattern);
end;
end;
end;
if (result) then
begin
//match was found. continue further.
inc(asource);
//position pattern to char after "]"
while (apattern[0] <> ']') and (apattern[0] <> #0) do inc(apattern);
if (apattern[0] = #0) then
begin
//invalid pattern - missing "]"
result := false;
exit;
end else
inc(apattern);
end else
exit;