← All changes
|
back/Libraries/Sabberworm/CSS/src/OutputFormat.php
+0
-334
10.2.2
→
11.1.1
View file →
| @@ -1,334 +1,0 @@ | ||
| 1 | -<?php | |
| 2 | - | |
| 3 | -namespace Sabberworm\CSS; | |
| 4 | - | |
| 5 | -/** | |
| 6 | - * Class OutputFormat | |
| 7 | - * | |
| 8 | - * @method OutputFormat setSemicolonAfterLastRule(bool $bSemicolonAfterLastRule) Set whether semicolons are added after | |
| 9 | - * last rule. | |
| 10 | - */ | |
| 11 | -class OutputFormat | |
| 12 | -{ | |
| 13 | - /** | |
| 14 | - * Value format: `"` means double-quote, `'` means single-quote | |
| 15 | - * | |
| 16 | - * @var string | |
| 17 | - */ | |
| 18 | - public $sStringQuotingType = '"'; | |
| 19 | - | |
| 20 | - /** | |
| 21 | - * Output RGB colors in hash notation if possible | |
| 22 | - * | |
| 23 | - * @var string | |
| 24 | - */ | |
| 25 | - public $bRGBHashNotation = true; | |
| 26 | - | |
| 27 | - /** | |
| 28 | - * Declaration format | |
| 29 | - * | |
| 30 | - * Semicolon after the last rule of a declaration block can be omitted. To do that, set this false. | |
| 31 | - * | |
| 32 | - * @var bool | |
| 33 | - */ | |
| 34 | - public $bSemicolonAfterLastRule = true; | |
| 35 | - | |
| 36 | - /** | |
| 37 | - * Spacing | |
| 38 | - * Note that these strings are not sanity-checked: the value should only consist of whitespace | |
| 39 | - * Any newline character will be indented according to the current level. | |
| 40 | - * The triples (After, Before, Between) can be set using a wildcard (e.g. `$oFormat->set('Space*Rules', "\n");`) | |
| 41 | - */ | |
| 42 | - public $sSpaceAfterRuleName = ' '; | |
| 43 | - | |
| 44 | - /** | |
| 45 | - * @var string | |
| 46 | - */ | |
| 47 | - public $sSpaceBeforeRules = ''; | |
| 48 | - | |
| 49 | - /** | |
| 50 | - * @var string | |
| 51 | - */ | |
| 52 | - public $sSpaceAfterRules = ''; | |
| 53 | - | |
| 54 | - /** | |
| 55 | - * @var string | |
| 56 | - */ | |
| 57 | - public $sSpaceBetweenRules = ''; | |
| 58 | - | |
| 59 | - /** | |
| 60 | - * @var string | |
| 61 | - */ | |
| 62 | - public $sSpaceBeforeBlocks = ''; | |
| 63 | - | |
| 64 | - /** | |
| 65 | - * @var string | |
| 66 | - */ | |
| 67 | - public $sSpaceAfterBlocks = ''; | |
| 68 | - | |
| 69 | - /** | |
| 70 | - * @var string | |
| 71 | - */ | |
| 72 | - public $sSpaceBetweenBlocks = "\n"; | |
| 73 | - | |
| 74 | - /** | |
| 75 | - * Content injected in and around at-rule blocks. | |
| 76 | - * | |
| 77 | - * @var string | |
| 78 | - */ | |
| 79 | - public $sBeforeAtRuleBlock = ''; | |
| 80 | - | |
| 81 | - /** | |
| 82 | - * @var string | |
| 83 | - */ | |
| 84 | - public $sAfterAtRuleBlock = ''; | |
| 85 | - | |
| 86 | - /** | |
| 87 | - * This is what’s printed before and after the comma if a declaration block contains multiple selectors. | |
| 88 | - * | |
| 89 | - * @var string | |
| 90 | - */ | |
| 91 | - public $sSpaceBeforeSelectorSeparator = ''; | |
| 92 | - | |
| 93 | - /** | |
| 94 | - * @var string | |
| 95 | - */ | |
| 96 | - public $sSpaceAfterSelectorSeparator = ' '; | |
| 97 | - | |
| 98 | - /** | |
| 99 | - * This is what’s printed after the comma of value lists | |
| 100 | - * | |
| 101 | - * @var string | |
| 102 | - */ | |
| 103 | - public $sSpaceBeforeListArgumentSeparator = ''; | |
| 104 | - | |
| 105 | - /** | |
| 106 | - * @var string | |
| 107 | - */ | |
| 108 | - public $sSpaceAfterListArgumentSeparator = ''; | |
| 109 | - | |
| 110 | - /** | |
| 111 | - * @var string | |
| 112 | - */ | |
| 113 | - public $sSpaceBeforeOpeningBrace = ' '; | |
| 114 | - | |
| 115 | - /** | |
| 116 | - * Content injected in and around declaration blocks. | |
| 117 | - * | |
| 118 | - * @var string | |
| 119 | - */ | |
| 120 | - public $sBeforeDeclarationBlock = ''; | |
| 121 | - | |
| 122 | - /** | |
| 123 | - * @var string | |
| 124 | - */ | |
| 125 | - public $sAfterDeclarationBlockSelectors = ''; | |
| 126 | - | |
| 127 | - /** | |
| 128 | - * @var string | |
| 129 | - */ | |
| 130 | - public $sAfterDeclarationBlock = ''; | |
| 131 | - | |
| 132 | - /** | |
| 133 | - * Indentation character(s) per level. Only applicable if newlines are used in any of the spacing settings. | |
| 134 | - * | |
| 135 | - * @var string | |
| 136 | - */ | |
| 137 | - public $sIndentation = "\t"; | |
| 138 | - | |
| 139 | - /** | |
| 140 | - * Output exceptions. | |
| 141 | - * | |
| 142 | - * @var bool | |
| 143 | - */ | |
| 144 | - public $bIgnoreExceptions = false; | |
| 145 | - | |
| 146 | - /** | |
| 147 | - * @var OutputFormatter|null | |
| 148 | - */ | |
| 149 | - private $oFormatter = null; | |
| 150 | - | |
| 151 | - /** | |
| 152 | - * @var OutputFormat|null | |
| 153 | - */ | |
| 154 | - private $oNextLevelFormat = null; | |
| 155 | - | |
| 156 | - /** | |
| 157 | - * @var int | |
| 158 | - */ | |
| 159 | - private $iIndentationLevel = 0; | |
| 160 | - | |
| 161 | - public function __construct() | |
| 162 | - { | |
| 163 | - } | |
| 164 | - | |
| 165 | - /** | |
| 166 | - * @param string $sName | |
| 167 | - * | |
| 168 | - * @return string|null | |
| 169 | - */ | |
| 170 | - public function get($sName) | |
| 171 | - { | |
| 172 | - $aVarPrefixes = ['a', 's', 'm', 'b', 'f', 'o', 'c', 'i']; | |
| 173 | - foreach ($aVarPrefixes as $sPrefix) { | |
| 174 | - $sFieldName = $sPrefix . ucfirst($sName); | |
| 175 | - if (isset($this->$sFieldName)) { | |
| 176 | - return $this->$sFieldName; | |
| 177 | - } | |
| 178 | - } | |
| 179 | - return null; | |
| 180 | - } | |
| 181 | - | |
| 182 | - /** | |
| 183 | - * @param array<array-key, string>|string $aNames | |
| 184 | - * @param mixed $mValue | |
| 185 | - * | |
| 186 | - * @return self|false | |
| 187 | - */ | |
| 188 | - public function set($aNames, $mValue) | |
| 189 | - { | |
| 190 | - $aVarPrefixes = ['a', 's', 'm', 'b', 'f', 'o', 'c', 'i']; | |
| 191 | - if (is_string($aNames) && strpos($aNames, '*') !== false) { | |
| 192 | - $aNames = | |
| 193 | - [ | |
| 194 | - str_replace('*', 'Before', $aNames), | |
| 195 | - str_replace('*', 'Between', $aNames), | |
| 196 | - str_replace('*', 'After', $aNames), | |
| 197 | - ]; | |
| 198 | - } elseif (!is_array($aNames)) { | |
| 199 | - $aNames = [$aNames]; | |
| 200 | - } | |
| 201 | - foreach ($aVarPrefixes as $sPrefix) { | |
| 202 | - $bDidReplace = false; | |
| 203 | - foreach ($aNames as $sName) { | |
| 204 | - $sFieldName = $sPrefix . ucfirst($sName); | |
| 205 | - if (isset($this->$sFieldName)) { | |
| 206 | - $this->$sFieldName = $mValue; | |
| 207 | - $bDidReplace = true; | |
| 208 | - } | |
| 209 | - } | |
| 210 | - if ($bDidReplace) { | |
| 211 | - return $this; | |
| 212 | - } | |
| 213 | - } | |
| 214 | - // Break the chain so the user knows this option is invalid | |
| 215 | - return false; | |
| 216 | - } | |
| 217 | - | |
| 218 | - /** | |
| 219 | - * @param string $sMethodName | |
| 220 | - * @param array<array-key, mixed> $aArguments | |
| 221 | - * | |
| 222 | - * @return mixed | |
| 223 | - * | |
| 224 | - * @throws \Exception | |
| 225 | - */ | |
| 226 | - public function __call($sMethodName, array $aArguments) | |
| 227 | - { | |
| 228 | - if (strpos($sMethodName, 'set') === 0) { | |
| 229 | - return $this->set(substr($sMethodName, 3), $aArguments[0]); | |
| 230 | - } elseif (strpos($sMethodName, 'get') === 0) { | |
| 231 | - return $this->get(substr($sMethodName, 3)); | |
| 232 | - } elseif (method_exists(OutputFormatter::class, $sMethodName)) { | |
| 233 | - return call_user_func_array([$this->getFormatter(), $sMethodName], $aArguments); | |
| 234 | - } else { | |
| 235 | - throw new \Exception('Unknown OutputFormat method called: ' . $sMethodName); | |
| 236 | - } | |
| 237 | - } | |
| 238 | - | |
| 239 | - /** | |
| 240 | - * @param int $iNumber | |
| 241 | - * | |
| 242 | - * @return self | |
| 243 | - */ | |
| 244 | - public function indentWithTabs($iNumber = 1) | |
| 245 | - { | |
| 246 | - return $this->setIndentation(str_repeat("\t", $iNumber)); | |
| 247 | - } | |
| 248 | - | |
| 249 | - /** | |
| 250 | - * @param int $iNumber | |
| 251 | - * | |
| 252 | - * @return self | |
| 253 | - */ | |
| 254 | - public function indentWithSpaces($iNumber = 2) | |
| 255 | - { | |
| 256 | - return $this->setIndentation(str_repeat(" ", $iNumber)); | |
| 257 | - } | |
| 258 | - | |
| 259 | - /** | |
| 260 | - * @return OutputFormat | |
| 261 | - */ | |
| 262 | - public function nextLevel() | |
| 263 | - { | |
| 264 | - if ($this->oNextLevelFormat === null) { | |
| 265 | - $this->oNextLevelFormat = clone $this; | |
| 266 | - $this->oNextLevelFormat->iIndentationLevel++; | |
| 267 | - $this->oNextLevelFormat->oFormatter = null; | |
| 268 | - } | |
| 269 | - return $this->oNextLevelFormat; | |
| 270 | - } | |
| 271 | - | |
| 272 | - /** | |
| 273 | - * @return void | |
| 274 | - */ | |
| 275 | - public function beLenient() | |
| 276 | - { | |
| 277 | - $this->bIgnoreExceptions = true; | |
| 278 | - } | |
| 279 | - | |
| 280 | - /** | |
| 281 | - * @return OutputFormatter | |
| 282 | - */ | |
| 283 | - public function getFormatter() | |
| 284 | - { | |
| 285 | - if ($this->oFormatter === null) { | |
| 286 | - $this->oFormatter = new OutputFormatter($this); | |
| 287 | - } | |
| 288 | - return $this->oFormatter; | |
| 289 | - } | |
| 290 | - | |
| 291 | - /** | |
| 292 | - * @return int | |
| 293 | - */ | |
| 294 | - public function level() | |
| 295 | - { | |
| 296 | - return $this->iIndentationLevel; | |
| 297 | - } | |
| 298 | - | |
| 299 | - /** | |
| 300 | - * Creates an instance of this class without any particular formatting settings. | |
| 301 | - * | |
| 302 | - * @return self | |
| 303 | - */ | |
| 304 | - public static function create() | |
| 305 | - { | |
| 306 | - return new OutputFormat(); | |
| 307 | - } | |
| 308 | - | |
| 309 | - /** | |
| 310 | - * Creates an instance of this class with a preset for compact formatting. | |
| 311 | - * | |
| 312 | - * @return self | |
| 313 | - */ | |
| 314 | - public static function createCompact() | |
| 315 | - { | |
| 316 | - $format = self::create(); | |
| 317 | - $format->set('Space*Rules', "")->set('Space*Blocks', "")->setSpaceAfterRuleName('') | |
| 318 | - ->setSpaceBeforeOpeningBrace('')->setSpaceAfterSelectorSeparator(''); | |
| 319 | - return $format; | |
| 320 | - } | |
| 321 | - | |
| 322 | - /** | |
| 323 | - * Creates an instance of this class with a preset for pretty formatting. | |
| 324 | - * | |
| 325 | - * @return self | |
| 326 | - */ | |
| 327 | - public static function createPretty() | |
| 328 | - { | |
| 329 | - $format = self::create(); | |
| 330 | - $format->set('Space*Rules', "\n")->set('Space*Blocks', "\n") | |
| 331 | - ->setSpaceBetweenBlocks("\n\n")->set('SpaceAfterListArgumentSeparator', ['default' => '', ',' => ' ']); | |
| 332 | - return $format; | |
| 333 | - } | |
| 334 | -} | |