1<?php 2 3/* 4 * This file is part of the league/commonmark package. 5 * 6 * (c) Colin O'Dell <colinodell@gmail.com> 7 * (c) Rezo Zero / Ambroise Maupate 8 * 9 * For the full copyright and license information, please view the LICENSE 10 * file that was distributed with this source code. 11 */ 12 13declare(strict_types=1); 14 15namespace League\CommonMark\Extension\Footnote\Parser; 16 17use League\CommonMark\Extension\Footnote\Node\Footnote; 18use League\CommonMark\Node\Block\AbstractBlock; 19use League\CommonMark\Parser\Block\AbstractBlockContinueParser; 20use League\CommonMark\Parser\Block\BlockContinue; 21use League\CommonMark\Parser\Block\BlockContinueParserInterface; 22use League\CommonMark\Parser\Cursor; 23use League\CommonMark\Reference\ReferenceInterface; 24 25final class FootnoteParser extends AbstractBlockContinueParser 26{ 27 /** @psalm-readonly */ 28 private Footnote $block; 29 30 /** @psalm-readonly-allow-private-mutation */ 31 private ?int $indentation = null; 32 33 public function __construct(ReferenceInterface $reference) 34 { 35 $this->block = new Footnote($reference); 36 } 37 38 public function getBlock(): Footnote 39 { 40 return $this->block; 41 } 42 43 public function tryContinue(Cursor $cursor, BlockContinueParserInterface $activeBlockParser): ?BlockContinue 44 { 45 if ($cursor->isBlank()) { 46 return BlockContinue::at($cursor); 47 } 48 49 if ($cursor->isIndented()) { 50 $this->indentation ??= $cursor->getIndent(); 51 $cursor->advanceBy($this->indentation, true); 52 53 return BlockContinue::at($cursor); 54 } 55 56 return BlockContinue::none(); 57 } 58 59 public function isContainer(): bool 60 { 61 return true; 62 } 63 64 public function canContain(AbstractBlock $childBlock): bool 65 { 66 return true; 67 } 68} 69