PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.23.1
MailPoet – Newsletters, Email Marketing, and Automation v5.23.1
5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / vendor-prefixed / symfony / string / UnicodeString.php
mailpoet / vendor-prefixed / symfony / string Last commit date
Exception 1 year ago Inflector 6 months ago Resources 6 months ago Slugger 1 year ago AbstractString.php 1 year ago AbstractUnicodeString.php 6 months ago ByteString.php 1 year ago CodePointString.php 1 year ago LazyString.php 1 year ago UnicodeString.php 1 year ago index.php 1 year ago
UnicodeString.php
275 lines
1 <?php
2 namespace MailPoetVendor\Symfony\Component\String;
3 if (!defined('ABSPATH')) exit;
4 use MailPoetVendor\Symfony\Component\String\Exception\ExceptionInterface;
5 use MailPoetVendor\Symfony\Component\String\Exception\InvalidArgumentException;
6 class UnicodeString extends AbstractUnicodeString
7 {
8 public function __construct(string $string = '')
9 {
10 $this->string = \normalizer_is_normalized($string) ? $string : \normalizer_normalize($string);
11 if (\false === $this->string) {
12 throw new InvalidArgumentException('Invalid UTF-8 string.');
13 }
14 }
15 public function append(string ...$suffix) : AbstractString
16 {
17 $str = clone $this;
18 $str->string = $this->string . (1 >= \count($suffix) ? $suffix[0] ?? '' : \implode('', $suffix));
19 \normalizer_is_normalized($str->string) ?: ($str->string = \normalizer_normalize($str->string));
20 if (\false === $str->string) {
21 throw new InvalidArgumentException('Invalid UTF-8 string.');
22 }
23 return $str;
24 }
25 public function chunk(int $length = 1) : array
26 {
27 if (1 > $length) {
28 throw new InvalidArgumentException('The chunk length must be greater than zero.');
29 }
30 if ('' === $this->string) {
31 return [];
32 }
33 $rx = '/(';
34 while (65535 < $length) {
35 $rx .= '\\X{65535}';
36 $length -= 65535;
37 }
38 $rx .= '\\X{' . $length . '})/u';
39 $str = clone $this;
40 $chunks = [];
41 foreach (\preg_split($rx, $this->string, -1, \PREG_SPLIT_DELIM_CAPTURE | \PREG_SPLIT_NO_EMPTY) as $chunk) {
42 $str->string = $chunk;
43 $chunks[] = clone $str;
44 }
45 return $chunks;
46 }
47 public function endsWith($suffix) : bool
48 {
49 if ($suffix instanceof AbstractString) {
50 $suffix = $suffix->string;
51 } elseif (\is_array($suffix) || $suffix instanceof \Traversable) {
52 return parent::endsWith($suffix);
53 } else {
54 $suffix = (string) $suffix;
55 }
56 $form = null === $this->ignoreCase ? \Normalizer::NFD : \Normalizer::NFC;
57 \normalizer_is_normalized($suffix, $form) ?: ($suffix = \normalizer_normalize($suffix, $form));
58 if ('' === $suffix || \false === $suffix) {
59 return \false;
60 }
61 if ($this->ignoreCase) {
62 return 0 === \mb_stripos(\grapheme_extract($this->string, \strlen($suffix), \GRAPHEME_EXTR_MAXBYTES, \strlen($this->string) - \strlen($suffix)), $suffix, 0, 'UTF-8');
63 }
64 return $suffix === \grapheme_extract($this->string, \strlen($suffix), \GRAPHEME_EXTR_MAXBYTES, \strlen($this->string) - \strlen($suffix));
65 }
66 public function equalsTo($string) : bool
67 {
68 if ($string instanceof AbstractString) {
69 $string = $string->string;
70 } elseif (\is_array($string) || $string instanceof \Traversable) {
71 return parent::equalsTo($string);
72 } else {
73 $string = (string) $string;
74 }
75 $form = null === $this->ignoreCase ? \Normalizer::NFD : \Normalizer::NFC;
76 \normalizer_is_normalized($string, $form) ?: ($string = \normalizer_normalize($string, $form));
77 if ('' !== $string && \false !== $string && $this->ignoreCase) {
78 return \strlen($string) === \strlen($this->string) && 0 === \mb_stripos($this->string, $string, 0, 'UTF-8');
79 }
80 return $string === $this->string;
81 }
82 public function indexOf($needle, int $offset = 0) : ?int
83 {
84 if ($needle instanceof AbstractString) {
85 $needle = $needle->string;
86 } elseif (\is_array($needle) || $needle instanceof \Traversable) {
87 return parent::indexOf($needle, $offset);
88 } else {
89 $needle = (string) $needle;
90 }
91 $form = null === $this->ignoreCase ? \Normalizer::NFD : \Normalizer::NFC;
92 \normalizer_is_normalized($needle, $form) ?: ($needle = \normalizer_normalize($needle, $form));
93 if ('' === $needle || \false === $needle) {
94 return null;
95 }
96 try {
97 $i = $this->ignoreCase ? \grapheme_stripos($this->string, $needle, $offset) : \grapheme_strpos($this->string, $needle, $offset);
98 } catch (\ValueError $e) {
99 return null;
100 }
101 return \false === $i ? null : $i;
102 }
103 public function indexOfLast($needle, int $offset = 0) : ?int
104 {
105 if ($needle instanceof AbstractString) {
106 $needle = $needle->string;
107 } elseif (\is_array($needle) || $needle instanceof \Traversable) {
108 return parent::indexOfLast($needle, $offset);
109 } else {
110 $needle = (string) $needle;
111 }
112 $form = null === $this->ignoreCase ? \Normalizer::NFD : \Normalizer::NFC;
113 \normalizer_is_normalized($needle, $form) ?: ($needle = \normalizer_normalize($needle, $form));
114 if ('' === $needle || \false === $needle) {
115 return null;
116 }
117 $string = $this->string;
118 if (0 > $offset) {
119 // workaround https://bugs.php.net/74264
120 if (0 > ($offset += \grapheme_strlen($needle))) {
121 $string = \grapheme_substr($string, 0, $offset);
122 }
123 $offset = 0;
124 }
125 $i = $this->ignoreCase ? \grapheme_strripos($string, $needle, $offset) : \grapheme_strrpos($string, $needle, $offset);
126 return \false === $i ? null : $i;
127 }
128 public function join(array $strings, ?string $lastGlue = null) : AbstractString
129 {
130 $str = parent::join($strings, $lastGlue);
131 \normalizer_is_normalized($str->string) ?: ($str->string = \normalizer_normalize($str->string));
132 return $str;
133 }
134 public function length() : int
135 {
136 return \grapheme_strlen($this->string);
137 }
138 public function normalize(int $form = self::NFC) : parent
139 {
140 $str = clone $this;
141 if (\in_array($form, [self::NFC, self::NFKC], \true)) {
142 \normalizer_is_normalized($str->string, $form) ?: ($str->string = \normalizer_normalize($str->string, $form));
143 } elseif (!\in_array($form, [self::NFD, self::NFKD], \true)) {
144 throw new InvalidArgumentException('Unsupported normalization form.');
145 } elseif (!\normalizer_is_normalized($str->string, $form)) {
146 $str->string = \normalizer_normalize($str->string, $form);
147 $str->ignoreCase = null;
148 }
149 return $str;
150 }
151 public function prepend(string ...$prefix) : AbstractString
152 {
153 $str = clone $this;
154 $str->string = (1 >= \count($prefix) ? $prefix[0] ?? '' : \implode('', $prefix)) . $this->string;
155 \normalizer_is_normalized($str->string) ?: ($str->string = \normalizer_normalize($str->string));
156 if (\false === $str->string) {
157 throw new InvalidArgumentException('Invalid UTF-8 string.');
158 }
159 return $str;
160 }
161 public function replace(string $from, string $to) : AbstractString
162 {
163 $str = clone $this;
164 \normalizer_is_normalized($from) ?: ($from = \normalizer_normalize($from));
165 if ('' !== $from && \false !== $from) {
166 $tail = $str->string;
167 $result = '';
168 $indexOf = $this->ignoreCase ? 'grapheme_stripos' : 'grapheme_strpos';
169 while ('' !== $tail && \false !== ($i = $indexOf($tail, $from))) {
170 $slice = \grapheme_substr($tail, 0, $i);
171 $result .= $slice . $to;
172 $tail = \substr($tail, \strlen($slice) + \strlen($from));
173 }
174 $str->string = $result . $tail;
175 \normalizer_is_normalized($str->string) ?: ($str->string = \normalizer_normalize($str->string));
176 if (\false === $str->string) {
177 throw new InvalidArgumentException('Invalid UTF-8 string.');
178 }
179 }
180 return $str;
181 }
182 public function replaceMatches(string $fromRegexp, $to) : AbstractString
183 {
184 $str = parent::replaceMatches($fromRegexp, $to);
185 \normalizer_is_normalized($str->string) ?: ($str->string = \normalizer_normalize($str->string));
186 return $str;
187 }
188 public function slice(int $start = 0, ?int $length = null) : AbstractString
189 {
190 $str = clone $this;
191 if (\PHP_VERSION_ID < 80000 && 0 > $start && \grapheme_strlen($this->string) < -$start) {
192 $start = 0;
193 }
194 $str->string = (string) \grapheme_substr($this->string, $start, $length ?? 2147483647);
195 return $str;
196 }
197 public function splice(string $replacement, int $start = 0, ?int $length = null) : AbstractString
198 {
199 $str = clone $this;
200 if (\PHP_VERSION_ID < 80000 && 0 > $start && \grapheme_strlen($this->string) < -$start) {
201 $start = 0;
202 }
203 $start = $start ? \strlen(\grapheme_substr($this->string, 0, $start)) : 0;
204 $length = $length ? \strlen(\grapheme_substr($this->string, $start, $length ?? 2147483647)) : $length;
205 $str->string = \substr_replace($this->string, $replacement, $start, $length ?? 2147483647);
206 \normalizer_is_normalized($str->string) ?: ($str->string = \normalizer_normalize($str->string));
207 if (\false === $str->string) {
208 throw new InvalidArgumentException('Invalid UTF-8 string.');
209 }
210 return $str;
211 }
212 public function split(string $delimiter, ?int $limit = null, ?int $flags = null) : array
213 {
214 if (1 > ($limit = $limit ?? 2147483647)) {
215 throw new InvalidArgumentException('Split limit must be a positive integer.');
216 }
217 if ('' === $delimiter) {
218 throw new InvalidArgumentException('Split delimiter is empty.');
219 }
220 if (null !== $flags) {
221 return parent::split($delimiter . 'u', $limit, $flags);
222 }
223 \normalizer_is_normalized($delimiter) ?: ($delimiter = \normalizer_normalize($delimiter));
224 if (\false === $delimiter) {
225 throw new InvalidArgumentException('Split delimiter is not a valid UTF-8 string.');
226 }
227 $str = clone $this;
228 $tail = $this->string;
229 $chunks = [];
230 $indexOf = $this->ignoreCase ? 'grapheme_stripos' : 'grapheme_strpos';
231 while (1 < $limit && \false !== ($i = $indexOf($tail, $delimiter))) {
232 $str->string = \grapheme_substr($tail, 0, $i);
233 $chunks[] = clone $str;
234 $tail = \substr($tail, \strlen($str->string) + \strlen($delimiter));
235 --$limit;
236 }
237 $str->string = $tail;
238 $chunks[] = clone $str;
239 return $chunks;
240 }
241 public function startsWith($prefix) : bool
242 {
243 if ($prefix instanceof AbstractString) {
244 $prefix = $prefix->string;
245 } elseif (\is_array($prefix) || $prefix instanceof \Traversable) {
246 return parent::startsWith($prefix);
247 } else {
248 $prefix = (string) $prefix;
249 }
250 $form = null === $this->ignoreCase ? \Normalizer::NFD : \Normalizer::NFC;
251 \normalizer_is_normalized($prefix, $form) ?: ($prefix = \normalizer_normalize($prefix, $form));
252 if ('' === $prefix || \false === $prefix) {
253 return \false;
254 }
255 if ($this->ignoreCase) {
256 return 0 === \mb_stripos(\grapheme_extract($this->string, \strlen($prefix), \GRAPHEME_EXTR_MAXBYTES), $prefix, 0, 'UTF-8');
257 }
258 return $prefix === \grapheme_extract($this->string, \strlen($prefix), \GRAPHEME_EXTR_MAXBYTES);
259 }
260 public function __wakeup()
261 {
262 if (!\is_string($this->string)) {
263 throw new \BadMethodCallException('Cannot unserialize ' . __CLASS__);
264 }
265 \normalizer_is_normalized($this->string) ?: ($this->string = \normalizer_normalize($this->string));
266 }
267 public function __clone()
268 {
269 if (null === $this->ignoreCase) {
270 \normalizer_is_normalized($this->string) ?: ($this->string = \normalizer_normalize($this->string));
271 }
272 $this->ignoreCase = \false;
273 }
274 }
275