less 3.10.0-beta.2 → 3.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/.DS_Store +0 -0
  2. package/bin/lessc +6652 -5505
  3. package/dist/less.cjs.js +6593 -5448
  4. package/dist/less.js +10 -6
  5. package/dist/less.min.js +2 -2
  6. package/dist/less.min.js.map +1 -1
  7. package/lib/less/constants.js +13 -0
  8. package/lib/less/contexts.js +164 -0
  9. package/lib/less/data/colors.js +150 -0
  10. package/lib/less/data/index.js +4 -0
  11. package/lib/less/data/unit-conversions.js +21 -0
  12. package/lib/less/default-options.js +68 -0
  13. package/lib/less/environment/abstract-file-manager.js +127 -0
  14. package/lib/less/environment/abstract-plugin-loader.js +187 -0
  15. package/lib/less/environment/environment-api.js +25 -0
  16. package/lib/less/environment/environment.js +59 -0
  17. package/lib/less/environment/file-manager-api.js +103 -0
  18. package/lib/less/functions/boolean.js +13 -0
  19. package/lib/less/functions/color-blending.js +84 -0
  20. package/lib/less/functions/color.js +417 -0
  21. package/lib/less/functions/data-uri.js +74 -0
  22. package/lib/less/functions/default.js +25 -0
  23. package/lib/less/functions/function-caller.js +49 -0
  24. package/lib/less/functions/function-registry.js +35 -0
  25. package/lib/less/functions/index.js +33 -0
  26. package/lib/less/functions/list.js +143 -0
  27. package/lib/less/functions/math-helper.js +15 -0
  28. package/lib/less/functions/math.js +28 -0
  29. package/lib/less/functions/number.js +89 -0
  30. package/lib/less/functions/string.js +36 -0
  31. package/lib/less/functions/svg.js +87 -0
  32. package/lib/less/functions/types.js +70 -0
  33. package/lib/less/import-manager.js +169 -0
  34. package/lib/less/index.js +92 -0
  35. package/lib/less/less-error.js +140 -0
  36. package/lib/less/logger.js +34 -0
  37. package/lib/less/parse-tree.js +66 -0
  38. package/lib/less/parse.js +89 -0
  39. package/lib/less/parser/chunker.js +122 -0
  40. package/lib/less/parser/parser-input.js +390 -0
  41. package/lib/less/parser/parser.js +2418 -0
  42. package/lib/less/plugin-manager.js +168 -0
  43. package/lib/less/render.js +42 -0
  44. package/lib/less/source-map-builder.js +77 -0
  45. package/lib/less/source-map-output.js +149 -0
  46. package/lib/less/transform-tree.js +96 -0
  47. package/lib/less/tree/anonymous.js +37 -0
  48. package/lib/less/tree/assignment.js +33 -0
  49. package/lib/less/tree/atrule.js +165 -0
  50. package/lib/less/tree/attribute.js +34 -0
  51. package/lib/less/tree/call.js +105 -0
  52. package/lib/less/tree/color.js +246 -0
  53. package/lib/less/tree/combinator.js +29 -0
  54. package/lib/less/tree/comment.js +29 -0
  55. package/lib/less/tree/condition.js +43 -0
  56. package/lib/less/tree/debug-info.js +34 -0
  57. package/lib/less/tree/declaration.js +115 -0
  58. package/lib/less/tree/detached-ruleset.js +30 -0
  59. package/lib/less/tree/dimension.js +179 -0
  60. package/lib/less/tree/element.js +73 -0
  61. package/lib/less/tree/expression.js +74 -0
  62. package/lib/less/tree/extend.js +66 -0
  63. package/lib/less/tree/import.js +184 -0
  64. package/lib/less/tree/index.js +54 -0
  65. package/lib/less/tree/javascript.js +33 -0
  66. package/lib/less/tree/js-eval-node.js +58 -0
  67. package/lib/less/tree/keyword.js +21 -0
  68. package/lib/less/tree/media.js +154 -0
  69. package/lib/less/tree/mixin-call.js +215 -0
  70. package/lib/less/tree/mixin-definition.js +229 -0
  71. package/lib/less/tree/namespace-value.js +87 -0
  72. package/lib/less/tree/negative.js +26 -0
  73. package/lib/less/tree/node.js +178 -0
  74. package/lib/less/tree/operation.js +62 -0
  75. package/lib/less/tree/paren.js +22 -0
  76. package/lib/less/tree/property.js +77 -0
  77. package/lib/less/tree/quoted.js +70 -0
  78. package/lib/less/tree/ruleset.js +867 -0
  79. package/lib/less/tree/selector.js +146 -0
  80. package/lib/less/tree/unicode-descriptor.js +13 -0
  81. package/lib/less/tree/unit.js +141 -0
  82. package/lib/less/tree/url.js +65 -0
  83. package/lib/less/tree/value.js +44 -0
  84. package/lib/less/tree/variable-call.js +46 -0
  85. package/lib/less/tree/variable.js +67 -0
  86. package/lib/less/utils.js +122 -0
  87. package/lib/less/visitors/extend-visitor.js +505 -0
  88. package/lib/less/visitors/import-sequencer.js +58 -0
  89. package/lib/less/visitors/import-visitor.js +189 -0
  90. package/lib/less/visitors/index.js +15 -0
  91. package/lib/less/visitors/join-selector-visitor.js +57 -0
  92. package/lib/less/visitors/set-tree-visibility-visitor.js +45 -0
  93. package/lib/less/visitors/to-css-visitor.js +363 -0
  94. package/lib/less/visitors/visitor.js +163 -0
  95. package/lib/less-browser/add-default-options.js +49 -0
  96. package/lib/less-browser/bootstrap.js +69 -0
  97. package/lib/less-browser/browser.js +65 -0
  98. package/lib/less-browser/cache.js +43 -0
  99. package/lib/less-browser/error-reporting.js +170 -0
  100. package/lib/less-browser/file-manager.js +113 -0
  101. package/lib/less-browser/image-size.js +28 -0
  102. package/lib/less-browser/index.js +285 -0
  103. package/lib/less-browser/log-listener.js +42 -0
  104. package/lib/less-browser/plugin-loader.js +26 -0
  105. package/lib/less-browser/utils.js +24 -0
  106. package/lib/less-node/environment.js +16 -0
  107. package/lib/less-node/file-manager.js +177 -0
  108. package/lib/less-node/fs.js +10 -0
  109. package/lib/less-node/image-size.js +58 -0
  110. package/lib/less-node/index.js +27 -0
  111. package/lib/less-node/lessc-helper.js +89 -0
  112. package/lib/less-node/plugin-loader.js +53 -0
  113. package/lib/less-node/url-file-manager.js +49 -0
  114. package/lib/lessc.js +557 -0
  115. package/lib/source-map/source-map-0.1.31.js +1933 -0
  116. package/lib/source-map/source-map-footer.js +4 -0
  117. package/lib/source-map/source-map-header.js +3 -0
  118. package/package.json +1 -1
  119. package/test/.DS_Store +0 -0
  120. package/test/browser/less.min.js +11 -0
  121. package/test/browser/less.min.js.map +1 -0
  122. package/test/css/css-escapes.css +1 -0
  123. package/test/less/css-escapes.less +3 -1
  124. package/.git/index +0 -0
package/lib/lessc.js ADDED
@@ -0,0 +1,557 @@
1
+ import path from 'path';
2
+ import fs from './less-node/fs';
3
+ import os from 'os';
4
+ import * as utils from './less/utils';
5
+ import * as Constants from './less/constants';
6
+ let errno;
7
+ let mkdirp;
8
+
9
+ try {
10
+ errno = require('errno');
11
+ } catch (err) {
12
+ errno = null;
13
+ }
14
+
15
+ import less from './less-node';
16
+ const pluginManager = new less.PluginManager(less);
17
+ const fileManager = new less.FileManager();
18
+ const plugins = [];
19
+ const queuePlugins = [];
20
+ let args = process.argv.slice(1);
21
+ let silent = false;
22
+ let verbose = false;
23
+ const options = less.options;
24
+
25
+ options.plugins = plugins;
26
+ options.reUsePluginManager = true;
27
+
28
+ const sourceMapOptions = {};
29
+ let continueProcessing = true;
30
+
31
+ // Calling process.exit does not flush stdout always. Instead of exiting the process, we set the process' exitCode,
32
+ // close all handles and wait for the event loop to exit the process.
33
+ // @see https://github.com/nodejs/node/issues/6409
34
+ // Unfortunately, node 0.10.x does not support setting process.exitCode, so we need to call reallyExit() explicitly.
35
+ // @see https://nodejs.org/api/process.html#process_process_exitcode
36
+ // Additionally we also need to make sure that uncaughtExceptions are never swallowed.
37
+ // @see https://github.com/less/less.js/issues/2881
38
+ // This code can safely be removed if node 0.10.x is not supported anymore.
39
+ process.on('exit', () => { process.reallyExit(process.exitCode); });
40
+ process.on('uncaughtException', err => {
41
+ console.error(err);
42
+ process.exitCode = 1;
43
+ });
44
+ // This code will still be required because otherwise rejected promises would not be reported to the user
45
+ process.on('unhandledRejection', err => {
46
+ console.error(err);
47
+ process.exitCode = 1;
48
+ });
49
+
50
+ const checkArgFunc = (arg, option) => {
51
+ if (!option) {
52
+ console.error(`${arg} option requires a parameter`);
53
+ continueProcessing = false;
54
+ process.exitCode = 1;
55
+ return false;
56
+ }
57
+ return true;
58
+ };
59
+
60
+ const checkBooleanArg = arg => {
61
+ const onOff = /^((on|t|true|y|yes)|(off|f|false|n|no))$/i.exec(arg);
62
+ if (!onOff) {
63
+ console.error(` unable to parse ${arg} as a boolean. use one of on/t/true/y/yes/off/f/false/n/no`);
64
+ continueProcessing = false;
65
+ process.exitCode = 1;
66
+ return false;
67
+ }
68
+ return Boolean(onOff[2]);
69
+ };
70
+
71
+ const parseVariableOption = (option, variables) => {
72
+ const parts = option.split('=', 2);
73
+ variables[parts[0]] = parts[1];
74
+ };
75
+
76
+ let sourceMapFileInline = false;
77
+
78
+ function printUsage() {
79
+ less.lesscHelper.printUsage();
80
+ pluginManager.Loader.printUsage(plugins);
81
+ continueProcessing = false;
82
+ }
83
+ function render() {
84
+
85
+ if (!continueProcessing) {
86
+ return;
87
+ }
88
+
89
+ let input = args[1];
90
+ if (input && input != '-') {
91
+ input = path.resolve(process.cwd(), input);
92
+ }
93
+ let output = args[2];
94
+ const outputbase = args[2];
95
+ if (output) {
96
+ output = path.resolve(process.cwd(), output);
97
+ }
98
+
99
+ if (options.sourceMap) {
100
+
101
+ sourceMapOptions.sourceMapInputFilename = input;
102
+ if (!sourceMapOptions.sourceMapFullFilename) {
103
+ if (!output && !sourceMapFileInline) {
104
+ console.error('the sourcemap option only has an optional filename if the css filename is given');
105
+ console.error('consider adding --source-map-map-inline which embeds the sourcemap into the css');
106
+ process.exitCode = 1;
107
+ return;
108
+ }
109
+ // its in the same directory, so always just the basename
110
+ if (output) {
111
+ sourceMapOptions.sourceMapOutputFilename = path.basename(output);
112
+ sourceMapOptions.sourceMapFullFilename = `${output}.map`;
113
+ }
114
+ // its in the same directory, so always just the basename
115
+ if ('sourceMapFullFilename' in sourceMapOptions) {
116
+ sourceMapOptions.sourceMapFilename = path.basename(sourceMapOptions.sourceMapFullFilename);
117
+ }
118
+ } else if (options.sourceMap && !sourceMapFileInline) {
119
+ const mapFilename = path.resolve(process.cwd(), sourceMapOptions.sourceMapFullFilename);
120
+ const mapDir = path.dirname(mapFilename);
121
+ const outputDir = path.dirname(output);
122
+ // find the path from the map to the output file
123
+ sourceMapOptions.sourceMapOutputFilename = path.join(
124
+ path.relative(mapDir, outputDir), path.basename(output));
125
+
126
+ // make the sourcemap filename point to the sourcemap relative to the css file output directory
127
+ sourceMapOptions.sourceMapFilename = path.join(
128
+ path.relative(outputDir, mapDir), path.basename(sourceMapOptions.sourceMapFullFilename));
129
+ }
130
+ }
131
+
132
+ if (sourceMapOptions.sourceMapBasepath === undefined) {
133
+ sourceMapOptions.sourceMapBasepath = input ? path.dirname(input) : process.cwd();
134
+ }
135
+
136
+ if (sourceMapOptions.sourceMapRootpath === undefined) {
137
+ const pathToMap = path.dirname((sourceMapFileInline ? output : sourceMapOptions.sourceMapFullFilename) || '.');
138
+ const pathToInput = path.dirname(sourceMapOptions.sourceMapInputFilename || '.');
139
+ sourceMapOptions.sourceMapRootpath = path.relative(pathToMap, pathToInput);
140
+ }
141
+
142
+
143
+ if (!input) {
144
+ console.error('lessc: no input files');
145
+ console.error('');
146
+ printUsage();
147
+ process.exitCode = 1;
148
+ return;
149
+ }
150
+
151
+ const ensureDirectory = filepath => {
152
+ const dir = path.dirname(filepath);
153
+ let cmd;
154
+ const existsSync = fs.existsSync || path.existsSync;
155
+ if (!existsSync(dir)) {
156
+ if (mkdirp === undefined) {
157
+ try {mkdirp = require('mkdirp');}
158
+ catch (e) { mkdirp = null; }
159
+ }
160
+ cmd = mkdirp && mkdirp.sync || fs.mkdirSync;
161
+ cmd(dir);
162
+ }
163
+ };
164
+
165
+ if (options.depends) {
166
+ if (!outputbase) {
167
+ console.error('option --depends requires an output path to be specified');
168
+ process.exitCode = 1;
169
+ return;
170
+ }
171
+ process.stdout.write(`${outputbase}: `);
172
+ }
173
+
174
+ if (!sourceMapFileInline) {
175
+ var writeSourceMap = (output = '', onDone) => {
176
+ const filename = sourceMapOptions.sourceMapFullFilename;
177
+ ensureDirectory(filename);
178
+ fs.writeFile(filename, output, 'utf8', err => {
179
+ if (err) {
180
+ let description = 'Error: ';
181
+ if (errno && errno.errno[err.errno]) {
182
+ description += errno.errno[err.errno].description;
183
+ } else {
184
+ description += `${err.code} ${err.message}`;
185
+ }
186
+ console.error(`lessc: failed to create file ${filename}`);
187
+ console.error(description);
188
+ process.exitCode = 1;
189
+ } else {
190
+ less.logger.info(`lessc: wrote ${filename}`);
191
+ }
192
+ onDone();
193
+ });
194
+ };
195
+ }
196
+
197
+ const writeSourceMapIfNeeded = (output, onDone) => {
198
+ if (options.sourceMap && !sourceMapFileInline) {
199
+ writeSourceMap(output, onDone);
200
+ } else {
201
+ onDone();
202
+ }
203
+ };
204
+
205
+ const writeOutput = (output, result, onSuccess) => {
206
+ if (options.depends) {
207
+ onSuccess();
208
+ } else if (output) {
209
+ ensureDirectory(output);
210
+ fs.writeFile(output, result.css, {encoding: 'utf8'}, err => {
211
+ if (err) {
212
+ let description = 'Error: ';
213
+ if (errno && errno.errno[err.errno]) {
214
+ description += errno.errno[err.errno].description;
215
+ } else {
216
+ description += `${err.code} ${err.message}`;
217
+ }
218
+ console.error(`lessc: failed to create file ${output}`);
219
+ console.error(description);
220
+ process.exitCode = 1;
221
+ } else {
222
+ less.logger.info(`lessc: wrote ${output}`);
223
+ onSuccess();
224
+ }
225
+ });
226
+ } else if (!options.depends) {
227
+ process.stdout.write(result.css);
228
+ onSuccess();
229
+ }
230
+ };
231
+
232
+ const logDependencies = (options, result) => {
233
+ if (options.depends) {
234
+ let depends = '';
235
+ for (let i = 0; i < result.imports.length; i++) {
236
+ depends += `${result.imports[i]} `;
237
+ }
238
+ console.log(depends);
239
+ }
240
+ };
241
+
242
+ const parseLessFile = (e, data) => {
243
+ if (e) {
244
+ console.error(`lessc: ${e.message}`);
245
+ process.exitCode = 1;
246
+ return;
247
+ }
248
+
249
+ data = data.replace(/^\uFEFF/, '');
250
+
251
+ options.paths = [path.dirname(input)].concat(options.paths);
252
+ options.filename = input;
253
+
254
+ if (options.lint) {
255
+ options.sourceMap = false;
256
+ }
257
+ sourceMapOptions.sourceMapFileInline = sourceMapFileInline;
258
+
259
+ if (options.sourceMap) {
260
+ options.sourceMap = sourceMapOptions;
261
+ }
262
+
263
+ less.logger.addListener({
264
+ info: function(msg) {
265
+ if (verbose) {
266
+ console.log(msg);
267
+ }
268
+ },
269
+ warn: function(msg) {
270
+ // do not show warning if the silent option is used
271
+ if (!silent) {
272
+ console.warn(msg);
273
+ }
274
+ },
275
+ error: function(msg) {
276
+ console.error(msg);
277
+ }
278
+ });
279
+
280
+ less.render(data, options)
281
+ .then(result => {
282
+ if (!options.lint) {
283
+ writeOutput(output, result, () => {
284
+ writeSourceMapIfNeeded(result.map, () => {
285
+ logDependencies(options, result);
286
+ });
287
+ });
288
+ }
289
+ },
290
+ err => {
291
+ if (!options.silent) {
292
+ console.error(err.toString({
293
+ stylize: options.color && less.lesscHelper.stylize
294
+ }));
295
+ }
296
+ process.exitCode = 1;
297
+ });
298
+ };
299
+
300
+ if (input != '-') {
301
+ fs.readFile(input, 'utf8', parseLessFile);
302
+ } else {
303
+ process.stdin.resume();
304
+ process.stdin.setEncoding('utf8');
305
+
306
+ let buffer = '';
307
+ process.stdin.on('data', data => {
308
+ buffer += data;
309
+ });
310
+
311
+ process.stdin.on('end', () => {
312
+ parseLessFile(false, buffer);
313
+ });
314
+ }
315
+ }
316
+
317
+ function processPluginQueue() {
318
+ let x = 0;
319
+
320
+ function pluginError(name) {
321
+ console.error(`Unable to load plugin ${name} please make sure that it is installed under or at the same level as less`);
322
+ process.exitCode = 1;
323
+ }
324
+ function pluginFinished(plugin) {
325
+ x++;
326
+ plugins.push(plugin);
327
+ if (x === queuePlugins.length) {
328
+ render();
329
+ }
330
+ }
331
+ queuePlugins.forEach(queue => {
332
+ const context = utils.clone(options);
333
+ pluginManager.Loader.loadPlugin(queue.name, process.cwd(), context, less.environment, fileManager)
334
+ .then(data => {
335
+ pluginFinished({
336
+ fileContent: data.contents,
337
+ filename: data.filename,
338
+ options: queue.options
339
+ });
340
+ })
341
+ .catch(() => {
342
+ pluginError(queue.name);
343
+ });
344
+ });
345
+ }
346
+
347
+ // self executing function so we can return
348
+ (() => {
349
+ args = args.filter(arg => {
350
+ let match;
351
+
352
+ match = arg.match(/^-I(.+)$/);
353
+ if (match) {
354
+ options.paths.push(match[1]);
355
+ return false;
356
+ }
357
+
358
+ match = arg.match(/^--?([a-z][0-9a-z-]*)(?:=(.*))?$/i);
359
+ if (match) {
360
+ arg = match[1];
361
+ } else {
362
+ return arg;
363
+ }
364
+
365
+ switch (arg) {
366
+ case 'v':
367
+ case 'version':
368
+ console.log(`lessc ${less.version.join('.')} (Less Compiler) [JavaScript]`);
369
+ continueProcessing = false;
370
+ break;
371
+ case 'verbose':
372
+ verbose = true;
373
+ break;
374
+ case 's':
375
+ case 'silent':
376
+ silent = true;
377
+ break;
378
+ case 'l':
379
+ case 'lint':
380
+ options.lint = true;
381
+ break;
382
+ case 'strict-imports':
383
+ options.strictImports = true;
384
+ break;
385
+ case 'h':
386
+ case 'help':
387
+ printUsage();
388
+ break;
389
+ case 'x':
390
+ case 'compress':
391
+ options.compress = true;
392
+ break;
393
+ case 'insecure':
394
+ options.insecure = true;
395
+ break;
396
+ case 'M':
397
+ case 'depends':
398
+ options.depends = true;
399
+ break;
400
+ case 'max-line-len':
401
+ if (checkArgFunc(arg, match[2])) {
402
+ options.maxLineLen = parseInt(match[2], 10);
403
+ if (options.maxLineLen <= 0) {
404
+ options.maxLineLen = -1;
405
+ }
406
+ }
407
+ break;
408
+ case 'no-color':
409
+ options.color = false;
410
+ break;
411
+ case 'js':
412
+ options.javascriptEnabled = true;
413
+ break;
414
+ case 'no-js':
415
+ console.error('The "--no-js" argument is deprecated, as inline JavaScript ' +
416
+ 'is disabled by default. Use "--js" to enable inline JavaScript (not recommended).');
417
+ break;
418
+ case 'include-path':
419
+ if (checkArgFunc(arg, match[2])) {
420
+ // ; supported on windows.
421
+ // : supported on windows and linux, excluding a drive letter like C:\ so C:\file:D:\file parses to 2
422
+ options.paths = match[2]
423
+ .split(os.type().match(/Windows/) ? /:(?!\\)|;/ : ':')
424
+ .map(p => {
425
+ if (p) {
426
+ return path.resolve(process.cwd(), p);
427
+ }
428
+ });
429
+ }
430
+ break;
431
+ case 'line-numbers':
432
+ if (checkArgFunc(arg, match[2])) {
433
+ options.dumpLineNumbers = match[2];
434
+ }
435
+ break;
436
+ case 'source-map':
437
+ options.sourceMap = true;
438
+ if (match[2]) {
439
+ sourceMapOptions.sourceMapFullFilename = match[2];
440
+ }
441
+ break;
442
+ case 'source-map-rootpath':
443
+ if (checkArgFunc(arg, match[2])) {
444
+ sourceMapOptions.sourceMapRootpath = match[2];
445
+ }
446
+ break;
447
+ case 'source-map-basepath':
448
+ if (checkArgFunc(arg, match[2])) {
449
+ sourceMapOptions.sourceMapBasepath = match[2];
450
+ }
451
+ break;
452
+ case 'source-map-inline':
453
+ case 'source-map-map-inline':
454
+ sourceMapFileInline = true;
455
+ options.sourceMap = true;
456
+ break;
457
+ case 'source-map-include-source':
458
+ case 'source-map-less-inline':
459
+ sourceMapOptions.outputSourceFiles = true;
460
+ break;
461
+ case 'source-map-url':
462
+ if (checkArgFunc(arg, match[2])) {
463
+ sourceMapOptions.sourceMapURL = match[2];
464
+ }
465
+ break;
466
+ case 'rp':
467
+ case 'rootpath':
468
+ if (checkArgFunc(arg, match[2])) {
469
+ options.rootpath = match[2].replace(/\\/g, '/');
470
+ }
471
+ break;
472
+ case 'relative-urls':
473
+ console.warn('The --relative-urls option has been deprecated. Use --rewrite-urls=all.');
474
+ options.rewriteUrls = Constants.RewriteUrls.ALL;
475
+ break;
476
+ case 'ru':
477
+ case 'rewrite-urls':
478
+ const m = match[2];
479
+ if (m) {
480
+ if (m === 'local') {
481
+ options.rewriteUrls = Constants.RewriteUrls.LOCAL;
482
+ } else if (m === 'off') {
483
+ options.rewriteUrls = Constants.RewriteUrls.OFF;
484
+ } else if (m === 'all') {
485
+ options.rewriteUrls = Constants.RewriteUrls.ALL;
486
+ } else {
487
+ console.error(`Unknown rewrite-urls argument ${m}`);
488
+ continueProcessing = false;
489
+ process.exitCode = 1;
490
+ }
491
+ } else {
492
+ options.rewriteUrls = Constants.RewriteUrls.ALL;
493
+ }
494
+ break;
495
+ case 'sm':
496
+ case 'strict-math':
497
+ console.warn('The --strict-math option has been deprecated. Use --math=strict.');
498
+ if (checkArgFunc(arg, match[2])) {
499
+ if (checkBooleanArg(match[2])) {
500
+ options.math = Constants.Math.STRICT_LEGACY;
501
+ }
502
+ }
503
+ break;
504
+ case 'm':
505
+ case 'math':
506
+ if (checkArgFunc(arg, match[2])) {
507
+ options.math = match[2];
508
+ }
509
+ break;
510
+ case 'su':
511
+ case 'strict-units':
512
+ if (checkArgFunc(arg, match[2])) {
513
+ options.strictUnits = checkBooleanArg(match[2]);
514
+ }
515
+ break;
516
+ case 'global-var':
517
+ if (checkArgFunc(arg, match[2])) {
518
+ if (!options.globalVars) {
519
+ options.globalVars = {};
520
+ }
521
+ parseVariableOption(match[2], options.globalVars);
522
+ }
523
+ break;
524
+ case 'modify-var':
525
+ if (checkArgFunc(arg, match[2])) {
526
+ if (!options.modifyVars) {
527
+ options.modifyVars = {};
528
+ }
529
+
530
+ parseVariableOption(match[2], options.modifyVars);
531
+ }
532
+ break;
533
+ case 'url-args':
534
+ if (checkArgFunc(arg, match[2])) {
535
+ options.urlArgs = match[2];
536
+ }
537
+ break;
538
+ case 'plugin':
539
+ const splitupArg = match[2].match(/^([^=]+)(=(.*))?/);
540
+ const name = splitupArg[1];
541
+ const pluginOptions = splitupArg[3];
542
+ queuePlugins.push({ name, options: pluginOptions });
543
+ break;
544
+ default:
545
+ queuePlugins.push({ name: arg, options: match[2], default: true });
546
+ break;
547
+ }
548
+ });
549
+
550
+ if (queuePlugins.length > 0) {
551
+ processPluginQueue();
552
+ }
553
+ else {
554
+ render();
555
+ }
556
+
557
+ })();