/** * @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); }