HtmlRenderer   A
last analyzed

Complexity

Total Complexity 12

Size/Duplication

Total Lines 102
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 92.86%

Importance

Changes 0
Metric Value
wmc 12
lcom 1
cbo 1
dl 0
loc 102
ccs 26
cts 28
cp 0.9286
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A getOption() 0 4 1
A renderInline() 0 13 3
A renderInlines() 0 9 2
A renderBlock() 0 13 3
A renderBlocks() 0 11 2
1
<?php
2
3
/*
4
 * This file is part of the league/commonmark package.
5
 *
6
 * (c) Colin O'Dell <[email protected]>
7
 *
8
 * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js)
9
 *  - (c) John MacFarlane
10
 *
11
 * For the full copyright and license information, please view the LICENSE
12
 * file that was distributed with this source code.
13
 */
14
15
namespace League\CommonMark;
16
17
use League\CommonMark\Block\Element\AbstractBlock;
18
use League\CommonMark\Block\Renderer\BlockRendererInterface;
19
use League\CommonMark\Inline\Element\AbstractInline;
20
use League\CommonMark\Inline\Renderer\InlineRendererInterface;
21
22
/**
23
 * Renders a parsed AST to HTML
24
 */
25
final class HtmlRenderer implements ElementRendererInterface
26
{
27
    /**
28
     * @var EnvironmentInterface
29
     */
30
    protected $environment;
31
32
    /**
33
     * @param EnvironmentInterface $environment
34
     */
35 2070
    public function __construct(EnvironmentInterface $environment)
36
    {
37 2070
        $this->environment = $environment;
38 2070
    }
39
40
    /**
41
     * @param string $option
42
     * @param mixed  $default
43
     *
44
     * @return mixed|null
45
     */
46 2061
    public function getOption(string $option, $default = null)
47
    {
48 2061
        return $this->environment->getConfig('renderer/' . $option, $default);
49
    }
50
51
    /**
52
     * @param AbstractInline $inline
53
     *
54
     * @throws \RuntimeException
55
     *
56
     * @return string
57
     */
58 1773
    public function renderInline(AbstractInline $inline): string
59
    {
60 1773
        $renderers = $this->environment->getInlineRenderersForClass(get_class($inline));
61
62
        /** @var InlineRendererInterface $renderer */
63 1773
        foreach ($renderers as $renderer) {
64 1773
            if (($result = $renderer->render($inline, $this)) !== null) {
65 1773
                return $result;
66
            }
67
        }
68
69
        throw new \RuntimeException('Unable to find corresponding renderer for inline type ' . \get_class($inline));
70
    }
71
72
    /**
73
     * @param AbstractInline[] $inlines
74
     *
75
     * @return string
76
     */
77 1776
    public function renderInlines(iterable $inlines): string
78
    {
79 1776
        $result = [];
80 1776
        foreach ($inlines as $inline) {
81 1773
            $result[] = $this->renderInline($inline);
82
        }
83
84 1776
        return \implode('', $result);
85
    }
86
87
    /**
88
     * @param AbstractBlock $block
89
     * @param bool          $inTightList
90
     *
91
     * @throws \RuntimeException
92
     *
93
     * @return string
94
     */
95 2061
    public function renderBlock(AbstractBlock $block, bool $inTightList = false): string
96
    {
97 2061
        $renderers = $this->environment->getBlockRenderersForClass(\get_class($block));
98
99
        /** @var BlockRendererInterface $renderer */
100 2061
        foreach ($renderers as $renderer) {
101 2061
            if (($result = $renderer->render($block, $this, $inTightList)) !== null) {
102 2061
                return $result;
103
            }
104
        }
105
106
        throw new \RuntimeException('Unable to find corresponding renderer for block type ' . \get_class($block));
107
    }
108
109
    /**
110
     * @param AbstractBlock[] $blocks
111
     * @param bool            $inTightList
112
     *
113
     * @return string
114
     */
115 2061
    public function renderBlocks(iterable $blocks, bool $inTightList = false): string
116
    {
117 2061
        $result = [];
118 2061
        foreach ($blocks as $block) {
119 2055
            $result[] = $this->renderBlock($block, $inTightList);
120
        }
121
122 2061
        $separator = $this->getOption('block_separator', "\n");
123
124 2061
        return \implode($separator, $result);
125
    }
126
}
127