protected function parseEmail(Text $content, InlineNodeAcceptorInterface $target) { if ($content->contains('@')) { $content->handle('{ < (?:mailto:)? ( [a-zA-Z0-9.!#$%&\'*+/=?^_`{|}~-]+ \\@ [a-zA-Z0-9] (?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])? (?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)* ) > }ix', function (Text $w, Text $email) use($target) { $text = $email->copy(); $link = new Link($email->prepend('mailto:')); $link->addInline(new String($text)); $target->addInline($link); }, function (Text $part) use($target) { $this->next->parseInline($part, $target); }); } else { $this->next->parseInline($content, $target); } }
public function visitLink(Link $link) { $tag = Tag::block('a'); $tag->setAttribute('href', $link->getHref()->escapeHtml()); $this->fillWithInlineElements($tag, $link); if (!$link->getTitleText()->isEmpty()) { $tag->setAttribute('title', $link->getTitleText()->escapeHtml()); } $this->buffer->append($tag); }