Completed
Push — master ( 07fd79...3da0b9 )
by Kyle
28:10 queued 13:06
created

ClassDirective::getName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
use Gregwar\RST\Directive;
4
use Gregwar\RST\Environment;
5
use Gregwar\RST\HTML\Nodes\ParagraphNode;
6
use Gregwar\RST\Parser;
7
8
class ParagraphClassNode extends ParagraphNode
9
{
10
    /**
11
     * @var string
12
     */
13
    protected $class;
14
15
    public function __construct($value = null, $class = null)
16
    {
17
        parent::__construct($value);
18
        $this->class = $class;
19
    }
20
21
    public function render()
22
    {
23
        $text = trim($this->value);
24
        $class = $this->class;
25
26
        if ($text === '') {
27
            return '';
28
        }
29
30
        return '<p'.($class ? ' class="'.$class.'"' : '').'>'.$text.'</p>';
31
    }
32
}
33
34
class ClassDirective extends Directive
35
{
36
    /**
37
     * Get the directive name
38
     */
39
    public function getName()
40
    {
41
        return 'class';
42
    }
43
44
    /**
45
     * @param Parser $parser
46
     * @param ParagraphNode $node
47
     * @param mixed $variable
48
     * @param mixed $data
49
     * @param array $options
50
     */
51
    public function process(Parser $parser, $node, $variable, $data, array $options)
52
    {
53
        $node = new ParagraphClassNode($node->getValue(), $data);
54
55
        parent::process($parser, $node, $variable, $data, $options);
56
    }
57
}
58
59
class PhpMdEnvironment extends Environment
60
{
61
    public static $letters = array('=', '-', '`', '~', '*', '^', '"');
62
63
    /**
64
     * @var string
65
     */
66
    protected $baseHref;
67
68
    public function getBaseHref()
69
    {
70
        return $this->baseHref;
71
    }
72
73
    public function reset()
74
    {
75
        parent::reset();
76
77
        $this->baseHref = ltrim(getenv('BASE_HREF') ?: '', ':');
78
        $this->titleLetters = array(
79
            2 => '=',
80
            3 => '-',
81
            4 => '`',
82
            5 => '~',
83
            6 => '*',
84
            7 => '^',
85
            8 => '"',
86
        );
87
    }
88
89
    public function relativeUrl($url)
90
    {
91
        $root = substr($url, 0, 1) === '/';
92
93
        return ($root ? $this->getBaseHref().'/' : '').parent::relativeUrl($url);
94
    }
95
}
96
97
$env = new PhpMdEnvironment;
98
$parser = new Parser($env);
99
$parser->registerDirective(new ClassDirective());
100
101
return array(
102
    'index'            => 'news.html',
103
    'baseHref'         => $env->getBaseHref(),
104
    'cname'            => getenv('CNAME'),
105
    'websiteDirectory' => __DIR__.'/../../dist/website',
106
    'sourceDirectory'  => __DIR__.'/rst',
107
    'assetsDirectory'  => __DIR__.'/resources/web',
108
    'layout'           => __DIR__.'/resources/layout.php',
109
    'extensions'       => array(
110
        'rst' => function ($file) use ($parser) {
111
            $parser->getEnvironment()->setCurrentDirectory(dirname($file));
112
            $content = $parser->parseFile($file);
113
            // Rewrite links anchors
114
            $content = preg_replace_callback('/(<a id="[^"]+"><\/a>)\s*<h(?<level>[1-6])([^>]*>)(?<content>[\s\S]*)<\/h\\g<level>>/U', function ($match) {
115
                $level = $match['level'];
116
                $content = $match['content'];
117
                // Use content as anchor
118
                $hash = preg_replace('/[^a-z0-9]+/', '-', strtolower(trim($match['content'])));
119
120
                return "<a id=\"$hash\"></a>\n<h$level>$content</h$level>";
121
            }, $content);
122
            $content = preg_replace(
123
                '/phpmd-(\d+\.\S+)/',
124
                '<a href="https://github.com/phpmd/phpmd/releases/tag/$1" title="$0 release">$0</a>',
125
                $content
126
            );
127
128
            return preg_replace('/^\s*<hr\s*\/?>/', '', $content);
129
        },
130
    ),
131
);
132