anchor.diff:  type
     TToken = (tkNone, tkPercent, tkLess, tkGreater, tkEqual, tkLessOrEqual,
       tkGreaterOrEqual, tkOpeningParenthesis, tkClosingParenthesis,
  -    tkOpeningBracket, tkClosingBracket,  tkText, tkNum, tkWhiteChar);
  +    tkOpeningBracket, tkClosingBracket,  tkText, tkNum, tkWhiteChar, tkComma);
   
     TUTF8Char = record
       Length: byte;
       Char: array [0..3] of AnsiChar;
     end;
   
  -  procedure GetChar(APos: PAnsiChar; out AChar: TUTF8Char; ANewPos: PPAnsiChar);
  +  procedure GetChar(APos: PAnsiChar; out AChar: TUTF8Char);
     begin
       AChar.Length := UTF8CharacterLength(APos);
   
  
positive.code:   TSetKind = (skUnknown, skNumericBetweenInclusive, skNumericBetweenExclusive);
  
    TExpressionRecord = record
    case Kind: TExpressionKind of
      ekUnknown: ();
      ekText: (TextMatchKind: TTextMatchKind);
  
negative.code:         ')': LToken := tkClosingParenthesis;
          '[': LToken := tkOpeningBracket;
          ']': LToken := tkClosingBracket;
          ',': LToken := tkComma;
        else
          LValue^ := LValue^ + LChar.Char[0];
          LToken:=tkText;
  