7 * @copyright 2012-2020 Leaf Corcoran
9 * @license http://opensource.org/licenses/MIT MIT
11 * @link http://scssphp.github.io/scssphp
14 error_reporting(E_ALL
);
16 if (version_compare(PHP_VERSION
, '5.6') < 0) {
17 die('Requires PHP 5.6 or above');
20 include __DIR__
. '/../scss.inc.php';
22 use ScssPhp\ScssPhp\Compiler
;
23 use ScssPhp\ScssPhp\Parser
;
24 use ScssPhp\ScssPhp\Version
;
38 * @param array $options
42 function parseArgument(&$i, $options) {
46 if (! preg_match('/^(?:' . implode('|', (array) $options) . ')=?(.*)/', $argv[$i], $matches)) {
50 if (strlen($matches[1])) {
61 for ($i = 1; $i < $argc; $i++
) {
62 if ($argv[$i] === '-?' ||
$argv[$i] === '-h' ||
$argv[$i] === '--help') {
66 Usage: $exe [options] [input-file]
70 --help Show this message [-h, -?]
71 --continue-on-error [deprecated] Ignored
72 --debug-info [deprecated] Ignored [-g]
73 --dump-tree Dump formatted parse tree [-T]
74 --iso8859-1 Use iso8859-1 encoding instead of default utf-8
75 --line-numbers [deprecated] Ignored [--line-comments]
76 --load-path=PATH Set import path [-I]
77 --precision=N [deprecated] Ignored. (default 10) [-p]
78 --sourcemap Create source map file
79 --style=FORMAT Set the output format (compact, compressed, crunched, expanded, or nested) [-s, -t]
80 --version Print the version [-v]
86 if ($argv[$i] === '-v' ||
$argv[$i] === '--version') {
87 exit(Version
::VERSION
. "\n");
90 // Keep parsing --continue-on-error to avoid BC breaks for scripts using it
91 if ($argv[$i] === '--continue-on-error') {
92 // TODO report it as a warning ?
96 // Keep parsing it to avoid BC breaks for scripts using it
97 if ($argv[$i] === '-g' ||
$argv[$i] === '--debug-info') {
98 // TODO report it as a warning ?
102 if ($argv[$i] === '--iso8859-1') {
103 $encoding = 'iso8859-1';
107 // Keep parsing it to avoid BC breaks for scripts using it
108 if ($argv[$i] === '--line-numbers' ||
$argv[$i] === '--line-comments') {
109 // TODO report it as a warning ?
113 if ($argv[$i] === '--sourcemap') {
118 if ($argv[$i] === '-T' ||
$argv[$i] === '--dump-tree') {
123 $value = parseArgument($i, array('-t', '-s', '--style'));
130 $value = parseArgument($i, array('-I', '--load-path'));
137 // Keep parsing --precision to avoid BC breaks for scripts using it
138 $value = parseArgument($i, array('-p', '--precision'));
141 // TODO report it as a warning ?
145 if (file_exists($argv[$i])) {
146 $inputFile = $argv[$i];
153 $data = file_get_contents($inputFile);
155 $newWorkingDir = dirname(realpath($inputFile));
156 $oldWorkingDir = getcwd();
158 if ($oldWorkingDir !== $newWorkingDir) {
159 $changeDir = chdir($newWorkingDir);
160 $inputFile = basename($inputFile);
165 while (! feof(STDIN
)) {
166 $data .= fread(STDIN
, 8192);
171 $parser = new Parser($inputFile);
173 print_r(json_decode(json_encode($parser->parse($data)), true));
178 $scss = new Compiler();
181 $scss->setImportPaths(explode(PATH_SEPARATOR
, $loadPaths));
185 $scss->setFormatter('ScssPhp\\ScssPhp\\Formatter\\' . ucfirst($style));
189 $scss->setSourceMap(Compiler
::SOURCE_MAP_INLINE
);
193 $scss->setEncoding($encoding);
196 echo $scss->compile($data, $inputFile);
199 chdir($oldWorkingDir);