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.
|
|
<?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); } }
|