mirror of
https://github.com/less/less.js.git
synced 2026-02-08 05:55:00 -05:00
132 lines
4.5 KiB
JavaScript
132 lines
4.5 KiB
JavaScript
(function() {
|
|
|
|
console = function() {
|
|
var stdout = java.lang.System.out;
|
|
var stderr = java.lang.System.err;
|
|
|
|
function doLog(out, type) {
|
|
return function() {
|
|
var args = java.lang.reflect.Array.newInstance(java.lang.Object, arguments.length - 1);
|
|
var format = arguments[0];
|
|
var conversionIndex = 0;
|
|
// need to look for %d (integer) conversions because in Javascript all numbers are doubles
|
|
for (var i = 1; i < arguments.length; i++) {
|
|
var arg = arguments[i];
|
|
if (conversionIndex != -1) {
|
|
conversionIndex = format.indexOf('%', conversionIndex);
|
|
}
|
|
if (conversionIndex >= 0 && conversionIndex < format.length) {
|
|
var conversion = format.charAt(conversionIndex + 1);
|
|
if (conversion === 'd' && typeof arg === 'number') {
|
|
arg = new java.lang.Integer(new java.lang.Double(arg).intValue());
|
|
}
|
|
conversionIndex++;
|
|
}
|
|
args[i-1] = arg;
|
|
}
|
|
try {
|
|
out.println(type + java.lang.String.format(format, args));
|
|
} catch(ex) {
|
|
stderr.println(ex);
|
|
}
|
|
}
|
|
}
|
|
return {
|
|
log: doLog(stdout, ''),
|
|
info: doLog(stdout, 'INFO: '),
|
|
error: doLog(stderr, 'ERROR: '),
|
|
warn: doLog(stderr, 'WARN: ')
|
|
};
|
|
}();
|
|
|
|
less.modules = {};
|
|
|
|
less.modules.path = {
|
|
join: function() {
|
|
var parts = [];
|
|
for (i in arguments) {
|
|
parts = parts.concat(arguments[i].split(/\/|\\/));
|
|
}
|
|
var result = [];
|
|
for (i in parts) {
|
|
var part = parts[i];
|
|
if (part === '..' && result.length > 0 && result[result.length-1] !== '..') {
|
|
result.pop();
|
|
} else if (part === '' && result.length > 0) {
|
|
// skip
|
|
} else if (part !== '.') {
|
|
if (part.slice(-1)==='\\' || part.slice(-1)==='/') {
|
|
part = part.slice(0, -1);
|
|
}
|
|
result.push(part);
|
|
}
|
|
}
|
|
return result.join('/');
|
|
},
|
|
dirname: function(p) {
|
|
var path = p.split('/');
|
|
path.pop();
|
|
return path.join('/');
|
|
},
|
|
basename: function(p, ext) {
|
|
var base = p.split('/').pop();
|
|
if (ext) {
|
|
var index = base.lastIndexOf(ext);
|
|
if (base.length === index + ext.length) {
|
|
base = base.substr(0, index);
|
|
}
|
|
}
|
|
return base;
|
|
},
|
|
extname: function(p) {
|
|
var index = p.lastIndexOf('.');
|
|
return index > 0 ? p.substring(index) : '';
|
|
}
|
|
};
|
|
|
|
less.modules.fs = {
|
|
readFileSync: function(name) {
|
|
// read a file into a byte array
|
|
var file = new java.io.File(name);
|
|
var stream = new java.io.FileInputStream(file);
|
|
var buffer = [];
|
|
var c;
|
|
while ((c = stream.read()) != -1) {
|
|
buffer.push(c);
|
|
}
|
|
stream.close();
|
|
return {
|
|
length: buffer.length,
|
|
toString: function(enc) {
|
|
if (enc === 'base64') {
|
|
return encodeBase64Bytes(buffer);
|
|
} else if (enc) {
|
|
return java.lang.String["(byte[],java.lang.String)"](buffer, enc);
|
|
} else {
|
|
return java.lang.String["(byte[])"](buffer);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
};
|
|
|
|
less.encoder = {
|
|
encodeBase64: function(str) {
|
|
return encodeBase64String(str);
|
|
}
|
|
};
|
|
|
|
// ---------------------------------------------------------------------------------------------
|
|
// private helper functions
|
|
// ---------------------------------------------------------------------------------------------
|
|
|
|
function encodeBase64Bytes(bytes) {
|
|
// requires at least a JRE Platform 6 (or JAXB 1.0 on the classpath)
|
|
return javax.xml.bind.DatatypeConverter.printBase64Binary(bytes)
|
|
}
|
|
function encodeBase64String(str) {
|
|
return encodeBase64Bytes(new java.lang.String(str).getBytes());
|
|
}
|
|
|
|
})();
|