mirror of
				https://github.com/mashirozx/sakura.git
				synced 2025-05-29 01:49:21 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			216 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			216 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| #!/usr/bin/env php
 | |
| <?php
 | |
| /**
 | |
|  * SCSSPHP
 | |
|  *
 | |
|  * @copyright 2012-2015 Leaf Corcoran
 | |
|  *
 | |
|  * @license http://opensource.org/licenses/MIT MIT
 | |
|  *
 | |
|  * @link http://leafo.github.io/scssphp
 | |
|  */
 | |
| 
 | |
| error_reporting(E_ALL);
 | |
| 
 | |
| if (version_compare(PHP_VERSION, '5.4') < 0) {
 | |
|     die('Requires PHP 5.4 or above');
 | |
| }
 | |
| 
 | |
| include __DIR__ . '/../scss.inc.php';
 | |
| 
 | |
| use Leafo\ScssPhp\Compiler;
 | |
| use Leafo\ScssPhp\Parser;
 | |
| use Leafo\ScssPhp\Version;
 | |
| 
 | |
| $style = null;
 | |
| $loadPaths = null;
 | |
| $precision = null;
 | |
| $dumpTree = false;
 | |
| $inputFile = null;
 | |
| $changeDir = false;
 | |
| $debugInfo = false;
 | |
| $lineNumbers = false;
 | |
| $ignoreErrors = false;
 | |
| $encoding = false;
 | |
| $sourceMap = false;
 | |
| 
 | |
| /**
 | |
|  * Parse argument
 | |
|  *
 | |
|  * @param integer $i
 | |
|  * @param array $options
 | |
|  *
 | |
|  * @return string|null
 | |
|  */
 | |
| function parseArgument(&$i, $options) {
 | |
|     global $argc;
 | |
|     global $argv;
 | |
| 
 | |
|     if (! preg_match('/^(?:' . implode('|', (array) $options) . ')=?(.*)/', $argv[$i], $matches)) {
 | |
|         return;
 | |
|     }
 | |
| 
 | |
|     if (strlen($matches[1])) {
 | |
|         return $matches[1];
 | |
|     }
 | |
| 
 | |
|     if ($i + 1 < $argc) {
 | |
|         $i++;
 | |
| 
 | |
|         return $argv[$i];
 | |
|     }
 | |
| }
 | |
| 
 | |
| for ($i = 1; $i < $argc; $i++) {
 | |
|     if ($argv[$i] === '-h' || $argv[$i] === '--help') {
 | |
|         $exe = $argv[0];
 | |
| 
 | |
|         $HELP = <<<EOT
 | |
| Usage: $exe [options] [input-file]
 | |
| 
 | |
| Options include:
 | |
| 
 | |
|     -h, --help          Show this message
 | |
|     --continue-on-error Continue compilation (as best as possible) when error encountered
 | |
|     --debug-info        Annotate selectors with CSS referring to the source file and line number
 | |
|     -f=format           Set the output format (compact, compressed, crunched, expanded, or nested)
 | |
|     -i=path             Set import path
 | |
|     --iso8859-1         Use iso8859-1 encoding instead of utf-8 (default utf-8)
 | |
|     --line-numbers      Annotate selectors with comments referring to the source file and line number
 | |
|     -p=precision        Set decimal number precision (default 10)
 | |
|     --sourcemap         Create source map file
 | |
|     -T                  Dump formatted parse tree
 | |
|     -v, --version       Print the version
 | |
| 
 | |
| EOT;
 | |
|         exit($HELP);
 | |
|     }
 | |
| 
 | |
|     if ($argv[$i] === '-v' || $argv[$i] === '--version') {
 | |
|         exit(Version::VERSION . "\n");
 | |
|     }
 | |
| 
 | |
|     if ($argv[$i] === '--continue-on-error') {
 | |
|         $ignoreErrors = true;
 | |
|         continue;
 | |
|     }
 | |
| 
 | |
|     if ($argv[$i] === '--debug-info') {
 | |
|         $debugInfo = true;
 | |
|         continue;
 | |
|     }
 | |
| 
 | |
|     if ($argv[$i] === '--iso8859-1') {
 | |
|         $encoding = 'iso8859-1';
 | |
|         continue;
 | |
|     }
 | |
| 
 | |
|     if ($argv[$i] === '--line-numbers' || $argv[$i] === '--line-comments') {
 | |
|         $lineNumbers = true;
 | |
|         continue;
 | |
|     }
 | |
| 
 | |
|     if ($argv[$i] === '--sourcemap') {
 | |
|         $sourceMap = true;
 | |
|         continue;
 | |
|     }
 | |
| 
 | |
|     if ($argv[$i] === '-T') {
 | |
|         $dumpTree = true;
 | |
|         continue;
 | |
|     }
 | |
| 
 | |
|     $value = parseArgument($i, array('-f', '--style'));
 | |
| 
 | |
|     if (isset($value)) {
 | |
|         $style = $value;
 | |
|         continue;
 | |
|     }
 | |
| 
 | |
|     $value = parseArgument($i, array('-i', '--load_paths'));
 | |
| 
 | |
|     if (isset($value)) {
 | |
|         $loadPaths = $value;
 | |
|         continue;
 | |
|     }
 | |
| 
 | |
|     $value = parseArgument($i, array('-p', '--precision'));
 | |
| 
 | |
|     if (isset($value)) {
 | |
|         $precision = $value;
 | |
|         continue;
 | |
|     }
 | |
| 
 | |
|     if (file_exists($argv[$i])) {
 | |
|         $inputFile = $argv[$i];
 | |
|         continue;
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| if ($inputFile) {
 | |
|     $data = file_get_contents($inputFile);
 | |
| 
 | |
|     $newWorkingDir = dirname(realpath($inputFile));
 | |
|     $oldWorkingDir = getcwd();
 | |
| 
 | |
|     if ($oldWorkingDir !== $newWorkingDir) {
 | |
|         $changeDir = chdir($newWorkingDir);
 | |
|         $inputFile = basename($inputFile);
 | |
|     }
 | |
| } else {
 | |
|     $data = '';
 | |
| 
 | |
|     while (! feof(STDIN)) {
 | |
|         $data .= fread(STDIN, 8192);
 | |
|     }
 | |
| }
 | |
| 
 | |
| if ($dumpTree) {
 | |
|     $parser = new Parser($inputFile);
 | |
| 
 | |
|     print_r(json_decode(json_encode($parser->parse($data)), true));
 | |
| 
 | |
|     exit();
 | |
| }
 | |
| 
 | |
| $scss = new Compiler();
 | |
| 
 | |
| if ($debugInfo) {
 | |
|     $scss->setLineNumberStyle(Compiler::DEBUG_INFO);
 | |
| }
 | |
| 
 | |
| if ($lineNumbers) {
 | |
|     $scss->setLineNumberStyle(Compiler::LINE_COMMENTS);
 | |
| }
 | |
| 
 | |
| if ($ignoreErrors) {
 | |
|     $scss->setIgnoreErrors($ignoreErrors);
 | |
| }
 | |
| 
 | |
| if ($loadPaths) {
 | |
|     $scss->setImportPaths(explode(PATH_SEPARATOR, $loadPaths));
 | |
| }
 | |
| 
 | |
| if ($precision) {
 | |
|     $scss->setNumberPrecision($precision);
 | |
| }
 | |
| 
 | |
| if ($style) {
 | |
|     $scss->setFormatter('Leafo\\ScssPhp\\Formatter\\' . ucfirst($style));
 | |
| }
 | |
| 
 | |
| if ($sourceMap) {
 | |
|     $scss->setSourceMap(Compiler::SOURCE_MAP_FILE);
 | |
| }
 | |
| 
 | |
| if ($encoding) {
 | |
|     $scss->setEncoding($encoding);
 | |
| }
 | |
| 
 | |
| echo $scss->compile($data, $inputFile);
 | |
| 
 | |
| if ($changeDir) {
 | |
|     chdir($oldWorkingDir);
 | |
| }
 |