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