]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - vendor/oyejorge/less.php/bin/lessc
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / vendor / oyejorge / less.php / bin / lessc
1 #!/usr/bin/env php
2 <?php
3
4 require_once dirname(__FILE__) . '/../lib/Less/Autoloader.php';
5 Less_Autoloader::register();
6
7 // Create our environment
8 $env            = array('compress' => false, 'relativeUrls' => false);
9 $silent         = false;
10 $watch          = false;
11 $rootpath       = '';
12
13 // Check for arguments
14 array_shift($argv);
15 if (!count($argv)) {
16         $argv[] = '-h';
17 }
18
19 // parse arguments
20 foreach ($argv as $key => $arg) {
21         if (preg_match('/^--?([a-z][0-9a-z-]*)(?:=([^\s]+))?$/i', $arg, $matches)) {
22                 $option = $matches[1];
23                 $value = isset($matches[2]) ? $matches[2] : false;
24                 unset($argv[$key]);
25
26                 switch ($option) {
27                         case 'h':
28                         case 'help':
29                                 echo <<<EOD
30 Usage: lessc [options] sources [destination]
31
32  -h, --help            Print help (this message) and exit.
33  -s, --silent          Suppress output of error messages.
34  -v, --version         Print version number and exit.
35  -x, --compress        Compress output by removing some whitespaces.
36  --include-path=PATHS  Set include paths. Separated by `:'. Use `;' on Windows.
37  --strict-imports      Force evaluation of imports.
38  -sm=on|off            Turn on or off strict math, where in strict mode, math
39  --strict-math=on|off  requires brackets. This option may default to on and then
40                        be removed in the future.
41  -su=on|off            Allow mixed units, e.g. 1px+1em or 1px*1px which have units
42  --strict-units=on|off that cannot be represented.
43  -ru, --relative-urls  re-write relative urls to the base less file.
44  -rp, --rootpath=URL   Set rootpath for url rewriting in relative imports and urls.
45                        Works with or without the relative-urls option.
46  -w, --watch           Watch input files for changes.
47
48
49 EOD;
50                                 exit;
51                         case 's':
52                         case 'silent':
53                                 $silent = true;
54                                 break;
55
56                         case 'w':
57                         case 'watch':
58                                 $watch = true;
59                                 break;
60
61                         case 'v':
62                         case 'version':
63                                 echo "lessc " . Less_Version::version . " (less.php)\n\n";
64                                 exit;
65
66                         case 'rp':
67                         case 'rootpath':
68                                 $rootpath = $value;
69                                 break;
70
71
72                         //parser options
73                         case 'compress':
74                                 $env['compress'] = true;
75                                 break;
76
77                         case 'ru':
78                         case 'relative-urls':
79                                 $env['relativeUrls'] = true;
80                                 break;
81
82                         case 'su':
83                         case 'strict-units':
84                                 $env['strictUnits'] = ($value === 'on');
85                                 break;
86
87                         case 'sm':
88                         case 'strict-math':
89                                 $env['strictMath'] = ($value === 'on');
90                                 break;
91
92                         case 'x':
93                         case 'include-path':
94                                 $env['import_dirs'] = preg_split('#;|\:#', $value);
95                                 break;
96
97                 }
98         }
99 }
100
101 if (count($argv) > 1) {
102         $output = array_pop($argv);
103         $inputs = $argv;
104 }
105 else {
106         $inputs = $argv;
107         $output = false;
108 }
109
110 if (!count($inputs)) {
111         echo("lessc: no input files\n");
112         exit;
113 }
114
115 if ($watch) {
116         if (!$output) {
117                 echo("lessc: you must specify the output file if --watch is given\n");
118                 exit;
119         }
120
121         $lastAction = 0;
122
123         echo("lessc: watching input files\n");
124
125         while (1) {
126                 clearstatcache();
127
128                 $updated = false;
129                 foreach ($inputs as $input) {
130                         if ($input == '-') {
131                                 if (count($inputs) == 1) {
132                                         echo("lessc: during watching files is not possible to watch stdin\n");
133                                         exit;
134                                 }
135                                 else {
136                                         continue;
137                                 }
138                         }
139
140                         if (filemtime($input) > $lastAction) {
141                                 $updated = true;
142                                 break;
143                         }
144                 }
145
146                 if ($updated) {
147                         $lastAction = time();
148                         $parser = new Less_Parser($env);
149                         foreach ($inputs as $input) {
150                                 try {
151                                         $parser->parseFile($input, $rootpath);
152                                 }
153                                 catch (Exception $e) {
154                                         echo("lessc: " . $e->getMessage() . " \n");
155                                         continue; // Invalid processing
156                                 }
157                         }
158
159                         file_put_contents($output, $parser->getCss());
160                         echo("lessc: output file recompiled\n");
161                 }
162
163                 sleep(1);
164         }
165 }
166 else {
167         $parser = new Less_Parser($env);
168         foreach ($inputs as $input) {
169                 if ($input == '-') {
170                         $content = file_get_contents('php://stdin');
171                         $parser->parse($content);
172                 }
173                 else {
174                         try {
175                                 $parser->parseFile($input);
176                         }
177                         catch (Exception $e) {
178                                 if (!$silent) {
179                                         echo("lessc: " . ((string)$e) . " \n");
180                                 }
181                         }
182                 }
183         }
184
185         if ($output) {
186                 file_put_contents($output, $parser->getCss());
187         }
188         else {
189                 echo $parser->getCss();
190         }
191 }