for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
/*
* This file is part of the league/commonmark-ext-task-list package.
*
* (c) Colin O'Dell <[email protected]>
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace League\CommonMark\Ext\TaskList;
use League\CommonMark\Block\Element\ListItem;
use League\CommonMark\Block\Element\Paragraph;
use League\CommonMark\Inline\Parser\InlineParserInterface;
use League\CommonMark\InlineParserContext;
final class TaskListItemMarkerParser implements InlineParserInterface
{
/**
* @return string[]
public function getCharacters(): array
return ['['];
}
* @param InlineParserContext $inlineContext
* @return bool
public function parse(InlineParserContext $inlineContext): bool
$container = $inlineContext->getContainer();
// Checkbox must come at the beginning of the first paragraph of the list item
if ($container->hasChildren() || !($container instanceof Paragraph && $container->parent() && $container->parent() instanceof ListItem)) {
return false;
$cursor = $inlineContext->getCursor();
$oldState = $cursor->saveState();
$m = $cursor->match('/\[( |x)\]/i');
if ($m === null) {
if ($cursor->getNextNonSpaceCharacter() === null) {
$cursor->restoreState($oldState);
$isChecked = $m !== '[ ]';
$inlineContext->getContainer()->appendChild(new TaskListItemMarker($isChecked));
return true;