anchor.diff:  
           // Flush buffer
           if (stack.length > 0 && (buffer.length > 0 || blocks.length > 0)) {
  -          if (closeParagraph) {
  +          if (afterEmptyLine) {
               setTight(false);
  -            closeParagraph = false;
  +            afterEmptyLine = false;
             }
             buildBuffer();
             addToListItem(stack.last.block.items.last, blocks);
             blocks = [];
           }
   
  +        // Ok, it's a new list on new level.
           ListBlock newListBlock;
           int subIndent = markerRes.value[0][1] + 1;
           if (type == _LIST_TYPE_ORDERED) {
  
positive.code: 
  
    //
    // Blockquote
    //
  
    static Parser blockquoteStrictLine = ((skipNonindentSpaces > char('>')) > char(' ').maybe) > anyLine;
    static Parser blockquoteLazyLine = skipNonindentSpaces > anyLine;
    static Parser blockquoteLine = (blockquoteStrictLine ^ (l) => [true, l])
      | (blockquoteLazyLine ^ (l) => [false, l]);
  
  
    bool acceptLazy(Iterable<Block> blocks, String s) {
      if (blocks.length > 0) {
        if (blocks.last is Para) {
          var last = blocks.last;
  
negative.code:   ]);
  
  
    Parser<List<Block>> get listTightBlock => choice([
        hrule,
        codeBlockIndented,
        codeBlockFenced,
  