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