192 lines
3.9 KiB
PHP
Executable File
192 lines
3.9 KiB
PHP
Executable File
#!/usr/bin/env php
|
|
<?php
|
|
|
|
require_once dirname(__FILE__) . '/../lib/Less/Autoloader.php';
|
|
Less_Autoloader::register();
|
|
|
|
// Create our environment
|
|
$env = array('compress' => false, 'relativeUrls' => false);
|
|
$silent = false;
|
|
$watch = false;
|
|
$rootpath = '';
|
|
|
|
// Check for arguments
|
|
array_shift($argv);
|
|
if (!count($argv)) {
|
|
$argv[] = '-h';
|
|
}
|
|
|
|
// parse arguments
|
|
foreach ($argv as $key => $arg) {
|
|
if (preg_match('/^--?([a-z][0-9a-z-]*)(?:=([^\s]+))?$/i', $arg, $matches)) {
|
|
$option = $matches[1];
|
|
$value = isset($matches[2]) ? $matches[2] : false;
|
|
unset($argv[$key]);
|
|
|
|
switch ($option) {
|
|
case 'h':
|
|
case 'help':
|
|
echo <<<EOD
|
|
Usage: lessc [options] sources [destination]
|
|
|
|
-h, --help Print help (this message) and exit.
|
|
-s, --silent Suppress output of error messages.
|
|
-v, --version Print version number and exit.
|
|
-x, --compress Compress output by removing some whitespaces.
|
|
--include-path=PATHS Set include paths. Separated by `:'. Use `;' on Windows.
|
|
--strict-imports Force evaluation of imports.
|
|
-sm=on|off Turn on or off strict math, where in strict mode, math
|
|
--strict-math=on|off requires brackets. This option may default to on and then
|
|
be removed in the future.
|
|
-su=on|off Allow mixed units, e.g. 1px+1em or 1px*1px which have units
|
|
--strict-units=on|off that cannot be represented.
|
|
-ru, --relative-urls re-write relative urls to the base less file.
|
|
-rp, --rootpath=URL Set rootpath for url rewriting in relative imports and urls.
|
|
Works with or without the relative-urls option.
|
|
-w, --watch Watch input files for changes.
|
|
|
|
|
|
EOD;
|
|
exit;
|
|
case 's':
|
|
case 'silent':
|
|
$silent = true;
|
|
break;
|
|
|
|
case 'w':
|
|
case 'watch':
|
|
$watch = true;
|
|
break;
|
|
|
|
case 'v':
|
|
case 'version':
|
|
echo "lessc " . Less_Version::version . " (less.php)\n\n";
|
|
exit;
|
|
|
|
case 'rp':
|
|
case 'rootpath':
|
|
$rootpath = $value;
|
|
break;
|
|
|
|
|
|
//parser options
|
|
case 'compress':
|
|
$env['compress'] = true;
|
|
break;
|
|
|
|
case 'ru':
|
|
case 'relative-urls':
|
|
$env['relativeUrls'] = true;
|
|
break;
|
|
|
|
case 'su':
|
|
case 'strict-units':
|
|
$env['strictUnits'] = ($value === 'on');
|
|
break;
|
|
|
|
case 'sm':
|
|
case 'strict-math':
|
|
$env['strictMath'] = ($value === 'on');
|
|
break;
|
|
|
|
case 'x':
|
|
case 'include-path':
|
|
$env['import_dirs'] = preg_split('#;|\:#', $value);
|
|
break;
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
if (count($argv) > 1) {
|
|
$output = array_pop($argv);
|
|
$inputs = $argv;
|
|
}
|
|
else {
|
|
$inputs = $argv;
|
|
$output = false;
|
|
}
|
|
|
|
if (!count($inputs)) {
|
|
echo("lessc: no input files\n");
|
|
exit;
|
|
}
|
|
|
|
if ($watch) {
|
|
if (!$output) {
|
|
echo("lessc: you must specify the output file if --watch is given\n");
|
|
exit;
|
|
}
|
|
|
|
$lastAction = 0;
|
|
|
|
echo("lessc: watching input files\n");
|
|
|
|
while (1) {
|
|
clearstatcache();
|
|
|
|
$updated = false;
|
|
foreach ($inputs as $input) {
|
|
if ($input == '-') {
|
|
if (count($inputs) == 1) {
|
|
echo("lessc: during watching files is not possible to watch stdin\n");
|
|
exit;
|
|
}
|
|
else {
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if (filemtime($input) > $lastAction) {
|
|
$updated = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ($updated) {
|
|
$lastAction = time();
|
|
$parser = new Less_Parser($env);
|
|
foreach ($inputs as $input) {
|
|
try {
|
|
$parser->parseFile($input, $rootpath);
|
|
}
|
|
catch (Exception $e) {
|
|
echo("lessc: " . $e->getMessage() . " \n");
|
|
continue; // Invalid processing
|
|
}
|
|
}
|
|
|
|
file_put_contents($output, $parser->getCss());
|
|
echo("lessc: output file recompiled\n");
|
|
}
|
|
|
|
sleep(1);
|
|
}
|
|
}
|
|
else {
|
|
$parser = new Less_Parser($env);
|
|
foreach ($inputs as $input) {
|
|
if ($input == '-') {
|
|
$content = file_get_contents('php://stdin');
|
|
$parser->parse($content);
|
|
}
|
|
else {
|
|
try {
|
|
$parser->parseFile($input);
|
|
}
|
|
catch (Exception $e) {
|
|
if (!$silent) {
|
|
echo("lessc: " . ((string)$e) . " \n");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($output) {
|
|
file_put_contents($output, $parser->getCss());
|
|
}
|
|
else {
|
|
echo $parser->getCss();
|
|
}
|
|
}
|