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:             blocks = [];
            }
  
            nextLevel = false;
            while (getIndent() > 0) {
              ParseResult indentRes = string(" " * getIndent()).run(s, position);
              if (indentRes.isSuccess) {
                position = indentRes.position;
  
negative.code:         break;
        }
  
        // If we at the line start and there's only spaces left than applying new line rules
        if (position.character == 1) {
          ParseResult blanklineRes = blankline.run(s, position);
          if (blanklineRes.isSuccess) {
            if (afterEmptyLine) {
              // It's second new line. Closing all lists.
              break;
            }
            afterEmptyLine = true;
            position = blanklineRes.position;
            continue;
          }
        }
  
        // Parsing from line start
        if (position.character == 1 && getSubIndent() > 0) {
          // Waiting for indent
          ParseResult indentRes = string(" " * getSubIndent()).run(s, position);
  