You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
3.3 KiB
153 lines
3.3 KiB
<?php namespace Sensory5\Shortcode\Classes;
|
|
|
|
/**
|
|
* Shortcodes
|
|
*
|
|
* Original idea from Pingpong Labs (https://github.com/pingpong-labs/shortcode)
|
|
*
|
|
* Changed to fit closer to the Thunderer\Shortcode syntax.
|
|
*/
|
|
|
|
use Countable;
|
|
use Thunder\Shortcode\HandlerContainer\HandlerContainer;
|
|
use Thunder\Shortcode\Parser\RegexParser;
|
|
use Thunder\Shortcode\Processor\Processor;
|
|
use Thunder\Shortcode\Shortcode\ShortcodeInterface;
|
|
|
|
class Shortcode implements Countable
|
|
{
|
|
/** @var HandlerContainer */
|
|
private $handlers;
|
|
|
|
/**
|
|
* The constructor.
|
|
*/
|
|
public function __construct()
|
|
{
|
|
$this->handlers = new HandlerContainer();
|
|
}
|
|
|
|
/**
|
|
* Get the names for all registered shortcodes.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getNames()
|
|
{
|
|
return $this->handlers->getNames();
|
|
}
|
|
|
|
/**
|
|
* Add a new shortcode to the handler container.
|
|
*
|
|
* @param string $name
|
|
* @param mixed $callback
|
|
*/
|
|
public function add($name, $callback)
|
|
{
|
|
$this->handlers->add($name, $callback);
|
|
}
|
|
|
|
/**
|
|
* Remove the specified shortcode name from the handler.
|
|
*
|
|
* @param string $name
|
|
*/
|
|
public function remove($name)
|
|
{
|
|
if ($this->exists($name)) {
|
|
$this->handlers->remove($name);
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Remove all registered shortcodes
|
|
*
|
|
* @return self
|
|
*/
|
|
public function destroyAll()
|
|
{
|
|
$this->handlers = new HandlerContainer();
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Strip any shortcodes from the content.
|
|
*
|
|
* @param string $content
|
|
*
|
|
* @return string
|
|
*/
|
|
public function strip($content)
|
|
{
|
|
$handlers = new HandlerContainer();
|
|
$handlers->setDefault(function(ShortcodeInterface $s) { return $s->getContent(); });
|
|
$processor = new Processor(new RegexParser(), $handlers);
|
|
|
|
return $processor->process($content);
|
|
}
|
|
|
|
/**
|
|
* Get count from all shortcodes.
|
|
*
|
|
* @return int
|
|
*/
|
|
public function count()
|
|
{
|
|
return count($this->handlers->getNames());
|
|
}
|
|
|
|
/**
|
|
* Return true is the given name exist in shortcodes array.
|
|
*
|
|
* @param string $name
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function exists($name)
|
|
{
|
|
return $this->handlers->has($name);
|
|
}
|
|
|
|
/**
|
|
* Return true is the given content contains the named shortcode.
|
|
*
|
|
* @param string $content
|
|
* @param string $name
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function contains($content, $name)
|
|
{
|
|
$hasShortcode = false;
|
|
|
|
$handlers = new HandlerContainer();
|
|
$handlers->setDefault(function(ShortcodeInterface $s) use($name, &$hasShortcode) {
|
|
if($s->getName() === $name) {
|
|
$hasShortcode = true;
|
|
}
|
|
});
|
|
$processor = new Processor(new RegexParser(), $handlers);
|
|
$processor->process($content);
|
|
|
|
return $hasShortcode;
|
|
}
|
|
|
|
/**
|
|
* Parse content and replace parts of it using registered handlers
|
|
*
|
|
* @param $content
|
|
*
|
|
* @return string
|
|
*/
|
|
public function parse($content)
|
|
{
|
|
$processor = new Processor(new RegexParser(), $this->handlers);
|
|
|
|
return $processor->process($content);
|
|
}
|
|
}
|
|
|