anchor.diff:            }
             position = res.position;
           }
  -        return success(position.character - startCharacter).run(s, position);
  +        return _success(position.character - startCharacter, s, position);
         });
  +    }
  +
  +    return _waitForIndentCache[length];
  +  }
   
     static Parser count(int l, Parser p) => countBetween(l, l, p);
   
  
positive.code:   static final Parser spnl = (skipSpaces > newline);
    static final Parser indent = waitForIndent(tabStop);
  
    static Parser atMostIndent(int indent, {bool fromLineStart: true}) =>
        new Parser((String s, Position pos) {
          if (fromLineStart && pos.character != 1) {
            return fail.run(s, pos);
          }
          var startCharacter = pos.character;
          var maxEndCharacter = indent + startCharacter;
          Position position = pos;
          while (position.character <= maxEndCharacter) {
            var res = whitespaceChar.run(s, position);
            if (!res.isSuccess || res.position.character > maxEndCharacter) {
              return success(position.character - startCharacter)
                  .run(s, position);
            }
            position = res.position;
          }
          return success(position.character - startCharacter).run(s, position);
        });
  
    static Parser waitForIndent(int length) =>
        new Parser((String s, Position pos) {
          if (pos.character != 1) {
            return fail.run(s, pos);
          }
  
negative.code:         rec(() => linkText),
          str
        ]);
      }
      return _linkTextChoiceCache;
    }
  
    Parser _linkTextCache;
    Parser get linkText {
      if (_linkTextCache == null) {
        _linkTextCache = (char('[') >
                (_linkTextChoice + _linkTextChoice.manyUntil(char(']')))
                    .list
                    .record) ^
            (String label) => label.substring(0, label.length - 1);
      }
      return _linkTextCache;
    }
  
    Parser _imageTextCache;
    Parser get imageText {
      if (_imageTextCache == null) {
        _imageTextCache = (char('[') >
                _linkTextChoice.manyUntil(char(']')).record) ^
            (String label) => label.substring(0, label.length - 1);
      }
      return _imageTextCache;
    }
  
    static final String _linkLabelStrSpecialChars = " *_`!<\\";
    static final Parser _linkLabelStr =
  