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