mirror of
https://github.com/less/less.js.git
synced 2026-01-23 06:07:56 -05:00
added base 64 encoding for rhino, fixes urls.less test case
This commit is contained in:
@@ -1,101 +1,128 @@
|
||||
console = function() {
|
||||
var stdout = java.lang.Systen.out;
|
||||
var stderr = java.lang.System.err;
|
||||
(function() {
|
||||
|
||||
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());
|
||||
console = function() {
|
||||
var stdout = java.lang.Systen.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);
|
||||
}
|
||||
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);
|
||||
}
|
||||
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.pop();
|
||||
} else if (part === '' && result.length > 0) {
|
||||
// skip
|
||||
} else if (part !== '.') {
|
||||
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) {
|
||||
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 javax.xml.bind.DatatypeConverter.printBase64Binary(buffer);
|
||||
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.pop();
|
||||
} else if (part === '' && result.length > 0) {
|
||||
// skip
|
||||
} else if (part !== '.') {
|
||||
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());
|
||||
}
|
||||
|
||||
})();
|
||||
|
||||
4
lib/less/encoder.js
Normal file
4
lib/less/encoder.js
Normal file
@@ -0,0 +1,4 @@
|
||||
// base64 encoder implementation for node
|
||||
exports.encodeBase64 = function(str) {
|
||||
return new Buffer(str).toString('base64');
|
||||
};
|
||||
@@ -579,9 +579,8 @@ tree.functions = {
|
||||
'<rect ' + rectangleDimension + ' fill="url(#gradient)" /></svg>';
|
||||
|
||||
if (useBase64) {
|
||||
// only works in node, needs interface to what is supported in environment
|
||||
try {
|
||||
returner = new Buffer(returner).toString('base64');
|
||||
returner = require('./encoder').encodeBase64(returner); // TODO browser implementation
|
||||
} catch(e) {
|
||||
useBase64 = false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user