Merge pull request #388 from erwan/rhino

Rhino support
This commit is contained in:
Alexis Sellier
2011-09-15 04:36:33 -07:00
5 changed files with 2555 additions and 2 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]];
};

2460
dist/less-rhino-1.1.3.js vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,12 +1,25 @@
var less, tree;
if (typeof(window) === 'undefined') {
var BROWSER = 0; var NODE = 1; var RHINO = 2;
var engine;
if (typeof environment === "object" && ({}).toString.call(environment) === "[object Environment]") {
// Rhino
// Details on how to detect Rhino: https://github.com/ringo/ringojs/issues/88
less = {};
tree = less.tree = {};
engine = RHINO;
} else if (typeof(window) === 'undefined') {
// Node.js
less = exports,
tree = require('less/tree');
engine = NODE;
} else {
// Browser
if (typeof(window.less) === 'undefined') { window.less = {} }
less = window.less,
tree = window.less.tree = {};
engine = BROWSER;
}
//
// less.js - parser
@@ -1088,7 +1101,7 @@ less.Parser = function Parser(env) {
};
};
if (typeof(window) !== 'undefined') {
if (engine === BROWSER || engine === RHINO) {
//
// Used by `@import` directives
//

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

@@ -0,0 +1,60 @@
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 });
}
function writeFile(filename, content) {
var fstream = new java.io.FileWriter(filename);
var out = new java.io.BufferedWriter(fstream);
out.write(content);
out.close();
}
// Command line integration via Rhino
(function (args) {
name = args[0];
var output = args[1];
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) {
quit(1);
} else {
result = root.toCSS();
if (output) {
writeFile(output, result);
print("Written to " + output);
} else {
print(result);
}
quit(0);
}
});
print("done");
}(arguments));