PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.15.5
Independent Analytics – WordPress Analytics Plugin v2.15.5
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / vendor / symfony / translation / Loader / MoFileLoader.php
independent-analytics / vendor / symfony / translation / Loader Last commit date
ArrayLoader.php 1 month ago CsvFileLoader.php 1 month ago FileLoader.php 1 month ago IcuDatFileLoader.php 1 month ago IcuResFileLoader.php 1 month ago IniFileLoader.php 1 month ago JsonFileLoader.php 1 month ago LoaderInterface.php 1 month ago MoFileLoader.php 1 month ago PhpFileLoader.php 1 month ago PoFileLoader.php 1 month ago QtFileLoader.php 1 month ago XliffFileLoader.php 1 month ago YamlFileLoader.php 1 month ago
MoFileLoader.php
116 lines
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11 namespace IAWPSCOPED\Symfony\Component\Translation\Loader;
12
13 use IAWPSCOPED\Symfony\Component\Translation\Exception\InvalidResourceException;
14 /**
15 * @copyright Copyright (c) 2010, Union of RAD http://union-of-rad.org (http://lithify.me/)
16 * @internal
17 */
18 class MoFileLoader extends FileLoader
19 {
20 /**
21 * Magic used for validating the format of an MO file as well as
22 * detecting if the machine used to create that file was little endian.
23 */
24 public const MO_LITTLE_ENDIAN_MAGIC = 0x950412de;
25 /**
26 * Magic used for validating the format of an MO file as well as
27 * detecting if the machine used to create that file was big endian.
28 */
29 public const MO_BIG_ENDIAN_MAGIC = 0xde120495;
30 /**
31 * The size of the header of an MO file in bytes.
32 */
33 public const MO_HEADER_SIZE = 28;
34 /**
35 * Parses machine object (MO) format, independent of the machine's endian it
36 * was created on. Both 32bit and 64bit systems are supported.
37 *
38 * {@inheritdoc}
39 */
40 protected function loadResource(string $resource) : array
41 {
42 $stream = \fopen($resource, 'r');
43 $stat = \fstat($stream);
44 if ($stat['size'] < self::MO_HEADER_SIZE) {
45 throw new InvalidResourceException('MO stream content has an invalid format.');
46 }
47 $magic = \unpack('V1', \fread($stream, 4));
48 $magic = \hexdec(\substr(\dechex(\current($magic)), -8));
49 if (self::MO_LITTLE_ENDIAN_MAGIC == $magic) {
50 $isBigEndian = \false;
51 } elseif (self::MO_BIG_ENDIAN_MAGIC == $magic) {
52 $isBigEndian = \true;
53 } else {
54 throw new InvalidResourceException('MO stream content has an invalid format.');
55 }
56 // formatRevision
57 $this->readLong($stream, $isBigEndian);
58 $count = $this->readLong($stream, $isBigEndian);
59 $offsetId = $this->readLong($stream, $isBigEndian);
60 $offsetTranslated = $this->readLong($stream, $isBigEndian);
61 // sizeHashes
62 $this->readLong($stream, $isBigEndian);
63 // offsetHashes
64 $this->readLong($stream, $isBigEndian);
65 $messages = [];
66 for ($i = 0; $i < $count; ++$i) {
67 $pluralId = null;
68 $translated = null;
69 \fseek($stream, $offsetId + $i * 8);
70 $length = $this->readLong($stream, $isBigEndian);
71 $offset = $this->readLong($stream, $isBigEndian);
72 if ($length < 1) {
73 continue;
74 }
75 \fseek($stream, $offset);
76 $singularId = \fread($stream, $length);
77 if (\str_contains($singularId, "\x00")) {
78 [$singularId, $pluralId] = \explode("\x00", $singularId);
79 }
80 \fseek($stream, $offsetTranslated + $i * 8);
81 $length = $this->readLong($stream, $isBigEndian);
82 $offset = $this->readLong($stream, $isBigEndian);
83 if ($length < 1) {
84 continue;
85 }
86 \fseek($stream, $offset);
87 $translated = \fread($stream, $length);
88 if (\str_contains($translated, "\x00")) {
89 $translated = \explode("\x00", $translated);
90 }
91 $ids = ['singular' => $singularId, 'plural' => $pluralId];
92 $item = \compact('ids', 'translated');
93 if (!empty($item['ids']['singular'])) {
94 $id = $item['ids']['singular'];
95 if (isset($item['ids']['plural'])) {
96 $id .= '|' . $item['ids']['plural'];
97 }
98 $messages[$id] = \stripcslashes(\implode('|', (array) $item['translated']));
99 }
100 }
101 \fclose($stream);
102 return \array_filter($messages);
103 }
104 /**
105 * Reads an unsigned long from stream respecting endianness.
106 *
107 * @param resource $stream
108 */
109 private function readLong($stream, bool $isBigEndian) : int
110 {
111 $result = \unpack($isBigEndian ? 'N1' : 'V1', \fread($stream, 4));
112 $result = \current($result);
113 return (int) \substr($result, -8);
114 }
115 }
116