mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-22 10:08:45 +02:00
N°2226: Upgrade ScssPHP to v1.0.0
This commit is contained in:
@@ -2,15 +2,18 @@
|
||||
/**
|
||||
* SCSSPHP
|
||||
*
|
||||
* @copyright 2012-2015 Leaf Corcoran
|
||||
* @copyright 2012-2019 Leaf Corcoran
|
||||
*
|
||||
* @license http://opensource.org/licenses/MIT MIT
|
||||
*
|
||||
* @link http://leafo.github.io/scssphp
|
||||
* @link http://scssphp.github.io/scssphp
|
||||
*/
|
||||
namespace Leafo\ScssPhp;
|
||||
|
||||
use Leafo\ScssPhp\Formatter\OutputBlock;
|
||||
namespace ScssPhp\ScssPhp;
|
||||
|
||||
use ScssPhp\ScssPhp\Formatter\OutputBlock;
|
||||
use ScssPhp\ScssPhp\SourceMap\SourceMapGenerator;
|
||||
|
||||
/**
|
||||
* Base formatter
|
||||
*
|
||||
@@ -22,40 +25,69 @@ 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;
|
||||
|
||||
/**
|
||||
* @var boolea
|
||||
* @var boolean
|
||||
*/
|
||||
public $keepSemicolons;
|
||||
|
||||
/**
|
||||
* @var \ScssPhp\ScssPhp\Formatter\OutputBlock
|
||||
*/
|
||||
protected $currentBlock;
|
||||
|
||||
/**
|
||||
* @var integer
|
||||
*/
|
||||
protected $currentLine;
|
||||
|
||||
/**
|
||||
* @var integer
|
||||
*/
|
||||
protected $currentColumn;
|
||||
|
||||
/**
|
||||
* @var \ScssPhp\ScssPhp\SourceMap\SourceMapGenerator
|
||||
*/
|
||||
protected $sourceMapGenerator;
|
||||
|
||||
/**
|
||||
* Initialize formatter
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
public abstract function __construct();
|
||||
abstract public function __construct();
|
||||
|
||||
/**
|
||||
* Return indentation (whitespace)
|
||||
*
|
||||
@@ -65,6 +97,7 @@ abstract class Formatter
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Return property assignment
|
||||
*
|
||||
@@ -79,6 +112,7 @@ abstract class Formatter
|
||||
{
|
||||
return rtrim($name) . $this->assignSeparator . $value . ';';
|
||||
}
|
||||
|
||||
/**
|
||||
* Strip semi-colon appended by property(); it's a separator, not a terminator
|
||||
*
|
||||
@@ -91,38 +125,50 @@ abstract class Formatter
|
||||
if ($this->keepSemicolons) {
|
||||
return;
|
||||
}
|
||||
if (($count = count($lines)) && substr($lines[$count - 1], -1) === ';') {
|
||||
|
||||
if (($count = count($lines))
|
||||
&& substr($lines[$count - 1], -1) === ';'
|
||||
) {
|
||||
$lines[$count - 1] = substr($lines[$count - 1], 0, -1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Output lines inside a block
|
||||
*
|
||||
* @param \Leafo\ScssPhp\Formatter\OutputBlock $block
|
||||
* @param \ScssPhp\ScssPhp\Formatter\OutputBlock $block
|
||||
*/
|
||||
protected function blockLines(OutputBlock $block)
|
||||
{
|
||||
$inner = $this->indentStr();
|
||||
|
||||
$glue = $this->break . $inner;
|
||||
echo $inner . implode($glue, $block->lines);
|
||||
if (!empty($block->children)) {
|
||||
echo $this->break;
|
||||
|
||||
$this->write($inner . implode($glue, $block->lines));
|
||||
|
||||
if (! empty($block->children)) {
|
||||
$this->write($this->break);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Output block selectors
|
||||
*
|
||||
* @param \Leafo\ScssPhp\Formatter\OutputBlock $block
|
||||
* @param \ScssPhp\ScssPhp\Formatter\OutputBlock $block
|
||||
*/
|
||||
protected function blockSelectors(OutputBlock $block)
|
||||
{
|
||||
$inner = $this->indentStr();
|
||||
echo $inner . implode($this->tagSeparator, $block->selectors) . $this->open . $this->break;
|
||||
|
||||
$this->write($inner
|
||||
. implode($this->tagSeparator, $block->selectors)
|
||||
. $this->open . $this->break);
|
||||
}
|
||||
|
||||
/**
|
||||
* Output block children
|
||||
*
|
||||
* @param \Leafo\ScssPhp\Formatter\OutputBlock $block
|
||||
* @param \ScssPhp\ScssPhp\Formatter\OutputBlock $block
|
||||
*/
|
||||
protected function blockChildren(OutputBlock $block)
|
||||
{
|
||||
@@ -130,49 +176,100 @@ abstract class Formatter
|
||||
$this->block($child);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Output non-empty block
|
||||
*
|
||||
* @param \Leafo\ScssPhp\Formatter\OutputBlock $block
|
||||
* @param \ScssPhp\ScssPhp\Formatter\OutputBlock $block
|
||||
*/
|
||||
protected function block(OutputBlock $block)
|
||||
{
|
||||
if (empty($block->lines) && empty($block->children)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->currentBlock = $block;
|
||||
|
||||
$pre = $this->indentStr();
|
||||
if (!empty($block->selectors)) {
|
||||
|
||||
if (! empty($block->selectors)) {
|
||||
$this->blockSelectors($block);
|
||||
|
||||
$this->indentLevel++;
|
||||
}
|
||||
if (!empty($block->lines)) {
|
||||
|
||||
if (! empty($block->lines)) {
|
||||
$this->blockLines($block);
|
||||
}
|
||||
if (!empty($block->children)) {
|
||||
|
||||
if (! empty($block->children)) {
|
||||
$this->blockChildren($block);
|
||||
}
|
||||
if (!empty($block->selectors)) {
|
||||
|
||||
if (! empty($block->selectors)) {
|
||||
$this->indentLevel--;
|
||||
|
||||
if (empty($block->children)) {
|
||||
echo $this->break;
|
||||
$this->write($this->break);
|
||||
}
|
||||
echo $pre . $this->close . $this->break;
|
||||
|
||||
$this->write($pre . $this->close . $this->break);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Entry point to formatting a block
|
||||
*
|
||||
* @api
|
||||
*
|
||||
* @param \Leafo\ScssPhp\Formatter\OutputBlock $block An abstract syntax tree
|
||||
* @param \ScssPhp\ScssPhp\Formatter\OutputBlock $block An abstract syntax tree
|
||||
* @param \ScssPhp\ScssPhp\SourceMap\SourceMapGenerator|null $sourceMapGenerator Optional source map generator
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function format(OutputBlock $block)
|
||||
public function format(OutputBlock $block, SourceMapGenerator $sourceMapGenerator = null)
|
||||
{
|
||||
$this->sourceMapGenerator = null;
|
||||
|
||||
if ($sourceMapGenerator) {
|
||||
$this->currentLine = 1;
|
||||
$this->currentColumn = 0;
|
||||
$this->sourceMapGenerator = $sourceMapGenerator;
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
$this->block($block);
|
||||
|
||||
$out = ob_get_clean();
|
||||
|
||||
return $out;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $str
|
||||
*/
|
||||
protected function write($str)
|
||||
{
|
||||
if ($this->sourceMapGenerator) {
|
||||
$this->sourceMapGenerator->addMapping(
|
||||
$this->currentLine,
|
||||
$this->currentColumn,
|
||||
$this->currentBlock->sourceLine,
|
||||
//columns from parser are off by one
|
||||
$this->currentBlock->sourceColumn > 0 ? $this->currentBlock->sourceColumn - 1 : 0,
|
||||
$this->currentBlock->sourceName
|
||||
);
|
||||
|
||||
$lines = explode("\n", $str);
|
||||
$lineCount = count($lines);
|
||||
$this->currentLine += $lineCount-1;
|
||||
|
||||
$lastLine = array_pop($lines);
|
||||
|
||||
$this->currentColumn = ($lineCount === 1 ? $this->currentColumn : 0) + strlen($lastLine);
|
||||
}
|
||||
|
||||
echo $str;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user