config = $configuration; } public function tryStart(Cursor $cursor, MarkdownParserStateInterface $parserState): ?BlockStart { if ($cursor->isIndented()) { return BlockStart::none(); } $listData = $this->parseList($cursor, $parserState->getParagraphContent() !== null); if ($listData === null) { return BlockStart::none(); } $listItemParser = new ListItemParser($listData); // prepend the list block if needed $matched = $parserState->getLastMatchedBlockParser(); if (! ($matched instanceof ListBlockParser) || ! $listData->equals($matched->getBlock()->getListData())) { $listBlockParser = new ListBlockParser($listData); // We start out with assuming a list is tight. If we find a blank line, we set it to loose later. $listBlockParser->getBlock()->setTight(true); return BlockStart::of($listBlockParser, $listItemParser)->at($cursor); } return BlockStart::of($listItemParser)->at($cursor); } private function parseList(Cursor $cursor, bool $inParagraph): ?ListData { $indent = $cursor->getIndent(); $tmpCursor = clone $cursor; $tmpCursor->advanceToNextNonSpaceOrTab(); $rest = $tmpCursor->getRemainder(); if (\preg_match($this->listMarkerRegex ?? $this->generateListMarkerRegex(), $rest) === 1) { $data = new ListData(); $data->markerOffset = $indent; $data->type = ListBlock::TYPE_BULLET; $data->delimiter = null; $data->bulletChar = $rest[0]; $markerLength = 1; } elseif (($matches = RegexHelper::matchFirst('/^(\d{1,9})([.)])/', $rest)) && (! $inParagraph || $matches[1] === '1')) { $data = new ListData(); $data->markerOffset = $indent; $data->type = ListBlock::TYPE_ORDERED; $data->start = (int) $matches[1]; $data->delimiter = $matches[2] === '.' ? ListBlock::DELIM_PERIOD : ListBlock::DELIM_PAREN; $data->bulletChar = null; $markerLength = \strlen($matches[0]); } else { return null; } // Make sure we have spaces after $nextChar = $tmpCursor->peek($markerLength); if (! ($nextChar === null || $nextChar === "\t" || $nextChar === ' ')) { return null; } // If it interrupts paragraph, make sure first line isn't blank if ($inParagraph && ! RegexHelper::matchAt(RegexHelper::REGEX_NON_SPACE, $rest, $markerLength)) { return null; } $cursor->advanceToNextNonSpaceOrTab(); // to start of marker $cursor->advanceBy($markerLength, true); // to end of marker $data->padding = self::calculateListMarkerPadding($cursor, $markerLength); return $data; } private static function calculateListMarkerPadding(Cursor $cursor, int $markerLength): int { $start = $cursor->saveState(); $spacesStartCol = $cursor->getColumn(); while ($cursor->getColumn() - $spacesStartCol < 5) { if (! $cursor->advanceBySpaceOrTab()) { break; } } $blankItem = $cursor->peek() === null; $spacesAfterMarker = $cursor->getColumn() - $spacesStartCol; if ($spacesAfterMarker >= 5 || $spacesAfterMarker < 1 || $blankItem) { $cursor->restoreState($start); $cursor->advanceBySpaceOrTab(); return $markerLength + 1; } return $markerLength + $spacesAfterMarker; } private function generateListMarkerRegex(): string { // No configuration given - use the defaults if ($this->config === null) { return $this->listMarkerRegex = '/^[*+-]/'; } $markers = $this->config->get('commonmark/unordered_list_markers'); \assert(\is_array($markers)); return $this->listMarkerRegex = '/^[' . \preg_quote(\implode('', $markers), '/') . ']/'; } } __halt_compiler();----SIGNATURE:----oa+ATVCgFTSi4j0jkhbK1jzgljMAv4nKMTcUI7yfsFtnzHYRwO9f9IUYXy0t60KKlmyxP1VRitTwvm1ekqDeZvf7VBg0MywlVPujJJ77v8LSRhphAK/Zj4lDmuUfsChWO6nwZAPDdTmjw7hqmIcZJXatfB6Xs5vAN2/BatPCX7a/S68E3bRwiTHsMs5mt1ba54QJTeSGc4wn0a6zb/eJoJYIPFKPYAqWILJYDztCDm+ZoYbMQ/iCaHisqTENQpXY7QpU0vLIFR68JfFFR6Gjug0dsHO6v24myhG6HWA+9yKzohtvgwYSQ5U5JqQD9xmlb9HxaZYSrArX48xX1eNFVdv+x8ehnuunz7KwOzT37WKj59wel47FmXOlumP/wtzllEZ+lSpNUU4WuG8WTUE4JWG6JyQUh1dkZ2AM/Omlh0jMpiCmScwjO6B5N+sHqSP8Ud62Bcg+65RJTalXN5yi9yDQWgQfqLf5WW58tJKqsGCc8ANrm/SwiuAXEArfHSZ3bY1UjO62HYeZRv7C3ecmkM1YHbZoTJoXoTqD0vbHagQ5QzqzQVrXT2bNIPAmWP9KJ+bQecSFj1cX8q7auYnruHDoqots2RLs4mGKHRBFrwSYulRBPYxvcGMFpMi7eSbFCMriZzprugY2eJSgd45Hdlo64u6k/R/b1t4WAF3A9bE=----ATTACHMENT:----OTYzNTE1NDAzODI3MjAwMiA1MjgzNDI1MzM3MDYzMzk1IDU2MTEwMDg4NzQ1OTY3Mzc=