anchor.diff:    static final Parser whitespace = (spaceChar < skipSpaces) ^ (_) => [new Space()];
   
     // TODO better escaped chars support
  -  Parser get escapedChar => (char('\\') > oneOf("!\"#\$%&'()*+,-./:;<=>?@[\\]^_`{|}~")) ^ (char) => [new Str(char)];
  +  Parser escapedChar1 = (char('\\') > oneOf("!\"#\$%&'()*+,-./:;<=>?@[\\]^_`{|}~"));
  +  Parser get escapedChar => escapedChar1 ^ (char) => [new Str(char)];
   
     //
     // html entities
  
positive.code: 
    // TODO support for html and autolinks
  
    Parser get linkInline => (char('(') >
      ((
          ((whitespace.maybe > linkDestination) < whitespace.maybe) +
          ((whitespace > linkTitle) < whitespace.maybe).maybe
      ) ^ (a, Option b) => new Target(a, b.asNullable))
    ) < char(')');
  
    Parser<List<Inline>> get link => new Parser((String s, Position pos) {
  
negative.code:       (String label) => label.substring(0, label.length - 1);
  
    // TODO proper parentheses ()
    Parser get linkDestination => (
        ((char("<") > noneOf("<>\n").many1) < char(">")) |
        (noneOf("\\\n ") | escapedChar1 | char('\\')).many1
    ) ^ (i) => i.join();
  
    // TODO support escaping
    Parser get linkTitle => (
        ((char("'") > (noneOf("'\\\n") | escapedChar1 | char('\\')).many) < char("'")) |
        ((char('"') > (noneOf('"\\\n') | escapedChar1 | char('\\')).many) < char('"')) |
        ((char('(') > (noneOf(')\\\n') | escapedChar1 | char('\\')).many) < char(')'))
    ) ^ (i) => i.join();
  
  
  