1<?php
2
3/*
4 * This file is part of the league/commonmark package.
5 *
6 * (c) Colin O'Dell <colinodell@gmail.com>
7 *
8 * Original code based on the CommonMark JS reference parser (http://bitly.com/commonmark-js)
9 *  - (c) John MacFarlane
10 *
11 * For the full copyright and license information, please view the LICENSE
12 * file that was distributed with this source code.
13 */
14
15namespace League\CommonMark\Extension\SmartPunct;
16
17use League\CommonMark\ElementRendererInterface;
18use League\CommonMark\HtmlElement;
19use League\CommonMark\Inline\Element\AbstractInline;
20use League\CommonMark\Inline\Renderer\InlineRendererInterface;
21
22final class QuoteRenderer implements InlineRendererInterface
23{
24    /**
25     * @param Quote                    $inline
26     * @param ElementRendererInterface $htmlRenderer
27     *
28     * @return HtmlElement|string|null
29     */
30    public function render(AbstractInline $inline, ElementRendererInterface $htmlRenderer)
31    {
32        if (!$inline instanceof Quote) {
33            throw new \InvalidArgumentException(sprintf('Expected an instance of "%s", got "%s" instead', Quote::class, get_class($inline)));
34        }
35
36        // Handles unpaired quotes which remain after processing delimiters
37        if ($inline->getContent() === Quote::SINGLE_QUOTE) {
38            // Render as an apostrophe
39            return Quote::SINGLE_QUOTE_CLOSER;
40        } elseif ($inline->getContent() === Quote::DOUBLE_QUOTE) {
41            // Render as an opening quote
42            return Quote::DOUBLE_QUOTE_OPENER;
43        }
44
45        return $inline->getContent();
46    }
47}
48