Environment   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 66
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 30
c 0
b 0
f 0
dl 0
loc 66
ccs 25
cts 25
cp 1
rs 10
wmc 8

5 Methods

Rating   Name   Duplication   Size   Complexity  
A addConverter() 0 8 3
A __construct() 0 4 1
A getConfig() 0 3 1
A getConverterByTag() 0 7 2
A createDefaultEnvironment() 0 21 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace League\HTMLToMarkdown;
6
7
use League\HTMLToMarkdown\Converter\BlockquoteConverter;
8
use League\HTMLToMarkdown\Converter\CodeConverter;
9
use League\HTMLToMarkdown\Converter\CommentConverter;
10
use League\HTMLToMarkdown\Converter\ConverterInterface;
11
use League\HTMLToMarkdown\Converter\DefaultConverter;
12
use League\HTMLToMarkdown\Converter\DivConverter;
13
use League\HTMLToMarkdown\Converter\EmphasisConverter;
14
use League\HTMLToMarkdown\Converter\HardBreakConverter;
15
use League\HTMLToMarkdown\Converter\HeaderConverter;
16
use League\HTMLToMarkdown\Converter\HorizontalRuleConverter;
17
use League\HTMLToMarkdown\Converter\ImageConverter;
18
use League\HTMLToMarkdown\Converter\LinkConverter;
19
use League\HTMLToMarkdown\Converter\ListBlockConverter;
20
use League\HTMLToMarkdown\Converter\ListItemConverter;
21
use League\HTMLToMarkdown\Converter\ParagraphConverter;
22
use League\HTMLToMarkdown\Converter\PreformattedConverter;
23
use League\HTMLToMarkdown\Converter\TextConverter;
24
25
final class Environment
26
{
27
    /** @var Configuration */
28
    protected $config;
29
30
    /** @var ConverterInterface[] */
31
    protected $converters = [];
32
33
    /**
34
     * @param array<string, mixed> $config
35 102
     */
36
    public function __construct(array $config = [])
37 102
    {
38 102
        $this->config = new Configuration($config);
39 102
        $this->addConverter(new DefaultConverter());
40
    }
41
42
    public function getConfig(): Configuration
43
    {
44 99
        return $this->config;
45
    }
46 99
47
    public function addConverter(ConverterInterface $converter): void
48
    {
49
        if ($converter instanceof ConfigurationAwareInterface) {
50
            $converter->setConfig($this->config);
51
        }
52 102
53
        foreach ($converter->getSupportedTags() as $tag) {
54 102
            $this->converters[$tag] = $converter;
55 102
        }
56 68
    }
57
58 102
    public function getConverterByTag(string $tag): ConverterInterface
59 102
    {
60 68
        if (isset($this->converters[$tag])) {
61 102
            return $this->converters[$tag];
62
        }
63
64
        return $this->converters[DefaultConverter::DEFAULT_CONVERTER];
65
    }
66
67
    /**
68 99
     * @param array<string, mixed> $config
69
     */
70 99
    public static function createDefaultEnvironment(array $config = []): Environment
71 93
    {
72
        $environment = new static($config);
73
74 96
        $environment->addConverter(new BlockquoteConverter());
75
        $environment->addConverter(new CodeConverter());
76
        $environment->addConverter(new CommentConverter());
77
        $environment->addConverter(new DivConverter());
78
        $environment->addConverter(new EmphasisConverter());
79
        $environment->addConverter(new HardBreakConverter());
80
        $environment->addConverter(new HeaderConverter());
81
        $environment->addConverter(new HorizontalRuleConverter());
82 99
        $environment->addConverter(new ImageConverter());
83
        $environment->addConverter(new LinkConverter());
84 99
        $environment->addConverter(new ListBlockConverter());
85
        $environment->addConverter(new ListItemConverter());
86 99
        $environment->addConverter(new ParagraphConverter());
87 99
        $environment->addConverter(new PreformattedConverter());
88 99
        $environment->addConverter(new TextConverter());
89 99
90 99
        return $environment;
91 99
    }
92
}
93