Passed
Push — new-api ( 42b595 )
by Sebastian
06:18
created

Renderer   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 73
Duplicated Lines 0 %

Test Coverage

Coverage 84.85%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 31
dl 0
loc 73
ccs 28
cts 33
cp 0.8485
rs 10
c 1
b 0
f 0
wmc 12

4 Methods

Rating   Name   Duplication   Size   Complexity  
A renderCssStyles() 0 9 3
A bibliography() 0 3 1
B render() 0 31 7
A citation() 0 3 1
1
<?php
2
declare(strict_types=1);
3
/*
4
 * citeproc-php
5
 *
6
 * @link        http://github.com/seboettg/citeproc-php for the source repository
7
 * @copyright   Copyright (c) 2020 Sebastian Böttger.
8
 * @license     https://opensource.org/licenses/MIT
9
 */
10
11
namespace Seboettg\CiteProc\Util;
12
13
use Seboettg\CiteProc\CiteProc;
14
use Seboettg\CiteProc\Config;
15
use Seboettg\CiteProc\Data\DataList;
16
use Seboettg\CiteProc\Exception\CiteProcException;
17
use Seboettg\CiteProc\Styles\Css\CssStyle;
18
use Seboettg\Collection\ArrayList;
19
20
class Renderer
21
{
22
    /**
23
     * @param array|DataList $data
24
     * @param Config\RenderingMode $mode
25
     * @param array|ArrayList $citationItems
26
     * @return string
27
     * @throws CiteProcException
28
     */
29 163
    public function render($data, Config\RenderingMode $mode, $citationItems)
30
    {
31 163
        $res = "";
32 163
        if (is_array($data)) {
33 163
            $data = new DataList(...$data);
34
        } elseif (!($data instanceof DataList)) {
0 ignored issues
show
introduced by
$data is always a sub-type of Seboettg\CiteProc\Data\DataList.
Loading history...
35
            throw new CiteProcException('No valid format for variable data. Either DataList or array expected');
36
        }
37
38 163
        switch ((string)$mode) {
39 163
            case Config\RenderingMode::BIBLIOGRAPHY:
40 75
                CiteProc::getContext()->setMode($mode);
41
                // set CitationItems to Context
42 75
                CiteProc::getContext()->setCitationData($data);
43 75
                $res = $this->bibliography($data);
44 75
                break;
45 103
            case Config\RenderingMode::CITATION:
46 103
                if (is_array($citationItems)) {
47 103
                    $citationItems = new ArrayList(...$citationItems);
48
                } elseif (!($citationItems instanceof ArrayList)) {
0 ignored issues
show
introduced by
$citationItems is always a sub-type of Seboettg\Collection\ArrayList.
Loading history...
49
                    throw new CiteProcException('No valid format for variable ' .
50
                        '`citationItems`, ' .
51
                        'array or ArrayList expected.');
52
                }
53 103
                CiteProc::getContext()->setMode($mode);
54
                // set CitationItems to Context
55 103
                CiteProc::getContext()->setCitationItems($citationItems);
56 103
                $res = $this->citation($data, $citationItems);
57
        }
58
        //CiteProc::setContext(null);
59 163
        return $res;
60
    }
61
62
    /**
63
     * @return string
64
     */
65 3
    public function renderCssStyles()
66
    {
67 3
        $res = "";
68 3
        if (CiteProc::getContext()->getCssStyle() == null && !empty(CiteProc::getContext()->getBibliographySpecificOptions())) {
69 3
            $cssStyle = new CssStyle(CiteProc::getContext()->getBibliographySpecificOptions());
70 3
            CiteProc::getContext()->setCssStyle($cssStyle);
71 3
            $res = $cssStyle->render();
72
        }
73 3
        return $res;
74
    }
75
76
    /**
77
     * @param DataList $data
78
     * @return string
79
     */
80 75
    protected function bibliography(DataList $data): string
81
    {
82 75
        return CiteProc::getContext()->getBibliography()->render($data);
83
    }
84
85
    /**
86
     * @param DataList $data
87
     * @param ArrayList $citationItems
88
     * @return string
89
     */
90 103
    protected function citation(DataList $data, ArrayList $citationItems)
91
    {
92 103
        return CiteProc::getContext()->getCitation()->render($data, $citationItems);
93
    }
94
}
95