123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- #!/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;
- /**
- * 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 5)
- -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] === '-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 && $inputFile) {
- $scss->setLineNumberStyle(Compiler::DEBUG_INFO);
- }
- if ($lineNumbers && $inputFile) {
- $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 ($encoding) {
- $scss->setEncoding($encoding);
- }
- echo $scss->compile($data, $inputFile);
- if ($changeDir) {
- chdir($oldWorkingDir);
- }
|