public static function consume()

in src/unparsed-blocks/ListOfItems.php [42:109]


  public static function consume(
    Context $context,
    Lines $lines,
  ): ?(ListOfItems, Lines) {
    try {
      $context->pushContext(ListItem::MAX_INDENT_CONTEXT, 3);
      $first = self::consumeItem($context, $lines);
    } finally {
      $context->popContext(ListItem::MAX_INDENT_CONTEXT);
    }
    if ($first === null) {
      return null;
    }

    list($first, $lines) = $first;
    $nodes = vec[$first];
    $max_indent = $first->getIndentation() - 1;

    $loose = $first->makesListLoose();
    $d = $first->getDelimiter();

    if (
      $context->isInParagraphContinuation()
      && $first->isOrderedList()
      && $first->getNumber() !== 1
    ) {
      return null;
    }

    $pre_blank = null;

    while (!$lines->isEmpty()) {
      try {
        $context->pushContext(ListItem::MAX_INDENT_CONTEXT, $max_indent);
        $next = self::consumeItem($context, $lines);
      } finally {
        $context->popContext(ListItem::MAX_INDENT_CONTEXT);
      }

      if ($next === null) {
        list($line, $rest) = $lines->getFirstLineAndRest();
        if (Lines::isBlankLine($line)) {
          if ($pre_blank === null) {
            $pre_blank = tuple($loose, $nodes, $lines);
          }
          $loose = true;
          $lines = $rest;
          continue;
        }
        break;
      }
      list($next, $rest) = $next;
      if ($next->getDelimiter() !== $d) {
        break;
      }
      $max_indent = $next->getIndentation() - 1;
      $pre_blank = null;
      $nodes[] = $next;
      $loose = $loose || $next->makesListLoose();
      $lines = $rest;
    }

    if ($pre_blank !== null) {
      list($loose, $nodes, $lines) = $pre_blank;
    }

    return tuple(new self($loose, $nodes), $lines);
  }