1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/yswang-lessc

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
lessc.wsf 7.8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
yswang Отправлено 06.08.2015 16:12 078e53d
<!--
Less.js compiler for Windows Script Host
http://blog.dotsmart.net/
Copyright (c) 2010, Duncan Smart
Licensed under the Apache 2.0 License.
Modify by: yswang at 2015/02/03
-->
<job>
<script language="jscript">
// Stub out globals
var window = this;
var location = window.location = {
port: 0,
href: ''
};
var fso = new ActiveXObject("Scripting.FileSystemObject");
var ado = new ActiveXObject("ADODB.Stream");
//var myMsgBox = new ActiveXObject("wscript.shell");
// test myMsgBox.Popup('xxx');
var input = null;
var util = {
readText: function (filename, charset) {
ado.charset = charset || 'UTF-8';
ado.open();
ado.loadFromFile(filename);
text = ado.readText(-1);
ado.close();
// Strip off any UTF-8 BOM
var utf8bom = String.fromCharCode(0xEF, 0xBB, 0xBF);
if (text.substr(0, utf8bom.length) == utf8bom) {
text = text.substr(utf8bom.length);
}
return text;
},
saveText : function(filename, text, charset) {
ado.type = 2; // text
ado.charset = charset || 'UTF-8';
ado.open();
ado.writeText(text);
ado.saveToFile(filename, 2); // 2-SaveCreateOverWrite
ado.close();
}
};
// XMLHttpRequest that just gets local files. Used when processing "@import"
function XMLHttpRequest() {}
XMLHttpRequest.prototype = {
open: function (method, url, async) {
this.url = url;
},
send: function () {
// get the file path relative to the input less file/directory
var currDir = fso.folderExists(input) ? input : fso.getParentFolderName(input);
var filename = fso.BuildPath(currDir, this.url);
//WScript.StdErr.WriteLine("XHR.send " + filename);
// Little hack so *.less will resolve to *.less.css also. Helps with Visual Studio
// ensuring that file BuildAction is set to Content and you get rudimentary syntax highlighting with no set up.
if (filename.match(/.less$/i) && !fso.FileExists(filename)) {
filename = filename.replace(/.less$/i, '.less.css');
}
try {
this.status = 200;
this.responseText = util.readText(filename);
}
catch (e) {
this.status = 404;
this.responseText = e.description;
}
},
setRequestHeader: function () {},
getResponseHeader: function () {}
};
// Fake document
var document = {
_dummyElement: {
childNodes: [],
appendChild: function(){},
style: {}
},
getElementsByTagName: function(){ return []; },
getElementById: function(){ return this._dummyElement; },
createElement: function(){ return this._dummyElement; },
createTextNode: function(){ return this._dummyElement; }
};
</script>
<!-- less.js from https://github.com/cloudhead/less.js/tree/master/dist/ -->
<script language="jscript" src="es5-polyfill.js" />
<script language="jscript" src="less.js" />
<script language="jscript">
// Parse args
if(WScript.Arguments.Length < 2) {
WScript.StdErr.WriteLine('Lost input file and output file argument!');
WScript.Quit(1);
}
var input = WScript.Arguments.Item(0),
output = WScript.Arguments.Item(1);
var args = {}, argKey, argVal;
for (var i = 2; i < WScript.Arguments.Length; i++) {
var arg = WScript.Arguments.Item(i);
// Handle "-compress", "--compress", "-encoding=utf-8", "--encoding=utf-8"
//var matchs = arg.match(/^--?([a-z][0-9a-z-]*)=?([^="']*)$/i);
var matchs = arg.match(/^--?([a-z][0-9a-z-]*)(?:=([^="']*))?$/i);
if (matchs && matchs.length > 1) {
argKey = matchs[1];
argVal = matchs[2] ? matchs[2] : true;
args[argKey] = argVal;
} else {
args[i] = arg;
}
}
if (fso.folderExists(input)) {
input = fso.getAbsolutePathName(input);
var files = getFiles(input, /\.less$/i);
for (var i = 0; i < files.length; i++) {
var file = files[i];
convert(file.path, output + '\\'
+ file.name.replace( /\.less$/i, '.css'));
}
} else {
if (fso.folderExists(output)) {
output = fso.getAbsolutePathName(output) + '\\'
+ fso.getfile(input).name.replace(/\.less$/i, '.css');
}
convert(input, output);
}
// Returns array of {name:'foo.bar', path:'c:\baz\foo.bar'} for given directory and pattern
function getFiles(dir, regex) {
var e = new Enumerator(fso.getFolder(dir).files);
var files = []
for (; !e.atEnd(); e.moveNext()) {
if (regex.test(e.item().path)) {
files.push({
name: e.item().name,
path: e.item().path
});
}
}
return files;
}
function convert(input, output) {
if (!input) {
WScript.StdErr.WriteLine("lessc.wsf: no input files");
WScript.StdErr.WriteLine("Usage:");
WScript.StdErr.WriteLine("Single file: cscript //nologo lessc.wsf input.less [output.css] [-compress]");
WScript.StdErr.WriteLine("Directory: cscript //nologo lessc.wsf inputdir outputdir [-compress]");
WScript.Quit(1);
}
var data = '';
if (input == '-') {
var chunks = [];
while (!WScript.StdIn.AtEndOfStream) {
chunks.push(WScript.StdIn.ReadAll());
}
data = chunks.join('');
} else {
data = util.readText(input, args.encoding);
}
// less parser
var parser = new less.Parser({
//filename: input
});
try {
parser.parse(data, function (err, tree) {
if (err) {
WScript.StdErr.WriteLine("ERR: ");
for (var i in err) {
if (err[i]) {
WScript.StdErr.WriteLine(" " + i + ': ' + err[i]);
}
}
WScript.Quit(2);
} else {
var css = tree.toCSS({
compress: args.compress
});
if (output) {
if(fso.FileExists(output)) {
var checkfile = fso.GetFile(output);
if(checkfile.Attributes & 1) {
checkfile.Attributes = checkfile.Attributes ^ 1
}
}
util.saveText(output, css, args.encoding);
} else {
WScript.StdOut.Write(css);
}
}
});
} catch (e) {
WScript.StdErr.WriteLine("ERROR:");
for (var i in e) {
if (e[i]) {
WScript.StdErr.WriteLine(" " + i + ': ' + e[i]);
}
}
WScript.Quit(3);
}
// Sometimes less will return errors inside the fake HTML element
if (document._dummyElement.innerHTML && document._dummyElement.innerHTML.match(/Syntax Error/i)) {
var s = document._dummyElement.innerHTML;
s = s.replace(/<[^>]+(\/?)>/g, function (m) { return m.indexOf('/') > 0 && m !== '</label>' ? "\n" : '' });
s = s.replace(/\n+/g, '\n');
WScript.StdErr.WriteLine("ERR: ");
WScript.StdErr.WriteLine(s);
WScript.Quit(2);
}
}
</script>
</job>

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/yswang-lessc.git
git@api.gitlife.ru:oschina-mirror/yswang-lessc.git
oschina-mirror
yswang-lessc
yswang-lessc
master