/** * @param Cursor $cursor * @param int $markerLength * * @return int */ private function calculateListMarkerPadding(Cursor $cursor, $markerLength) { $start = $cursor->saveState(); $spacesStartCol = $cursor->getColumn(); $spacesStartOffset = $cursor->getPosition(); do { $cursor->advanceBy(1, true); $nextChar = $cursor->getCharacter(); } while ($cursor->getColumn() - $spacesStartCol < 5 && ($nextChar === ' ' || $nextChar === "\t")); $blankItem = $cursor->peek() === null; $spacesAfterMarker = $cursor->getColumn() - $spacesStartCol; if ($spacesAfterMarker >= 5 || $spacesAfterMarker < 1 || $blankItem) { $cursor->restoreState($start); if ($cursor->peek() === ' ') { $cursor->advanceBy(1, true); } return $markerLength + 1; } else { return $markerLength + $spacesAfterMarker; } }
/** * @param Cursor $cursor * @param ReferenceMap $referenceMap * @param Delimiter $opener * @param int $startPos * * @return Reference|null */ protected function tryParseReference(Cursor $cursor, ReferenceMap $referenceMap, Delimiter $opener, $startPos) { $savePos = $cursor->saveState(); $cursor->advanceToFirstNonSpace(); $beforeLabel = $cursor->getPosition(); $n = LinkParserHelper::parseLinkLabel($cursor); if ($n === 0 || $n === 2) { // Empty or missing second label $reflabel = mb_substr($cursor->getLine(), $opener->getIndex(), $startPos - $opener->getIndex(), 'utf-8'); } else { $reflabel = mb_substr($cursor->getLine(), $beforeLabel + 1, $n - 2, 'utf-8'); } if ($n === 0) { // If shortcut reference link, rewind before spaces we skipped $cursor->restoreState($savePos); } return $referenceMap->getReference($reflabel); }