anchor.diff:  final _queryDefinition = QueryParserDefinition();
   final _parser = _queryDefinition.build();
   
  -Filter parseQuery(String input ) {
  +Filter parseQuery(String input) {
     var result = _parser.parse(input);
     if (result.isSuccess) {
       return result.value;
  
positive.code:       return input.token().trim();
      } else if (input is String) {
        return token(input.length == 1 ? char(input) : string(input));
      } else if (input is  _ParserFunc) {
        return token(ref0(input));
      }
      throw ArgumentError.value(input, 'invalid token parser');
  
negative.code:   //  any        = '*' *(value '*')
    Parser _any() => STAR() & (ref0(value) & STAR()).star();
  
    //  attr       = AttributeDescription from Section 4.1.5 of [1]
    Parser attr() => pattern('a-zA-Z0-9\-.').plus();
  
    // todo:
    //  matchingrule = MatchingRuleId from Section 4.1.9 of [1]
  
    //  value      = AttributeValue from Section 4.1.6 of [1]
    // todo: This needs to allow the escape sequence, unicode characters, etc
    // See https://tools.ietf.org/html/rfc4512
    // Note: The petit pattern uses ^ to invert the match.
    // Works - but is not complete / correct.
    Parser value() => pattern('a-zA-Z0-9-._\\').plus();
  }
  