anchor.diff:     * or (in compact lists) endline.
      * note: nested lists are parsed as continuations
      */
  -
     Parser get listContinuation => ((indentSpaces.lookAhead > listContinuationLine.many1) + blankline.many) ^
       (result, blanks) => (result..addAll(blanks)).join('');
   
  
positive.code:   }
  
    Document parse(String s) => document.parse(s);
  
    // OptionsCheck
  
  
negative.code:       (Iterable c) => c.reduce((v, e) => v + e);
  
    // Inline parsers
    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) {
  