Version 1
[yaffs-website] / vendor / cebe / markdown / block / HeadlineTrait.php
diff --git a/vendor/cebe/markdown/block/HeadlineTrait.php b/vendor/cebe/markdown/block/HeadlineTrait.php
new file mode 100644 (file)
index 0000000..428de4b
--- /dev/null
@@ -0,0 +1,70 @@
+<?php
+/**
+ * @copyright Copyright (c) 2014 Carsten Brandt
+ * @license https://github.com/cebe/markdown/blob/master/LICENSE
+ * @link https://github.com/cebe/markdown#readme
+ */
+
+namespace cebe\markdown\block;
+
+/**
+ * Adds the headline blocks
+ */
+trait HeadlineTrait
+{
+       /**
+        * identify a line as a headline
+        */
+       protected function identifyHeadline($line, $lines, $current)
+       {
+               return (
+                       // heading with #
+                       $line[0] === '#'
+                       ||
+                       // underlined headline
+                       !empty($lines[$current + 1]) &&
+                       (($l = $lines[$current + 1][0]) === '=' || $l === '-') &&
+                       preg_match('/^(\-+|=+)\s*$/', $lines[$current + 1])
+               );
+       }
+
+       /**
+        * Consume lines for a headline
+        */
+       protected function consumeHeadline($lines, $current)
+       {
+               if ($lines[$current][0] === '#') {
+                       // ATX headline
+                       $level = 1;
+                       while (isset($lines[$current][$level]) && $lines[$current][$level] === '#' && $level < 6) {
+                               $level++;
+                       }
+                       $block = [
+                               'headline',
+                               'content' => $this->parseInline(trim($lines[$current], "# \t")),
+                               'level' => $level,
+                       ];
+                       return [$block, $current];
+               } else {
+                       // underlined headline
+                       $block = [
+                               'headline',
+                               'content' => $this->parseInline($lines[$current]),
+                               'level' => $lines[$current + 1][0] === '=' ? 1 : 2,
+                       ];
+                       return [$block, $current + 1];
+               }
+       }
+
+       /**
+        * Renders a headline
+        */
+       protected function renderHeadline($block)
+       {
+               $tag = 'h' . $block['level'];
+               return "<$tag>" . $this->renderAbsy($block['content']) . "</$tag>\n";
+       }
+
+       abstract protected function parseInline($text);
+       abstract protected function renderAbsy($absy);
+}