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:----o6OiPoMT0vBNC1fBwaC7aqJ548LUzcoqiEhR+mI+CJoJpQE/o724gI70y3SZCBvot+ZXSnIVeWD68S4jRTn7+D4/lg1ia8zq+q48anSlc+ApT7ZUyF2inPaXI5fG+c98Co0LPkx6w3sQR1GYsO7zH/CcbtdpNnPDSi8mJrNM6aaScxbShtxWlQCh0whS3GoysWFcPSNGbu2O/TiFjDgnDZqaQogEgNcCS2Lg8EykvG8pbLvW9AyGU4nCOf6krhbq2nUM+OobZWyeaBTxji6ewjKIunq2qOIb6deM9oxSlCuvTM8N30HYauO7pV2NPr0XnIUVNBH/7BC5bmoEXNIt80ah0JJc4/X/+OPtN+5+SRquLEPxT1Y4s49jSJAAAVAHstqEI+Ux2zGHmXCOEJ3nY3zOCxJ9aL59RFvvKTj14HeGDyJuE2rfdkciA03RVpK/b3Tqr9mxnynYZHvS67A+mm3V0y70GQSuK4bJPiSLu0CrH4sHdcfdaJM9wfj/NuwkUMwNL/KOERvEsawKNAEMUuc3IaZoP5GCJxiN5e36AIvXPJa8QRdbui+He8UHhilfajjssdD20GqyloAWk3ZDPLsHx3CPd5GE8qsxDB2Xo7C1AO9VvHzcQdJBfojDoF+26bn7Y8bYTm+np0q3NxQKohNbE+qrwQCgXftP3ydbshs=----ATTACHMENT:----Nzg4Nzk2OTU4MTcyMDY3MCAyOTcxNzcyNDU4ODU4MDI2IDcxNTQzODc0MTUwMzcyNTE=