PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.12.13
MailPoet – Newsletters, Email Marketing, and Automation v5.12.13
5.32.0 5.31.0 5.30.0 5.29.0 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 / polyfill-intl-normalizer / Normalizer.php
mailpoet / vendor-prefixed / symfony / polyfill-intl-normalizer Last commit date
Resources 1 year ago Normalizer.php 1 year ago bootstrap.php 1 year ago bootstrap80.php 1 year ago index.php 3 years ago
Normalizer.php
242 lines
1 <?php
2 namespace MailPoetVendor\Symfony\Polyfill\Intl\Normalizer;
3 if (!defined('ABSPATH')) exit;
4 class Normalizer
5 {
6 public const FORM_D = \MailPoetVendor\Normalizer::FORM_D;
7 public const FORM_KD = \MailPoetVendor\Normalizer::FORM_KD;
8 public const FORM_C = \MailPoetVendor\Normalizer::FORM_C;
9 public const FORM_KC = \MailPoetVendor\Normalizer::FORM_KC;
10 public const NFD = \MailPoetVendor\Normalizer::NFD;
11 public const NFKD = \MailPoetVendor\Normalizer::NFKD;
12 public const NFC = \MailPoetVendor\Normalizer::NFC;
13 public const NFKC = \MailPoetVendor\Normalizer::NFKC;
14 private static $C;
15 private static $D;
16 private static $KD;
17 private static $cC;
18 private static $ulenMask = ["\xc0" => 2, "\xd0" => 2, "\xe0" => 3, "\xf0" => 4];
19 private static $ASCII = " eiasntrolud][cmp'\ng|hv.fb,:=-q10C2*yx)(L9AS/P\"EjMIk3>5T<D4}B{8FwR67UGN;JzV#HOW_&!K?XQ%Y\\\tZ+~^\$@`\x00\x01\x02\x03\x04\x05\x06\x07\x08\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f";
20 public static function isNormalized(string $s, int $form = self::FORM_C)
21 {
22 if (!\in_array($form, [self::NFD, self::NFKD, self::NFC, self::NFKC])) {
23 return \false;
24 }
25 if (!isset($s[\strspn($s, self::$ASCII)])) {
26 return \true;
27 }
28 if (self::NFC == $form && \preg_match('//u', $s) && !\preg_match('/[^\\x00-\\x{2FF}]/u', $s)) {
29 return \true;
30 }
31 return self::normalize($s, $form) === $s;
32 }
33 public static function normalize(string $s, int $form = self::FORM_C)
34 {
35 if (!\preg_match('//u', $s)) {
36 return \false;
37 }
38 switch ($form) {
39 case self::NFC:
40 $C = \true;
41 $K = \false;
42 break;
43 case self::NFD:
44 $C = \false;
45 $K = \false;
46 break;
47 case self::NFKC:
48 $C = \true;
49 $K = \true;
50 break;
51 case self::NFKD:
52 $C = \false;
53 $K = \true;
54 break;
55 default:
56 if (\defined('\MailPoetVendor\Normalizer::NONE') && \MailPoetVendor\Normalizer::NONE == $form) {
57 return $s;
58 }
59 if (80000 > \PHP_VERSION_ID) {
60 return \false;
61 }
62 throw new \ValueError('normalizer_normalize(): Argument #2 ($form) must be a a valid normalization form');
63 }
64 if ('' === $s) {
65 return '';
66 }
67 if ($K && null === self::$KD) {
68 self::$KD = self::getData('compatibilityDecomposition');
69 }
70 if (null === self::$D) {
71 self::$D = self::getData('canonicalDecomposition');
72 self::$cC = self::getData('combiningClass');
73 }
74 if (null !== ($mbEncoding = 2 & (int) \ini_get('mbstring.func_overload') ? \mb_internal_encoding() : null)) {
75 \mb_internal_encoding('8bit');
76 }
77 $r = self::decompose($s, $K);
78 if ($C) {
79 if (null === self::$C) {
80 self::$C = self::getData('canonicalComposition');
81 }
82 $r = self::recompose($r);
83 }
84 if (null !== $mbEncoding) {
85 \mb_internal_encoding($mbEncoding);
86 }
87 return $r;
88 }
89 private static function recompose($s)
90 {
91 $ASCII = self::$ASCII;
92 $compMap = self::$C;
93 $combClass = self::$cC;
94 $ulenMask = self::$ulenMask;
95 $result = $tail = '';
96 $i = $s[0] < "\x80" ? 1 : $ulenMask[$s[0] & "\xf0"];
97 $len = \strlen($s);
98 $lastUchr = \substr($s, 0, $i);
99 $lastUcls = isset($combClass[$lastUchr]) ? 256 : 0;
100 while ($i < $len) {
101 if ($s[$i] < "\x80") {
102 // ASCII chars
103 if ($tail) {
104 $lastUchr .= $tail;
105 $tail = '';
106 }
107 if ($j = \strspn($s, $ASCII, $i + 1)) {
108 $lastUchr .= \substr($s, $i, $j);
109 $i += $j;
110 }
111 $result .= $lastUchr;
112 $lastUchr = $s[$i];
113 $lastUcls = 0;
114 ++$i;
115 continue;
116 }
117 $ulen = $ulenMask[$s[$i] & "\xf0"];
118 $uchr = \substr($s, $i, $ulen);
119 if ($lastUchr < "ᄀ" || "ᄒ" < $lastUchr || $uchr < "�
120 �" || "�
121 �" < $uchr || $lastUcls) {
122 // Table lookup and combining chars composition
123 $ucls = $combClass[$uchr] ?? 0;
124 if (isset($compMap[$lastUchr . $uchr]) && (!$lastUcls || $lastUcls < $ucls)) {
125 $lastUchr = $compMap[$lastUchr . $uchr];
126 } elseif ($lastUcls = $ucls) {
127 $tail .= $uchr;
128 } else {
129 if ($tail) {
130 $lastUchr .= $tail;
131 $tail = '';
132 }
133 $result .= $lastUchr;
134 $lastUchr = $uchr;
135 }
136 } else {
137 // Hangul chars
138 $L = \ord($lastUchr[2]) - 0x80;
139 $V = \ord($uchr[2]) - 0xa1;
140 $T = 0;
141 $uchr = \substr($s, $i + $ulen, 3);
142 if ("" <= $uchr && $uchr <= "") {
143 $T = \ord($uchr[2]) - 0xa7;
144 0 > $T && ($T += 0x40);
145 $ulen += 3;
146 }
147 $L = 0xac00 + ($L * 21 + $V) * 28 + $T;
148 $lastUchr = \chr(0xe0 | $L >> 12) . \chr(0x80 | $L >> 6 & 0x3f) . \chr(0x80 | $L & 0x3f);
149 }
150 $i += $ulen;
151 }
152 return $result . $lastUchr . $tail;
153 }
154 private static function decompose($s, $c)
155 {
156 $result = '';
157 $ASCII = self::$ASCII;
158 $decompMap = self::$D;
159 $combClass = self::$cC;
160 $ulenMask = self::$ulenMask;
161 if ($c) {
162 $compatMap = self::$KD;
163 }
164 $c = [];
165 $i = 0;
166 $len = \strlen($s);
167 while ($i < $len) {
168 if ($s[$i] < "\x80") {
169 // ASCII chars
170 if ($c) {
171 \ksort($c);
172 $result .= \implode('', $c);
173 $c = [];
174 }
175 $j = 1 + \strspn($s, $ASCII, $i + 1);
176 $result .= \substr($s, $i, $j);
177 $i += $j;
178 continue;
179 }
180 $ulen = $ulenMask[$s[$i] & "\xf0"];
181 $uchr = \substr($s, $i, $ulen);
182 $i += $ulen;
183 if ($uchr < "" || "" < $uchr) {
184 // Table lookup
185 if ($uchr !== ($j = $compatMap[$uchr] ?? $decompMap[$uchr] ?? $uchr)) {
186 $uchr = $j;
187 $j = \strlen($uchr);
188 $ulen = $uchr[0] < "\x80" ? 1 : $ulenMask[$uchr[0] & "\xf0"];
189 if ($ulen != $j) {
190 // Put trailing chars in $s
191 $j -= $ulen;
192 $i -= $j;
193 if (0 > $i) {
194 $s = \str_repeat(' ', -$i) . $s;
195 $len -= $i;
196 $i = 0;
197 }
198 while ($j--) {
199 $s[$i + $j] = $uchr[$ulen + $j];
200 }
201 $uchr = \substr($uchr, 0, $ulen);
202 }
203 }
204 if (isset($combClass[$uchr])) {
205 // Combining chars, for sorting
206 if (!isset($c[$combClass[$uchr]])) {
207 $c[$combClass[$uchr]] = '';
208 }
209 $c[$combClass[$uchr]] .= $uchr;
210 continue;
211 }
212 } else {
213 // Hangul chars
214 $uchr = \unpack('C*', $uchr);
215 $j = ($uchr[1] - 224 << 12) + ($uchr[2] - 128 << 6) + $uchr[3] - 0xac80;
216 $uchr = "\xe1\x84" . \chr(0x80 + (int) ($j / 588)) . "\xe1\x85" . \chr(0xa1 + (int) ($j % 588 / 28));
217 if ($j %= 28) {
218 $uchr .= $j < 25 ? "\xe1\x86" . \chr(0xa7 + $j) : "\xe1\x87" . \chr(0x67 + $j);
219 }
220 }
221 if ($c) {
222 \ksort($c);
223 $result .= \implode('', $c);
224 $c = [];
225 }
226 $result .= $uchr;
227 }
228 if ($c) {
229 \ksort($c);
230 $result .= \implode('', $c);
231 }
232 return $result;
233 }
234 private static function getData($file)
235 {
236 if (\file_exists($file = __DIR__ . '/Resources/unidata/' . $file . '.php')) {
237 return require $file;
238 }
239 return \false;
240 }
241 }
242