diff options
Diffstat (limited to 'plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/src/Formatter.php')
-rw-r--r-- | plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/src/Formatter.php | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/src/Formatter.php b/plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/src/Formatter.php new file mode 100644 index 00000000..5b035e1c --- /dev/null +++ b/plugins/wordpress-mobile-pack/libs/scssphp-0.3.0/src/Formatter.php @@ -0,0 +1,167 @@ +<?php +/** + * SCSSPHP + * + * @copyright 2012-2015 Leaf Corcoran + * + * @license http://opensource.org/licenses/MIT MIT + * + * @link http://leafo.github.io/scssphp + */ + +namespace Leafo\ScssPhp; + +/** + * SCSS base formatter + * + * @author Leaf Corcoran <leafot@gmail.com> + */ +abstract class Formatter +{ + /** + * @var integer + */ + public $indentLevel; + + /** + * @var string + */ + public $indentChar; + + /** + * @var string + */ + public $break; + + /** + * @var string + */ + public $open; + + /** + * @var string + */ + public $close; + + /** + * @var string + */ + public $tagSeparator; + + /** + * @var string + */ + public $assignSeparator; + + abstract public function __construct(); + + /** + * Return indentation (whitespace) + * + * @param integer $n + * + * @return string + */ + protected function indentStr($n = 0) + { + return str_repeat($this->indentChar, max($this->indentLevel + $n, 0)); + } + + /** + * Return property assignment + * + * @param string $name + * @param mixed $value + * + * @return string + */ + public function property($name, $value) + { + return rtrim($name) . $this->assignSeparator . $value . ';'; + } + + /** + * Strip semi-colon appended by property(); it's a separator, not a terminator + * + * @param array $lines + */ + public function stripSemicolon(&$lines) + { + } + + /** + * Output lines inside a block + * + * @param string $inner + * @param \stdClass $block + */ + protected function blockLines($inner, $block) + { + $glue = $this->break . $inner; + echo $inner . implode($glue, $block->lines); + + if (! empty($block->children)) { + echo $this->break; + } + } + + /** + * Output non-empty block + * + * @param \stdClass $block + */ + protected function block($block) + { + if (empty($block->lines) && empty($block->children)) { + return; + } + + $inner = $pre = $this->indentStr(); + + if (! empty($block->selectors)) { + echo $pre + . implode($this->tagSeparator, $block->selectors) + . $this->open . $this->break; + + $this->indentLevel++; + + $inner = $this->indentStr(); + } + + if (! empty($block->lines)) { + $this->blockLines($inner, $block); + } + + foreach ($block->children as $child) { + $this->block($child); + } + + if (! empty($block->selectors)) { + $this->indentLevel--; + + if (empty($block->children)) { + echo $this->break; + } + + echo $pre . $this->close . $this->break; + } + } + + /** + * Entry point to formatting a block + * + * @param \stdClass $block An abstract syntax tree + * + * @return string + */ + public function format($block) + { + ob_start(); + + $this->block($block); + + $out = ob_get_clean(); + + return $out; + } +} |