lib/less/js/lib/less/rhino.js in less-2.3.0 vs lib/less/js/lib/less/rhino.js in less-2.3.1

- old
+ new

@@ -1,22 +1,29 @@ var name; function loadStyleSheet(sheet, callback, reload, remaining) { - var sheetName = name.slice(0, name.lastIndexOf('/') + 1) + sheet.href; - var input = readFile(sheetName); + var endOfPath = Math.max(name.lastIndexOf('/'), name.lastIndexOf('\\')), + sheetName = name.slice(0, endOfPath + 1) + sheet.href, + contents = sheet.contents || {}, + input = readFile(sheetName); + + contents[sheetName] = input; + var parser = new less.Parser({ - paths: [sheet.href.replace(/[\w\.-]+$/, '')] + paths: [sheet.href.replace(/[\w\.-]+$/, '')], + contents: contents }); parser.parse(input, function (e, root) { if (e) { - print("Error: " + e); - quit(1); + return error(e, sheetName); } - callback(root, sheet, { local: false, lastModified: 0, remaining: remaining }); + try { + callback(e, root, input, sheet, { local: false, lastModified: 0, remaining: remaining }, sheetName); + } catch(e) { + error(e, sheetName); + } }); - - // callback({}, sheet, { local: true, remaining: remaining }); } function writeFile(filename, content) { var fstream = new java.io.FileWriter(filename); var out = new java.io.BufferedWriter(fstream); @@ -24,12 +31,30 @@ out.close(); } // Command line integration via Rhino (function (args) { - name = args[0]; - var output = args[1]; + var output, + compress = false, + i; + + for(i = 0; i < args.length; i++) { + switch(args[i]) { + case "-x": + compress = true; + break; + default: + if (!name) { + name = args[i]; + } else if (!output) { + output = args[i]; + } else { + print("unrecognised parameters"); + print("input_file [output_file] [-x]"); + } + } + } if (!name) { print('No files present in the fileset; Check your pattern match in build.xml'); quit(1); } @@ -41,22 +66,58 @@ print('lesscss: couldn\'t open file ' + name); quit(1); } var result; - var parser = new less.Parser(); - parser.parse(input, function (e, root) { - if (e) { - quit(1); - } else { - result = root.toCSS(); - if (output) { - writeFile(output, result); - print("Written to " + output); + try { + var parser = new less.Parser(); + parser.parse(input, function (e, root) { + if (e) { + error(e, name); + quit(1); } else { - print(result); + result = root.toCSS({compress: compress || false}); + if (output) { + writeFile(output, result); + print("Written to " + output); + } else { + print(result); + } + quit(0); } - quit(0); - } - }); + }); + } + catch(e) { + error(e, name); + quit(1); + } print("done"); }(arguments)); + +function error(e, filename) { + + var content = "Error : " + filename + "\n"; + + filename = e.filename || filename; + + if (e.message) { + content += e.message + "\n"; + } + + var errorline = function (e, i, classname) { + if (e.extract[i]) { + content += + String(parseInt(e.line) + (i - 1)) + + ":" + e.extract[i] + "\n"; + } + }; + + if (e.stack) { + content += e.stack; + } else if (e.extract) { + content += 'on line ' + e.line + ', column ' + (e.column + 1) + ':\n'; + errorline(e, 0); + errorline(e, 1); + errorline(e, 2); + } + print(content); +} \ No newline at end of file