-
Notifications
You must be signed in to change notification settings - Fork 21
/
Shortcode.php
145 lines (127 loc) · 3.02 KB
/
Shortcode.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
<?php
namespace Pingpong\Shortcode;
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 all shortcodes.
*
* @return array
*/
public function all()
{
return $this->handlers->getNames();
}
/**
* Register new shortcode.
*
* @param string $name
* @param mixed $callback
*/
public function register($name, $callback)
{
$this->handlers->add($name, $callback);
}
/**
* Unregister the specified shortcode by given name.
*
* @param string $name
*/
public function unregister($name)
{
if ($this->exists($name)) {
$this->handlers->remove($name);
}
return $this;
}
/**
* Unregister all shortcodes.
*
* @return self
*/
public function destroy()
{
$this->handlers = new HandlerContainer();
return $this;
}
/**
* Strip any shortcodes.
*
* @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 contain the given name 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);
}
}