mirror of
https://github.com/erusev/parsedown.git
synced 2023-08-10 21:13:06 +03:00
52 lines
1006 B
PHP
52 lines
1006 B
PHP
<?php
|
|
|
|
namespace Erusev\Parsedown\Configurables;
|
|
|
|
use Erusev\Parsedown\Configurable;
|
|
|
|
final class RecursionLimiter implements Configurable
|
|
{
|
|
/** @var int */
|
|
private $maxDepth;
|
|
|
|
/** @var int */
|
|
private $currentDepth;
|
|
|
|
/**
|
|
* @param int $maxDepth
|
|
* @param int $currentDepth
|
|
*/
|
|
private function __construct($maxDepth, $currentDepth)
|
|
{
|
|
$this->maxDepth = $maxDepth;
|
|
$this->currentDepth = $currentDepth;
|
|
}
|
|
|
|
/** @return self */
|
|
public static function initial()
|
|
{
|
|
return self::maxDepth(256);
|
|
}
|
|
|
|
/**
|
|
* @param int $maxDepth
|
|
* @return self
|
|
*/
|
|
public static function maxDepth($maxDepth)
|
|
{
|
|
return new self($maxDepth, 0);
|
|
}
|
|
|
|
/** @return self */
|
|
public function incremented()
|
|
{
|
|
return new self($this->maxDepth, $this->currentDepth + 1);
|
|
}
|
|
|
|
/** @return bool */
|
|
public function isDepthExceeded()
|
|
{
|
|
return ($this->maxDepth < $this->currentDepth);
|
|
}
|
|
}
|