MarkdownExtra::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 2
c 1
b 0
f 0
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
cc 1
nc 1
nop 0
crap 1
1
<?php
2
3
namespace Jampire\Markdown\Toc;
4
5
use Michelf\MarkdownExtra as BaseMarkdownExtra;
6
7
/**
8
 * Class MarkdownExtra
9
 *
10
 * TOC capability is ported from @link https://sculpin.io/ Sculpin project.
11
 * @see generateHeaderId()
12
 *
13
 * @author Dzianis Kotau <[email protected]>
14
 * @package Jampire\Markdown\Toc
15
 */
16
class MarkdownExtra extends BaseMarkdownExtra
17
{
18 2
    public function __construct()
19
    {
20 2
        parent::__construct();
21 2
        $this->header_id_func = array($this, 'generateHeaderId');
22 2
    }
23
24
    /**
25
     * This method is called to generate an id="" attribute for a header.
26
     *
27
     * TOC capability is ported from @link https://sculpin.io/ Sculpin project.
28
     *
29
     * @param string $headerText raw markdown input for the header name
30
     *
31
     * @return string
32
     * @author Dragonfly Development Inc. <[email protected]>
33
     * @author Beau Simensen <[email protected]>
34
     */
35 1
    public function generateHeaderId($headerText)
36
    {
37
38
        // $headerText is completely raw markdown input. We need to strip it
39
        // from all markup, because we are only interested in the actual 'text'
40
        // part of it.
41
42
        // Step 1: Remove html tags.
43 1
        $result = strip_tags($headerText);
44
45
        // Step 2: Remove all markdown links. To do this, we simply remove
46
        // everything between ( and ) if the ( occurs right after a ].
47 1
        $result = preg_replace('%
48
            (?<= \\]) # Look behind to find ]
49
            (
50
                \\(     # match (
51
                [^\\)]* # match everything except )
52
                \\)     # match )
53
            )
54
55 1
            %x', '', $result);
56
57
        // Step 3: Convert spaces to dashes, and remove unwanted special
58
        // characters.
59
        $map = array(
60 1
            ' ' => '-',
61
            '(' => '',
62
            ')' => '',
63
            '[' => '',
64
            ']' => '',
65
        );
66
67 1
        return rawurlencode(strtolower(
68 1
            strtr($result, $map)
69
        ));
70
    }
71
}
72