]> git.mxchange.org Git - friendica.git/blob - vendor/league/html-to-markdown/src/Converter/HeaderConverter.php
Merge pull request #3301 from annando/issue-3300
[friendica.git] / vendor / league / html-to-markdown / src / Converter / HeaderConverter.php
1 <?php
2
3 namespace League\HTMLToMarkdown\Converter;
4
5 use League\HTMLToMarkdown\Configuration;
6 use League\HTMLToMarkdown\ConfigurationAwareInterface;
7 use League\HTMLToMarkdown\ElementInterface;
8
9 class HeaderConverter implements ConverterInterface, ConfigurationAwareInterface
10 {
11     const STYLE_ATX = 'atx';
12     const STYLE_SETEXT = 'setext';
13
14     /**
15      * @var Configuration
16      */
17     protected $config;
18
19     /**
20      * @param Configuration $config
21      */
22     public function setConfig(Configuration $config)
23     {
24         $this->config = $config;
25     }
26
27     /**
28      * @param ElementInterface $element
29      *
30      * @return string
31      */
32     public function convert(ElementInterface $element)
33     {
34         $level = (int) substr($element->getTagName(), 1, 1);
35         $style = $this->config->getOption('header_style', self::STYLE_SETEXT);
36
37         if (($level === 1 || $level === 2) && !$element->isDescendantOf('blockquote') && $style === self::STYLE_SETEXT) {
38             return $this->createSetextHeader($level, $element->getValue());
39         }
40
41         return $this->createAtxHeader($level, $element->getValue());
42     }
43
44     /**
45      * @return string[]
46      */
47     public function getSupportedTags()
48     {
49         return array('h1', 'h2', 'h3', 'h4', 'h5', 'h6');
50     }
51
52     /**
53      * @param int    $level
54      * @param string $content
55      *
56      * @return string
57      */
58     private function createSetextHeader($level, $content)
59     {
60         $length = function_exists('mb_strlen') ? mb_strlen($content, 'utf-8') : strlen($content);
61         $underline = ($level === 1) ? '=' : '-';
62
63         return $content . "\n" . str_repeat($underline, $length) . "\n\n";
64     }
65
66     /**
67      * @param int    $level
68      * @param string $content
69      *
70      * @return string
71      */
72     private function createAtxHeader($level, $content)
73     {
74         $prefix = str_repeat('#', $level) . ' ';
75
76         return $prefix . $content . "\n\n";
77     }
78 }