anchor.diff:  
       bool nextLevel = true;
   
  -
       // TODO Split loop to smaller parts
       while (true) {
  +      bool closeListItem = false;
         ParseResult eofRes = eof.run(s, position);
         if (eofRes.isSuccess) {
           // End of input reached
  
positive.code:           nextLevel = false;
            while (getIndent() > 0) {
              ParseResult indentRes = string(" " * getIndent()).run(s, position);
              convertToTight(getTight(), stack.last.block.items);
              stack.removeLast();
              if (indentRes.isSuccess) {
                position = indentRes.position;
                break;
              }
            }
          }
        }
  
negative.code:       } else if (stack.length == 0) {
          // That was first marker test and it's failed
          return markerRes;
        }
  
        if (closeListItem) {
          convertToTight(getTight(), stack.last.block.items);
          if (stack.length > 1) {
            stack.removeLast();
          } else {
            break;
          }
        }
  
        if (position.character > 1) {
  