Markdown.php 2.47 KB
Newer Older
1 2 3 4 5 6 7 8 9
<?php
/**
 * @link http://www.yiiframework.com/
 * @copyright Copyright (c) 2008 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

namespace yii\console;

10 11 12 13
use cebe\markdown\block\FencedCodeTrait;
use cebe\markdown\inline\CodeTrait;
use cebe\markdown\inline\EmphStrongTrait;
use cebe\markdown\inline\StrikeoutTrait;
14 15 16 17 18 19 20 21 22 23 24 25
use yii\helpers\Console;

/**
 * A Markdown parser that enhances markdown for reading in console environments.
 *
 * Based on [cebe/markdown](https://github.com/cebe/markdown).
 *
 * @author Carsten Brandt <mail@cebe.cc>
 * @since 2.0
 */
class Markdown extends \cebe\markdown\Parser
{
26 27 28 29 30
    use FencedCodeTrait;
    use CodeTrait;
    use EmphStrongTrait;
    use StrikeoutTrait;

31 32 33 34 35 36 37 38 39 40
    /**
     * @var array these are "escapeable" characters. When using one of these prefixed with a
     * backslash, the character will be outputted without the backslash and is not interpreted
     * as markdown.
     */
    protected $escapeCharacters = [
        '\\', // backslash
        '`', // backtick
        '*', // asterisk
        '_', // underscore
41
        '~', // tilde
42 43
    ];

44

45 46
    /**
     * Renders a code block
47 48 49
     *
     * @param array $block
     * @return string
50
     */
51 52 53 54
   	protected function renderCode($block)
   	{
        return Console::ansiFormat($block['content'], [Console::NEGATIVE]) . "\n\n";
   	}
55

56 57 58
    /**
     * @inheritdoc
     */
59 60
    protected function renderParagraph($block)
    {
61
        return rtrim($this->renderAbsy($block['content'])) . "\n\n";
62 63 64
    }

    /**
65 66 67
     * Renders an inline code span `` ` ``.
     * @param array $element
     * @return string
68
     */
69
    protected function renderInlineCode($element)
70
    {
71
        return Console::ansiFormat($element[1], [Console::UNDERLINE]);
72 73 74
    }

    /**
75 76 77
     * Renders empathized elements.
     * @param array $element
     * @return string
78
     */
79
    protected function renderEmph($element)
80
    {
81
        return Console::ansiFormat($this->renderAbsy($element[1]), Console::ITALIC);
82 83 84
    }

    /**
85 86 87
     * Renders strong elements.
     * @param array $element
     * @return string
88
     */
89
    protected function renderStrong($element)
90
    {
91
        return Console::ansiFormat($this->renderAbsy($element[1]), Console::BOLD);
92 93 94
    }

    /**
95 96 97
     * Renders the strike through feature.
     * @param array $element
     * @return string
98
     */
99
    protected function renderStrike($element)
100
    {
101
        return Console::ansiFormat($this->parseInline($this->renderAbsy($element[1])), [Console::CROSSED_OUT]);
102
    }
103
}