Upstream thephpleague/html-to-markdown state of the touched files before f345fb4bc5
This commit is contained in:
1 parent
1bb05d0606
commit
a82cc3b9b6
2 files changed
+77
-4
No files matched your search
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace League\HTMLToMarkdown\Converter;
|
||||
|
||||
use League\HTMLToMarkdown\Configuration;
|
||||
use League\HTMLToMarkdown\ConfigurationAwareInterface;
|
||||
use League\HTMLToMarkdown\ElementInterface;
|
||||
|
||||
class LinkConverter implements ConverterInterface, ConfigurationAwareInterface
|
||||
{
|
||||
/** @var Configuration */
|
||||
protected $config;
|
||||
|
||||
public function setConfig(Configuration $config): void
|
||||
{
|
||||
$this->config = $config;
|
||||
}
|
||||
|
||||
public function convert(ElementInterface $element): string
|
||||
{
|
||||
$href = $element->getAttribute('href');
|
||||
$title = $element->getAttribute('title');
|
||||
$text = \trim($element->getValue(), "\t\n\r\0\x0B");
|
||||
|
||||
if ($title !== '') {
|
||||
$markdown = '[' . $text . '](' . $href . ' "' . $title . '")';
|
||||
} elseif ($href === $text && $this->isValidAutolink($href)) {
|
||||
$markdown = '<' . $href . '>';
|
||||
} elseif ($href === 'mailto:' . $text && $this->isValidEmail($text)) {
|
||||
$markdown = '<' . $text . '>';
|
||||
} else {
|
||||
if (\stristr($href, ' ')) {
|
||||
$href = '<' . $href . '>';
|
||||
}
|
||||
|
||||
$markdown = '[' . $text . '](' . $href . ')';
|
||||
}
|
||||
|
||||
if (! $href) {
|
||||
if ($this->shouldStrip()) {
|
||||
$markdown = $text;
|
||||
} else {
|
||||
$markdown = \html_entity_decode($element->getChildrenAsString());
|
||||
}
|
||||
}
|
||||
|
||||
return $markdown;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
public function getSupportedTags(): array
|
||||
{
|
||||
return ['a'];
|
||||
}
|
||||
|
||||
private function isValidAutolink(string $href): bool
|
||||
{
|
||||
$useAutolinks = $this->config->getOption('use_autolinks');
|
||||
|
||||
return $useAutolinks && (\preg_match('/^[A-Za-z][A-Za-z0-9.+-]{1,31}:[^<>\x00-\x20]*/i', $href) === 1);
|
||||
}
|
||||
|
||||
private function isValidEmail(string $email): bool
|
||||
{
|
||||
// Email validation is messy business, but this should cover most cases
|
||||
return \filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
|
||||
}
|
||||
|
||||
private function shouldStrip(): bool
|
||||
{
|
||||
return \boolval($this->config->getOption('strip_placeholder_links') ?? false);
|
||||
}
|
||||
}
|
||||
@@ -134,10 +134,6 @@ class HtmlConverterTest extends TestCase
|
||||
public function testImage(): void
|
||||
{
|
||||
$this->assertHtmlGivesMarkdown('<img src="/path/img.jpg" alt="alt text" title="Title" />', '');
|
||||
$this->assertHtmlGivesMarkdown("<img src=\"a.png\" />\n<h3>A new header</h3>", "\n\n### A new header");
|
||||
$this->assertHtmlGivesMarkdown('<img src="a.png" /><p>Paragraph</p>', "\n\nParagraph");
|
||||
$this->assertHtmlGivesMarkdown('<a href="b.html"><img src="a.png" /></a><h3>A new header</h3>', "[](b.html)\n\n### A new header");
|
||||
$this->assertHtmlGivesMarkdown('<blockquote><img src="a.png" /><p>Paragraph</p></blockquote>', "> \n> \n> Paragraph");
|
||||
}
|
||||
|
||||
public function testAnchor(): void
|
||||
|
||||
Reference in new issue
Block a user