Basic rhino support

This commit is contained in:
Erwan Loisant
2011-07-18 18:24:15 +02:00
parent a3384fa922
commit c5c1031402
4 changed files with 81 additions and 3 deletions

View File

@@ -18,6 +18,7 @@ HEADER = build/header.js
VERSION = `cat package.json | grep version \
| grep -o '[0-9]\.[0-9]\.[0-9]\+'`
DIST = dist/less-${VERSION}.js
RHINO = dist/less-rhino-${VERSION}.js
DIST_MIN = dist/less-${VERSION}.min.js
less:
@@ -35,6 +36,18 @@ less:
@@echo "})(window);" >> ${DIST}
@@echo ${DIST} built.
rhino:
@@mkdir -p dist
@@touch ${RHINO}
@@cat build/require-rhino.js\
build/ecma-5.js\
${SRC}/parser.js\
${SRC}/functions.js\
${SRC}/tree/*.js\
${SRC}/tree.js\
${SRC}/rhino.js > ${RHINO}
@@echo ${RHINO} built.
min: less
@@echo minifying...
@@cat ${HEADER} | sed s/@VERSION/${VERSION}/ > ${DIST_MIN}

7
build/require-rhino.js Normal file
View File

@@ -0,0 +1,7 @@
//
// Stub out `require` in rhino
//
function require(arg) {
return less[arg.split('/')[1]];
};

View File

@@ -1,9 +1,17 @@
var less, tree;
if (typeof(window) === 'undefined') {
less = exports,
tree = require('less/tree');
if (typeof(exports) === 'undefined') {
// Rhino
less = {};
tree = less.tree = {};
} else {
// Node.js
less = exports,
tree = require('less/tree');
}
} else {
// Browser
if (typeof(window.less) === 'undefined') { window.less = {} }
less = window.less,
tree = window.less.tree = {};
@@ -1088,7 +1096,7 @@ less.Parser = function Parser(env) {
};
};
if (typeof(window) !== 'undefined') {
if (typeof(window) !== 'undefined' /* browser */ || typeof(exports) === 'undefined' /* rhino */) {
//
// Used by `@import` directives
//

50
lib/less/rhino.js Normal file
View File

@@ -0,0 +1,50 @@
var name;
function loadStyleSheet(sheet, callback, reload, remaining) {
var sheetName = name.slice(0, name.lastIndexOf('/') + 1) + sheet.href;
var input = readFile(sheetName);
var parser = new less.Parser();
parser.parse(input, function (e, root) {
if (e) {
print("Error: " + e);
quit(1);
}
callback(root, sheet, { local: false, lastModified: 0, remaining: remaining });
});
// callback({}, sheet, { local: true, remaining: remaining });
}
// Command line integration via Rhino
(function (args) {
name = args[0];
var optstr = args[1]; // arg1=val1,arg2=val2,...
if (!name) {
print('No files present in the fileset; Check your pattern match in build.xml');
quit(1);
}
path = name.split("/");path.pop();path=path.join("/")
var input = readFile(name);
if (!input) {
print('lesscss: couldn\'t open file ' + name);
quit(1);
}
var result;
var parser = new less.Parser();
parser.parse(input, function (e, root) {
if (e) {
print("Error: " + err);
quit(1);
} else {
print("Success");
result = root.toCSS();
print("res: "+ result);
quit(0);
}
});
print("done");
}(arguments));