PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / 2.4.4
Booking for Appointments and Events Calendar – Amelia v2.4.4
2.4.4 2.4.3 2.4.2 2.4.1 2.4 trunk 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 1.2.29 1.2.3 1.2.30 1.2.31 1.2.32 1.2.33 1.2.34 1.2.35 1.2.36 1.2.37 1.2.38 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.3
ameliabooking / vendor / sabberworm / php-css-parser / src / OutputFormatter.php
ameliabooking / vendor / sabberworm / php-css-parser / src Last commit date
CSSList 6 months ago Comment 6 months ago Parsing 6 months ago Position 6 months ago Property 6 months ago Rule 6 months ago RuleSet 6 months ago Value 6 months ago CSSElement.php 6 months ago OutputFormat.php 6 months ago OutputFormatter.php 6 months ago Parser.php 6 months ago Renderable.php 6 months ago Settings.php 6 months ago
OutputFormatter.php
269 lines
1 <?php
2
3 namespace AmeliaVendor\Sabberworm\CSS;
4
5 use AmeliaVendor\Sabberworm\CSS\Comment\Commentable;
6 use AmeliaVendor\Sabberworm\CSS\Parsing\OutputException;
7
8 /**
9 * @internal since 8.8.0
10 */
11 class OutputFormatter
12 {
13 /**
14 * @var OutputFormat
15 */
16 private $oFormat;
17
18 public function __construct(OutputFormat $oFormat)
19 {
20 $this->oFormat = $oFormat;
21 }
22
23 /**
24 * @param string $sName
25 * @param string|null $sType
26 *
27 * @return string
28 */
29 public function space($sName, $sType = null)
30 {
31 $sSpaceString = $this->oFormat->get("Space$sName");
32 // If $sSpaceString is an array, we have multiple values configured
33 // depending on the type of object the space applies to
34 if (is_array($sSpaceString)) {
35 if ($sType !== null && isset($sSpaceString[$sType])) {
36 $sSpaceString = $sSpaceString[$sType];
37 } else {
38 $sSpaceString = reset($sSpaceString);
39 }
40 }
41 return $this->prepareSpace($sSpaceString);
42 }
43
44 /**
45 * @return string
46 */
47 public function spaceAfterRuleName()
48 {
49 return $this->space('AfterRuleName');
50 }
51
52 /**
53 * @return string
54 */
55 public function spaceBeforeRules()
56 {
57 return $this->space('BeforeRules');
58 }
59
60 /**
61 * @return string
62 */
63 public function spaceAfterRules()
64 {
65 return $this->space('AfterRules');
66 }
67
68 /**
69 * @return string
70 */
71 public function spaceBetweenRules()
72 {
73 return $this->space('BetweenRules');
74 }
75
76 /**
77 * @return string
78 */
79 public function spaceBeforeBlocks()
80 {
81 return $this->space('BeforeBlocks');
82 }
83
84 /**
85 * @return string
86 */
87 public function spaceAfterBlocks()
88 {
89 return $this->space('AfterBlocks');
90 }
91
92 /**
93 * @return string
94 */
95 public function spaceBetweenBlocks()
96 {
97 return $this->space('BetweenBlocks');
98 }
99
100 /**
101 * @return string
102 */
103 public function spaceBeforeSelectorSeparator()
104 {
105 return $this->space('BeforeSelectorSeparator');
106 }
107
108 /**
109 * @return string
110 */
111 public function spaceAfterSelectorSeparator()
112 {
113 return $this->space('AfterSelectorSeparator');
114 }
115
116 /**
117 * @param string $sSeparator
118 *
119 * @return string
120 */
121 public function spaceBeforeListArgumentSeparator($sSeparator)
122 {
123 $spaceForSeparator = $this->oFormat->getSpaceBeforeListArgumentSeparators();
124 if (isset($spaceForSeparator[$sSeparator])) {
125 return $spaceForSeparator[$sSeparator];
126 }
127
128 return $this->space('BeforeListArgumentSeparator', $sSeparator);
129 }
130
131 /**
132 * @param string $sSeparator
133 *
134 * @return string
135 */
136 public function spaceAfterListArgumentSeparator($sSeparator)
137 {
138 $spaceForSeparator = $this->oFormat->getSpaceAfterListArgumentSeparators();
139 if (isset($spaceForSeparator[$sSeparator])) {
140 return $spaceForSeparator[$sSeparator];
141 }
142
143 return $this->space('AfterListArgumentSeparator', $sSeparator);
144 }
145
146 /**
147 * @return string
148 */
149 public function spaceBeforeOpeningBrace()
150 {
151 return $this->space('BeforeOpeningBrace');
152 }
153
154 /**
155 * Runs the given code, either swallowing or passing exceptions, depending on the `bIgnoreExceptions` setting.
156 *
157 * @param string $cCode the name of the function to call
158 *
159 * @return string|null
160 */
161 public function safely($cCode)
162 {
163 if ($this->oFormat->get('IgnoreExceptions')) {
164 // If output exceptions are ignored, run the code with exception guards
165 try {
166 return $cCode();
167 } catch (OutputException $e) {
168 return null;
169 } // Do nothing
170 } else {
171 // Run the code as-is
172 return $cCode();
173 }
174 }
175
176 /**
177 * Clone of the `implode` function, but calls `render` with the current output format instead of `__toString()`.
178 *
179 * @param string $sSeparator
180 * @param array<array-key, Renderable|string> $aValues
181 * @param bool $bIncreaseLevel
182 *
183 * @return string
184 */
185 public function implode($sSeparator, array $aValues, $bIncreaseLevel = false)
186 {
187 $sResult = '';
188 $oFormat = $this->oFormat;
189 if ($bIncreaseLevel) {
190 $oFormat = $oFormat->nextLevel();
191 }
192 $bIsFirst = true;
193 foreach ($aValues as $mValue) {
194 if ($bIsFirst) {
195 $bIsFirst = false;
196 } else {
197 $sResult .= $sSeparator;
198 }
199 if ($mValue instanceof Renderable) {
200 $sResult .= $mValue->render($oFormat);
201 } else {
202 $sResult .= $mValue;
203 }
204 }
205 return $sResult;
206 }
207
208 /**
209 * @param string $sString
210 *
211 * @return string
212 */
213 public function removeLastSemicolon($sString)
214 {
215 if ($this->oFormat->get('SemicolonAfterLastRule')) {
216 return $sString;
217 }
218 $sString = explode(';', $sString);
219 if (count($sString) < 2) {
220 return $sString[0];
221 }
222 $sLast = array_pop($sString);
223 $sNextToLast = array_pop($sString);
224 array_push($sString, $sNextToLast . $sLast);
225 return implode(';', $sString);
226 }
227
228 /**
229 *
230 * @param array<Commentable> $aComments
231 *
232 * @return string
233 */
234 public function comments(Commentable $oCommentable)
235 {
236 if (!$this->oFormat->bRenderComments) {
237 return '';
238 }
239
240 $sResult = '';
241 $aComments = $oCommentable->getComments();
242 $iLastCommentIndex = count($aComments) - 1;
243
244 foreach ($aComments as $i => $oComment) {
245 $sResult .= $oComment->render($this->oFormat);
246 $sResult .= $i === $iLastCommentIndex ? $this->spaceAfterBlocks() : $this->spaceBetweenBlocks();
247 }
248 return $sResult;
249 }
250
251 /**
252 * @param string $sSpaceString
253 *
254 * @return string
255 */
256 private function prepareSpace($sSpaceString)
257 {
258 return str_replace("\n", "\n" . $this->indent(), $sSpaceString);
259 }
260
261 /**
262 * @return string
263 */
264 private function indent()
265 {
266 return str_repeat($this->oFormat->sIndentation, $this->oFormat->getIndentationLevel());
267 }
268 }
269