Removed modules/contrib/media module to allow update to the core media module
[yaffs-website] / vendor / cebe / markdown / block / HeadlineTrait.php
1 <?php
2 /**
3  * @copyright Copyright (c) 2014 Carsten Brandt
4  * @license https://github.com/cebe/markdown/blob/master/LICENSE
5  * @link https://github.com/cebe/markdown#readme
6  */
7
8 namespace cebe\markdown\block;
9
10 /**
11  * Adds the headline blocks
12  */
13 trait HeadlineTrait
14 {
15         /**
16          * identify a line as a headline
17          */
18         protected function identifyHeadline($line, $lines, $current)
19         {
20                 return (
21                         // heading with #
22                         $line[0] === '#'
23                         ||
24                         // underlined headline
25                         !empty($lines[$current + 1]) &&
26                         (($l = $lines[$current + 1][0]) === '=' || $l === '-') &&
27                         preg_match('/^(\-+|=+)\s*$/', $lines[$current + 1])
28                 );
29         }
30
31         /**
32          * Consume lines for a headline
33          */
34         protected function consumeHeadline($lines, $current)
35         {
36                 if ($lines[$current][0] === '#') {
37                         // ATX headline
38                         $level = 1;
39                         while (isset($lines[$current][$level]) && $lines[$current][$level] === '#' && $level < 6) {
40                                 $level++;
41                         }
42                         $block = [
43                                 'headline',
44                                 'content' => $this->parseInline(trim($lines[$current], "# \t")),
45                                 'level' => $level,
46                         ];
47                         return [$block, $current];
48                 } else {
49                         // underlined headline
50                         $block = [
51                                 'headline',
52                                 'content' => $this->parseInline($lines[$current]),
53                                 'level' => $lines[$current + 1][0] === '=' ? 1 : 2,
54                         ];
55                         return [$block, $current + 1];
56                 }
57         }
58
59         /**
60          * Renders a headline
61          */
62         protected function renderHeadline($block)
63         {
64                 $tag = 'h' . $block['level'];
65                 return "<$tag>" . $this->renderAbsy($block['content']) . "</$tag>\n";
66         }
67
68         abstract protected function parseInline($text);
69         abstract protected function renderAbsy($absy);
70 }