/** * @param \ViKon\Parser\Token $token * @param \ViKon\Parser\TokenList $tokenList * * @return string * @throws \ViKon\Parser\LexerException */ public function renderReference(Token $token, TokenList $tokenList) { $reference = $token->get('reference'); $label = $token->get('label'); if ($reference instanceof Token) { $referenceToken = $reference; } else { if (empty($reference) === '') { $reference = strtolower($token->get('label')); } $tokens = $tokenList->getTokensByCallback(function (Token $token) use($reference) { return $token->getName() === ReferenceRule::NAME && $token->get('reference', null) === $reference; }); // Get first token (if not found return full match) if (($referenceToken = reset($tokens)) === false) { return $token->get('match', ''); } $referenceToken->set('used', true); } $url = $referenceToken->get('url'); $title = $referenceToken->get('title', ''); if (empty($title)) { return "<a href=\"{$url}\">{$label}</a>"; } return "<a href=\"{$url}\" title=\"{$title}\">{$label}</a>"; }
/** * Add token with data: * * match - whole matched content * * alt - alt content for image * * reference - reference name or object * * @param string $content * @param int $position * @param \ViKon\Parser\TokenList $tokenList */ protected function handleSingleState($content, $position, TokenList $tokenList) { preg_match('/!\\[((?:\\\\.|[^]\\\\])+)\\][\\t ]*\\[((?:\\\\.|[^]\\\\])*)\\]/', $content, $matches); $reference = strtolower(empty($matches[2]) ? $matches[1] : $matches[2]); $referenceTokens = $tokenList->getTokensByCallback(function (Token $token) use($reference) { return $token->getName() === ReferenceRule::NAME && $token->get('reference', null) === $reference; }); if (($referenceToken = reset($referenceTokens)) !== false) { $referenceToken->set('used', true); $reference = $referenceToken; } $tokenList->addToken($this->name, $position)->set('match', $content)->set('alt', $matches[1])->set('reference', $reference); }
/** * Add token with data * * match - whole matched content * * label - link content * * reference - reference name or object * * @param string $content * @param int $position * @param \ViKon\Parser\TokenList $tokenList */ protected function handleSingleState($content, $position, TokenList $tokenList) { preg_match('/\\[((?:\\\\.|[^]\\\\])+)\\](?: ?\\[((?:\\\\.|[^]\\\\])+)\\])?/', $content, $matches); $reference = strtolower(empty($matches[2]) ? $matches[1] : $matches[2]); // List all reference token which match url reference part $referenceTokens = $tokenList->getTokensByCallback(function (Token $token) use($reference) { return $token->getName() === ReferenceRule::NAME && $token->get('reference', null) === $reference; }); // Get first matching reference token if (($referenceToken = reset($referenceTokens)) !== false) { $referenceToken->set('used', true); $reference = $referenceToken; } $tokenList->addToken($this->name, $position)->set('match', $content)->set('label', $matches[1])->set('reference', $reference); }
/** * @param \ViKon\Parser\Token $token * @param \ViKon\Parser\TokenList $tokenList * * @return string * @throws \ViKon\Parser\LexerException */ public function renderReference(Token $token, TokenList $tokenList) { $reference = $token->get('reference'); $alt = $token->get('alt'); if ($reference instanceof Token) { $referenceToken = $reference; } else { $tokens = $tokenList->getTokensByCallback(function (Token $token) use($reference) { return $token->getName() === ReferenceRule::NAME && $token->get('reference', null) === $reference; }); // Get first token (if not found return full match) if (($referenceToken = reset($tokens)) === false) { return $token->get('match', ''); } $referenceToken->set('used', true); } $url = $referenceToken->get('url'); $title = $referenceToken->get('title', ''); if (empty($title)) { return "<img alt=\"{$alt}\" src=\"{$url}\"/>"; } return "<img alt=\"{$alt}\" src=\"{$url}\" title=\"{$title}\" />"; }