#!/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); }