PluginProbe
TablePress – Tables in WordPress made easy / 3.4
TablePress – Tables in WordPress made easy v3.4
3.4 3.3.4 3.3.3 3.3.2 3.3.1 trunk 1.12 1.14 1.9.2 2.0.4 2.1.7 2.1.8 2.2 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.3 2.3.1 2.3.2 2.4 2.4.1 2.4.2 2.4.3 All 45 releases
tablepress / libraries / vendor / PhpSpreadsheet / Calculation / TextData / CharacterConvert.php

CharacterConvert.php in TablePress – Tables in WordPress made easy 3.4, at libraries/vendor/PhpSpreadsheet/Calculation/TextData/CharacterConvert.php

157 lines 4.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace TablePress\PhpOffice\PhpSpreadsheet\Calculation\TextData;
4
5 use TablePress\PhpOffice\PhpSpreadsheet\Calculation\ArrayEnabled;
6 use TablePress\PhpOffice\PhpSpreadsheet\Calculation\Exception as CalcExp;
7 use TablePress\PhpOffice\PhpSpreadsheet\Calculation\Functions;
8 use TablePress\PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError;
9 use TablePress\PhpOffice\PhpSpreadsheet\Shared\StringHelper;
10
11 class CharacterConvert
12 {
13 use ArrayEnabled;
14
15 private static string $oneByteCharacterSet = 'Windows-1252';
16
17 /**
18 * CHAR.
19 *
20 * @param mixed $character Integer Value to convert to its character representation
21 * Or can be an array of values
22 *
23 * @return array<mixed>|string The character string
24 * If an array of values is passed as the argument, then the returned result will also be an array
25 * with the same dimensions
26 */
27 public static function character($character)
28 {
29 if (is_array($character)) {
30 return self::evaluateSingleArgumentArray([self::class, __FUNCTION__], $character);
31 }
32
33 return self::characterBoth($character, true);
34 }
35
36 /** @return array<mixed>|string
37 * @param mixed $character */
38 public static function characterUnicode($character)
39 {
40 if (is_array($character)) {
41 return self::evaluateSingleArgumentArray([self::class, __FUNCTION__], $character);
42 }
43
44 return self::characterBoth($character, false);
45 }
46
47 /**
48 * @param mixed $character
49 */
50 private static function characterBoth($character, bool $ansi = true): string
51 {
52 try {
53 $character = Helpers::validateInt($character, true);
54 } catch (CalcExp $e) {
55 return $e->getMessage();
56 }
57
58 if ($ansi && $character === 219 && self::$oneByteCharacterSet[0] === 'M') {
59 return '€';
60 }
61
62 $min = Functions::getCompatibilityMode() === Functions::COMPATIBILITY_OPENOFFICE ? 0 : 1;
63 if ($character < $min || ($ansi && $character > 255) || $character > 0x10FFFF) {
64 return ExcelError::VALUE();
65 }
66 if ($character > 0x10FFFD) { // last assigned
67 return ExcelError::NA();
68 }
69 if ($ansi) {
70 $result = chr($character);
71
72 return (string) iconv(self::$oneByteCharacterSet, 'UTF-8//IGNORE', $result);
73 }
74
75 return mb_chr($character, 'UTF-8');
76 }
77
78 /**
79 * CODE.
80 *
81 * @param mixed $characters String character to convert to its ASCII value
82 * Or can be an array of values
83 *
84 * @return array<mixed>|int|string A string if arguments are invalid
85 * If an array of values is passed as the argument, then the returned result will also be an array
86 * with the same dimensions
87 */
88 public static function code($characters)
89 {
90 if (is_array($characters)) {
91 return self::evaluateSingleArgumentArray([self::class, __FUNCTION__], $characters);
92 }
93 if (is_bool($characters) && Functions::getCompatibilityMode() === Functions::COMPATIBILITY_OPENOFFICE) {
94 $characters = $characters ? '1' : '0';
95 }
96
97 return self::codeBoth(StringHelper::convertToString($characters, true, '', true), true);
98 }
99
100 /** @return array<mixed>|int|string
101 * @param mixed $characters */
102 public static function codeUnicode($characters)
103 {
104 if (is_array($characters)) {
105 return self::evaluateSingleArgumentArray([self::class, __FUNCTION__], $characters);
106 }
107 if (is_bool($characters) && Functions::getCompatibilityMode() === Functions::COMPATIBILITY_OPENOFFICE) {
108 $characters = $characters ? '1' : '0';
109 }
110
111 return self::codeBoth(StringHelper::convertToString($characters, true, '', true), false);
112 }
113
114 /**
115 * @return int|string
116 */
117 private static function codeBoth(string $characters, bool $ansi = true)
118 {
119 try {
120 $characters = Helpers::extractString($characters, true);
121 } catch (CalcExp $e) {
122 return $e->getMessage();
123 }
124
125 if ($characters === '') {
126 return ExcelError::VALUE();
127 }
128
129 $character = $characters;
130 if (mb_strlen($characters, 'UTF-8') > 1) {
131 $character = mb_substr($characters, 0, 1, 'UTF-8');
132 }
133 if ($ansi && $character === '€' && self::$oneByteCharacterSet[0] === 'M') {
134 return 219;
135 }
136
137 $result = mb_ord($character, 'UTF-8');
138 if ($ansi) {
139 $result = iconv('UTF-8', self::$oneByteCharacterSet . '//IGNORE', $character);
140
141 return ($result !== '') ? ord("$result") : 63; // question mark
142 }
143
144 return $result;
145 }
146
147 public static function setWindowsCharacterSet(): void
148 {
149 self::$oneByteCharacterSet = 'Windows-1252';
150 }
151
152 public static function setMacCharacterSet(): void
153 {
154 self::$oneByteCharacterSet = 'MAC';
155 }
156 }
157