anchor.diff:        (Iterable c) => c.reduce((v, e) => v + e);
   
     // Inline parsers
  -  final Parser whitespace = (spaceChar + skipSpaces ^ (_1, _2) => new Space()) % "whitespace";
  -  final Parser str = alphanum.many1 ^ (chars) => new Str(chars.join(""));
  -  final Parser endline = newline.notFollowedBy(blankline) ^ (_) => new Space();
  +  static final Parser whitespace = (spaceChar + skipSpaces ^ (_1, _2) => new Space()) % "whitespace";
  +  static final Parser str = alphanum.many1 ^ (chars) => new Str(chars.join(""));
  +  //final Parser endline = newline.notFollowedBy(blankline) ^ (_) => new Space();
  +  Parser get endline {
  +    Parser nf = blankline;
  +    if (_state == _STATE_LIST_ITEM || extensions.listsWithoutPrecedingBlankline) {
  +      nf |= listStart;
  +    }
  +    /*if (!extensions.blankBeforeBlockquote) {
  +      nf |= emailBlockQuoteStart;
  +    }*/
  +    if (!extensions.blankBeforeHeader) {
  +      nf |= char('#');
  +    }
  +    if (extensions.backtickCodeBlocks) {
  +      nf |= char('`').lookAhead > codeBlockFenced;
  +    }
  +    // notFollowedByHtmlCloser
  +    var result = extensions.hardLineBreaks ? new LineBreak() : (
  +      extensions.ignoreLineBreaks ? null : new Space()
  +    );
  +    return newline.notFollowedBy(nf) > ((eof > success(null)) | success(result));
  +  }
  +
     final Parser symbol = noneOf("<\\\n\t ") ^ (ch) => new Str(ch);
   
     Parser inlinesBetween(Parser start, Parser end) {
  
positive.code:   }
  
    Document parse(String s) => document.parse(s);
  
    // OptionsCheck
  
  
negative.code: 
      ParseResult<List<String>> continuationsRes = listContinuation.many.run(s, firstRes.position);
  
      int oldState = _state;
      _state = _STATE_LIST_ITEM;
  
      String raw = first + continuationsRes.value.join("");
  
      List<Block> blocks = block.many1.parse(raw);
  
      _state = oldState;
  
      return continuationsRes.copy(value: blocks.where((block) => block != null));
    });
  
    /*
  