/**
* Callback for: [ref].
* @return Texy\HtmlElement|string|FALSE
*/
public function patternReference(LineParser $parser, array $matches)
{
list(, $mRef) = $matches;
// [1] => [ref]
$texy = $this->texy;
$name = substr($mRef, 1, -1);
$link = $this->getReference($name);
if (!$link) {
return $texy->invokeAroundHandlers('newReference', $parser, [$name]);
}
$link->type = $link::BRACKET;
if ($link->label != '') {
// NULL or ''
// prevent circular references
if (isset(self::$livelock[$link->name])) {
$content = $link->label;
} else {
self::$livelock[$link->name] = TRUE;
$el = new Texy\HtmlElement();
$lineParser = new LineParser($texy, $el);
$lineParser->parse($link->label);
$content = $el->toString($texy);
unset(self::$livelock[$link->name]);
}
} else {
$content = $this->textualUrl($link);
$content = $this->texy->protect($content, $texy::CONTENT_TEXTUAL);
}
return $texy->invokeAroundHandlers('linkReference', $parser, [$link, $content]);
}