PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 10.2.2
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v10.2.2
11.1.1 11.1.0 11.0.5 11.0.4 11.0.3 11.0.2 11.0.1 11.0.0 10.11.1 10.11.0 10.10.2 10.10.1 10.10.0 10.9.1 trunk 10.0.0 10.0.1 10.1.0 10.1.1 10.1.2 10.1.3 10.1.4 10.2.0 10.2.1 10.2.2 All 62 releases
acymailing / back / Libraries / Sabberworm / CSS / src / OutputFormatter.php

OutputFormatter.php in AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress 10.2.2, at back/Libraries/Sabberworm/CSS/src/OutputFormatter.php

232 lines 5.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Sabberworm\CSS;
4
5 use Sabberworm\CSS\Parsing\OutputException;
6
7 class OutputFormatter
8 {
9 /**
10 * @var OutputFormat
11 */
12 private $oFormat;
13
14 public function __construct(OutputFormat $oFormat)
15 {
16 $this->oFormat = $oFormat;
17 }
18
19 /**
20 * @param string $sName
21 * @param string|null $sType
22 *
23 * @return string
24 */
25 public function space($sName, $sType = null)
26 {
27 $sSpaceString = $this->oFormat->get("Space$sName");
28 // If $sSpaceString is an array, we have multiple values configured
29 // depending on the type of object the space applies to
30 if (is_array($sSpaceString)) {
31 if ($sType !== null && isset($sSpaceString[$sType])) {
32 $sSpaceString = $sSpaceString[$sType];
33 } else {
34 $sSpaceString = reset($sSpaceString);
35 }
36 }
37 return $this->prepareSpace($sSpaceString);
38 }
39
40 /**
41 * @return string
42 */
43 public function spaceAfterRuleName()
44 {
45 return $this->space('AfterRuleName');
46 }
47
48 /**
49 * @return string
50 */
51 public function spaceBeforeRules()
52 {
53 return $this->space('BeforeRules');
54 }
55
56 /**
57 * @return string
58 */
59 public function spaceAfterRules()
60 {
61 return $this->space('AfterRules');
62 }
63
64 /**
65 * @return string
66 */
67 public function spaceBetweenRules()
68 {
69 return $this->space('BetweenRules');
70 }
71
72 /**
73 * @return string
74 */
75 public function spaceBeforeBlocks()
76 {
77 return $this->space('BeforeBlocks');
78 }
79
80 /**
81 * @return string
82 */
83 public function spaceAfterBlocks()
84 {
85 return $this->space('AfterBlocks');
86 }
87
88 /**
89 * @return string
90 */
91 public function spaceBetweenBlocks()
92 {
93 return $this->space('BetweenBlocks');
94 }
95
96 /**
97 * @return string
98 */
99 public function spaceBeforeSelectorSeparator()
100 {
101 return $this->space('BeforeSelectorSeparator');
102 }
103
104 /**
105 * @return string
106 */
107 public function spaceAfterSelectorSeparator()
108 {
109 return $this->space('AfterSelectorSeparator');
110 }
111
112 /**
113 * @param string $sSeparator
114 *
115 * @return string
116 */
117 public function spaceBeforeListArgumentSeparator($sSeparator)
118 {
119 return $this->space('BeforeListArgumentSeparator', $sSeparator);
120 }
121
122 /**
123 * @param string $sSeparator
124 *
125 * @return string
126 */
127 public function spaceAfterListArgumentSeparator($sSeparator)
128 {
129 return $this->space('AfterListArgumentSeparator', $sSeparator);
130 }
131
132 /**
133 * @return string
134 */
135 public function spaceBeforeOpeningBrace()
136 {
137 return $this->space('BeforeOpeningBrace');
138 }
139
140 /**
141 * Runs the given code, either swallowing or passing exceptions, depending on the `bIgnoreExceptions` setting.
142 *
143 * @param string $cCode the name of the function to call
144 *
145 * @return string|null
146 */
147 public function safely($cCode)
148 {
149 if ($this->oFormat->get('IgnoreExceptions')) {
150 // If output exceptions are ignored, run the code with exception guards
151 try {
152 return $cCode();
153 } catch (OutputException $e) {
154 return null;
155 } // Do nothing
156 } else {
157 // Run the code as-is
158 return $cCode();
159 }
160 }
161
162 /**
163 * Clone of the `implode` function, but calls `render` with the current output format instead of `__toString()`.
164 *
165 * @param string $sSeparator
166 * @param array<array-key, Renderable|string> $aValues
167 * @param bool $bIncreaseLevel
168 *
169 * @return string
170 */
171 public function implode($sSeparator, array $aValues, $bIncreaseLevel = false)
172 {
173 $sResult = '';
174 $oFormat = $this->oFormat;
175 if ($bIncreaseLevel) {
176 $oFormat = $oFormat->nextLevel();
177 }
178 $bIsFirst = true;
179 foreach ($aValues as $mValue) {
180 if ($bIsFirst) {
181 $bIsFirst = false;
182 } else {
183 $sResult .= $sSeparator;
184 }
185 if ($mValue instanceof Renderable) {
186 $sResult .= $mValue->render($oFormat);
187 } else {
188 $sResult .= $mValue;
189 }
190 }
191 return $sResult;
192 }
193
194 /**
195 * @param string $sString
196 *
197 * @return string
198 */
199 public function removeLastSemicolon($sString)
200 {
201 if ($this->oFormat->get('SemicolonAfterLastRule')) {
202 return $sString;
203 }
204 $sString = explode(';', $sString);
205 if (count($sString) < 2) {
206 return $sString[0];
207 }
208 $sLast = array_pop($sString);
209 $sNextToLast = array_pop($sString);
210 array_push($sString, $sNextToLast . $sLast);
211 return implode(';', $sString);
212 }
213
214 /**
215 * @param string $sSpaceString
216 *
217 * @return string
218 */
219 private function prepareSpace($sSpaceString)
220 {
221 return str_replace("\n", "\n" . $this->indent(), $sSpaceString);
222 }
223
224 /**
225 * @return string
226 */
227 private function indent()
228 {
229 return str_repeat($this->oFormat->sIndentation, $this->oFormat->level());
230 }
231 }
232