1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- <?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] === '#' && !preg_match('/^#\d+/', $line)
- ||
- // 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);
- }
|