PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB` * * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js) * - (c) John MacFarlane * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark; use League\CommonMark\Block\Element\AbstractBlock; use League\CommonMark\Block\Element\Document; use League\CommonMark\Reference\ReferenceParser; /** * Maintains the current state of the Markdown parser engine */ class Context implements ContextInterface { /** * @var EnvironmentInterface */ protected $environment; /** * @var Document */ protected $doc; /** * @var AbstractBlock|null */ protected $tip; /** * @var AbstractBlock */ protected $container; /** * @var int */ protected $lineNumber; /** * @var string */ protected $line; /** * @var UnmatchedBlockCloser */ protected $blockCloser; /** * @var bool */ protected $blocksParsed = false; /** * @var ReferenceParser */ protected $referenceParser; public function __construct(Document $document, EnvironmentInterface $environment) { $this->doc = $document; $this->tip = $this->doc; $this->container = $this->doc; $this->environment = $environment; $this->referenceParser = new ReferenceParser($document->getReferenceMap()); $this->blockCloser = new UnmatchedBlockCloser($this); } /** * @param string $line * * @return void */ public function setNextLine(string $line) { ++$this->lineNumber; $this->line = $line; } public function getDocument(): Document { return $this->doc; } public function getTip(): ?AbstractBlock { return $this->tip; } /** * @param AbstractBlock|null $block * * @return $this */ public function setTip(?AbstractBlock $block) { $this->tip = $block; return $this; } public function getLineNumber(): int { return $this->lineNumber; } public function getLine(): string { return $this->line; } public function getBlockCloser(): UnmatchedBlockCloser { return $this->blockCloser; } public function getContainer(): AbstractBlock { return $this->container; } /** * @param AbstractBlock $container * * @return $this */ public function setContainer(AbstractBlock $container) { $this->container = $container; return $this; } public function addBlock(AbstractBlock $block) { $this->blockCloser->closeUnmatchedBlocks(); $block->setStartLine($this->lineNumber); while ($this->tip !== null && !$this->tip->canContain($block)) { $this->tip->finalize($this, $this->lineNumber); } // This should always be true if ($this->tip !== null) { $this->tip->appendChild($block); } $this->tip = $block; $this->container = $block; } public function replaceContainerBlock(AbstractBlock $replacement) { $this->blockCloser->closeUnmatchedBlocks(); $replacement->setStartLine($this->container->getStartLine()); $this->container->replaceWith($replacement); if ($this->tip === $this->container) { $this->tip = $replacement; } $this->container = $replacement; } public function getBlocksParsed(): bool { return $this->blocksParsed; } /** * @param bool $bool * * @return $this */ public function setBlocksParsed(bool $bool) { $this->blocksParsed = $bool; return $this; } public function getReferenceParser(): ReferenceParser { return $this->referenceParser; } }