mirror of
https://github.com/atlanticbiomedical/biomedjs.git
synced 2025-07-02 00:47:26 -04:00
Added node-modules
This commit is contained in:
1
node_modules/piler/node_modules/.bin/cake
generated
vendored
Symbolic link
1
node_modules/piler/node_modules/.bin/cake
generated
vendored
Symbolic link
@ -0,0 +1 @@
|
||||
../coffee-script/bin/cake
|
1
node_modules/piler/node_modules/.bin/coffee
generated
vendored
Symbolic link
1
node_modules/piler/node_modules/.bin/coffee
generated
vendored
Symbolic link
@ -0,0 +1 @@
|
||||
../coffee-script/bin/coffee
|
1
node_modules/piler/node_modules/.bin/csso
generated
vendored
Symbolic link
1
node_modules/piler/node_modules/.bin/csso
generated
vendored
Symbolic link
@ -0,0 +1 @@
|
||||
../csso/bin/csso
|
1
node_modules/piler/node_modules/.bin/uglifyjs
generated
vendored
Symbolic link
1
node_modules/piler/node_modules/.bin/uglifyjs
generated
vendored
Symbolic link
@ -0,0 +1 @@
|
||||
../uglify-js/bin/uglifyjs
|
9
node_modules/piler/node_modules/async/.gitmodules
generated
vendored
Normal file
9
node_modules/piler/node_modules/async/.gitmodules
generated
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
[submodule "deps/nodeunit"]
|
||||
path = deps/nodeunit
|
||||
url = git://github.com/caolan/nodeunit.git
|
||||
[submodule "deps/UglifyJS"]
|
||||
path = deps/UglifyJS
|
||||
url = https://github.com/mishoo/UglifyJS.git
|
||||
[submodule "deps/nodelint"]
|
||||
path = deps/nodelint
|
||||
url = https://github.com/tav/nodelint.git
|
4
node_modules/piler/node_modules/async/.npmignore
generated
vendored
Normal file
4
node_modules/piler/node_modules/async/.npmignore
generated
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
deps
|
||||
dist
|
||||
test
|
||||
nodelint.cfg
|
19
node_modules/piler/node_modules/async/LICENSE
generated
vendored
Normal file
19
node_modules/piler/node_modules/async/LICENSE
generated
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
Copyright (c) 2010 Caolan McMahon
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
25
node_modules/piler/node_modules/async/Makefile
generated
vendored
Normal file
25
node_modules/piler/node_modules/async/Makefile
generated
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
PACKAGE = asyncjs
|
||||
NODEJS = $(if $(shell test -f /usr/bin/nodejs && echo "true"),nodejs,node)
|
||||
CWD := $(shell pwd)
|
||||
NODEUNIT = $(CWD)/node_modules/nodeunit/bin/nodeunit
|
||||
UGLIFY = $(CWD)/node_modules/uglify-js/bin/uglifyjs
|
||||
NODELINT = $(CWD)/node_modules/nodelint/nodelint
|
||||
|
||||
BUILDDIR = dist
|
||||
|
||||
all: clean test build
|
||||
|
||||
build: $(wildcard lib/*.js)
|
||||
mkdir -p $(BUILDDIR)
|
||||
$(UGLIFY) lib/async.js > $(BUILDDIR)/async.min.js
|
||||
|
||||
test:
|
||||
$(NODEUNIT) test
|
||||
|
||||
clean:
|
||||
rm -rf $(BUILDDIR)
|
||||
|
||||
lint:
|
||||
$(NODELINT) --config nodelint.cfg lib/async.js
|
||||
|
||||
.PHONY: test build all
|
1021
node_modules/piler/node_modules/async/README.md
generated
vendored
Normal file
1021
node_modules/piler/node_modules/async/README.md
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
3
node_modules/piler/node_modules/async/index.js
generated
vendored
Normal file
3
node_modules/piler/node_modules/async/index.js
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
// This file is just added for convenience so this repository can be
|
||||
// directly checked out into a project's deps folder
|
||||
module.exports = require('./lib/async');
|
692
node_modules/piler/node_modules/async/lib/async.js
generated
vendored
Normal file
692
node_modules/piler/node_modules/async/lib/async.js
generated
vendored
Normal file
@ -0,0 +1,692 @@
|
||||
/*global setTimeout: false, console: false */
|
||||
(function () {
|
||||
|
||||
var async = {};
|
||||
|
||||
// global on the server, window in the browser
|
||||
var root = this,
|
||||
previous_async = root.async;
|
||||
|
||||
if (typeof module !== 'undefined' && module.exports) {
|
||||
module.exports = async;
|
||||
}
|
||||
else {
|
||||
root.async = async;
|
||||
}
|
||||
|
||||
async.noConflict = function () {
|
||||
root.async = previous_async;
|
||||
return async;
|
||||
};
|
||||
|
||||
//// cross-browser compatiblity functions ////
|
||||
|
||||
var _forEach = function (arr, iterator) {
|
||||
if (arr.forEach) {
|
||||
return arr.forEach(iterator);
|
||||
}
|
||||
for (var i = 0; i < arr.length; i += 1) {
|
||||
iterator(arr[i], i, arr);
|
||||
}
|
||||
};
|
||||
|
||||
var _map = function (arr, iterator) {
|
||||
if (arr.map) {
|
||||
return arr.map(iterator);
|
||||
}
|
||||
var results = [];
|
||||
_forEach(arr, function (x, i, a) {
|
||||
results.push(iterator(x, i, a));
|
||||
});
|
||||
return results;
|
||||
};
|
||||
|
||||
var _reduce = function (arr, iterator, memo) {
|
||||
if (arr.reduce) {
|
||||
return arr.reduce(iterator, memo);
|
||||
}
|
||||
_forEach(arr, function (x, i, a) {
|
||||
memo = iterator(memo, x, i, a);
|
||||
});
|
||||
return memo;
|
||||
};
|
||||
|
||||
var _keys = function (obj) {
|
||||
if (Object.keys) {
|
||||
return Object.keys(obj);
|
||||
}
|
||||
var keys = [];
|
||||
for (var k in obj) {
|
||||
if (obj.hasOwnProperty(k)) {
|
||||
keys.push(k);
|
||||
}
|
||||
}
|
||||
return keys;
|
||||
};
|
||||
|
||||
//// exported async module functions ////
|
||||
|
||||
//// nextTick implementation with browser-compatible fallback ////
|
||||
if (typeof process === 'undefined' || !(process.nextTick)) {
|
||||
async.nextTick = function (fn) {
|
||||
setTimeout(fn, 0);
|
||||
};
|
||||
}
|
||||
else {
|
||||
async.nextTick = process.nextTick;
|
||||
}
|
||||
|
||||
async.forEach = function (arr, iterator, callback) {
|
||||
callback = callback || function () {};
|
||||
if (!arr.length) {
|
||||
return callback();
|
||||
}
|
||||
var completed = 0;
|
||||
_forEach(arr, function (x) {
|
||||
iterator(x, function (err) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
callback = function () {};
|
||||
}
|
||||
else {
|
||||
completed += 1;
|
||||
if (completed === arr.length) {
|
||||
callback(null);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
async.forEachSeries = function (arr, iterator, callback) {
|
||||
callback = callback || function () {};
|
||||
if (!arr.length) {
|
||||
return callback();
|
||||
}
|
||||
var completed = 0;
|
||||
var iterate = function () {
|
||||
iterator(arr[completed], function (err) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
callback = function () {};
|
||||
}
|
||||
else {
|
||||
completed += 1;
|
||||
if (completed === arr.length) {
|
||||
callback(null);
|
||||
}
|
||||
else {
|
||||
iterate();
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
iterate();
|
||||
};
|
||||
|
||||
async.forEachLimit = function (arr, limit, iterator, callback) {
|
||||
callback = callback || function () {};
|
||||
if (!arr.length || limit <= 0) {
|
||||
return callback();
|
||||
}
|
||||
var completed = 0;
|
||||
var started = 0;
|
||||
var running = 0;
|
||||
|
||||
(function replenish () {
|
||||
if (completed === arr.length) {
|
||||
return callback();
|
||||
}
|
||||
|
||||
while (running < limit && started < arr.length) {
|
||||
started += 1;
|
||||
running += 1;
|
||||
iterator(arr[started - 1], function (err) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
callback = function () {};
|
||||
}
|
||||
else {
|
||||
completed += 1;
|
||||
running -= 1;
|
||||
if (completed === arr.length) {
|
||||
callback();
|
||||
}
|
||||
else {
|
||||
replenish();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
})();
|
||||
};
|
||||
|
||||
|
||||
var doParallel = function (fn) {
|
||||
return function () {
|
||||
var args = Array.prototype.slice.call(arguments);
|
||||
return fn.apply(null, [async.forEach].concat(args));
|
||||
};
|
||||
};
|
||||
var doSeries = function (fn) {
|
||||
return function () {
|
||||
var args = Array.prototype.slice.call(arguments);
|
||||
return fn.apply(null, [async.forEachSeries].concat(args));
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
var _asyncMap = function (eachfn, arr, iterator, callback) {
|
||||
var results = [];
|
||||
arr = _map(arr, function (x, i) {
|
||||
return {index: i, value: x};
|
||||
});
|
||||
eachfn(arr, function (x, callback) {
|
||||
iterator(x.value, function (err, v) {
|
||||
results[x.index] = v;
|
||||
callback(err);
|
||||
});
|
||||
}, function (err) {
|
||||
callback(err, results);
|
||||
});
|
||||
};
|
||||
async.map = doParallel(_asyncMap);
|
||||
async.mapSeries = doSeries(_asyncMap);
|
||||
|
||||
|
||||
// reduce only has a series version, as doing reduce in parallel won't
|
||||
// work in many situations.
|
||||
async.reduce = function (arr, memo, iterator, callback) {
|
||||
async.forEachSeries(arr, function (x, callback) {
|
||||
iterator(memo, x, function (err, v) {
|
||||
memo = v;
|
||||
callback(err);
|
||||
});
|
||||
}, function (err) {
|
||||
callback(err, memo);
|
||||
});
|
||||
};
|
||||
// inject alias
|
||||
async.inject = async.reduce;
|
||||
// foldl alias
|
||||
async.foldl = async.reduce;
|
||||
|
||||
async.reduceRight = function (arr, memo, iterator, callback) {
|
||||
var reversed = _map(arr, function (x) {
|
||||
return x;
|
||||
}).reverse();
|
||||
async.reduce(reversed, memo, iterator, callback);
|
||||
};
|
||||
// foldr alias
|
||||
async.foldr = async.reduceRight;
|
||||
|
||||
var _filter = function (eachfn, arr, iterator, callback) {
|
||||
var results = [];
|
||||
arr = _map(arr, function (x, i) {
|
||||
return {index: i, value: x};
|
||||
});
|
||||
eachfn(arr, function (x, callback) {
|
||||
iterator(x.value, function (v) {
|
||||
if (v) {
|
||||
results.push(x);
|
||||
}
|
||||
callback();
|
||||
});
|
||||
}, function (err) {
|
||||
callback(_map(results.sort(function (a, b) {
|
||||
return a.index - b.index;
|
||||
}), function (x) {
|
||||
return x.value;
|
||||
}));
|
||||
});
|
||||
};
|
||||
async.filter = doParallel(_filter);
|
||||
async.filterSeries = doSeries(_filter);
|
||||
// select alias
|
||||
async.select = async.filter;
|
||||
async.selectSeries = async.filterSeries;
|
||||
|
||||
var _reject = function (eachfn, arr, iterator, callback) {
|
||||
var results = [];
|
||||
arr = _map(arr, function (x, i) {
|
||||
return {index: i, value: x};
|
||||
});
|
||||
eachfn(arr, function (x, callback) {
|
||||
iterator(x.value, function (v) {
|
||||
if (!v) {
|
||||
results.push(x);
|
||||
}
|
||||
callback();
|
||||
});
|
||||
}, function (err) {
|
||||
callback(_map(results.sort(function (a, b) {
|
||||
return a.index - b.index;
|
||||
}), function (x) {
|
||||
return x.value;
|
||||
}));
|
||||
});
|
||||
};
|
||||
async.reject = doParallel(_reject);
|
||||
async.rejectSeries = doSeries(_reject);
|
||||
|
||||
var _detect = function (eachfn, arr, iterator, main_callback) {
|
||||
eachfn(arr, function (x, callback) {
|
||||
iterator(x, function (result) {
|
||||
if (result) {
|
||||
main_callback(x);
|
||||
main_callback = function () {};
|
||||
}
|
||||
else {
|
||||
callback();
|
||||
}
|
||||
});
|
||||
}, function (err) {
|
||||
main_callback();
|
||||
});
|
||||
};
|
||||
async.detect = doParallel(_detect);
|
||||
async.detectSeries = doSeries(_detect);
|
||||
|
||||
async.some = function (arr, iterator, main_callback) {
|
||||
async.forEach(arr, function (x, callback) {
|
||||
iterator(x, function (v) {
|
||||
if (v) {
|
||||
main_callback(true);
|
||||
main_callback = function () {};
|
||||
}
|
||||
callback();
|
||||
});
|
||||
}, function (err) {
|
||||
main_callback(false);
|
||||
});
|
||||
};
|
||||
// any alias
|
||||
async.any = async.some;
|
||||
|
||||
async.every = function (arr, iterator, main_callback) {
|
||||
async.forEach(arr, function (x, callback) {
|
||||
iterator(x, function (v) {
|
||||
if (!v) {
|
||||
main_callback(false);
|
||||
main_callback = function () {};
|
||||
}
|
||||
callback();
|
||||
});
|
||||
}, function (err) {
|
||||
main_callback(true);
|
||||
});
|
||||
};
|
||||
// all alias
|
||||
async.all = async.every;
|
||||
|
||||
async.sortBy = function (arr, iterator, callback) {
|
||||
async.map(arr, function (x, callback) {
|
||||
iterator(x, function (err, criteria) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
}
|
||||
else {
|
||||
callback(null, {value: x, criteria: criteria});
|
||||
}
|
||||
});
|
||||
}, function (err, results) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
else {
|
||||
var fn = function (left, right) {
|
||||
var a = left.criteria, b = right.criteria;
|
||||
return a < b ? -1 : a > b ? 1 : 0;
|
||||
};
|
||||
callback(null, _map(results.sort(fn), function (x) {
|
||||
return x.value;
|
||||
}));
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
async.auto = function (tasks, callback) {
|
||||
callback = callback || function () {};
|
||||
var keys = _keys(tasks);
|
||||
if (!keys.length) {
|
||||
return callback(null);
|
||||
}
|
||||
|
||||
var results = {};
|
||||
|
||||
var listeners = [];
|
||||
var addListener = function (fn) {
|
||||
listeners.unshift(fn);
|
||||
};
|
||||
var removeListener = function (fn) {
|
||||
for (var i = 0; i < listeners.length; i += 1) {
|
||||
if (listeners[i] === fn) {
|
||||
listeners.splice(i, 1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
};
|
||||
var taskComplete = function () {
|
||||
_forEach(listeners.slice(0), function (fn) {
|
||||
fn();
|
||||
});
|
||||
};
|
||||
|
||||
addListener(function () {
|
||||
if (_keys(results).length === keys.length) {
|
||||
callback(null, results);
|
||||
callback = function () {};
|
||||
}
|
||||
});
|
||||
|
||||
_forEach(keys, function (k) {
|
||||
var task = (tasks[k] instanceof Function) ? [tasks[k]]: tasks[k];
|
||||
var taskCallback = function (err) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
// stop subsequent errors hitting callback multiple times
|
||||
callback = function () {};
|
||||
}
|
||||
else {
|
||||
var args = Array.prototype.slice.call(arguments, 1);
|
||||
if (args.length <= 1) {
|
||||
args = args[0];
|
||||
}
|
||||
results[k] = args;
|
||||
taskComplete();
|
||||
}
|
||||
};
|
||||
var requires = task.slice(0, Math.abs(task.length - 1)) || [];
|
||||
var ready = function () {
|
||||
return _reduce(requires, function (a, x) {
|
||||
return (a && results.hasOwnProperty(x));
|
||||
}, true) && !results.hasOwnProperty(k);
|
||||
};
|
||||
if (ready()) {
|
||||
task[task.length - 1](taskCallback, results);
|
||||
}
|
||||
else {
|
||||
var listener = function () {
|
||||
if (ready()) {
|
||||
removeListener(listener);
|
||||
task[task.length - 1](taskCallback, results);
|
||||
}
|
||||
};
|
||||
addListener(listener);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
async.waterfall = function (tasks, callback) {
|
||||
callback = callback || function () {};
|
||||
if (!tasks.length) {
|
||||
return callback();
|
||||
}
|
||||
var wrapIterator = function (iterator) {
|
||||
return function (err) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
callback = function () {};
|
||||
}
|
||||
else {
|
||||
var args = Array.prototype.slice.call(arguments, 1);
|
||||
var next = iterator.next();
|
||||
if (next) {
|
||||
args.push(wrapIterator(next));
|
||||
}
|
||||
else {
|
||||
args.push(callback);
|
||||
}
|
||||
async.nextTick(function () {
|
||||
iterator.apply(null, args);
|
||||
});
|
||||
}
|
||||
};
|
||||
};
|
||||
wrapIterator(async.iterator(tasks))();
|
||||
};
|
||||
|
||||
async.parallel = function (tasks, callback) {
|
||||
callback = callback || function () {};
|
||||
if (tasks.constructor === Array) {
|
||||
async.map(tasks, function (fn, callback) {
|
||||
if (fn) {
|
||||
fn(function (err) {
|
||||
var args = Array.prototype.slice.call(arguments, 1);
|
||||
if (args.length <= 1) {
|
||||
args = args[0];
|
||||
}
|
||||
callback.call(null, err, args);
|
||||
});
|
||||
}
|
||||
}, callback);
|
||||
}
|
||||
else {
|
||||
var results = {};
|
||||
async.forEach(_keys(tasks), function (k, callback) {
|
||||
tasks[k](function (err) {
|
||||
var args = Array.prototype.slice.call(arguments, 1);
|
||||
if (args.length <= 1) {
|
||||
args = args[0];
|
||||
}
|
||||
results[k] = args;
|
||||
callback(err);
|
||||
});
|
||||
}, function (err) {
|
||||
callback(err, results);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
async.series = function (tasks, callback) {
|
||||
callback = callback || function () {};
|
||||
if (tasks.constructor === Array) {
|
||||
async.mapSeries(tasks, function (fn, callback) {
|
||||
if (fn) {
|
||||
fn(function (err) {
|
||||
var args = Array.prototype.slice.call(arguments, 1);
|
||||
if (args.length <= 1) {
|
||||
args = args[0];
|
||||
}
|
||||
callback.call(null, err, args);
|
||||
});
|
||||
}
|
||||
}, callback);
|
||||
}
|
||||
else {
|
||||
var results = {};
|
||||
async.forEachSeries(_keys(tasks), function (k, callback) {
|
||||
tasks[k](function (err) {
|
||||
var args = Array.prototype.slice.call(arguments, 1);
|
||||
if (args.length <= 1) {
|
||||
args = args[0];
|
||||
}
|
||||
results[k] = args;
|
||||
callback(err);
|
||||
});
|
||||
}, function (err) {
|
||||
callback(err, results);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
async.iterator = function (tasks) {
|
||||
var makeCallback = function (index) {
|
||||
var fn = function () {
|
||||
if (tasks.length) {
|
||||
tasks[index].apply(null, arguments);
|
||||
}
|
||||
return fn.next();
|
||||
};
|
||||
fn.next = function () {
|
||||
return (index < tasks.length - 1) ? makeCallback(index + 1): null;
|
||||
};
|
||||
return fn;
|
||||
};
|
||||
return makeCallback(0);
|
||||
};
|
||||
|
||||
async.apply = function (fn) {
|
||||
var args = Array.prototype.slice.call(arguments, 1);
|
||||
return function () {
|
||||
return fn.apply(
|
||||
null, args.concat(Array.prototype.slice.call(arguments))
|
||||
);
|
||||
};
|
||||
};
|
||||
|
||||
var _concat = function (eachfn, arr, fn, callback) {
|
||||
var r = [];
|
||||
eachfn(arr, function (x, cb) {
|
||||
fn(x, function (err, y) {
|
||||
r = r.concat(y || []);
|
||||
cb(err);
|
||||
});
|
||||
}, function (err) {
|
||||
callback(err, r);
|
||||
});
|
||||
};
|
||||
async.concat = doParallel(_concat);
|
||||
async.concatSeries = doSeries(_concat);
|
||||
|
||||
async.whilst = function (test, iterator, callback) {
|
||||
if (test()) {
|
||||
iterator(function (err) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
async.whilst(test, iterator, callback);
|
||||
});
|
||||
}
|
||||
else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
|
||||
async.until = function (test, iterator, callback) {
|
||||
if (!test()) {
|
||||
iterator(function (err) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
async.until(test, iterator, callback);
|
||||
});
|
||||
}
|
||||
else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
|
||||
async.queue = function (worker, concurrency) {
|
||||
var workers = 0;
|
||||
var q = {
|
||||
tasks: [],
|
||||
concurrency: concurrency,
|
||||
saturated: null,
|
||||
empty: null,
|
||||
drain: null,
|
||||
push: function (data, callback) {
|
||||
if(data.constructor !== Array) {
|
||||
data = [data];
|
||||
}
|
||||
_forEach(data, function(task) {
|
||||
q.tasks.push({
|
||||
data: task,
|
||||
callback: typeof callback === 'function' ? callback : null
|
||||
});
|
||||
if (q.saturated && q.tasks.length == concurrency) {
|
||||
q.saturated();
|
||||
}
|
||||
async.nextTick(q.process);
|
||||
});
|
||||
},
|
||||
process: function () {
|
||||
if (workers < q.concurrency && q.tasks.length) {
|
||||
var task = q.tasks.shift();
|
||||
if(q.empty && q.tasks.length == 0) q.empty();
|
||||
workers += 1;
|
||||
worker(task.data, function () {
|
||||
workers -= 1;
|
||||
if (task.callback) {
|
||||
task.callback.apply(task, arguments);
|
||||
}
|
||||
if(q.drain && q.tasks.length + workers == 0) q.drain();
|
||||
q.process();
|
||||
});
|
||||
}
|
||||
},
|
||||
length: function () {
|
||||
return q.tasks.length;
|
||||
},
|
||||
running: function () {
|
||||
return workers;
|
||||
}
|
||||
};
|
||||
return q;
|
||||
};
|
||||
|
||||
var _console_fn = function (name) {
|
||||
return function (fn) {
|
||||
var args = Array.prototype.slice.call(arguments, 1);
|
||||
fn.apply(null, args.concat([function (err) {
|
||||
var args = Array.prototype.slice.call(arguments, 1);
|
||||
if (typeof console !== 'undefined') {
|
||||
if (err) {
|
||||
if (console.error) {
|
||||
console.error(err);
|
||||
}
|
||||
}
|
||||
else if (console[name]) {
|
||||
_forEach(args, function (x) {
|
||||
console[name](x);
|
||||
});
|
||||
}
|
||||
}
|
||||
}]));
|
||||
};
|
||||
};
|
||||
async.log = _console_fn('log');
|
||||
async.dir = _console_fn('dir');
|
||||
/*async.info = _console_fn('info');
|
||||
async.warn = _console_fn('warn');
|
||||
async.error = _console_fn('error');*/
|
||||
|
||||
async.memoize = function (fn, hasher) {
|
||||
var memo = {};
|
||||
var queues = {};
|
||||
hasher = hasher || function (x) {
|
||||
return x;
|
||||
};
|
||||
var memoized = function () {
|
||||
var args = Array.prototype.slice.call(arguments);
|
||||
var callback = args.pop();
|
||||
var key = hasher.apply(null, args);
|
||||
if (key in memo) {
|
||||
callback.apply(null, memo[key]);
|
||||
}
|
||||
else if (key in queues) {
|
||||
queues[key].push(callback);
|
||||
}
|
||||
else {
|
||||
queues[key] = [callback];
|
||||
fn.apply(null, args.concat([function () {
|
||||
memo[key] = arguments;
|
||||
var q = queues[key];
|
||||
delete queues[key];
|
||||
for (var i = 0, l = q.length; i < l; i++) {
|
||||
q[i].apply(null, arguments);
|
||||
}
|
||||
}]));
|
||||
}
|
||||
};
|
||||
memoized.unmemoized = fn;
|
||||
return memoized;
|
||||
};
|
||||
|
||||
async.unmemoize = function (fn) {
|
||||
return function () {
|
||||
return (fn.unmemoized || fn).apply(null, arguments);
|
||||
};
|
||||
};
|
||||
|
||||
}());
|
35
node_modules/piler/node_modules/async/package.json
generated
vendored
Normal file
35
node_modules/piler/node_modules/async/package.json
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
11
node_modules/piler/node_modules/coffee-script/.npmignore
generated
vendored
Normal file
11
node_modules/piler/node_modules/coffee-script/.npmignore
generated
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
*.coffee
|
||||
*.html
|
||||
.DS_Store
|
||||
.git*
|
||||
Cakefile
|
||||
documentation/
|
||||
examples/
|
||||
extras/coffee-script.js
|
||||
raw/
|
||||
src/
|
||||
test/
|
1
node_modules/piler/node_modules/coffee-script/CNAME
generated
vendored
Normal file
1
node_modules/piler/node_modules/coffee-script/CNAME
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
coffeescript.org
|
22
node_modules/piler/node_modules/coffee-script/LICENSE
generated
vendored
Normal file
22
node_modules/piler/node_modules/coffee-script/LICENSE
generated
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
Copyright (c) 2009-2012 Jeremy Ashkenas
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
51
node_modules/piler/node_modules/coffee-script/README
generated
vendored
Normal file
51
node_modules/piler/node_modules/coffee-script/README
generated
vendored
Normal file
@ -0,0 +1,51 @@
|
||||
|
||||
{
|
||||
} } {
|
||||
{ { } }
|
||||
} }{ {
|
||||
{ }{ } } _____ __ __
|
||||
( }{ }{ { ) / ____| / _|/ _|
|
||||
.- { { } { }} -. | | ___ | |_| |_ ___ ___
|
||||
( ( } { } { } } ) | | / _ \| _| _/ _ \/ _ \
|
||||
|`-..________ ..-'| | |___| (_) | | | || __/ __/
|
||||
| | \_____\___/|_| |_| \___|\___|
|
||||
| ;--.
|
||||
| (__ \ _____ _ _
|
||||
| | ) ) / ____| (_) | |
|
||||
| |/ / | (___ ___ _ __ _ _ __ | |_
|
||||
| ( / \___ \ / __| '__| | '_ \| __|
|
||||
| |/ ____) | (__| | | | |_) | |_
|
||||
| | |_____/ \___|_| |_| .__/ \__|
|
||||
`-.._________..-' | |
|
||||
|_|
|
||||
|
||||
|
||||
CoffeeScript is a little language that compiles into JavaScript.
|
||||
|
||||
Install Node.js, and then the CoffeeScript compiler:
|
||||
sudo bin/cake install
|
||||
|
||||
Or, if you have the Node Package Manager installed:
|
||||
npm install -g coffee-script
|
||||
(Leave off the -g if you don't wish to install globally.)
|
||||
|
||||
Execute a script:
|
||||
coffee /path/to/script.coffee
|
||||
|
||||
Compile a script:
|
||||
coffee -c /path/to/script.coffee
|
||||
|
||||
For documentation, usage, and examples, see:
|
||||
http://coffeescript.org/
|
||||
|
||||
To suggest a feature, report a bug, or general discussion:
|
||||
http://github.com/jashkenas/coffee-script/issues/
|
||||
|
||||
If you'd like to chat, drop by #coffeescript on Freenode IRC,
|
||||
or on webchat.freenode.net.
|
||||
|
||||
The source repository:
|
||||
git://github.com/jashkenas/coffee-script.git
|
||||
|
||||
All contributors are listed here:
|
||||
http://github.com/jashkenas/coffee-script/contributors
|
78
node_modules/piler/node_modules/coffee-script/Rakefile
generated
vendored
Normal file
78
node_modules/piler/node_modules/coffee-script/Rakefile
generated
vendored
Normal file
@ -0,0 +1,78 @@
|
||||
require 'rubygems'
|
||||
require 'erb'
|
||||
require 'fileutils'
|
||||
require 'rake/testtask'
|
||||
require 'json'
|
||||
|
||||
desc "Build the documentation page"
|
||||
task :doc do
|
||||
source = 'documentation/index.html.erb'
|
||||
child = fork { exec "bin/coffee -bcw -o documentation/js documentation/coffee/*.coffee" }
|
||||
at_exit { Process.kill("INT", child) }
|
||||
Signal.trap("INT") { exit }
|
||||
loop do
|
||||
mtime = File.stat(source).mtime
|
||||
if !@mtime || mtime > @mtime
|
||||
rendered = ERB.new(File.read(source)).result(binding)
|
||||
File.open('index.html', 'w+') {|f| f.write(rendered) }
|
||||
end
|
||||
@mtime = mtime
|
||||
sleep 1
|
||||
end
|
||||
end
|
||||
|
||||
desc "Build coffee-script-source gem"
|
||||
task :gem do
|
||||
require 'rubygems'
|
||||
require 'rubygems/package'
|
||||
|
||||
gemspec = Gem::Specification.new do |s|
|
||||
s.name = 'coffee-script-source'
|
||||
s.version = JSON.parse(File.read('package.json'))["version"]
|
||||
s.date = Time.now.strftime("%Y-%m-%d")
|
||||
|
||||
s.homepage = "http://jashkenas.github.com/coffee-script/"
|
||||
s.summary = "The CoffeeScript Compiler"
|
||||
s.description = <<-EOS
|
||||
CoffeeScript is a little language that compiles into JavaScript.
|
||||
Underneath all of those embarrassing braces and semicolons,
|
||||
JavaScript has always had a gorgeous object model at its heart.
|
||||
CoffeeScript is an attempt to expose the good parts of JavaScript
|
||||
in a simple way.
|
||||
EOS
|
||||
|
||||
s.files = [
|
||||
'lib/coffee_script/coffee-script.js',
|
||||
'lib/coffee_script/source.rb'
|
||||
]
|
||||
|
||||
s.authors = ['Jeremy Ashkenas']
|
||||
s.email = 'jashkenas@gmail.com'
|
||||
s.rubyforge_project = 'coffee-script-source'
|
||||
end
|
||||
|
||||
file = File.open("coffee-script-source.gem", "w")
|
||||
Gem::Package.open(file, 'w') do |pkg|
|
||||
pkg.metadata = gemspec.to_yaml
|
||||
|
||||
path = "lib/coffee_script/source.rb"
|
||||
contents = <<-ERUBY
|
||||
module CoffeeScript
|
||||
module Source
|
||||
def self.bundled_path
|
||||
File.expand_path("../coffee-script.js", __FILE__)
|
||||
end
|
||||
end
|
||||
end
|
||||
ERUBY
|
||||
pkg.add_file_simple(path, 0644, contents.size) do |tar_io|
|
||||
tar_io.write(contents)
|
||||
end
|
||||
|
||||
contents = File.read("extras/coffee-script.js")
|
||||
path = "lib/coffee_script/coffee-script.js"
|
||||
pkg.add_file_simple(path, 0644, contents.size) do |tar_io|
|
||||
tar_io.write(contents)
|
||||
end
|
||||
end
|
||||
end
|
7
node_modules/piler/node_modules/coffee-script/bin/cake
generated
vendored
Executable file
7
node_modules/piler/node_modules/coffee-script/bin/cake
generated
vendored
Executable file
@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
var path = require('path');
|
||||
var fs = require('fs');
|
||||
var lib = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');
|
||||
|
||||
require(lib + '/coffee-script/cake').run();
|
7
node_modules/piler/node_modules/coffee-script/bin/coffee
generated
vendored
Executable file
7
node_modules/piler/node_modules/coffee-script/bin/coffee
generated
vendored
Executable file
@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
var path = require('path');
|
||||
var fs = require('fs');
|
||||
var lib = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');
|
||||
|
||||
require(lib + '/coffee-script/command').run();
|
44
node_modules/piler/node_modules/coffee-script/extras/jsl.conf
generated
vendored
Normal file
44
node_modules/piler/node_modules/coffee-script/extras/jsl.conf
generated
vendored
Normal file
@ -0,0 +1,44 @@
|
||||
# JavaScriptLint configuration file for CoffeeScript.
|
||||
|
||||
+no_return_value # function {0} does not always return a value
|
||||
+duplicate_formal # duplicate formal argument {0}
|
||||
-equal_as_assign # test for equality (==) mistyped as assignment (=)?{0}
|
||||
+var_hides_arg # variable {0} hides argument
|
||||
+redeclared_var # redeclaration of {0} {1}
|
||||
-anon_no_return_value # anonymous function does not always return a value
|
||||
+missing_semicolon # missing semicolon
|
||||
+meaningless_block # meaningless block; curly braces have no impact
|
||||
-comma_separated_stmts # multiple statements separated by commas (use semicolons?)
|
||||
+unreachable_code # unreachable code
|
||||
+missing_break # missing break statement
|
||||
-missing_break_for_last_case # missing break statement for last case in switch
|
||||
-comparison_type_conv # comparisons against null, 0, true, false, or an empty string allowing implicit type conversion (use === or !==)
|
||||
-inc_dec_within_stmt # increment (++) and decrement (--) operators used as part of greater statement
|
||||
-useless_void # use of the void type may be unnecessary (void is always undefined)
|
||||
+multiple_plus_minus # unknown order of operations for successive plus (e.g. x+++y) or minus (e.g. x---y) signs
|
||||
+use_of_label # use of label
|
||||
-block_without_braces # block statement without curly braces
|
||||
+leading_decimal_point # leading decimal point may indicate a number or an object member
|
||||
+trailing_decimal_point # trailing decimal point may indicate a number or an object member
|
||||
+octal_number # leading zeros make an octal number
|
||||
+nested_comment # nested comment
|
||||
+misplaced_regex # regular expressions should be preceded by a left parenthesis, assignment, colon, or comma
|
||||
+ambiguous_newline # unexpected end of line; it is ambiguous whether these lines are part of the same statement
|
||||
+empty_statement # empty statement or extra semicolon
|
||||
-missing_option_explicit # the "option explicit" control comment is missing
|
||||
+partial_option_explicit # the "option explicit" control comment, if used, must be in the first script tag
|
||||
+dup_option_explicit # duplicate "option explicit" control comment
|
||||
+useless_assign # useless assignment
|
||||
+ambiguous_nested_stmt # block statements containing block statements should use curly braces to resolve ambiguity
|
||||
+ambiguous_else_stmt # the else statement could be matched with one of multiple if statements (use curly braces to indicate intent)
|
||||
-missing_default_case # missing default case in switch statement
|
||||
+duplicate_case_in_switch # duplicate case in switch statements
|
||||
+default_not_at_end # the default case is not at the end of the switch statement
|
||||
+legacy_cc_not_understood # couldn't understand control comment using /*@keyword@*/ syntax
|
||||
+jsl_cc_not_understood # couldn't understand control comment using /*jsl:keyword*/ syntax
|
||||
+useless_comparison # useless comparison; comparing identical expressions
|
||||
+with_statement # with statement hides undeclared variables; use temporary variable instead
|
||||
+trailing_comma_in_array # extra comma is not recommended in array initializers
|
||||
+assign_to_function_call # assignment to a function call
|
||||
+parseint_missing_radix # parseInt missing radix parameter
|
||||
+lambda_assign_requires_semicolon
|
92
node_modules/piler/node_modules/coffee-script/lib/coffee-script/browser.js
generated
vendored
Normal file
92
node_modules/piler/node_modules/coffee-script/lib/coffee-script/browser.js
generated
vendored
Normal file
@ -0,0 +1,92 @@
|
||||
// Generated by CoffeeScript 1.3.3
|
||||
(function() {
|
||||
var CoffeeScript, runScripts;
|
||||
|
||||
CoffeeScript = require('./coffee-script');
|
||||
|
||||
CoffeeScript.require = require;
|
||||
|
||||
CoffeeScript["eval"] = function(code, options) {
|
||||
var _ref;
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
if ((_ref = options.bare) == null) {
|
||||
options.bare = true;
|
||||
}
|
||||
return eval(CoffeeScript.compile(code, options));
|
||||
};
|
||||
|
||||
CoffeeScript.run = function(code, options) {
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
options.bare = true;
|
||||
return Function(CoffeeScript.compile(code, options))();
|
||||
};
|
||||
|
||||
if (typeof window === "undefined" || window === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
CoffeeScript.load = function(url, callback) {
|
||||
var xhr;
|
||||
xhr = new (window.ActiveXObject || XMLHttpRequest)('Microsoft.XMLHTTP');
|
||||
xhr.open('GET', url, true);
|
||||
if ('overrideMimeType' in xhr) {
|
||||
xhr.overrideMimeType('text/plain');
|
||||
}
|
||||
xhr.onreadystatechange = function() {
|
||||
var _ref;
|
||||
if (xhr.readyState === 4) {
|
||||
if ((_ref = xhr.status) === 0 || _ref === 200) {
|
||||
CoffeeScript.run(xhr.responseText);
|
||||
} else {
|
||||
throw new Error("Could not load " + url);
|
||||
}
|
||||
if (callback) {
|
||||
return callback();
|
||||
}
|
||||
}
|
||||
};
|
||||
return xhr.send(null);
|
||||
};
|
||||
|
||||
runScripts = function() {
|
||||
var coffees, execute, index, length, s, scripts;
|
||||
scripts = document.getElementsByTagName('script');
|
||||
coffees = (function() {
|
||||
var _i, _len, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = scripts.length; _i < _len; _i++) {
|
||||
s = scripts[_i];
|
||||
if (s.type === 'text/coffeescript') {
|
||||
_results.push(s);
|
||||
}
|
||||
}
|
||||
return _results;
|
||||
})();
|
||||
index = 0;
|
||||
length = coffees.length;
|
||||
(execute = function() {
|
||||
var script;
|
||||
script = coffees[index++];
|
||||
if ((script != null ? script.type : void 0) === 'text/coffeescript') {
|
||||
if (script.src) {
|
||||
return CoffeeScript.load(script.src, execute);
|
||||
} else {
|
||||
CoffeeScript.run(script.innerHTML);
|
||||
return execute();
|
||||
}
|
||||
}
|
||||
})();
|
||||
return null;
|
||||
};
|
||||
|
||||
if (window.addEventListener) {
|
||||
addEventListener('DOMContentLoaded', runScripts, false);
|
||||
} else {
|
||||
attachEvent('onload', runScripts);
|
||||
}
|
||||
|
||||
}).call(this);
|
111
node_modules/piler/node_modules/coffee-script/lib/coffee-script/cake.js
generated
vendored
Normal file
111
node_modules/piler/node_modules/coffee-script/lib/coffee-script/cake.js
generated
vendored
Normal file
@ -0,0 +1,111 @@
|
||||
// Generated by CoffeeScript 1.3.3
|
||||
(function() {
|
||||
var CoffeeScript, cakefileDirectory, fatalError, fs, helpers, missingTask, oparse, options, optparse, path, printTasks, switches, tasks;
|
||||
|
||||
fs = require('fs');
|
||||
|
||||
path = require('path');
|
||||
|
||||
helpers = require('./helpers');
|
||||
|
||||
optparse = require('./optparse');
|
||||
|
||||
CoffeeScript = require('./coffee-script');
|
||||
|
||||
tasks = {};
|
||||
|
||||
options = {};
|
||||
|
||||
switches = [];
|
||||
|
||||
oparse = null;
|
||||
|
||||
helpers.extend(global, {
|
||||
task: function(name, description, action) {
|
||||
var _ref;
|
||||
if (!action) {
|
||||
_ref = [description, action], action = _ref[0], description = _ref[1];
|
||||
}
|
||||
return tasks[name] = {
|
||||
name: name,
|
||||
description: description,
|
||||
action: action
|
||||
};
|
||||
},
|
||||
option: function(letter, flag, description) {
|
||||
return switches.push([letter, flag, description]);
|
||||
},
|
||||
invoke: function(name) {
|
||||
if (!tasks[name]) {
|
||||
missingTask(name);
|
||||
}
|
||||
return tasks[name].action(options);
|
||||
}
|
||||
});
|
||||
|
||||
exports.run = function() {
|
||||
var arg, args, _i, _len, _ref, _results;
|
||||
global.__originalDirname = fs.realpathSync('.');
|
||||
process.chdir(cakefileDirectory(__originalDirname));
|
||||
args = process.argv.slice(2);
|
||||
CoffeeScript.run(fs.readFileSync('Cakefile').toString(), {
|
||||
filename: 'Cakefile'
|
||||
});
|
||||
oparse = new optparse.OptionParser(switches);
|
||||
if (!args.length) {
|
||||
return printTasks();
|
||||
}
|
||||
try {
|
||||
options = oparse.parse(args);
|
||||
} catch (e) {
|
||||
return fatalError("" + e);
|
||||
}
|
||||
_ref = options["arguments"];
|
||||
_results = [];
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
arg = _ref[_i];
|
||||
_results.push(invoke(arg));
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
||||
printTasks = function() {
|
||||
var cakefilePath, desc, name, relative, spaces, task;
|
||||
relative = path.relative || path.resolve;
|
||||
cakefilePath = path.join(relative(__originalDirname, process.cwd()), 'Cakefile');
|
||||
console.log("" + cakefilePath + " defines the following tasks:\n");
|
||||
for (name in tasks) {
|
||||
task = tasks[name];
|
||||
spaces = 20 - name.length;
|
||||
spaces = spaces > 0 ? Array(spaces + 1).join(' ') : '';
|
||||
desc = task.description ? "# " + task.description : '';
|
||||
console.log("cake " + name + spaces + " " + desc);
|
||||
}
|
||||
if (switches.length) {
|
||||
return console.log(oparse.help());
|
||||
}
|
||||
};
|
||||
|
||||
fatalError = function(message) {
|
||||
console.error(message + '\n');
|
||||
console.log('To see a list of all tasks/options, run "cake"');
|
||||
return process.exit(1);
|
||||
};
|
||||
|
||||
missingTask = function(task) {
|
||||
return fatalError("No such task: " + task);
|
||||
};
|
||||
|
||||
cakefileDirectory = function(dir) {
|
||||
var parent;
|
||||
if (path.existsSync(path.join(dir, 'Cakefile'))) {
|
||||
return dir;
|
||||
}
|
||||
parent = path.normalize(path.join(dir, '..'));
|
||||
if (parent !== dir) {
|
||||
return cakefileDirectory(parent);
|
||||
}
|
||||
throw new Error("Cakefile not found in " + (process.cwd()));
|
||||
};
|
||||
|
||||
}).call(this);
|
167
node_modules/piler/node_modules/coffee-script/lib/coffee-script/coffee-script.js
generated
vendored
Normal file
167
node_modules/piler/node_modules/coffee-script/lib/coffee-script/coffee-script.js
generated
vendored
Normal file
@ -0,0 +1,167 @@
|
||||
// Generated by CoffeeScript 1.3.3
|
||||
(function() {
|
||||
var Lexer, RESERVED, compile, fs, lexer, parser, path, vm, _ref,
|
||||
__hasProp = {}.hasOwnProperty;
|
||||
|
||||
fs = require('fs');
|
||||
|
||||
path = require('path');
|
||||
|
||||
_ref = require('./lexer'), Lexer = _ref.Lexer, RESERVED = _ref.RESERVED;
|
||||
|
||||
parser = require('./parser').parser;
|
||||
|
||||
vm = require('vm');
|
||||
|
||||
if (require.extensions) {
|
||||
require.extensions['.coffee'] = function(module, filename) {
|
||||
var content;
|
||||
content = compile(fs.readFileSync(filename, 'utf8'), {
|
||||
filename: filename
|
||||
});
|
||||
return module._compile(content, filename);
|
||||
};
|
||||
} else if (require.registerExtension) {
|
||||
require.registerExtension('.coffee', function(content) {
|
||||
return compile(content);
|
||||
});
|
||||
}
|
||||
|
||||
exports.VERSION = '1.3.3';
|
||||
|
||||
exports.RESERVED = RESERVED;
|
||||
|
||||
exports.helpers = require('./helpers');
|
||||
|
||||
exports.compile = compile = function(code, options) {
|
||||
var header, js, merge;
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
merge = exports.helpers.merge;
|
||||
try {
|
||||
js = (parser.parse(lexer.tokenize(code))).compile(options);
|
||||
if (!options.header) {
|
||||
return js;
|
||||
}
|
||||
} catch (err) {
|
||||
if (options.filename) {
|
||||
err.message = "In " + options.filename + ", " + err.message;
|
||||
}
|
||||
throw err;
|
||||
}
|
||||
header = "Generated by CoffeeScript " + this.VERSION;
|
||||
return "// " + header + "\n" + js;
|
||||
};
|
||||
|
||||
exports.tokens = function(code, options) {
|
||||
return lexer.tokenize(code, options);
|
||||
};
|
||||
|
||||
exports.nodes = function(source, options) {
|
||||
if (typeof source === 'string') {
|
||||
return parser.parse(lexer.tokenize(source, options));
|
||||
} else {
|
||||
return parser.parse(source);
|
||||
}
|
||||
};
|
||||
|
||||
exports.run = function(code, options) {
|
||||
var mainModule;
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
mainModule = require.main;
|
||||
mainModule.filename = process.argv[1] = options.filename ? fs.realpathSync(options.filename) : '.';
|
||||
mainModule.moduleCache && (mainModule.moduleCache = {});
|
||||
mainModule.paths = require('module')._nodeModulePaths(path.dirname(fs.realpathSync(options.filename)));
|
||||
if (path.extname(mainModule.filename) !== '.coffee' || require.extensions) {
|
||||
return mainModule._compile(compile(code, options), mainModule.filename);
|
||||
} else {
|
||||
return mainModule._compile(code, mainModule.filename);
|
||||
}
|
||||
};
|
||||
|
||||
exports["eval"] = function(code, options) {
|
||||
var Module, Script, js, k, o, r, sandbox, v, _i, _len, _module, _ref1, _ref2, _require;
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
if (!(code = code.trim())) {
|
||||
return;
|
||||
}
|
||||
Script = vm.Script;
|
||||
if (Script) {
|
||||
if (options.sandbox != null) {
|
||||
if (options.sandbox instanceof Script.createContext().constructor) {
|
||||
sandbox = options.sandbox;
|
||||
} else {
|
||||
sandbox = Script.createContext();
|
||||
_ref1 = options.sandbox;
|
||||
for (k in _ref1) {
|
||||
if (!__hasProp.call(_ref1, k)) continue;
|
||||
v = _ref1[k];
|
||||
sandbox[k] = v;
|
||||
}
|
||||
}
|
||||
sandbox.global = sandbox.root = sandbox.GLOBAL = sandbox;
|
||||
} else {
|
||||
sandbox = global;
|
||||
}
|
||||
sandbox.__filename = options.filename || 'eval';
|
||||
sandbox.__dirname = path.dirname(sandbox.__filename);
|
||||
if (!(sandbox !== global || sandbox.module || sandbox.require)) {
|
||||
Module = require('module');
|
||||
sandbox.module = _module = new Module(options.modulename || 'eval');
|
||||
sandbox.require = _require = function(path) {
|
||||
return Module._load(path, _module, true);
|
||||
};
|
||||
_module.filename = sandbox.__filename;
|
||||
_ref2 = Object.getOwnPropertyNames(require);
|
||||
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
||||
r = _ref2[_i];
|
||||
if (r !== 'paths') {
|
||||
_require[r] = require[r];
|
||||
}
|
||||
}
|
||||
_require.paths = _module.paths = Module._nodeModulePaths(process.cwd());
|
||||
_require.resolve = function(request) {
|
||||
return Module._resolveFilename(request, _module);
|
||||
};
|
||||
}
|
||||
}
|
||||
o = {};
|
||||
for (k in options) {
|
||||
if (!__hasProp.call(options, k)) continue;
|
||||
v = options[k];
|
||||
o[k] = v;
|
||||
}
|
||||
o.bare = true;
|
||||
js = compile(code, o);
|
||||
if (sandbox === global) {
|
||||
return vm.runInThisContext(js);
|
||||
} else {
|
||||
return vm.runInContext(js, sandbox);
|
||||
}
|
||||
};
|
||||
|
||||
lexer = new Lexer;
|
||||
|
||||
parser.lexer = {
|
||||
lex: function() {
|
||||
var tag, _ref1;
|
||||
_ref1 = this.tokens[this.pos++] || [''], tag = _ref1[0], this.yytext = _ref1[1], this.yylineno = _ref1[2];
|
||||
return tag;
|
||||
},
|
||||
setInput: function(tokens) {
|
||||
this.tokens = tokens;
|
||||
return this.pos = 0;
|
||||
},
|
||||
upcomingInput: function() {
|
||||
return "";
|
||||
}
|
||||
};
|
||||
|
||||
parser.yy = require('./nodes');
|
||||
|
||||
}).call(this);
|
500
node_modules/piler/node_modules/coffee-script/lib/coffee-script/command.js
generated
vendored
Normal file
500
node_modules/piler/node_modules/coffee-script/lib/coffee-script/command.js
generated
vendored
Normal file
@ -0,0 +1,500 @@
|
||||
// Generated by CoffeeScript 1.3.3
|
||||
(function() {
|
||||
var BANNER, CoffeeScript, EventEmitter, SWITCHES, compileJoin, compileOptions, compilePath, compileScript, compileStdio, exec, forkNode, fs, helpers, hidden, joinTimeout, lint, loadRequires, notSources, optionParser, optparse, opts, outputPath, parseOptions, path, printLine, printTokens, printWarn, removeSource, sourceCode, sources, spawn, timeLog, unwatchDir, usage, version, wait, watch, watchDir, watchers, writeJs, _ref;
|
||||
|
||||
fs = require('fs');
|
||||
|
||||
path = require('path');
|
||||
|
||||
helpers = require('./helpers');
|
||||
|
||||
optparse = require('./optparse');
|
||||
|
||||
CoffeeScript = require('./coffee-script');
|
||||
|
||||
_ref = require('child_process'), spawn = _ref.spawn, exec = _ref.exec;
|
||||
|
||||
EventEmitter = require('events').EventEmitter;
|
||||
|
||||
helpers.extend(CoffeeScript, new EventEmitter);
|
||||
|
||||
printLine = function(line) {
|
||||
return process.stdout.write(line + '\n');
|
||||
};
|
||||
|
||||
printWarn = function(line) {
|
||||
return process.stderr.write(line + '\n');
|
||||
};
|
||||
|
||||
hidden = function(file) {
|
||||
return /^\.|~$/.test(file);
|
||||
};
|
||||
|
||||
BANNER = 'Usage: coffee [options] path/to/script.coffee -- [args]\n\nIf called without options, `coffee` will run your script.';
|
||||
|
||||
SWITCHES = [['-b', '--bare', 'compile without a top-level function wrapper'], ['-c', '--compile', 'compile to JavaScript and save as .js files'], ['-e', '--eval', 'pass a string from the command line as input'], ['-h', '--help', 'display this help message'], ['-i', '--interactive', 'run an interactive CoffeeScript REPL'], ['-j', '--join [FILE]', 'concatenate the source CoffeeScript before compiling'], ['-l', '--lint', 'pipe the compiled JavaScript through JavaScript Lint'], ['-n', '--nodes', 'print out the parse tree that the parser produces'], ['--nodejs [ARGS]', 'pass options directly to the "node" binary'], ['-o', '--output [DIR]', 'set the output directory for compiled JavaScript'], ['-p', '--print', 'print out the compiled JavaScript'], ['-r', '--require [FILE*]', 'require a library before executing your script'], ['-s', '--stdio', 'listen for and compile scripts over stdio'], ['-t', '--tokens', 'print out the tokens that the lexer/rewriter produce'], ['-v', '--version', 'display the version number'], ['-w', '--watch', 'watch scripts for changes and rerun commands']];
|
||||
|
||||
opts = {};
|
||||
|
||||
sources = [];
|
||||
|
||||
sourceCode = [];
|
||||
|
||||
notSources = {};
|
||||
|
||||
watchers = {};
|
||||
|
||||
optionParser = null;
|
||||
|
||||
exports.run = function() {
|
||||
var literals, source, _i, _len, _results;
|
||||
parseOptions();
|
||||
if (opts.nodejs) {
|
||||
return forkNode();
|
||||
}
|
||||
if (opts.help) {
|
||||
return usage();
|
||||
}
|
||||
if (opts.version) {
|
||||
return version();
|
||||
}
|
||||
if (opts.require) {
|
||||
loadRequires();
|
||||
}
|
||||
if (opts.interactive) {
|
||||
return require('./repl');
|
||||
}
|
||||
if (opts.watch && !fs.watch) {
|
||||
return printWarn("The --watch feature depends on Node v0.6.0+. You are running " + process.version + ".");
|
||||
}
|
||||
if (opts.stdio) {
|
||||
return compileStdio();
|
||||
}
|
||||
if (opts["eval"]) {
|
||||
return compileScript(null, sources[0]);
|
||||
}
|
||||
if (!sources.length) {
|
||||
return require('./repl');
|
||||
}
|
||||
literals = opts.run ? sources.splice(1) : [];
|
||||
process.argv = process.argv.slice(0, 2).concat(literals);
|
||||
process.argv[0] = 'coffee';
|
||||
process.execPath = require.main.filename;
|
||||
_results = [];
|
||||
for (_i = 0, _len = sources.length; _i < _len; _i++) {
|
||||
source = sources[_i];
|
||||
_results.push(compilePath(source, true, path.normalize(source)));
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
||||
compilePath = function(source, topLevel, base) {
|
||||
return fs.stat(source, function(err, stats) {
|
||||
if (err && err.code !== 'ENOENT') {
|
||||
throw err;
|
||||
}
|
||||
if ((err != null ? err.code : void 0) === 'ENOENT') {
|
||||
if (topLevel && source.slice(-7) !== '.coffee') {
|
||||
source = sources[sources.indexOf(source)] = "" + source + ".coffee";
|
||||
return compilePath(source, topLevel, base);
|
||||
}
|
||||
if (topLevel) {
|
||||
console.error("File not found: " + source);
|
||||
process.exit(1);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (stats.isDirectory()) {
|
||||
if (opts.watch) {
|
||||
watchDir(source, base);
|
||||
}
|
||||
return fs.readdir(source, function(err, files) {
|
||||
var file, index, _ref1, _ref2;
|
||||
if (err && err.code !== 'ENOENT') {
|
||||
throw err;
|
||||
}
|
||||
if ((err != null ? err.code : void 0) === 'ENOENT') {
|
||||
return;
|
||||
}
|
||||
index = sources.indexOf(source);
|
||||
files = files.filter(function(file) {
|
||||
return !hidden(file);
|
||||
});
|
||||
[].splice.apply(sources, [index, index - index + 1].concat(_ref1 = (function() {
|
||||
var _i, _len, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = files.length; _i < _len; _i++) {
|
||||
file = files[_i];
|
||||
_results.push(path.join(source, file));
|
||||
}
|
||||
return _results;
|
||||
})())), _ref1;
|
||||
[].splice.apply(sourceCode, [index, index - index + 1].concat(_ref2 = files.map(function() {
|
||||
return null;
|
||||
}))), _ref2;
|
||||
return files.forEach(function(file) {
|
||||
return compilePath(path.join(source, file), false, base);
|
||||
});
|
||||
});
|
||||
} else if (topLevel || path.extname(source) === '.coffee') {
|
||||
if (opts.watch) {
|
||||
watch(source, base);
|
||||
}
|
||||
return fs.readFile(source, function(err, code) {
|
||||
if (err && err.code !== 'ENOENT') {
|
||||
throw err;
|
||||
}
|
||||
if ((err != null ? err.code : void 0) === 'ENOENT') {
|
||||
return;
|
||||
}
|
||||
return compileScript(source, code.toString(), base);
|
||||
});
|
||||
} else {
|
||||
notSources[source] = true;
|
||||
return removeSource(source, base);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
compileScript = function(file, input, base) {
|
||||
var o, options, t, task;
|
||||
o = opts;
|
||||
options = compileOptions(file);
|
||||
try {
|
||||
t = task = {
|
||||
file: file,
|
||||
input: input,
|
||||
options: options
|
||||
};
|
||||
CoffeeScript.emit('compile', task);
|
||||
if (o.tokens) {
|
||||
return printTokens(CoffeeScript.tokens(t.input));
|
||||
} else if (o.nodes) {
|
||||
return printLine(CoffeeScript.nodes(t.input).toString().trim());
|
||||
} else if (o.run) {
|
||||
return CoffeeScript.run(t.input, t.options);
|
||||
} else if (o.join && t.file !== o.join) {
|
||||
sourceCode[sources.indexOf(t.file)] = t.input;
|
||||
return compileJoin();
|
||||
} else {
|
||||
t.output = CoffeeScript.compile(t.input, t.options);
|
||||
CoffeeScript.emit('success', task);
|
||||
if (o.print) {
|
||||
return printLine(t.output.trim());
|
||||
} else if (o.compile) {
|
||||
return writeJs(t.file, t.output, base);
|
||||
} else if (o.lint) {
|
||||
return lint(t.file, t.output);
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
CoffeeScript.emit('failure', err, task);
|
||||
if (CoffeeScript.listeners('failure').length) {
|
||||
return;
|
||||
}
|
||||
if (o.watch) {
|
||||
return printLine(err.message + '\x07');
|
||||
}
|
||||
printWarn(err instanceof Error && err.stack || ("ERROR: " + err));
|
||||
return process.exit(1);
|
||||
}
|
||||
};
|
||||
|
||||
compileStdio = function() {
|
||||
var code, stdin;
|
||||
code = '';
|
||||
stdin = process.openStdin();
|
||||
stdin.on('data', function(buffer) {
|
||||
if (buffer) {
|
||||
return code += buffer.toString();
|
||||
}
|
||||
});
|
||||
return stdin.on('end', function() {
|
||||
return compileScript(null, code);
|
||||
});
|
||||
};
|
||||
|
||||
joinTimeout = null;
|
||||
|
||||
compileJoin = function() {
|
||||
if (!opts.join) {
|
||||
return;
|
||||
}
|
||||
if (!sourceCode.some(function(code) {
|
||||
return code === null;
|
||||
})) {
|
||||
clearTimeout(joinTimeout);
|
||||
return joinTimeout = wait(100, function() {
|
||||
return compileScript(opts.join, sourceCode.join('\n'), opts.join);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
loadRequires = function() {
|
||||
var realFilename, req, _i, _len, _ref1;
|
||||
realFilename = module.filename;
|
||||
module.filename = '.';
|
||||
_ref1 = opts.require;
|
||||
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
||||
req = _ref1[_i];
|
||||
require(req);
|
||||
}
|
||||
return module.filename = realFilename;
|
||||
};
|
||||
|
||||
watch = function(source, base) {
|
||||
var compile, compileTimeout, prevStats, rewatch, watchErr, watcher;
|
||||
prevStats = null;
|
||||
compileTimeout = null;
|
||||
watchErr = function(e) {
|
||||
if (e.code === 'ENOENT') {
|
||||
if (sources.indexOf(source) === -1) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
rewatch();
|
||||
return compile();
|
||||
} catch (e) {
|
||||
removeSource(source, base, true);
|
||||
return compileJoin();
|
||||
}
|
||||
} else {
|
||||
throw e;
|
||||
}
|
||||
};
|
||||
compile = function() {
|
||||
clearTimeout(compileTimeout);
|
||||
return compileTimeout = wait(25, function() {
|
||||
return fs.stat(source, function(err, stats) {
|
||||
if (err) {
|
||||
return watchErr(err);
|
||||
}
|
||||
if (prevStats && stats.size === prevStats.size && stats.mtime.getTime() === prevStats.mtime.getTime()) {
|
||||
return rewatch();
|
||||
}
|
||||
prevStats = stats;
|
||||
return fs.readFile(source, function(err, code) {
|
||||
if (err) {
|
||||
return watchErr(err);
|
||||
}
|
||||
compileScript(source, code.toString(), base);
|
||||
return rewatch();
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
try {
|
||||
watcher = fs.watch(source, compile);
|
||||
} catch (e) {
|
||||
watchErr(e);
|
||||
}
|
||||
return rewatch = function() {
|
||||
if (watcher != null) {
|
||||
watcher.close();
|
||||
}
|
||||
return watcher = fs.watch(source, compile);
|
||||
};
|
||||
};
|
||||
|
||||
watchDir = function(source, base) {
|
||||
var readdirTimeout, watcher;
|
||||
readdirTimeout = null;
|
||||
try {
|
||||
return watcher = fs.watch(source, function() {
|
||||
clearTimeout(readdirTimeout);
|
||||
return readdirTimeout = wait(25, function() {
|
||||
return fs.readdir(source, function(err, files) {
|
||||
var file, _i, _len, _results;
|
||||
if (err) {
|
||||
if (err.code !== 'ENOENT') {
|
||||
throw err;
|
||||
}
|
||||
watcher.close();
|
||||
return unwatchDir(source, base);
|
||||
}
|
||||
_results = [];
|
||||
for (_i = 0, _len = files.length; _i < _len; _i++) {
|
||||
file = files[_i];
|
||||
if (!(!hidden(file) && !notSources[file])) {
|
||||
continue;
|
||||
}
|
||||
file = path.join(source, file);
|
||||
if (sources.some(function(s) {
|
||||
return s.indexOf(file) >= 0;
|
||||
})) {
|
||||
continue;
|
||||
}
|
||||
sources.push(file);
|
||||
sourceCode.push(null);
|
||||
_results.push(compilePath(file, false, base));
|
||||
}
|
||||
return _results;
|
||||
});
|
||||
});
|
||||
});
|
||||
} catch (e) {
|
||||
if (e.code !== 'ENOENT') {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
unwatchDir = function(source, base) {
|
||||
var file, prevSources, toRemove, _i, _len;
|
||||
prevSources = sources.slice(0);
|
||||
toRemove = (function() {
|
||||
var _i, _len, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = sources.length; _i < _len; _i++) {
|
||||
file = sources[_i];
|
||||
if (file.indexOf(source) >= 0) {
|
||||
_results.push(file);
|
||||
}
|
||||
}
|
||||
return _results;
|
||||
})();
|
||||
for (_i = 0, _len = toRemove.length; _i < _len; _i++) {
|
||||
file = toRemove[_i];
|
||||
removeSource(file, base, true);
|
||||
}
|
||||
if (!sources.some(function(s, i) {
|
||||
return prevSources[i] !== s;
|
||||
})) {
|
||||
return;
|
||||
}
|
||||
return compileJoin();
|
||||
};
|
||||
|
||||
removeSource = function(source, base, removeJs) {
|
||||
var index, jsPath;
|
||||
index = sources.indexOf(source);
|
||||
sources.splice(index, 1);
|
||||
sourceCode.splice(index, 1);
|
||||
if (removeJs && !opts.join) {
|
||||
jsPath = outputPath(source, base);
|
||||
return path.exists(jsPath, function(exists) {
|
||||
if (exists) {
|
||||
return fs.unlink(jsPath, function(err) {
|
||||
if (err && err.code !== 'ENOENT') {
|
||||
throw err;
|
||||
}
|
||||
return timeLog("removed " + source);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
outputPath = function(source, base) {
|
||||
var baseDir, dir, filename, srcDir;
|
||||
filename = path.basename(source, path.extname(source)) + '.js';
|
||||
srcDir = path.dirname(source);
|
||||
baseDir = base === '.' ? srcDir : srcDir.substring(base.length);
|
||||
dir = opts.output ? path.join(opts.output, baseDir) : srcDir;
|
||||
return path.join(dir, filename);
|
||||
};
|
||||
|
||||
writeJs = function(source, js, base) {
|
||||
var compile, jsDir, jsPath;
|
||||
jsPath = outputPath(source, base);
|
||||
jsDir = path.dirname(jsPath);
|
||||
compile = function() {
|
||||
if (js.length <= 0) {
|
||||
js = ' ';
|
||||
}
|
||||
return fs.writeFile(jsPath, js, function(err) {
|
||||
if (err) {
|
||||
return printLine(err.message);
|
||||
} else if (opts.compile && opts.watch) {
|
||||
return timeLog("compiled " + source);
|
||||
}
|
||||
});
|
||||
};
|
||||
return path.exists(jsDir, function(exists) {
|
||||
if (exists) {
|
||||
return compile();
|
||||
} else {
|
||||
return exec("mkdir -p " + jsDir, compile);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
wait = function(milliseconds, func) {
|
||||
return setTimeout(func, milliseconds);
|
||||
};
|
||||
|
||||
timeLog = function(message) {
|
||||
return console.log("" + ((new Date).toLocaleTimeString()) + " - " + message);
|
||||
};
|
||||
|
||||
lint = function(file, js) {
|
||||
var conf, jsl, printIt;
|
||||
printIt = function(buffer) {
|
||||
return printLine(file + ':\t' + buffer.toString().trim());
|
||||
};
|
||||
conf = __dirname + '/../../extras/jsl.conf';
|
||||
jsl = spawn('jsl', ['-nologo', '-stdin', '-conf', conf]);
|
||||
jsl.stdout.on('data', printIt);
|
||||
jsl.stderr.on('data', printIt);
|
||||
jsl.stdin.write(js);
|
||||
return jsl.stdin.end();
|
||||
};
|
||||
|
||||
printTokens = function(tokens) {
|
||||
var strings, tag, token, value;
|
||||
strings = (function() {
|
||||
var _i, _len, _ref1, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = tokens.length; _i < _len; _i++) {
|
||||
token = tokens[_i];
|
||||
_ref1 = [token[0], token[1].toString().replace(/\n/, '\\n')], tag = _ref1[0], value = _ref1[1];
|
||||
_results.push("[" + tag + " " + value + "]");
|
||||
}
|
||||
return _results;
|
||||
})();
|
||||
return printLine(strings.join(' '));
|
||||
};
|
||||
|
||||
parseOptions = function() {
|
||||
var i, o, source, _i, _len;
|
||||
optionParser = new optparse.OptionParser(SWITCHES, BANNER);
|
||||
o = opts = optionParser.parse(process.argv.slice(2));
|
||||
o.compile || (o.compile = !!o.output);
|
||||
o.run = !(o.compile || o.print || o.lint);
|
||||
o.print = !!(o.print || (o["eval"] || o.stdio && o.compile));
|
||||
sources = o["arguments"];
|
||||
for (i = _i = 0, _len = sources.length; _i < _len; i = ++_i) {
|
||||
source = sources[i];
|
||||
sourceCode[i] = null;
|
||||
}
|
||||
};
|
||||
|
||||
compileOptions = function(filename) {
|
||||
return {
|
||||
filename: filename,
|
||||
bare: opts.bare,
|
||||
header: opts.compile
|
||||
};
|
||||
};
|
||||
|
||||
forkNode = function() {
|
||||
var args, nodeArgs;
|
||||
nodeArgs = opts.nodejs.split(/\s+/);
|
||||
args = process.argv.slice(1);
|
||||
args.splice(args.indexOf('--nodejs'), 2);
|
||||
return spawn(process.execPath, nodeArgs.concat(args), {
|
||||
cwd: process.cwd(),
|
||||
env: process.env,
|
||||
customFds: [0, 1, 2]
|
||||
});
|
||||
};
|
||||
|
||||
usage = function() {
|
||||
return printLine((new optparse.OptionParser(SWITCHES, BANNER)).help());
|
||||
};
|
||||
|
||||
version = function() {
|
||||
return printLine("CoffeeScript version " + CoffeeScript.VERSION);
|
||||
};
|
||||
|
||||
}).call(this);
|
606
node_modules/piler/node_modules/coffee-script/lib/coffee-script/grammar.js
generated
vendored
Normal file
606
node_modules/piler/node_modules/coffee-script/lib/coffee-script/grammar.js
generated
vendored
Normal file
@ -0,0 +1,606 @@
|
||||
// Generated by CoffeeScript 1.3.3
|
||||
(function() {
|
||||
var Parser, alt, alternatives, grammar, name, o, operators, token, tokens, unwrap;
|
||||
|
||||
Parser = require('jison').Parser;
|
||||
|
||||
unwrap = /^function\s*\(\)\s*\{\s*return\s*([\s\S]*);\s*\}/;
|
||||
|
||||
o = function(patternString, action, options) {
|
||||
var match;
|
||||
patternString = patternString.replace(/\s{2,}/g, ' ');
|
||||
if (!action) {
|
||||
return [patternString, '$$ = $1;', options];
|
||||
}
|
||||
action = (match = unwrap.exec(action)) ? match[1] : "(" + action + "())";
|
||||
action = action.replace(/\bnew /g, '$&yy.');
|
||||
action = action.replace(/\b(?:Block\.wrap|extend)\b/g, 'yy.$&');
|
||||
return [patternString, "$$ = " + action + ";", options];
|
||||
};
|
||||
|
||||
grammar = {
|
||||
Root: [
|
||||
o('', function() {
|
||||
return new Block;
|
||||
}), o('Body'), o('Block TERMINATOR')
|
||||
],
|
||||
Body: [
|
||||
o('Line', function() {
|
||||
return Block.wrap([$1]);
|
||||
}), o('Body TERMINATOR Line', function() {
|
||||
return $1.push($3);
|
||||
}), o('Body TERMINATOR')
|
||||
],
|
||||
Line: [o('Expression'), o('Statement')],
|
||||
Statement: [
|
||||
o('Return'), o('Comment'), o('STATEMENT', function() {
|
||||
return new Literal($1);
|
||||
})
|
||||
],
|
||||
Expression: [o('Value'), o('Invocation'), o('Code'), o('Operation'), o('Assign'), o('If'), o('Try'), o('While'), o('For'), o('Switch'), o('Class'), o('Throw')],
|
||||
Block: [
|
||||
o('INDENT OUTDENT', function() {
|
||||
return new Block;
|
||||
}), o('INDENT Body OUTDENT', function() {
|
||||
return $2;
|
||||
})
|
||||
],
|
||||
Identifier: [
|
||||
o('IDENTIFIER', function() {
|
||||
return new Literal($1);
|
||||
})
|
||||
],
|
||||
AlphaNumeric: [
|
||||
o('NUMBER', function() {
|
||||
return new Literal($1);
|
||||
}), o('STRING', function() {
|
||||
return new Literal($1);
|
||||
})
|
||||
],
|
||||
Literal: [
|
||||
o('AlphaNumeric'), o('JS', function() {
|
||||
return new Literal($1);
|
||||
}), o('REGEX', function() {
|
||||
return new Literal($1);
|
||||
}), o('DEBUGGER', function() {
|
||||
return new Literal($1);
|
||||
}), o('UNDEFINED', function() {
|
||||
return new Undefined;
|
||||
}), o('NULL', function() {
|
||||
return new Null;
|
||||
}), o('BOOL', function() {
|
||||
return new Bool($1);
|
||||
})
|
||||
],
|
||||
Assign: [
|
||||
o('Assignable = Expression', function() {
|
||||
return new Assign($1, $3);
|
||||
}), o('Assignable = TERMINATOR Expression', function() {
|
||||
return new Assign($1, $4);
|
||||
}), o('Assignable = INDENT Expression OUTDENT', function() {
|
||||
return new Assign($1, $4);
|
||||
})
|
||||
],
|
||||
AssignObj: [
|
||||
o('ObjAssignable', function() {
|
||||
return new Value($1);
|
||||
}), o('ObjAssignable : Expression', function() {
|
||||
return new Assign(new Value($1), $3, 'object');
|
||||
}), o('ObjAssignable :\
|
||||
INDENT Expression OUTDENT', function() {
|
||||
return new Assign(new Value($1), $4, 'object');
|
||||
}), o('Comment')
|
||||
],
|
||||
ObjAssignable: [o('Identifier'), o('AlphaNumeric'), o('ThisProperty')],
|
||||
Return: [
|
||||
o('RETURN Expression', function() {
|
||||
return new Return($2);
|
||||
}), o('RETURN', function() {
|
||||
return new Return;
|
||||
})
|
||||
],
|
||||
Comment: [
|
||||
o('HERECOMMENT', function() {
|
||||
return new Comment($1);
|
||||
})
|
||||
],
|
||||
Code: [
|
||||
o('PARAM_START ParamList PARAM_END FuncGlyph Block', function() {
|
||||
return new Code($2, $5, $4);
|
||||
}), o('FuncGlyph Block', function() {
|
||||
return new Code([], $2, $1);
|
||||
})
|
||||
],
|
||||
FuncGlyph: [
|
||||
o('->', function() {
|
||||
return 'func';
|
||||
}), o('=>', function() {
|
||||
return 'boundfunc';
|
||||
})
|
||||
],
|
||||
OptComma: [o(''), o(',')],
|
||||
ParamList: [
|
||||
o('', function() {
|
||||
return [];
|
||||
}), o('Param', function() {
|
||||
return [$1];
|
||||
}), o('ParamList , Param', function() {
|
||||
return $1.concat($3);
|
||||
}), o('ParamList OptComma TERMINATOR Param', function() {
|
||||
return $1.concat($4);
|
||||
}), o('ParamList OptComma INDENT ParamList OptComma OUTDENT', function() {
|
||||
return $1.concat($4);
|
||||
})
|
||||
],
|
||||
Param: [
|
||||
o('ParamVar', function() {
|
||||
return new Param($1);
|
||||
}), o('ParamVar ...', function() {
|
||||
return new Param($1, null, true);
|
||||
}), o('ParamVar = Expression', function() {
|
||||
return new Param($1, $3);
|
||||
})
|
||||
],
|
||||
ParamVar: [o('Identifier'), o('ThisProperty'), o('Array'), o('Object')],
|
||||
Splat: [
|
||||
o('Expression ...', function() {
|
||||
return new Splat($1);
|
||||
})
|
||||
],
|
||||
SimpleAssignable: [
|
||||
o('Identifier', function() {
|
||||
return new Value($1);
|
||||
}), o('Value Accessor', function() {
|
||||
return $1.add($2);
|
||||
}), o('Invocation Accessor', function() {
|
||||
return new Value($1, [].concat($2));
|
||||
}), o('ThisProperty')
|
||||
],
|
||||
Assignable: [
|
||||
o('SimpleAssignable'), o('Array', function() {
|
||||
return new Value($1);
|
||||
}), o('Object', function() {
|
||||
return new Value($1);
|
||||
})
|
||||
],
|
||||
Value: [
|
||||
o('Assignable'), o('Literal', function() {
|
||||
return new Value($1);
|
||||
}), o('Parenthetical', function() {
|
||||
return new Value($1);
|
||||
}), o('Range', function() {
|
||||
return new Value($1);
|
||||
}), o('This')
|
||||
],
|
||||
Accessor: [
|
||||
o('. Identifier', function() {
|
||||
return new Access($2);
|
||||
}), o('?. Identifier', function() {
|
||||
return new Access($2, 'soak');
|
||||
}), o(':: Identifier', function() {
|
||||
return [new Access(new Literal('prototype')), new Access($2)];
|
||||
}), o('::', function() {
|
||||
return new Access(new Literal('prototype'));
|
||||
}), o('Index')
|
||||
],
|
||||
Index: [
|
||||
o('INDEX_START IndexValue INDEX_END', function() {
|
||||
return $2;
|
||||
}), o('INDEX_SOAK Index', function() {
|
||||
return extend($2, {
|
||||
soak: true
|
||||
});
|
||||
})
|
||||
],
|
||||
IndexValue: [
|
||||
o('Expression', function() {
|
||||
return new Index($1);
|
||||
}), o('Slice', function() {
|
||||
return new Slice($1);
|
||||
})
|
||||
],
|
||||
Object: [
|
||||
o('{ AssignList OptComma }', function() {
|
||||
return new Obj($2, $1.generated);
|
||||
})
|
||||
],
|
||||
AssignList: [
|
||||
o('', function() {
|
||||
return [];
|
||||
}), o('AssignObj', function() {
|
||||
return [$1];
|
||||
}), o('AssignList , AssignObj', function() {
|
||||
return $1.concat($3);
|
||||
}), o('AssignList OptComma TERMINATOR AssignObj', function() {
|
||||
return $1.concat($4);
|
||||
}), o('AssignList OptComma INDENT AssignList OptComma OUTDENT', function() {
|
||||
return $1.concat($4);
|
||||
})
|
||||
],
|
||||
Class: [
|
||||
o('CLASS', function() {
|
||||
return new Class;
|
||||
}), o('CLASS Block', function() {
|
||||
return new Class(null, null, $2);
|
||||
}), o('CLASS EXTENDS Expression', function() {
|
||||
return new Class(null, $3);
|
||||
}), o('CLASS EXTENDS Expression Block', function() {
|
||||
return new Class(null, $3, $4);
|
||||
}), o('CLASS SimpleAssignable', function() {
|
||||
return new Class($2);
|
||||
}), o('CLASS SimpleAssignable Block', function() {
|
||||
return new Class($2, null, $3);
|
||||
}), o('CLASS SimpleAssignable EXTENDS Expression', function() {
|
||||
return new Class($2, $4);
|
||||
}), o('CLASS SimpleAssignable EXTENDS Expression Block', function() {
|
||||
return new Class($2, $4, $5);
|
||||
})
|
||||
],
|
||||
Invocation: [
|
||||
o('Value OptFuncExist Arguments', function() {
|
||||
return new Call($1, $3, $2);
|
||||
}), o('Invocation OptFuncExist Arguments', function() {
|
||||
return new Call($1, $3, $2);
|
||||
}), o('SUPER', function() {
|
||||
return new Call('super', [new Splat(new Literal('arguments'))]);
|
||||
}), o('SUPER Arguments', function() {
|
||||
return new Call('super', $2);
|
||||
})
|
||||
],
|
||||
OptFuncExist: [
|
||||
o('', function() {
|
||||
return false;
|
||||
}), o('FUNC_EXIST', function() {
|
||||
return true;
|
||||
})
|
||||
],
|
||||
Arguments: [
|
||||
o('CALL_START CALL_END', function() {
|
||||
return [];
|
||||
}), o('CALL_START ArgList OptComma CALL_END', function() {
|
||||
return $2;
|
||||
})
|
||||
],
|
||||
This: [
|
||||
o('THIS', function() {
|
||||
return new Value(new Literal('this'));
|
||||
}), o('@', function() {
|
||||
return new Value(new Literal('this'));
|
||||
})
|
||||
],
|
||||
ThisProperty: [
|
||||
o('@ Identifier', function() {
|
||||
return new Value(new Literal('this'), [new Access($2)], 'this');
|
||||
})
|
||||
],
|
||||
Array: [
|
||||
o('[ ]', function() {
|
||||
return new Arr([]);
|
||||
}), o('[ ArgList OptComma ]', function() {
|
||||
return new Arr($2);
|
||||
})
|
||||
],
|
||||
RangeDots: [
|
||||
o('..', function() {
|
||||
return 'inclusive';
|
||||
}), o('...', function() {
|
||||
return 'exclusive';
|
||||
})
|
||||
],
|
||||
Range: [
|
||||
o('[ Expression RangeDots Expression ]', function() {
|
||||
return new Range($2, $4, $3);
|
||||
})
|
||||
],
|
||||
Slice: [
|
||||
o('Expression RangeDots Expression', function() {
|
||||
return new Range($1, $3, $2);
|
||||
}), o('Expression RangeDots', function() {
|
||||
return new Range($1, null, $2);
|
||||
}), o('RangeDots Expression', function() {
|
||||
return new Range(null, $2, $1);
|
||||
}), o('RangeDots', function() {
|
||||
return new Range(null, null, $1);
|
||||
})
|
||||
],
|
||||
ArgList: [
|
||||
o('Arg', function() {
|
||||
return [$1];
|
||||
}), o('ArgList , Arg', function() {
|
||||
return $1.concat($3);
|
||||
}), o('ArgList OptComma TERMINATOR Arg', function() {
|
||||
return $1.concat($4);
|
||||
}), o('INDENT ArgList OptComma OUTDENT', function() {
|
||||
return $2;
|
||||
}), o('ArgList OptComma INDENT ArgList OptComma OUTDENT', function() {
|
||||
return $1.concat($4);
|
||||
})
|
||||
],
|
||||
Arg: [o('Expression'), o('Splat')],
|
||||
SimpleArgs: [
|
||||
o('Expression'), o('SimpleArgs , Expression', function() {
|
||||
return [].concat($1, $3);
|
||||
})
|
||||
],
|
||||
Try: [
|
||||
o('TRY Block', function() {
|
||||
return new Try($2);
|
||||
}), o('TRY Block Catch', function() {
|
||||
return new Try($2, $3[0], $3[1]);
|
||||
}), o('TRY Block FINALLY Block', function() {
|
||||
return new Try($2, null, null, $4);
|
||||
}), o('TRY Block Catch FINALLY Block', function() {
|
||||
return new Try($2, $3[0], $3[1], $5);
|
||||
})
|
||||
],
|
||||
Catch: [
|
||||
o('CATCH Identifier Block', function() {
|
||||
return [$2, $3];
|
||||
})
|
||||
],
|
||||
Throw: [
|
||||
o('THROW Expression', function() {
|
||||
return new Throw($2);
|
||||
})
|
||||
],
|
||||
Parenthetical: [
|
||||
o('( Body )', function() {
|
||||
return new Parens($2);
|
||||
}), o('( INDENT Body OUTDENT )', function() {
|
||||
return new Parens($3);
|
||||
})
|
||||
],
|
||||
WhileSource: [
|
||||
o('WHILE Expression', function() {
|
||||
return new While($2);
|
||||
}), o('WHILE Expression WHEN Expression', function() {
|
||||
return new While($2, {
|
||||
guard: $4
|
||||
});
|
||||
}), o('UNTIL Expression', function() {
|
||||
return new While($2, {
|
||||
invert: true
|
||||
});
|
||||
}), o('UNTIL Expression WHEN Expression', function() {
|
||||
return new While($2, {
|
||||
invert: true,
|
||||
guard: $4
|
||||
});
|
||||
})
|
||||
],
|
||||
While: [
|
||||
o('WhileSource Block', function() {
|
||||
return $1.addBody($2);
|
||||
}), o('Statement WhileSource', function() {
|
||||
return $2.addBody(Block.wrap([$1]));
|
||||
}), o('Expression WhileSource', function() {
|
||||
return $2.addBody(Block.wrap([$1]));
|
||||
}), o('Loop', function() {
|
||||
return $1;
|
||||
})
|
||||
],
|
||||
Loop: [
|
||||
o('LOOP Block', function() {
|
||||
return new While(new Literal('true')).addBody($2);
|
||||
}), o('LOOP Expression', function() {
|
||||
return new While(new Literal('true')).addBody(Block.wrap([$2]));
|
||||
})
|
||||
],
|
||||
For: [
|
||||
o('Statement ForBody', function() {
|
||||
return new For($1, $2);
|
||||
}), o('Expression ForBody', function() {
|
||||
return new For($1, $2);
|
||||
}), o('ForBody Block', function() {
|
||||
return new For($2, $1);
|
||||
})
|
||||
],
|
||||
ForBody: [
|
||||
o('FOR Range', function() {
|
||||
return {
|
||||
source: new Value($2)
|
||||
};
|
||||
}), o('ForStart ForSource', function() {
|
||||
$2.own = $1.own;
|
||||
$2.name = $1[0];
|
||||
$2.index = $1[1];
|
||||
return $2;
|
||||
})
|
||||
],
|
||||
ForStart: [
|
||||
o('FOR ForVariables', function() {
|
||||
return $2;
|
||||
}), o('FOR OWN ForVariables', function() {
|
||||
$3.own = true;
|
||||
return $3;
|
||||
})
|
||||
],
|
||||
ForValue: [
|
||||
o('Identifier'), o('ThisProperty'), o('Array', function() {
|
||||
return new Value($1);
|
||||
}), o('Object', function() {
|
||||
return new Value($1);
|
||||
})
|
||||
],
|
||||
ForVariables: [
|
||||
o('ForValue', function() {
|
||||
return [$1];
|
||||
}), o('ForValue , ForValue', function() {
|
||||
return [$1, $3];
|
||||
})
|
||||
],
|
||||
ForSource: [
|
||||
o('FORIN Expression', function() {
|
||||
return {
|
||||
source: $2
|
||||
};
|
||||
}), o('FOROF Expression', function() {
|
||||
return {
|
||||
source: $2,
|
||||
object: true
|
||||
};
|
||||
}), o('FORIN Expression WHEN Expression', function() {
|
||||
return {
|
||||
source: $2,
|
||||
guard: $4
|
||||
};
|
||||
}), o('FOROF Expression WHEN Expression', function() {
|
||||
return {
|
||||
source: $2,
|
||||
guard: $4,
|
||||
object: true
|
||||
};
|
||||
}), o('FORIN Expression BY Expression', function() {
|
||||
return {
|
||||
source: $2,
|
||||
step: $4
|
||||
};
|
||||
}), o('FORIN Expression WHEN Expression BY Expression', function() {
|
||||
return {
|
||||
source: $2,
|
||||
guard: $4,
|
||||
step: $6
|
||||
};
|
||||
}), o('FORIN Expression BY Expression WHEN Expression', function() {
|
||||
return {
|
||||
source: $2,
|
||||
step: $4,
|
||||
guard: $6
|
||||
};
|
||||
})
|
||||
],
|
||||
Switch: [
|
||||
o('SWITCH Expression INDENT Whens OUTDENT', function() {
|
||||
return new Switch($2, $4);
|
||||
}), o('SWITCH Expression INDENT Whens ELSE Block OUTDENT', function() {
|
||||
return new Switch($2, $4, $6);
|
||||
}), o('SWITCH INDENT Whens OUTDENT', function() {
|
||||
return new Switch(null, $3);
|
||||
}), o('SWITCH INDENT Whens ELSE Block OUTDENT', function() {
|
||||
return new Switch(null, $3, $5);
|
||||
})
|
||||
],
|
||||
Whens: [
|
||||
o('When'), o('Whens When', function() {
|
||||
return $1.concat($2);
|
||||
})
|
||||
],
|
||||
When: [
|
||||
o('LEADING_WHEN SimpleArgs Block', function() {
|
||||
return [[$2, $3]];
|
||||
}), o('LEADING_WHEN SimpleArgs Block TERMINATOR', function() {
|
||||
return [[$2, $3]];
|
||||
})
|
||||
],
|
||||
IfBlock: [
|
||||
o('IF Expression Block', function() {
|
||||
return new If($2, $3, {
|
||||
type: $1
|
||||
});
|
||||
}), o('IfBlock ELSE IF Expression Block', function() {
|
||||
return $1.addElse(new If($4, $5, {
|
||||
type: $3
|
||||
}));
|
||||
})
|
||||
],
|
||||
If: [
|
||||
o('IfBlock'), o('IfBlock ELSE Block', function() {
|
||||
return $1.addElse($3);
|
||||
}), o('Statement POST_IF Expression', function() {
|
||||
return new If($3, Block.wrap([$1]), {
|
||||
type: $2,
|
||||
statement: true
|
||||
});
|
||||
}), o('Expression POST_IF Expression', function() {
|
||||
return new If($3, Block.wrap([$1]), {
|
||||
type: $2,
|
||||
statement: true
|
||||
});
|
||||
})
|
||||
],
|
||||
Operation: [
|
||||
o('UNARY Expression', function() {
|
||||
return new Op($1, $2);
|
||||
}), o('- Expression', (function() {
|
||||
return new Op('-', $2);
|
||||
}), {
|
||||
prec: 'UNARY'
|
||||
}), o('+ Expression', (function() {
|
||||
return new Op('+', $2);
|
||||
}), {
|
||||
prec: 'UNARY'
|
||||
}), o('-- SimpleAssignable', function() {
|
||||
return new Op('--', $2);
|
||||
}), o('++ SimpleAssignable', function() {
|
||||
return new Op('++', $2);
|
||||
}), o('SimpleAssignable --', function() {
|
||||
return new Op('--', $1, null, true);
|
||||
}), o('SimpleAssignable ++', function() {
|
||||
return new Op('++', $1, null, true);
|
||||
}), o('Expression ?', function() {
|
||||
return new Existence($1);
|
||||
}), o('Expression + Expression', function() {
|
||||
return new Op('+', $1, $3);
|
||||
}), o('Expression - Expression', function() {
|
||||
return new Op('-', $1, $3);
|
||||
}), o('Expression MATH Expression', function() {
|
||||
return new Op($2, $1, $3);
|
||||
}), o('Expression SHIFT Expression', function() {
|
||||
return new Op($2, $1, $3);
|
||||
}), o('Expression COMPARE Expression', function() {
|
||||
return new Op($2, $1, $3);
|
||||
}), o('Expression LOGIC Expression', function() {
|
||||
return new Op($2, $1, $3);
|
||||
}), o('Expression RELATION Expression', function() {
|
||||
if ($2.charAt(0) === '!') {
|
||||
return new Op($2.slice(1), $1, $3).invert();
|
||||
} else {
|
||||
return new Op($2, $1, $3);
|
||||
}
|
||||
}), o('SimpleAssignable COMPOUND_ASSIGN\
|
||||
Expression', function() {
|
||||
return new Assign($1, $3, $2);
|
||||
}), o('SimpleAssignable COMPOUND_ASSIGN\
|
||||
INDENT Expression OUTDENT', function() {
|
||||
return new Assign($1, $4, $2);
|
||||
}), o('SimpleAssignable EXTENDS Expression', function() {
|
||||
return new Extends($1, $3);
|
||||
})
|
||||
]
|
||||
};
|
||||
|
||||
operators = [['left', '.', '?.', '::'], ['left', 'CALL_START', 'CALL_END'], ['nonassoc', '++', '--'], ['left', '?'], ['right', 'UNARY'], ['left', 'MATH'], ['left', '+', '-'], ['left', 'SHIFT'], ['left', 'RELATION'], ['left', 'COMPARE'], ['left', 'LOGIC'], ['nonassoc', 'INDENT', 'OUTDENT'], ['right', '=', ':', 'COMPOUND_ASSIGN', 'RETURN', 'THROW', 'EXTENDS'], ['right', 'FORIN', 'FOROF', 'BY', 'WHEN'], ['right', 'IF', 'ELSE', 'FOR', 'WHILE', 'UNTIL', 'LOOP', 'SUPER', 'CLASS'], ['right', 'POST_IF']];
|
||||
|
||||
tokens = [];
|
||||
|
||||
for (name in grammar) {
|
||||
alternatives = grammar[name];
|
||||
grammar[name] = (function() {
|
||||
var _i, _j, _len, _len1, _ref, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = alternatives.length; _i < _len; _i++) {
|
||||
alt = alternatives[_i];
|
||||
_ref = alt[0].split(' ');
|
||||
for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
|
||||
token = _ref[_j];
|
||||
if (!grammar[token]) {
|
||||
tokens.push(token);
|
||||
}
|
||||
}
|
||||
if (name === 'Root') {
|
||||
alt[1] = "return " + alt[1];
|
||||
}
|
||||
_results.push(alt);
|
||||
}
|
||||
return _results;
|
||||
})();
|
||||
}
|
||||
|
||||
exports.parser = new Parser({
|
||||
tokens: tokens.join(' '),
|
||||
bnf: grammar,
|
||||
operators: operators.reverse(),
|
||||
startSymbol: 'Root'
|
||||
});
|
||||
|
||||
}).call(this);
|
77
node_modules/piler/node_modules/coffee-script/lib/coffee-script/helpers.js
generated
vendored
Normal file
77
node_modules/piler/node_modules/coffee-script/lib/coffee-script/helpers.js
generated
vendored
Normal file
@ -0,0 +1,77 @@
|
||||
// Generated by CoffeeScript 1.3.3
|
||||
(function() {
|
||||
var extend, flatten;
|
||||
|
||||
exports.starts = function(string, literal, start) {
|
||||
return literal === string.substr(start, literal.length);
|
||||
};
|
||||
|
||||
exports.ends = function(string, literal, back) {
|
||||
var len;
|
||||
len = literal.length;
|
||||
return literal === string.substr(string.length - len - (back || 0), len);
|
||||
};
|
||||
|
||||
exports.compact = function(array) {
|
||||
var item, _i, _len, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = array.length; _i < _len; _i++) {
|
||||
item = array[_i];
|
||||
if (item) {
|
||||
_results.push(item);
|
||||
}
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
||||
exports.count = function(string, substr) {
|
||||
var num, pos;
|
||||
num = pos = 0;
|
||||
if (!substr.length) {
|
||||
return 1 / 0;
|
||||
}
|
||||
while (pos = 1 + string.indexOf(substr, pos)) {
|
||||
num++;
|
||||
}
|
||||
return num;
|
||||
};
|
||||
|
||||
exports.merge = function(options, overrides) {
|
||||
return extend(extend({}, options), overrides);
|
||||
};
|
||||
|
||||
extend = exports.extend = function(object, properties) {
|
||||
var key, val;
|
||||
for (key in properties) {
|
||||
val = properties[key];
|
||||
object[key] = val;
|
||||
}
|
||||
return object;
|
||||
};
|
||||
|
||||
exports.flatten = flatten = function(array) {
|
||||
var element, flattened, _i, _len;
|
||||
flattened = [];
|
||||
for (_i = 0, _len = array.length; _i < _len; _i++) {
|
||||
element = array[_i];
|
||||
if (element instanceof Array) {
|
||||
flattened = flattened.concat(flatten(element));
|
||||
} else {
|
||||
flattened.push(element);
|
||||
}
|
||||
}
|
||||
return flattened;
|
||||
};
|
||||
|
||||
exports.del = function(obj, key) {
|
||||
var val;
|
||||
val = obj[key];
|
||||
delete obj[key];
|
||||
return val;
|
||||
};
|
||||
|
||||
exports.last = function(array, back) {
|
||||
return array[array.length - (back || 0) - 1];
|
||||
};
|
||||
|
||||
}).call(this);
|
11
node_modules/piler/node_modules/coffee-script/lib/coffee-script/index.js
generated
vendored
Normal file
11
node_modules/piler/node_modules/coffee-script/lib/coffee-script/index.js
generated
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
// Generated by CoffeeScript 1.3.3
|
||||
(function() {
|
||||
var key, val, _ref;
|
||||
|
||||
_ref = require('./coffee-script');
|
||||
for (key in _ref) {
|
||||
val = _ref[key];
|
||||
exports[key] = val;
|
||||
}
|
||||
|
||||
}).call(this);
|
788
node_modules/piler/node_modules/coffee-script/lib/coffee-script/lexer.js
generated
vendored
Normal file
788
node_modules/piler/node_modules/coffee-script/lib/coffee-script/lexer.js
generated
vendored
Normal file
@ -0,0 +1,788 @@
|
||||
// Generated by CoffeeScript 1.3.3
|
||||
(function() {
|
||||
var BOOL, CALLABLE, CODE, COFFEE_ALIASES, COFFEE_ALIAS_MAP, COFFEE_KEYWORDS, COMMENT, COMPARE, COMPOUND_ASSIGN, HEREDOC, HEREDOC_ILLEGAL, HEREDOC_INDENT, HEREGEX, HEREGEX_OMIT, IDENTIFIER, INDEXABLE, INVERSES, JSTOKEN, JS_FORBIDDEN, JS_KEYWORDS, LINE_BREAK, LINE_CONTINUER, LOGIC, Lexer, MATH, MULTILINER, MULTI_DENT, NOT_REGEX, NOT_SPACED_REGEX, NUMBER, OPERATOR, REGEX, RELATION, RESERVED, Rewriter, SHIFT, SIMPLESTR, STRICT_PROSCRIBED, TRAILING_SPACES, UNARY, WHITESPACE, compact, count, key, last, starts, _ref, _ref1,
|
||||
__indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
|
||||
|
||||
_ref = require('./rewriter'), Rewriter = _ref.Rewriter, INVERSES = _ref.INVERSES;
|
||||
|
||||
_ref1 = require('./helpers'), count = _ref1.count, starts = _ref1.starts, compact = _ref1.compact, last = _ref1.last;
|
||||
|
||||
exports.Lexer = Lexer = (function() {
|
||||
|
||||
function Lexer() {}
|
||||
|
||||
Lexer.prototype.tokenize = function(code, opts) {
|
||||
var i, tag;
|
||||
if (opts == null) {
|
||||
opts = {};
|
||||
}
|
||||
if (WHITESPACE.test(code)) {
|
||||
code = "\n" + code;
|
||||
}
|
||||
code = code.replace(/\r/g, '').replace(TRAILING_SPACES, '');
|
||||
this.code = code;
|
||||
this.line = opts.line || 0;
|
||||
this.indent = 0;
|
||||
this.indebt = 0;
|
||||
this.outdebt = 0;
|
||||
this.indents = [];
|
||||
this.ends = [];
|
||||
this.tokens = [];
|
||||
i = 0;
|
||||
while (this.chunk = code.slice(i)) {
|
||||
i += this.identifierToken() || this.commentToken() || this.whitespaceToken() || this.lineToken() || this.heredocToken() || this.stringToken() || this.numberToken() || this.regexToken() || this.jsToken() || this.literalToken();
|
||||
}
|
||||
this.closeIndentation();
|
||||
if (tag = this.ends.pop()) {
|
||||
this.error("missing " + tag);
|
||||
}
|
||||
if (opts.rewrite === false) {
|
||||
return this.tokens;
|
||||
}
|
||||
return (new Rewriter).rewrite(this.tokens);
|
||||
};
|
||||
|
||||
Lexer.prototype.identifierToken = function() {
|
||||
var colon, forcedIdentifier, id, input, match, prev, tag, _ref2, _ref3;
|
||||
if (!(match = IDENTIFIER.exec(this.chunk))) {
|
||||
return 0;
|
||||
}
|
||||
input = match[0], id = match[1], colon = match[2];
|
||||
if (id === 'own' && this.tag() === 'FOR') {
|
||||
this.token('OWN', id);
|
||||
return id.length;
|
||||
}
|
||||
forcedIdentifier = colon || (prev = last(this.tokens)) && (((_ref2 = prev[0]) === '.' || _ref2 === '?.' || _ref2 === '::') || !prev.spaced && prev[0] === '@');
|
||||
tag = 'IDENTIFIER';
|
||||
if (!forcedIdentifier && (__indexOf.call(JS_KEYWORDS, id) >= 0 || __indexOf.call(COFFEE_KEYWORDS, id) >= 0)) {
|
||||
tag = id.toUpperCase();
|
||||
if (tag === 'WHEN' && (_ref3 = this.tag(), __indexOf.call(LINE_BREAK, _ref3) >= 0)) {
|
||||
tag = 'LEADING_WHEN';
|
||||
} else if (tag === 'FOR') {
|
||||
this.seenFor = true;
|
||||
} else if (tag === 'UNLESS') {
|
||||
tag = 'IF';
|
||||
} else if (__indexOf.call(UNARY, tag) >= 0) {
|
||||
tag = 'UNARY';
|
||||
} else if (__indexOf.call(RELATION, tag) >= 0) {
|
||||
if (tag !== 'INSTANCEOF' && this.seenFor) {
|
||||
tag = 'FOR' + tag;
|
||||
this.seenFor = false;
|
||||
} else {
|
||||
tag = 'RELATION';
|
||||
if (this.value() === '!') {
|
||||
this.tokens.pop();
|
||||
id = '!' + id;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (__indexOf.call(JS_FORBIDDEN, id) >= 0) {
|
||||
if (forcedIdentifier) {
|
||||
tag = 'IDENTIFIER';
|
||||
id = new String(id);
|
||||
id.reserved = true;
|
||||
} else if (__indexOf.call(RESERVED, id) >= 0) {
|
||||
this.error("reserved word \"" + id + "\"");
|
||||
}
|
||||
}
|
||||
if (!forcedIdentifier) {
|
||||
if (__indexOf.call(COFFEE_ALIASES, id) >= 0) {
|
||||
id = COFFEE_ALIAS_MAP[id];
|
||||
}
|
||||
tag = (function() {
|
||||
switch (id) {
|
||||
case '!':
|
||||
return 'UNARY';
|
||||
case '==':
|
||||
case '!=':
|
||||
return 'COMPARE';
|
||||
case '&&':
|
||||
case '||':
|
||||
return 'LOGIC';
|
||||
case 'true':
|
||||
case 'false':
|
||||
return 'BOOL';
|
||||
case 'break':
|
||||
case 'continue':
|
||||
return 'STATEMENT';
|
||||
default:
|
||||
return tag;
|
||||
}
|
||||
})();
|
||||
}
|
||||
this.token(tag, id);
|
||||
if (colon) {
|
||||
this.token(':', ':');
|
||||
}
|
||||
return input.length;
|
||||
};
|
||||
|
||||
Lexer.prototype.numberToken = function() {
|
||||
var binaryLiteral, lexedLength, match, number, octalLiteral;
|
||||
if (!(match = NUMBER.exec(this.chunk))) {
|
||||
return 0;
|
||||
}
|
||||
number = match[0];
|
||||
if (/^0[BOX]/.test(number)) {
|
||||
this.error("radix prefix '" + number + "' must be lowercase");
|
||||
} else if (/E/.test(number) && !/^0x/.test(number)) {
|
||||
this.error("exponential notation '" + number + "' must be indicated with a lowercase 'e'");
|
||||
} else if (/^0\d*[89]/.test(number)) {
|
||||
this.error("decimal literal '" + number + "' must not be prefixed with '0'");
|
||||
} else if (/^0\d+/.test(number)) {
|
||||
this.error("octal literal '" + number + "' must be prefixed with '0o'");
|
||||
}
|
||||
lexedLength = number.length;
|
||||
if (octalLiteral = /^0o([0-7]+)/.exec(number)) {
|
||||
number = '0x' + (parseInt(octalLiteral[1], 8)).toString(16);
|
||||
}
|
||||
if (binaryLiteral = /^0b([01]+)/.exec(number)) {
|
||||
number = '0x' + (parseInt(binaryLiteral[1], 2)).toString(16);
|
||||
}
|
||||
this.token('NUMBER', number);
|
||||
return lexedLength;
|
||||
};
|
||||
|
||||
Lexer.prototype.stringToken = function() {
|
||||
var match, octalEsc, string;
|
||||
switch (this.chunk.charAt(0)) {
|
||||
case "'":
|
||||
if (!(match = SIMPLESTR.exec(this.chunk))) {
|
||||
return 0;
|
||||
}
|
||||
this.token('STRING', (string = match[0]).replace(MULTILINER, '\\\n'));
|
||||
break;
|
||||
case '"':
|
||||
if (!(string = this.balancedString(this.chunk, '"'))) {
|
||||
return 0;
|
||||
}
|
||||
if (0 < string.indexOf('#{', 1)) {
|
||||
this.interpolateString(string.slice(1, -1));
|
||||
} else {
|
||||
this.token('STRING', this.escapeLines(string));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
if (octalEsc = /^(?:\\.|[^\\])*\\(?:0[0-7]|[1-7])/.test(string)) {
|
||||
this.error("octal escape sequences " + string + " are not allowed");
|
||||
}
|
||||
this.line += count(string, '\n');
|
||||
return string.length;
|
||||
};
|
||||
|
||||
Lexer.prototype.heredocToken = function() {
|
||||
var doc, heredoc, match, quote;
|
||||
if (!(match = HEREDOC.exec(this.chunk))) {
|
||||
return 0;
|
||||
}
|
||||
heredoc = match[0];
|
||||
quote = heredoc.charAt(0);
|
||||
doc = this.sanitizeHeredoc(match[2], {
|
||||
quote: quote,
|
||||
indent: null
|
||||
});
|
||||
if (quote === '"' && 0 <= doc.indexOf('#{')) {
|
||||
this.interpolateString(doc, {
|
||||
heredoc: true
|
||||
});
|
||||
} else {
|
||||
this.token('STRING', this.makeString(doc, quote, true));
|
||||
}
|
||||
this.line += count(heredoc, '\n');
|
||||
return heredoc.length;
|
||||
};
|
||||
|
||||
Lexer.prototype.commentToken = function() {
|
||||
var comment, here, match;
|
||||
if (!(match = this.chunk.match(COMMENT))) {
|
||||
return 0;
|
||||
}
|
||||
comment = match[0], here = match[1];
|
||||
if (here) {
|
||||
this.token('HERECOMMENT', this.sanitizeHeredoc(here, {
|
||||
herecomment: true,
|
||||
indent: Array(this.indent + 1).join(' ')
|
||||
}));
|
||||
}
|
||||
this.line += count(comment, '\n');
|
||||
return comment.length;
|
||||
};
|
||||
|
||||
Lexer.prototype.jsToken = function() {
|
||||
var match, script;
|
||||
if (!(this.chunk.charAt(0) === '`' && (match = JSTOKEN.exec(this.chunk)))) {
|
||||
return 0;
|
||||
}
|
||||
this.token('JS', (script = match[0]).slice(1, -1));
|
||||
return script.length;
|
||||
};
|
||||
|
||||
Lexer.prototype.regexToken = function() {
|
||||
var flags, length, match, prev, regex, _ref2, _ref3;
|
||||
if (this.chunk.charAt(0) !== '/') {
|
||||
return 0;
|
||||
}
|
||||
if (match = HEREGEX.exec(this.chunk)) {
|
||||
length = this.heregexToken(match);
|
||||
this.line += count(match[0], '\n');
|
||||
return length;
|
||||
}
|
||||
prev = last(this.tokens);
|
||||
if (prev && (_ref2 = prev[0], __indexOf.call((prev.spaced ? NOT_REGEX : NOT_SPACED_REGEX), _ref2) >= 0)) {
|
||||
return 0;
|
||||
}
|
||||
if (!(match = REGEX.exec(this.chunk))) {
|
||||
return 0;
|
||||
}
|
||||
_ref3 = match, match = _ref3[0], regex = _ref3[1], flags = _ref3[2];
|
||||
if (regex.slice(0, 2) === '/*') {
|
||||
this.error('regular expressions cannot begin with `*`');
|
||||
}
|
||||
if (regex === '//') {
|
||||
regex = '/(?:)/';
|
||||
}
|
||||
this.token('REGEX', "" + regex + flags);
|
||||
return match.length;
|
||||
};
|
||||
|
||||
Lexer.prototype.heregexToken = function(match) {
|
||||
var body, flags, heregex, re, tag, tokens, value, _i, _len, _ref2, _ref3, _ref4, _ref5;
|
||||
heregex = match[0], body = match[1], flags = match[2];
|
||||
if (0 > body.indexOf('#{')) {
|
||||
re = body.replace(HEREGEX_OMIT, '').replace(/\//g, '\\/');
|
||||
if (re.match(/^\*/)) {
|
||||
this.error('regular expressions cannot begin with `*`');
|
||||
}
|
||||
this.token('REGEX', "/" + (re || '(?:)') + "/" + flags);
|
||||
return heregex.length;
|
||||
}
|
||||
this.token('IDENTIFIER', 'RegExp');
|
||||
this.tokens.push(['CALL_START', '(']);
|
||||
tokens = [];
|
||||
_ref2 = this.interpolateString(body, {
|
||||
regex: true
|
||||
});
|
||||
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
||||
_ref3 = _ref2[_i], tag = _ref3[0], value = _ref3[1];
|
||||
if (tag === 'TOKENS') {
|
||||
tokens.push.apply(tokens, value);
|
||||
} else {
|
||||
if (!(value = value.replace(HEREGEX_OMIT, ''))) {
|
||||
continue;
|
||||
}
|
||||
value = value.replace(/\\/g, '\\\\');
|
||||
tokens.push(['STRING', this.makeString(value, '"', true)]);
|
||||
}
|
||||
tokens.push(['+', '+']);
|
||||
}
|
||||
tokens.pop();
|
||||
if (((_ref4 = tokens[0]) != null ? _ref4[0] : void 0) !== 'STRING') {
|
||||
this.tokens.push(['STRING', '""'], ['+', '+']);
|
||||
}
|
||||
(_ref5 = this.tokens).push.apply(_ref5, tokens);
|
||||
if (flags) {
|
||||
this.tokens.push([',', ','], ['STRING', '"' + flags + '"']);
|
||||
}
|
||||
this.token(')', ')');
|
||||
return heregex.length;
|
||||
};
|
||||
|
||||
Lexer.prototype.lineToken = function() {
|
||||
var diff, indent, match, noNewlines, prev, size;
|
||||
if (!(match = MULTI_DENT.exec(this.chunk))) {
|
||||
return 0;
|
||||
}
|
||||
indent = match[0];
|
||||
this.line += count(indent, '\n');
|
||||
this.seenFor = false;
|
||||
prev = last(this.tokens, 1);
|
||||
size = indent.length - 1 - indent.lastIndexOf('\n');
|
||||
noNewlines = this.unfinished();
|
||||
if (size - this.indebt === this.indent) {
|
||||
if (noNewlines) {
|
||||
this.suppressNewlines();
|
||||
} else {
|
||||
this.newlineToken();
|
||||
}
|
||||
return indent.length;
|
||||
}
|
||||
if (size > this.indent) {
|
||||
if (noNewlines) {
|
||||
this.indebt = size - this.indent;
|
||||
this.suppressNewlines();
|
||||
return indent.length;
|
||||
}
|
||||
diff = size - this.indent + this.outdebt;
|
||||
this.token('INDENT', diff);
|
||||
this.indents.push(diff);
|
||||
this.ends.push('OUTDENT');
|
||||
this.outdebt = this.indebt = 0;
|
||||
} else {
|
||||
this.indebt = 0;
|
||||
this.outdentToken(this.indent - size, noNewlines);
|
||||
}
|
||||
this.indent = size;
|
||||
return indent.length;
|
||||
};
|
||||
|
||||
Lexer.prototype.outdentToken = function(moveOut, noNewlines) {
|
||||
var dent, len;
|
||||
while (moveOut > 0) {
|
||||
len = this.indents.length - 1;
|
||||
if (this.indents[len] === void 0) {
|
||||
moveOut = 0;
|
||||
} else if (this.indents[len] === this.outdebt) {
|
||||
moveOut -= this.outdebt;
|
||||
this.outdebt = 0;
|
||||
} else if (this.indents[len] < this.outdebt) {
|
||||
this.outdebt -= this.indents[len];
|
||||
moveOut -= this.indents[len];
|
||||
} else {
|
||||
dent = this.indents.pop() - this.outdebt;
|
||||
moveOut -= dent;
|
||||
this.outdebt = 0;
|
||||
this.pair('OUTDENT');
|
||||
this.token('OUTDENT', dent);
|
||||
}
|
||||
}
|
||||
if (dent) {
|
||||
this.outdebt -= moveOut;
|
||||
}
|
||||
while (this.value() === ';') {
|
||||
this.tokens.pop();
|
||||
}
|
||||
if (!(this.tag() === 'TERMINATOR' || noNewlines)) {
|
||||
this.token('TERMINATOR', '\n');
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
Lexer.prototype.whitespaceToken = function() {
|
||||
var match, nline, prev;
|
||||
if (!((match = WHITESPACE.exec(this.chunk)) || (nline = this.chunk.charAt(0) === '\n'))) {
|
||||
return 0;
|
||||
}
|
||||
prev = last(this.tokens);
|
||||
if (prev) {
|
||||
prev[match ? 'spaced' : 'newLine'] = true;
|
||||
}
|
||||
if (match) {
|
||||
return match[0].length;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
Lexer.prototype.newlineToken = function() {
|
||||
while (this.value() === ';') {
|
||||
this.tokens.pop();
|
||||
}
|
||||
if (this.tag() !== 'TERMINATOR') {
|
||||
this.token('TERMINATOR', '\n');
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
Lexer.prototype.suppressNewlines = function() {
|
||||
if (this.value() === '\\') {
|
||||
this.tokens.pop();
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
Lexer.prototype.literalToken = function() {
|
||||
var match, prev, tag, value, _ref2, _ref3, _ref4, _ref5;
|
||||
if (match = OPERATOR.exec(this.chunk)) {
|
||||
value = match[0];
|
||||
if (CODE.test(value)) {
|
||||
this.tagParameters();
|
||||
}
|
||||
} else {
|
||||
value = this.chunk.charAt(0);
|
||||
}
|
||||
tag = value;
|
||||
prev = last(this.tokens);
|
||||
if (value === '=' && prev) {
|
||||
if (!prev[1].reserved && (_ref2 = prev[1], __indexOf.call(JS_FORBIDDEN, _ref2) >= 0)) {
|
||||
this.error("reserved word \"" + (this.value()) + "\" can't be assigned");
|
||||
}
|
||||
if ((_ref3 = prev[1]) === '||' || _ref3 === '&&') {
|
||||
prev[0] = 'COMPOUND_ASSIGN';
|
||||
prev[1] += '=';
|
||||
return value.length;
|
||||
}
|
||||
}
|
||||
if (value === ';') {
|
||||
this.seenFor = false;
|
||||
tag = 'TERMINATOR';
|
||||
} else if (__indexOf.call(MATH, value) >= 0) {
|
||||
tag = 'MATH';
|
||||
} else if (__indexOf.call(COMPARE, value) >= 0) {
|
||||
tag = 'COMPARE';
|
||||
} else if (__indexOf.call(COMPOUND_ASSIGN, value) >= 0) {
|
||||
tag = 'COMPOUND_ASSIGN';
|
||||
} else if (__indexOf.call(UNARY, value) >= 0) {
|
||||
tag = 'UNARY';
|
||||
} else if (__indexOf.call(SHIFT, value) >= 0) {
|
||||
tag = 'SHIFT';
|
||||
} else if (__indexOf.call(LOGIC, value) >= 0 || value === '?' && (prev != null ? prev.spaced : void 0)) {
|
||||
tag = 'LOGIC';
|
||||
} else if (prev && !prev.spaced) {
|
||||
if (value === '(' && (_ref4 = prev[0], __indexOf.call(CALLABLE, _ref4) >= 0)) {
|
||||
if (prev[0] === '?') {
|
||||
prev[0] = 'FUNC_EXIST';
|
||||
}
|
||||
tag = 'CALL_START';
|
||||
} else if (value === '[' && (_ref5 = prev[0], __indexOf.call(INDEXABLE, _ref5) >= 0)) {
|
||||
tag = 'INDEX_START';
|
||||
switch (prev[0]) {
|
||||
case '?':
|
||||
prev[0] = 'INDEX_SOAK';
|
||||
}
|
||||
}
|
||||
}
|
||||
switch (value) {
|
||||
case '(':
|
||||
case '{':
|
||||
case '[':
|
||||
this.ends.push(INVERSES[value]);
|
||||
break;
|
||||
case ')':
|
||||
case '}':
|
||||
case ']':
|
||||
this.pair(value);
|
||||
}
|
||||
this.token(tag, value);
|
||||
return value.length;
|
||||
};
|
||||
|
||||
Lexer.prototype.sanitizeHeredoc = function(doc, options) {
|
||||
var attempt, herecomment, indent, match, _ref2;
|
||||
indent = options.indent, herecomment = options.herecomment;
|
||||
if (herecomment) {
|
||||
if (HEREDOC_ILLEGAL.test(doc)) {
|
||||
this.error("block comment cannot contain \"*/\", starting");
|
||||
}
|
||||
if (doc.indexOf('\n') <= 0) {
|
||||
return doc;
|
||||
}
|
||||
} else {
|
||||
while (match = HEREDOC_INDENT.exec(doc)) {
|
||||
attempt = match[1];
|
||||
if (indent === null || (0 < (_ref2 = attempt.length) && _ref2 < indent.length)) {
|
||||
indent = attempt;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (indent) {
|
||||
doc = doc.replace(RegExp("\\n" + indent, "g"), '\n');
|
||||
}
|
||||
if (!herecomment) {
|
||||
doc = doc.replace(/^\n/, '');
|
||||
}
|
||||
return doc;
|
||||
};
|
||||
|
||||
Lexer.prototype.tagParameters = function() {
|
||||
var i, stack, tok, tokens;
|
||||
if (this.tag() !== ')') {
|
||||
return this;
|
||||
}
|
||||
stack = [];
|
||||
tokens = this.tokens;
|
||||
i = tokens.length;
|
||||
tokens[--i][0] = 'PARAM_END';
|
||||
while (tok = tokens[--i]) {
|
||||
switch (tok[0]) {
|
||||
case ')':
|
||||
stack.push(tok);
|
||||
break;
|
||||
case '(':
|
||||
case 'CALL_START':
|
||||
if (stack.length) {
|
||||
stack.pop();
|
||||
} else if (tok[0] === '(') {
|
||||
tok[0] = 'PARAM_START';
|
||||
return this;
|
||||
} else {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
Lexer.prototype.closeIndentation = function() {
|
||||
return this.outdentToken(this.indent);
|
||||
};
|
||||
|
||||
Lexer.prototype.balancedString = function(str, end) {
|
||||
var continueCount, i, letter, match, prev, stack, _i, _ref2;
|
||||
continueCount = 0;
|
||||
stack = [end];
|
||||
for (i = _i = 1, _ref2 = str.length; 1 <= _ref2 ? _i < _ref2 : _i > _ref2; i = 1 <= _ref2 ? ++_i : --_i) {
|
||||
if (continueCount) {
|
||||
--continueCount;
|
||||
continue;
|
||||
}
|
||||
switch (letter = str.charAt(i)) {
|
||||
case '\\':
|
||||
++continueCount;
|
||||
continue;
|
||||
case end:
|
||||
stack.pop();
|
||||
if (!stack.length) {
|
||||
return str.slice(0, i + 1 || 9e9);
|
||||
}
|
||||
end = stack[stack.length - 1];
|
||||
continue;
|
||||
}
|
||||
if (end === '}' && (letter === '"' || letter === "'")) {
|
||||
stack.push(end = letter);
|
||||
} else if (end === '}' && letter === '/' && (match = HEREGEX.exec(str.slice(i)) || REGEX.exec(str.slice(i)))) {
|
||||
continueCount += match[0].length - 1;
|
||||
} else if (end === '}' && letter === '{') {
|
||||
stack.push(end = '}');
|
||||
} else if (end === '"' && prev === '#' && letter === '{') {
|
||||
stack.push(end = '}');
|
||||
}
|
||||
prev = letter;
|
||||
}
|
||||
return this.error("missing " + (stack.pop()) + ", starting");
|
||||
};
|
||||
|
||||
Lexer.prototype.interpolateString = function(str, options) {
|
||||
var expr, heredoc, i, inner, interpolated, len, letter, nested, pi, regex, tag, tokens, value, _i, _len, _ref2, _ref3, _ref4;
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
heredoc = options.heredoc, regex = options.regex;
|
||||
tokens = [];
|
||||
pi = 0;
|
||||
i = -1;
|
||||
while (letter = str.charAt(i += 1)) {
|
||||
if (letter === '\\') {
|
||||
i += 1;
|
||||
continue;
|
||||
}
|
||||
if (!(letter === '#' && str.charAt(i + 1) === '{' && (expr = this.balancedString(str.slice(i + 1), '}')))) {
|
||||
continue;
|
||||
}
|
||||
if (pi < i) {
|
||||
tokens.push(['NEOSTRING', str.slice(pi, i)]);
|
||||
}
|
||||
inner = expr.slice(1, -1);
|
||||
if (inner.length) {
|
||||
nested = new Lexer().tokenize(inner, {
|
||||
line: this.line,
|
||||
rewrite: false
|
||||
});
|
||||
nested.pop();
|
||||
if (((_ref2 = nested[0]) != null ? _ref2[0] : void 0) === 'TERMINATOR') {
|
||||
nested.shift();
|
||||
}
|
||||
if (len = nested.length) {
|
||||
if (len > 1) {
|
||||
nested.unshift(['(', '(', this.line]);
|
||||
nested.push([')', ')', this.line]);
|
||||
}
|
||||
tokens.push(['TOKENS', nested]);
|
||||
}
|
||||
}
|
||||
i += expr.length;
|
||||
pi = i + 1;
|
||||
}
|
||||
if ((i > pi && pi < str.length)) {
|
||||
tokens.push(['NEOSTRING', str.slice(pi)]);
|
||||
}
|
||||
if (regex) {
|
||||
return tokens;
|
||||
}
|
||||
if (!tokens.length) {
|
||||
return this.token('STRING', '""');
|
||||
}
|
||||
if (tokens[0][0] !== 'NEOSTRING') {
|
||||
tokens.unshift(['', '']);
|
||||
}
|
||||
if (interpolated = tokens.length > 1) {
|
||||
this.token('(', '(');
|
||||
}
|
||||
for (i = _i = 0, _len = tokens.length; _i < _len; i = ++_i) {
|
||||
_ref3 = tokens[i], tag = _ref3[0], value = _ref3[1];
|
||||
if (i) {
|
||||
this.token('+', '+');
|
||||
}
|
||||
if (tag === 'TOKENS') {
|
||||
(_ref4 = this.tokens).push.apply(_ref4, value);
|
||||
} else {
|
||||
this.token('STRING', this.makeString(value, '"', heredoc));
|
||||
}
|
||||
}
|
||||
if (interpolated) {
|
||||
this.token(')', ')');
|
||||
}
|
||||
return tokens;
|
||||
};
|
||||
|
||||
Lexer.prototype.pair = function(tag) {
|
||||
var size, wanted;
|
||||
if (tag !== (wanted = last(this.ends))) {
|
||||
if ('OUTDENT' !== wanted) {
|
||||
this.error("unmatched " + tag);
|
||||
}
|
||||
this.indent -= size = last(this.indents);
|
||||
this.outdentToken(size, true);
|
||||
return this.pair(tag);
|
||||
}
|
||||
return this.ends.pop();
|
||||
};
|
||||
|
||||
Lexer.prototype.token = function(tag, value) {
|
||||
return this.tokens.push([tag, value, this.line]);
|
||||
};
|
||||
|
||||
Lexer.prototype.tag = function(index, tag) {
|
||||
var tok;
|
||||
return (tok = last(this.tokens, index)) && (tag ? tok[0] = tag : tok[0]);
|
||||
};
|
||||
|
||||
Lexer.prototype.value = function(index, val) {
|
||||
var tok;
|
||||
return (tok = last(this.tokens, index)) && (val ? tok[1] = val : tok[1]);
|
||||
};
|
||||
|
||||
Lexer.prototype.unfinished = function() {
|
||||
var _ref2;
|
||||
return LINE_CONTINUER.test(this.chunk) || ((_ref2 = this.tag()) === '\\' || _ref2 === '.' || _ref2 === '?.' || _ref2 === 'UNARY' || _ref2 === 'MATH' || _ref2 === '+' || _ref2 === '-' || _ref2 === 'SHIFT' || _ref2 === 'RELATION' || _ref2 === 'COMPARE' || _ref2 === 'LOGIC' || _ref2 === 'THROW' || _ref2 === 'EXTENDS');
|
||||
};
|
||||
|
||||
Lexer.prototype.escapeLines = function(str, heredoc) {
|
||||
return str.replace(MULTILINER, heredoc ? '\\n' : '');
|
||||
};
|
||||
|
||||
Lexer.prototype.makeString = function(body, quote, heredoc) {
|
||||
if (!body) {
|
||||
return quote + quote;
|
||||
}
|
||||
body = body.replace(/\\([\s\S])/g, function(match, contents) {
|
||||
if (contents === '\n' || contents === quote) {
|
||||
return contents;
|
||||
} else {
|
||||
return match;
|
||||
}
|
||||
});
|
||||
body = body.replace(RegExp("" + quote, "g"), '\\$&');
|
||||
return quote + this.escapeLines(body, heredoc) + quote;
|
||||
};
|
||||
|
||||
Lexer.prototype.error = function(message) {
|
||||
throw SyntaxError("" + message + " on line " + (this.line + 1));
|
||||
};
|
||||
|
||||
return Lexer;
|
||||
|
||||
})();
|
||||
|
||||
JS_KEYWORDS = ['true', 'false', 'null', 'this', 'new', 'delete', 'typeof', 'in', 'instanceof', 'return', 'throw', 'break', 'continue', 'debugger', 'if', 'else', 'switch', 'for', 'while', 'do', 'try', 'catch', 'finally', 'class', 'extends', 'super'];
|
||||
|
||||
COFFEE_KEYWORDS = ['undefined', 'then', 'unless', 'until', 'loop', 'of', 'by', 'when'];
|
||||
|
||||
COFFEE_ALIAS_MAP = {
|
||||
and: '&&',
|
||||
or: '||',
|
||||
is: '==',
|
||||
isnt: '!=',
|
||||
not: '!',
|
||||
yes: 'true',
|
||||
no: 'false',
|
||||
on: 'true',
|
||||
off: 'false'
|
||||
};
|
||||
|
||||
COFFEE_ALIASES = (function() {
|
||||
var _results;
|
||||
_results = [];
|
||||
for (key in COFFEE_ALIAS_MAP) {
|
||||
_results.push(key);
|
||||
}
|
||||
return _results;
|
||||
})();
|
||||
|
||||
COFFEE_KEYWORDS = COFFEE_KEYWORDS.concat(COFFEE_ALIASES);
|
||||
|
||||
RESERVED = ['case', 'default', 'function', 'var', 'void', 'with', 'const', 'let', 'enum', 'export', 'import', 'native', '__hasProp', '__extends', '__slice', '__bind', '__indexOf', 'implements', 'interface', 'let', 'package', 'private', 'protected', 'public', 'static', 'yield'];
|
||||
|
||||
STRICT_PROSCRIBED = ['arguments', 'eval'];
|
||||
|
||||
JS_FORBIDDEN = JS_KEYWORDS.concat(RESERVED).concat(STRICT_PROSCRIBED);
|
||||
|
||||
exports.RESERVED = RESERVED.concat(JS_KEYWORDS).concat(COFFEE_KEYWORDS).concat(STRICT_PROSCRIBED);
|
||||
|
||||
exports.STRICT_PROSCRIBED = STRICT_PROSCRIBED;
|
||||
|
||||
IDENTIFIER = /^([$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)([^\n\S]*:(?!:))?/;
|
||||
|
||||
NUMBER = /^0b[01]+|^0o[0-7]+|^0x[\da-f]+|^\d*\.?\d+(?:e[+-]?\d+)?/i;
|
||||
|
||||
HEREDOC = /^("""|''')([\s\S]*?)(?:\n[^\n\S]*)?\1/;
|
||||
|
||||
OPERATOR = /^(?:[-=]>|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>])\2=?|\?\.|\.{2,3})/;
|
||||
|
||||
WHITESPACE = /^[^\n\S]+/;
|
||||
|
||||
COMMENT = /^###([^#][\s\S]*?)(?:###[^\n\S]*|(?:###)?$)|^(?:\s*#(?!##[^#]).*)+/;
|
||||
|
||||
CODE = /^[-=]>/;
|
||||
|
||||
MULTI_DENT = /^(?:\n[^\n\S]*)+/;
|
||||
|
||||
SIMPLESTR = /^'[^\\']*(?:\\.[^\\']*)*'/;
|
||||
|
||||
JSTOKEN = /^`[^\\`]*(?:\\.[^\\`]*)*`/;
|
||||
|
||||
REGEX = /^(\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/)([imgy]{0,4})(?!\w)/;
|
||||
|
||||
HEREGEX = /^\/{3}([\s\S]+?)\/{3}([imgy]{0,4})(?!\w)/;
|
||||
|
||||
HEREGEX_OMIT = /\s+(?:#.*)?/g;
|
||||
|
||||
MULTILINER = /\n/g;
|
||||
|
||||
HEREDOC_INDENT = /\n+([^\n\S]*)/g;
|
||||
|
||||
HEREDOC_ILLEGAL = /\*\//;
|
||||
|
||||
LINE_CONTINUER = /^\s*(?:,|\??\.(?![.\d])|::)/;
|
||||
|
||||
TRAILING_SPACES = /\s+$/;
|
||||
|
||||
COMPOUND_ASSIGN = ['-=', '+=', '/=', '*=', '%=', '||=', '&&=', '?=', '<<=', '>>=', '>>>=', '&=', '^=', '|='];
|
||||
|
||||
UNARY = ['!', '~', 'NEW', 'TYPEOF', 'DELETE', 'DO'];
|
||||
|
||||
LOGIC = ['&&', '||', '&', '|', '^'];
|
||||
|
||||
SHIFT = ['<<', '>>', '>>>'];
|
||||
|
||||
COMPARE = ['==', '!=', '<', '>', '<=', '>='];
|
||||
|
||||
MATH = ['*', '/', '%'];
|
||||
|
||||
RELATION = ['IN', 'OF', 'INSTANCEOF'];
|
||||
|
||||
BOOL = ['TRUE', 'FALSE'];
|
||||
|
||||
NOT_REGEX = ['NUMBER', 'REGEX', 'BOOL', 'NULL', 'UNDEFINED', '++', '--', ']'];
|
||||
|
||||
NOT_SPACED_REGEX = NOT_REGEX.concat(')', '}', 'THIS', 'IDENTIFIER', 'STRING');
|
||||
|
||||
CALLABLE = ['IDENTIFIER', 'STRING', 'REGEX', ')', ']', '}', '?', '::', '@', 'THIS', 'SUPER'];
|
||||
|
||||
INDEXABLE = CALLABLE.concat('NUMBER', 'BOOL', 'NULL', 'UNDEFINED');
|
||||
|
||||
LINE_BREAK = ['INDENT', 'OUTDENT', 'TERMINATOR'];
|
||||
|
||||
}).call(this);
|
2986
node_modules/piler/node_modules/coffee-script/lib/coffee-script/nodes.js
generated
vendored
Normal file
2986
node_modules/piler/node_modules/coffee-script/lib/coffee-script/nodes.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
138
node_modules/piler/node_modules/coffee-script/lib/coffee-script/optparse.js
generated
vendored
Normal file
138
node_modules/piler/node_modules/coffee-script/lib/coffee-script/optparse.js
generated
vendored
Normal file
@ -0,0 +1,138 @@
|
||||
// Generated by CoffeeScript 1.3.3
|
||||
(function() {
|
||||
var LONG_FLAG, MULTI_FLAG, OPTIONAL, OptionParser, SHORT_FLAG, buildRule, buildRules, normalizeArguments;
|
||||
|
||||
exports.OptionParser = OptionParser = (function() {
|
||||
|
||||
function OptionParser(rules, banner) {
|
||||
this.banner = banner;
|
||||
this.rules = buildRules(rules);
|
||||
}
|
||||
|
||||
OptionParser.prototype.parse = function(args) {
|
||||
var arg, i, isOption, matchedRule, options, originalArgs, pos, rule, seenNonOptionArg, skippingArgument, value, _i, _j, _len, _len1, _ref;
|
||||
options = {
|
||||
"arguments": []
|
||||
};
|
||||
skippingArgument = false;
|
||||
originalArgs = args;
|
||||
args = normalizeArguments(args);
|
||||
for (i = _i = 0, _len = args.length; _i < _len; i = ++_i) {
|
||||
arg = args[i];
|
||||
if (skippingArgument) {
|
||||
skippingArgument = false;
|
||||
continue;
|
||||
}
|
||||
if (arg === '--') {
|
||||
pos = originalArgs.indexOf('--');
|
||||
options["arguments"] = options["arguments"].concat(originalArgs.slice(pos + 1));
|
||||
break;
|
||||
}
|
||||
isOption = !!(arg.match(LONG_FLAG) || arg.match(SHORT_FLAG));
|
||||
seenNonOptionArg = options["arguments"].length > 0;
|
||||
if (!seenNonOptionArg) {
|
||||
matchedRule = false;
|
||||
_ref = this.rules;
|
||||
for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
|
||||
rule = _ref[_j];
|
||||
if (rule.shortFlag === arg || rule.longFlag === arg) {
|
||||
value = true;
|
||||
if (rule.hasArgument) {
|
||||
skippingArgument = true;
|
||||
value = args[i + 1];
|
||||
}
|
||||
options[rule.name] = rule.isList ? (options[rule.name] || []).concat(value) : value;
|
||||
matchedRule = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (isOption && !matchedRule) {
|
||||
throw new Error("unrecognized option: " + arg);
|
||||
}
|
||||
}
|
||||
if (seenNonOptionArg || !isOption) {
|
||||
options["arguments"].push(arg);
|
||||
}
|
||||
}
|
||||
return options;
|
||||
};
|
||||
|
||||
OptionParser.prototype.help = function() {
|
||||
var letPart, lines, rule, spaces, _i, _len, _ref;
|
||||
lines = [];
|
||||
if (this.banner) {
|
||||
lines.unshift("" + this.banner + "\n");
|
||||
}
|
||||
_ref = this.rules;
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
rule = _ref[_i];
|
||||
spaces = 15 - rule.longFlag.length;
|
||||
spaces = spaces > 0 ? Array(spaces + 1).join(' ') : '';
|
||||
letPart = rule.shortFlag ? rule.shortFlag + ', ' : ' ';
|
||||
lines.push(' ' + letPart + rule.longFlag + spaces + rule.description);
|
||||
}
|
||||
return "\n" + (lines.join('\n')) + "\n";
|
||||
};
|
||||
|
||||
return OptionParser;
|
||||
|
||||
})();
|
||||
|
||||
LONG_FLAG = /^(--\w[\w\-]*)/;
|
||||
|
||||
SHORT_FLAG = /^(-\w)$/;
|
||||
|
||||
MULTI_FLAG = /^-(\w{2,})/;
|
||||
|
||||
OPTIONAL = /\[(\w+(\*?))\]/;
|
||||
|
||||
buildRules = function(rules) {
|
||||
var tuple, _i, _len, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = rules.length; _i < _len; _i++) {
|
||||
tuple = rules[_i];
|
||||
if (tuple.length < 3) {
|
||||
tuple.unshift(null);
|
||||
}
|
||||
_results.push(buildRule.apply(null, tuple));
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
||||
buildRule = function(shortFlag, longFlag, description, options) {
|
||||
var match;
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
match = longFlag.match(OPTIONAL);
|
||||
longFlag = longFlag.match(LONG_FLAG)[1];
|
||||
return {
|
||||
name: longFlag.substr(2),
|
||||
shortFlag: shortFlag,
|
||||
longFlag: longFlag,
|
||||
description: description,
|
||||
hasArgument: !!(match && match[1]),
|
||||
isList: !!(match && match[2])
|
||||
};
|
||||
};
|
||||
|
||||
normalizeArguments = function(args) {
|
||||
var arg, l, match, result, _i, _j, _len, _len1, _ref;
|
||||
args = args.slice(0);
|
||||
result = [];
|
||||
for (_i = 0, _len = args.length; _i < _len; _i++) {
|
||||
arg = args[_i];
|
||||
if (match = arg.match(MULTI_FLAG)) {
|
||||
_ref = match[1].split('');
|
||||
for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
|
||||
l = _ref[_j];
|
||||
result.push('-' + l);
|
||||
}
|
||||
} else {
|
||||
result.push(arg);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
}).call(this);
|
683
node_modules/piler/node_modules/coffee-script/lib/coffee-script/parser.js
generated
vendored
Executable file
683
node_modules/piler/node_modules/coffee-script/lib/coffee-script/parser.js
generated
vendored
Executable file
File diff suppressed because one or more lines are too long
261
node_modules/piler/node_modules/coffee-script/lib/coffee-script/repl.js
generated
vendored
Normal file
261
node_modules/piler/node_modules/coffee-script/lib/coffee-script/repl.js
generated
vendored
Normal file
@ -0,0 +1,261 @@
|
||||
// Generated by CoffeeScript 1.3.3
|
||||
(function() {
|
||||
var ACCESSOR, CoffeeScript, Module, REPL_PROMPT, REPL_PROMPT_CONTINUATION, REPL_PROMPT_MULTILINE, SIMPLEVAR, Script, autocomplete, backlog, completeAttribute, completeVariable, enableColours, error, getCompletions, inspect, multilineMode, pipedInput, readline, repl, run, stdin, stdout;
|
||||
|
||||
stdin = process.openStdin();
|
||||
|
||||
stdout = process.stdout;
|
||||
|
||||
CoffeeScript = require('./coffee-script');
|
||||
|
||||
readline = require('readline');
|
||||
|
||||
inspect = require('util').inspect;
|
||||
|
||||
Script = require('vm').Script;
|
||||
|
||||
Module = require('module');
|
||||
|
||||
REPL_PROMPT = 'coffee> ';
|
||||
|
||||
REPL_PROMPT_MULTILINE = '------> ';
|
||||
|
||||
REPL_PROMPT_CONTINUATION = '......> ';
|
||||
|
||||
enableColours = false;
|
||||
|
||||
if (process.platform !== 'win32') {
|
||||
enableColours = !process.env.NODE_DISABLE_COLORS;
|
||||
}
|
||||
|
||||
error = function(err) {
|
||||
return stdout.write((err.stack || err.toString()) + '\n');
|
||||
};
|
||||
|
||||
ACCESSOR = /\s*([\w\.]+)(?:\.(\w*))$/;
|
||||
|
||||
SIMPLEVAR = /(\w+)$/i;
|
||||
|
||||
autocomplete = function(text) {
|
||||
return completeAttribute(text) || completeVariable(text) || [[], text];
|
||||
};
|
||||
|
||||
completeAttribute = function(text) {
|
||||
var all, completions, key, match, obj, possibilities, prefix, val;
|
||||
if (match = text.match(ACCESSOR)) {
|
||||
all = match[0], obj = match[1], prefix = match[2];
|
||||
try {
|
||||
val = Script.runInThisContext(obj);
|
||||
} catch (error) {
|
||||
return;
|
||||
}
|
||||
val = Object(val);
|
||||
possibilities = Object.getOwnPropertyNames(val);
|
||||
for (key in val) {
|
||||
if (~possibilities.indexOf(val)) {
|
||||
possibilities.push(key);
|
||||
}
|
||||
}
|
||||
completions = getCompletions(prefix, possibilities);
|
||||
return [completions, prefix];
|
||||
}
|
||||
};
|
||||
|
||||
completeVariable = function(text) {
|
||||
var completions, free, keywords, possibilities, r, vars, _ref;
|
||||
free = (_ref = text.match(SIMPLEVAR)) != null ? _ref[1] : void 0;
|
||||
if (text === "") {
|
||||
free = "";
|
||||
}
|
||||
if (free != null) {
|
||||
vars = Script.runInThisContext('Object.getOwnPropertyNames(Object(this))');
|
||||
keywords = (function() {
|
||||
var _i, _len, _ref1, _results;
|
||||
_ref1 = CoffeeScript.RESERVED;
|
||||
_results = [];
|
||||
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
||||
r = _ref1[_i];
|
||||
if (r.slice(0, 2) !== '__') {
|
||||
_results.push(r);
|
||||
}
|
||||
}
|
||||
return _results;
|
||||
})();
|
||||
possibilities = vars.concat(keywords);
|
||||
completions = getCompletions(free, possibilities);
|
||||
return [completions, free];
|
||||
}
|
||||
};
|
||||
|
||||
getCompletions = function(prefix, candidates) {
|
||||
var el, _i, _len, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = candidates.length; _i < _len; _i++) {
|
||||
el = candidates[_i];
|
||||
if (el.indexOf(prefix) === 0) {
|
||||
_results.push(el);
|
||||
}
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
||||
process.on('uncaughtException', error);
|
||||
|
||||
backlog = '';
|
||||
|
||||
run = function(buffer) {
|
||||
var code, returnValue, _;
|
||||
buffer = buffer.replace(/(^|[\r\n]+)(\s*)##?(?:[^#\r\n][^\r\n]*|)($|[\r\n])/, "$1$2$3");
|
||||
buffer = buffer.replace(/[\r\n]+$/, "");
|
||||
if (multilineMode) {
|
||||
backlog += "" + buffer + "\n";
|
||||
repl.setPrompt(REPL_PROMPT_CONTINUATION);
|
||||
repl.prompt();
|
||||
return;
|
||||
}
|
||||
if (!buffer.toString().trim() && !backlog) {
|
||||
repl.prompt();
|
||||
return;
|
||||
}
|
||||
code = backlog += buffer;
|
||||
if (code[code.length - 1] === '\\') {
|
||||
backlog = "" + backlog.slice(0, -1) + "\n";
|
||||
repl.setPrompt(REPL_PROMPT_CONTINUATION);
|
||||
repl.prompt();
|
||||
return;
|
||||
}
|
||||
repl.setPrompt(REPL_PROMPT);
|
||||
backlog = '';
|
||||
try {
|
||||
_ = global._;
|
||||
returnValue = CoffeeScript["eval"]("_=(" + code + "\n)", {
|
||||
filename: 'repl',
|
||||
modulename: 'repl'
|
||||
});
|
||||
if (returnValue === void 0) {
|
||||
global._ = _;
|
||||
}
|
||||
repl.output.write("" + (inspect(returnValue, false, 2, enableColours)) + "\n");
|
||||
} catch (err) {
|
||||
error(err);
|
||||
}
|
||||
return repl.prompt();
|
||||
};
|
||||
|
||||
if (stdin.readable) {
|
||||
pipedInput = '';
|
||||
repl = {
|
||||
prompt: function() {
|
||||
return stdout.write(this._prompt);
|
||||
},
|
||||
setPrompt: function(p) {
|
||||
return this._prompt = p;
|
||||
},
|
||||
input: stdin,
|
||||
output: stdout,
|
||||
on: function() {}
|
||||
};
|
||||
stdin.on('data', function(chunk) {
|
||||
var line, lines, _i, _len, _ref;
|
||||
pipedInput += chunk;
|
||||
if (!/\n/.test(pipedInput)) {
|
||||
return;
|
||||
}
|
||||
lines = pipedInput.split("\n");
|
||||
pipedInput = lines[lines.length - 1];
|
||||
_ref = lines.slice(0, -1);
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
line = _ref[_i];
|
||||
if (!(line)) {
|
||||
continue;
|
||||
}
|
||||
stdout.write("" + line + "\n");
|
||||
run(line);
|
||||
}
|
||||
});
|
||||
stdin.on('end', function() {
|
||||
var line, _i, _len, _ref;
|
||||
_ref = pipedInput.trim().split("\n");
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
line = _ref[_i];
|
||||
if (!(line)) {
|
||||
continue;
|
||||
}
|
||||
stdout.write("" + line + "\n");
|
||||
run(line);
|
||||
}
|
||||
stdout.write('\n');
|
||||
return process.exit(0);
|
||||
});
|
||||
} else {
|
||||
if (readline.createInterface.length < 3) {
|
||||
repl = readline.createInterface(stdin, autocomplete);
|
||||
stdin.on('data', function(buffer) {
|
||||
return repl.write(buffer);
|
||||
});
|
||||
} else {
|
||||
repl = readline.createInterface(stdin, stdout, autocomplete);
|
||||
}
|
||||
}
|
||||
|
||||
multilineMode = false;
|
||||
|
||||
repl.input.on('keypress', function(char, key) {
|
||||
var cursorPos, newPrompt;
|
||||
if (!(key && key.ctrl && !key.meta && !key.shift && key.name === 'v')) {
|
||||
return;
|
||||
}
|
||||
cursorPos = repl.cursor;
|
||||
repl.output.cursorTo(0);
|
||||
repl.output.clearLine(1);
|
||||
multilineMode = !multilineMode;
|
||||
if (!multilineMode && backlog) {
|
||||
repl._line();
|
||||
}
|
||||
backlog = '';
|
||||
repl.setPrompt((newPrompt = multilineMode ? REPL_PROMPT_MULTILINE : REPL_PROMPT));
|
||||
repl.prompt();
|
||||
return repl.output.cursorTo(newPrompt.length + (repl.cursor = cursorPos));
|
||||
});
|
||||
|
||||
repl.input.on('keypress', function(char, key) {
|
||||
if (!(multilineMode && repl.line)) {
|
||||
return;
|
||||
}
|
||||
if (!(key && key.ctrl && !key.meta && !key.shift && key.name === 'd')) {
|
||||
return;
|
||||
}
|
||||
multilineMode = false;
|
||||
return repl._line();
|
||||
});
|
||||
|
||||
repl.on('attemptClose', function() {
|
||||
if (multilineMode) {
|
||||
multilineMode = false;
|
||||
repl.output.cursorTo(0);
|
||||
repl.output.clearLine(1);
|
||||
repl._onLine(repl.line);
|
||||
return;
|
||||
}
|
||||
if (backlog) {
|
||||
backlog = '';
|
||||
repl.output.write('\n');
|
||||
repl.setPrompt(REPL_PROMPT);
|
||||
return repl.prompt();
|
||||
} else {
|
||||
return repl.close();
|
||||
}
|
||||
});
|
||||
|
||||
repl.on('close', function() {
|
||||
repl.output.write('\n');
|
||||
return repl.input.destroy();
|
||||
});
|
||||
|
||||
repl.on('line', run);
|
||||
|
||||
repl.setPrompt(REPL_PROMPT);
|
||||
|
||||
repl.prompt();
|
||||
|
||||
}).call(this);
|
349
node_modules/piler/node_modules/coffee-script/lib/coffee-script/rewriter.js
generated
vendored
Normal file
349
node_modules/piler/node_modules/coffee-script/lib/coffee-script/rewriter.js
generated
vendored
Normal file
@ -0,0 +1,349 @@
|
||||
// Generated by CoffeeScript 1.3.3
|
||||
(function() {
|
||||
var BALANCED_PAIRS, EXPRESSION_CLOSE, EXPRESSION_END, EXPRESSION_START, IMPLICIT_BLOCK, IMPLICIT_CALL, IMPLICIT_END, IMPLICIT_FUNC, IMPLICIT_UNSPACED_CALL, INVERSES, LINEBREAKS, SINGLE_CLOSERS, SINGLE_LINERS, left, rite, _i, _len, _ref,
|
||||
__indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
|
||||
__slice = [].slice;
|
||||
|
||||
exports.Rewriter = (function() {
|
||||
|
||||
function Rewriter() {}
|
||||
|
||||
Rewriter.prototype.rewrite = function(tokens) {
|
||||
this.tokens = tokens;
|
||||
this.removeLeadingNewlines();
|
||||
this.removeMidExpressionNewlines();
|
||||
this.closeOpenCalls();
|
||||
this.closeOpenIndexes();
|
||||
this.addImplicitIndentation();
|
||||
this.tagPostfixConditionals();
|
||||
this.addImplicitBraces();
|
||||
this.addImplicitParentheses();
|
||||
return this.tokens;
|
||||
};
|
||||
|
||||
Rewriter.prototype.scanTokens = function(block) {
|
||||
var i, token, tokens;
|
||||
tokens = this.tokens;
|
||||
i = 0;
|
||||
while (token = tokens[i]) {
|
||||
i += block.call(this, token, i, tokens);
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
Rewriter.prototype.detectEnd = function(i, condition, action) {
|
||||
var levels, token, tokens, _ref, _ref1;
|
||||
tokens = this.tokens;
|
||||
levels = 0;
|
||||
while (token = tokens[i]) {
|
||||
if (levels === 0 && condition.call(this, token, i)) {
|
||||
return action.call(this, token, i);
|
||||
}
|
||||
if (!token || levels < 0) {
|
||||
return action.call(this, token, i - 1);
|
||||
}
|
||||
if (_ref = token[0], __indexOf.call(EXPRESSION_START, _ref) >= 0) {
|
||||
levels += 1;
|
||||
} else if (_ref1 = token[0], __indexOf.call(EXPRESSION_END, _ref1) >= 0) {
|
||||
levels -= 1;
|
||||
}
|
||||
i += 1;
|
||||
}
|
||||
return i - 1;
|
||||
};
|
||||
|
||||
Rewriter.prototype.removeLeadingNewlines = function() {
|
||||
var i, tag, _i, _len, _ref;
|
||||
_ref = this.tokens;
|
||||
for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
|
||||
tag = _ref[i][0];
|
||||
if (tag !== 'TERMINATOR') {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i) {
|
||||
return this.tokens.splice(0, i);
|
||||
}
|
||||
};
|
||||
|
||||
Rewriter.prototype.removeMidExpressionNewlines = function() {
|
||||
return this.scanTokens(function(token, i, tokens) {
|
||||
var _ref;
|
||||
if (!(token[0] === 'TERMINATOR' && (_ref = this.tag(i + 1), __indexOf.call(EXPRESSION_CLOSE, _ref) >= 0))) {
|
||||
return 1;
|
||||
}
|
||||
tokens.splice(i, 1);
|
||||
return 0;
|
||||
});
|
||||
};
|
||||
|
||||
Rewriter.prototype.closeOpenCalls = function() {
|
||||
var action, condition;
|
||||
condition = function(token, i) {
|
||||
var _ref;
|
||||
return ((_ref = token[0]) === ')' || _ref === 'CALL_END') || token[0] === 'OUTDENT' && this.tag(i - 1) === ')';
|
||||
};
|
||||
action = function(token, i) {
|
||||
return this.tokens[token[0] === 'OUTDENT' ? i - 1 : i][0] = 'CALL_END';
|
||||
};
|
||||
return this.scanTokens(function(token, i) {
|
||||
if (token[0] === 'CALL_START') {
|
||||
this.detectEnd(i + 1, condition, action);
|
||||
}
|
||||
return 1;
|
||||
});
|
||||
};
|
||||
|
||||
Rewriter.prototype.closeOpenIndexes = function() {
|
||||
var action, condition;
|
||||
condition = function(token, i) {
|
||||
var _ref;
|
||||
return (_ref = token[0]) === ']' || _ref === 'INDEX_END';
|
||||
};
|
||||
action = function(token, i) {
|
||||
return token[0] = 'INDEX_END';
|
||||
};
|
||||
return this.scanTokens(function(token, i) {
|
||||
if (token[0] === 'INDEX_START') {
|
||||
this.detectEnd(i + 1, condition, action);
|
||||
}
|
||||
return 1;
|
||||
});
|
||||
};
|
||||
|
||||
Rewriter.prototype.addImplicitBraces = function() {
|
||||
var action, condition, sameLine, stack, start, startIndent, startIndex, startsLine;
|
||||
stack = [];
|
||||
start = null;
|
||||
startsLine = null;
|
||||
sameLine = true;
|
||||
startIndent = 0;
|
||||
startIndex = 0;
|
||||
condition = function(token, i) {
|
||||
var one, tag, three, two, _ref, _ref1;
|
||||
_ref = this.tokens.slice(i + 1, (i + 3) + 1 || 9e9), one = _ref[0], two = _ref[1], three = _ref[2];
|
||||
if ('HERECOMMENT' === (one != null ? one[0] : void 0)) {
|
||||
return false;
|
||||
}
|
||||
tag = token[0];
|
||||
if (__indexOf.call(LINEBREAKS, tag) >= 0) {
|
||||
sameLine = false;
|
||||
}
|
||||
return (((tag === 'TERMINATOR' || tag === 'OUTDENT') || (__indexOf.call(IMPLICIT_END, tag) >= 0 && sameLine && !(i - startIndex === 1))) && ((!startsLine && this.tag(i - 1) !== ',') || !((two != null ? two[0] : void 0) === ':' || (one != null ? one[0] : void 0) === '@' && (three != null ? three[0] : void 0) === ':'))) || (tag === ',' && one && ((_ref1 = one[0]) !== 'IDENTIFIER' && _ref1 !== 'NUMBER' && _ref1 !== 'STRING' && _ref1 !== '@' && _ref1 !== 'TERMINATOR' && _ref1 !== 'OUTDENT'));
|
||||
};
|
||||
action = function(token, i) {
|
||||
var tok;
|
||||
tok = this.generate('}', '}', token[2]);
|
||||
return this.tokens.splice(i, 0, tok);
|
||||
};
|
||||
return this.scanTokens(function(token, i, tokens) {
|
||||
var ago, idx, prevTag, tag, tok, value, _ref, _ref1;
|
||||
if (_ref = (tag = token[0]), __indexOf.call(EXPRESSION_START, _ref) >= 0) {
|
||||
stack.push([(tag === 'INDENT' && this.tag(i - 1) === '{' ? '{' : tag), i]);
|
||||
return 1;
|
||||
}
|
||||
if (__indexOf.call(EXPRESSION_END, tag) >= 0) {
|
||||
start = stack.pop();
|
||||
return 1;
|
||||
}
|
||||
if (!(tag === ':' && ((ago = this.tag(i - 2)) === ':' || ((_ref1 = stack[stack.length - 1]) != null ? _ref1[0] : void 0) !== '{'))) {
|
||||
return 1;
|
||||
}
|
||||
sameLine = true;
|
||||
startIndex = i + 1;
|
||||
stack.push(['{']);
|
||||
idx = ago === '@' ? i - 2 : i - 1;
|
||||
while (this.tag(idx - 2) === 'HERECOMMENT') {
|
||||
idx -= 2;
|
||||
}
|
||||
prevTag = this.tag(idx - 1);
|
||||
startsLine = !prevTag || (__indexOf.call(LINEBREAKS, prevTag) >= 0);
|
||||
value = new String('{');
|
||||
value.generated = true;
|
||||
tok = this.generate('{', value, token[2]);
|
||||
tokens.splice(idx, 0, tok);
|
||||
this.detectEnd(i + 2, condition, action);
|
||||
return 2;
|
||||
});
|
||||
};
|
||||
|
||||
Rewriter.prototype.addImplicitParentheses = function() {
|
||||
var action, condition, noCall, seenControl, seenSingle;
|
||||
noCall = seenSingle = seenControl = false;
|
||||
condition = function(token, i) {
|
||||
var post, tag, _ref, _ref1;
|
||||
tag = token[0];
|
||||
if (!seenSingle && token.fromThen) {
|
||||
return true;
|
||||
}
|
||||
if (tag === 'IF' || tag === 'ELSE' || tag === 'CATCH' || tag === '->' || tag === '=>' || tag === 'CLASS') {
|
||||
seenSingle = true;
|
||||
}
|
||||
if (tag === 'IF' || tag === 'ELSE' || tag === 'SWITCH' || tag === 'TRY' || tag === '=') {
|
||||
seenControl = true;
|
||||
}
|
||||
if ((tag === '.' || tag === '?.' || tag === '::') && this.tag(i - 1) === 'OUTDENT') {
|
||||
return true;
|
||||
}
|
||||
return !token.generated && this.tag(i - 1) !== ',' && (__indexOf.call(IMPLICIT_END, tag) >= 0 || (tag === 'INDENT' && !seenControl)) && (tag !== 'INDENT' || (((_ref = this.tag(i - 2)) !== 'CLASS' && _ref !== 'EXTENDS') && (_ref1 = this.tag(i - 1), __indexOf.call(IMPLICIT_BLOCK, _ref1) < 0) && !((post = this.tokens[i + 1]) && post.generated && post[0] === '{')));
|
||||
};
|
||||
action = function(token, i) {
|
||||
return this.tokens.splice(i, 0, this.generate('CALL_END', ')', token[2]));
|
||||
};
|
||||
return this.scanTokens(function(token, i, tokens) {
|
||||
var callObject, current, next, prev, tag, _ref, _ref1, _ref2;
|
||||
tag = token[0];
|
||||
if (tag === 'CLASS' || tag === 'IF' || tag === 'FOR' || tag === 'WHILE') {
|
||||
noCall = true;
|
||||
}
|
||||
_ref = tokens.slice(i - 1, (i + 1) + 1 || 9e9), prev = _ref[0], current = _ref[1], next = _ref[2];
|
||||
callObject = !noCall && tag === 'INDENT' && next && next.generated && next[0] === '{' && prev && (_ref1 = prev[0], __indexOf.call(IMPLICIT_FUNC, _ref1) >= 0);
|
||||
seenSingle = false;
|
||||
seenControl = false;
|
||||
if (__indexOf.call(LINEBREAKS, tag) >= 0) {
|
||||
noCall = false;
|
||||
}
|
||||
if (prev && !prev.spaced && tag === '?') {
|
||||
token.call = true;
|
||||
}
|
||||
if (token.fromThen) {
|
||||
return 1;
|
||||
}
|
||||
if (!(callObject || (prev != null ? prev.spaced : void 0) && (prev.call || (_ref2 = prev[0], __indexOf.call(IMPLICIT_FUNC, _ref2) >= 0)) && (__indexOf.call(IMPLICIT_CALL, tag) >= 0 || !(token.spaced || token.newLine) && __indexOf.call(IMPLICIT_UNSPACED_CALL, tag) >= 0))) {
|
||||
return 1;
|
||||
}
|
||||
tokens.splice(i, 0, this.generate('CALL_START', '(', token[2]));
|
||||
this.detectEnd(i + 1, condition, action);
|
||||
if (prev[0] === '?') {
|
||||
prev[0] = 'FUNC_EXIST';
|
||||
}
|
||||
return 2;
|
||||
});
|
||||
};
|
||||
|
||||
Rewriter.prototype.addImplicitIndentation = function() {
|
||||
var action, condition, indent, outdent, starter;
|
||||
starter = indent = outdent = null;
|
||||
condition = function(token, i) {
|
||||
var _ref;
|
||||
return token[1] !== ';' && (_ref = token[0], __indexOf.call(SINGLE_CLOSERS, _ref) >= 0) && !(token[0] === 'ELSE' && (starter !== 'IF' && starter !== 'THEN'));
|
||||
};
|
||||
action = function(token, i) {
|
||||
return this.tokens.splice((this.tag(i - 1) === ',' ? i - 1 : i), 0, outdent);
|
||||
};
|
||||
return this.scanTokens(function(token, i, tokens) {
|
||||
var tag, _ref, _ref1;
|
||||
tag = token[0];
|
||||
if (tag === 'TERMINATOR' && this.tag(i + 1) === 'THEN') {
|
||||
tokens.splice(i, 1);
|
||||
return 0;
|
||||
}
|
||||
if (tag === 'ELSE' && this.tag(i - 1) !== 'OUTDENT') {
|
||||
tokens.splice.apply(tokens, [i, 0].concat(__slice.call(this.indentation(token))));
|
||||
return 2;
|
||||
}
|
||||
if (tag === 'CATCH' && ((_ref = this.tag(i + 2)) === 'OUTDENT' || _ref === 'TERMINATOR' || _ref === 'FINALLY')) {
|
||||
tokens.splice.apply(tokens, [i + 2, 0].concat(__slice.call(this.indentation(token))));
|
||||
return 4;
|
||||
}
|
||||
if (__indexOf.call(SINGLE_LINERS, tag) >= 0 && this.tag(i + 1) !== 'INDENT' && !(tag === 'ELSE' && this.tag(i + 1) === 'IF')) {
|
||||
starter = tag;
|
||||
_ref1 = this.indentation(token, true), indent = _ref1[0], outdent = _ref1[1];
|
||||
if (starter === 'THEN') {
|
||||
indent.fromThen = true;
|
||||
}
|
||||
tokens.splice(i + 1, 0, indent);
|
||||
this.detectEnd(i + 2, condition, action);
|
||||
if (tag === 'THEN') {
|
||||
tokens.splice(i, 1);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
return 1;
|
||||
});
|
||||
};
|
||||
|
||||
Rewriter.prototype.tagPostfixConditionals = function() {
|
||||
var action, condition, original;
|
||||
original = null;
|
||||
condition = function(token, i) {
|
||||
var _ref;
|
||||
return (_ref = token[0]) === 'TERMINATOR' || _ref === 'INDENT';
|
||||
};
|
||||
action = function(token, i) {
|
||||
if (token[0] !== 'INDENT' || (token.generated && !token.fromThen)) {
|
||||
return original[0] = 'POST_' + original[0];
|
||||
}
|
||||
};
|
||||
return this.scanTokens(function(token, i) {
|
||||
if (token[0] !== 'IF') {
|
||||
return 1;
|
||||
}
|
||||
original = token;
|
||||
this.detectEnd(i + 1, condition, action);
|
||||
return 1;
|
||||
});
|
||||
};
|
||||
|
||||
Rewriter.prototype.indentation = function(token, implicit) {
|
||||
var indent, outdent;
|
||||
if (implicit == null) {
|
||||
implicit = false;
|
||||
}
|
||||
indent = ['INDENT', 2, token[2]];
|
||||
outdent = ['OUTDENT', 2, token[2]];
|
||||
if (implicit) {
|
||||
indent.generated = outdent.generated = true;
|
||||
}
|
||||
return [indent, outdent];
|
||||
};
|
||||
|
||||
Rewriter.prototype.generate = function(tag, value, line) {
|
||||
var tok;
|
||||
tok = [tag, value, line];
|
||||
tok.generated = true;
|
||||
return tok;
|
||||
};
|
||||
|
||||
Rewriter.prototype.tag = function(i) {
|
||||
var _ref;
|
||||
return (_ref = this.tokens[i]) != null ? _ref[0] : void 0;
|
||||
};
|
||||
|
||||
return Rewriter;
|
||||
|
||||
})();
|
||||
|
||||
BALANCED_PAIRS = [['(', ')'], ['[', ']'], ['{', '}'], ['INDENT', 'OUTDENT'], ['CALL_START', 'CALL_END'], ['PARAM_START', 'PARAM_END'], ['INDEX_START', 'INDEX_END']];
|
||||
|
||||
exports.INVERSES = INVERSES = {};
|
||||
|
||||
EXPRESSION_START = [];
|
||||
|
||||
EXPRESSION_END = [];
|
||||
|
||||
for (_i = 0, _len = BALANCED_PAIRS.length; _i < _len; _i++) {
|
||||
_ref = BALANCED_PAIRS[_i], left = _ref[0], rite = _ref[1];
|
||||
EXPRESSION_START.push(INVERSES[rite] = left);
|
||||
EXPRESSION_END.push(INVERSES[left] = rite);
|
||||
}
|
||||
|
||||
EXPRESSION_CLOSE = ['CATCH', 'WHEN', 'ELSE', 'FINALLY'].concat(EXPRESSION_END);
|
||||
|
||||
IMPLICIT_FUNC = ['IDENTIFIER', 'SUPER', ')', 'CALL_END', ']', 'INDEX_END', '@', 'THIS'];
|
||||
|
||||
IMPLICIT_CALL = ['IDENTIFIER', 'NUMBER', 'STRING', 'JS', 'REGEX', 'NEW', 'PARAM_START', 'CLASS', 'IF', 'TRY', 'SWITCH', 'THIS', 'BOOL', 'NULL', 'UNDEFINED', 'UNARY', 'SUPER', '@', '->', '=>', '[', '(', '{', '--', '++'];
|
||||
|
||||
IMPLICIT_UNSPACED_CALL = ['+', '-'];
|
||||
|
||||
IMPLICIT_BLOCK = ['->', '=>', '{', '[', ','];
|
||||
|
||||
IMPLICIT_END = ['POST_IF', 'FOR', 'WHILE', 'UNTIL', 'WHEN', 'BY', 'LOOP', 'TERMINATOR'];
|
||||
|
||||
SINGLE_LINERS = ['ELSE', '->', '=>', 'TRY', 'FINALLY', 'THEN'];
|
||||
|
||||
SINGLE_CLOSERS = ['TERMINATOR', 'CATCH', 'FINALLY', 'ELSE', 'OUTDENT', 'LEADING_WHEN'];
|
||||
|
||||
LINEBREAKS = ['TERMINATOR', 'INDENT', 'OUTDENT'];
|
||||
|
||||
}).call(this);
|
146
node_modules/piler/node_modules/coffee-script/lib/coffee-script/scope.js
generated
vendored
Normal file
146
node_modules/piler/node_modules/coffee-script/lib/coffee-script/scope.js
generated
vendored
Normal file
@ -0,0 +1,146 @@
|
||||
// Generated by CoffeeScript 1.3.3
|
||||
(function() {
|
||||
var Scope, extend, last, _ref;
|
||||
|
||||
_ref = require('./helpers'), extend = _ref.extend, last = _ref.last;
|
||||
|
||||
exports.Scope = Scope = (function() {
|
||||
|
||||
Scope.root = null;
|
||||
|
||||
function Scope(parent, expressions, method) {
|
||||
this.parent = parent;
|
||||
this.expressions = expressions;
|
||||
this.method = method;
|
||||
this.variables = [
|
||||
{
|
||||
name: 'arguments',
|
||||
type: 'arguments'
|
||||
}
|
||||
];
|
||||
this.positions = {};
|
||||
if (!this.parent) {
|
||||
Scope.root = this;
|
||||
}
|
||||
}
|
||||
|
||||
Scope.prototype.add = function(name, type, immediate) {
|
||||
if (this.shared && !immediate) {
|
||||
return this.parent.add(name, type, immediate);
|
||||
}
|
||||
if (Object.prototype.hasOwnProperty.call(this.positions, name)) {
|
||||
return this.variables[this.positions[name]].type = type;
|
||||
} else {
|
||||
return this.positions[name] = this.variables.push({
|
||||
name: name,
|
||||
type: type
|
||||
}) - 1;
|
||||
}
|
||||
};
|
||||
|
||||
Scope.prototype.namedMethod = function() {
|
||||
if (this.method.name || !this.parent) {
|
||||
return this.method;
|
||||
}
|
||||
return this.parent.namedMethod();
|
||||
};
|
||||
|
||||
Scope.prototype.find = function(name) {
|
||||
if (this.check(name)) {
|
||||
return true;
|
||||
}
|
||||
this.add(name, 'var');
|
||||
return false;
|
||||
};
|
||||
|
||||
Scope.prototype.parameter = function(name) {
|
||||
if (this.shared && this.parent.check(name, true)) {
|
||||
return;
|
||||
}
|
||||
return this.add(name, 'param');
|
||||
};
|
||||
|
||||
Scope.prototype.check = function(name) {
|
||||
var _ref1;
|
||||
return !!(this.type(name) || ((_ref1 = this.parent) != null ? _ref1.check(name) : void 0));
|
||||
};
|
||||
|
||||
Scope.prototype.temporary = function(name, index) {
|
||||
if (name.length > 1) {
|
||||
return '_' + name + (index > 1 ? index - 1 : '');
|
||||
} else {
|
||||
return '_' + (index + parseInt(name, 36)).toString(36).replace(/\d/g, 'a');
|
||||
}
|
||||
};
|
||||
|
||||
Scope.prototype.type = function(name) {
|
||||
var v, _i, _len, _ref1;
|
||||
_ref1 = this.variables;
|
||||
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
||||
v = _ref1[_i];
|
||||
if (v.name === name) {
|
||||
return v.type;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
Scope.prototype.freeVariable = function(name, reserve) {
|
||||
var index, temp;
|
||||
if (reserve == null) {
|
||||
reserve = true;
|
||||
}
|
||||
index = 0;
|
||||
while (this.check((temp = this.temporary(name, index)))) {
|
||||
index++;
|
||||
}
|
||||
if (reserve) {
|
||||
this.add(temp, 'var', true);
|
||||
}
|
||||
return temp;
|
||||
};
|
||||
|
||||
Scope.prototype.assign = function(name, value) {
|
||||
this.add(name, {
|
||||
value: value,
|
||||
assigned: true
|
||||
}, true);
|
||||
return this.hasAssignments = true;
|
||||
};
|
||||
|
||||
Scope.prototype.hasDeclarations = function() {
|
||||
return !!this.declaredVariables().length;
|
||||
};
|
||||
|
||||
Scope.prototype.declaredVariables = function() {
|
||||
var realVars, tempVars, v, _i, _len, _ref1;
|
||||
realVars = [];
|
||||
tempVars = [];
|
||||
_ref1 = this.variables;
|
||||
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
||||
v = _ref1[_i];
|
||||
if (v.type === 'var') {
|
||||
(v.name.charAt(0) === '_' ? tempVars : realVars).push(v.name);
|
||||
}
|
||||
}
|
||||
return realVars.sort().concat(tempVars.sort());
|
||||
};
|
||||
|
||||
Scope.prototype.assignedVariables = function() {
|
||||
var v, _i, _len, _ref1, _results;
|
||||
_ref1 = this.variables;
|
||||
_results = [];
|
||||
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
||||
v = _ref1[_i];
|
||||
if (v.type.assigned) {
|
||||
_results.push("" + v.name + " = " + v.type.value);
|
||||
}
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
||||
return Scope;
|
||||
|
||||
})();
|
||||
|
||||
}).call(this);
|
49
node_modules/piler/node_modules/coffee-script/package.json
generated
vendored
Normal file
49
node_modules/piler/node_modules/coffee-script/package.json
generated
vendored
Normal file
@ -0,0 +1,49 @@
|
||||
{
|
||||
"name": "coffee-script",
|
||||
"description": "Unfancy JavaScript",
|
||||
"keywords": [
|
||||
"javascript",
|
||||
"language",
|
||||
"coffeescript",
|
||||
"compiler"
|
||||
],
|
||||
"author": {
|
||||
"name": "Jeremy Ashkenas"
|
||||
},
|
||||
"version": "1.3.3",
|
||||
"licenses": [
|
||||
{
|
||||
"type": "MIT",
|
||||
"url": "https://raw.github.com/jashkenas/coffee-script/master/LICENSE"
|
||||
}
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
},
|
||||
"directories": {
|
||||
"lib": "./lib/coffee-script"
|
||||
},
|
||||
"main": "./lib/coffee-script/coffee-script",
|
||||
"bin": {
|
||||
"coffee": "./bin/coffee",
|
||||
"cake": "./bin/cake"
|
||||
},
|
||||
"homepage": "http://coffeescript.org",
|
||||
"bugs": "https://github.com/jashkenas/coffee-script/issues",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/jashkenas/coffee-script.git"
|
||||
},
|
||||
"devDependencies": {
|
||||
"uglify-js": ">=1.0.0",
|
||||
"jison": ">=0.2.0"
|
||||
},
|
||||
"readme": "\n {\n } } {\n { { } }\n } }{ {\n { }{ } } _____ __ __\n ( }{ }{ { ) / ____| / _|/ _|\n .- { { } { }} -. | | ___ | |_| |_ ___ ___\n ( ( } { } { } } ) | | / _ \\| _| _/ _ \\/ _ \\\n |`-..________ ..-'| | |___| (_) | | | || __/ __/\n | | \\_____\\___/|_| |_| \\___|\\___|\n | ;--.\n | (__ \\ _____ _ _\n | | ) ) / ____| (_) | |\n | |/ / | (___ ___ _ __ _ _ __ | |_\n | ( / \\___ \\ / __| '__| | '_ \\| __|\n | |/ ____) | (__| | | | |_) | |_\n | | |_____/ \\___|_| |_| .__/ \\__|\n `-.._________..-' | |\n |_|\n\n\n CoffeeScript is a little language that compiles into JavaScript.\n\n Install Node.js, and then the CoffeeScript compiler:\n sudo bin/cake install\n\n Or, if you have the Node Package Manager installed:\n npm install -g coffee-script\n (Leave off the -g if you don't wish to install globally.)\n\n Execute a script:\n coffee /path/to/script.coffee\n\n Compile a script:\n coffee -c /path/to/script.coffee\n\n For documentation, usage, and examples, see:\n http://coffeescript.org/\n\n To suggest a feature, report a bug, or general discussion:\n http://github.com/jashkenas/coffee-script/issues/\n\n If you'd like to chat, drop by #coffeescript on Freenode IRC,\n or on webchat.freenode.net.\n\n The source repository:\n git://github.com/jashkenas/coffee-script.git\n\n All contributors are listed here:\n http://github.com/jashkenas/coffee-script/contributors\n",
|
||||
"readmeFilename": "README",
|
||||
"_id": "coffee-script@1.3.3",
|
||||
"dist": {
|
||||
"shasum": "06861ab76fc76d42a86779b5f7aaae936eed8480"
|
||||
},
|
||||
"_from": "coffee-script@1.3.x",
|
||||
"_resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz"
|
||||
}
|
35
node_modules/piler/node_modules/csso/GNUmakefile
generated
vendored
Normal file
35
node_modules/piler/node_modules/csso/GNUmakefile
generated
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
.PHONY: test web shared node
|
||||
|
||||
node:
|
||||
@make shared
|
||||
@cat src/parser.node.js >> .parser.js
|
||||
@mv .parser.js lib/parser.js
|
||||
@cat src/compressor.node.js >> .compressor.js
|
||||
@mv .compressor.js lib/compressor.js
|
||||
@cat src/util.node.js >> .util.js
|
||||
@mv .util.js lib/util.js
|
||||
@cat src/translator.node.js >> .translator.js
|
||||
@mv .translator.js lib/translator.js
|
||||
|
||||
shared:
|
||||
@pecode src/csso.pecode > .parser.js
|
||||
@cat src/csso.other.js >> .parser.js
|
||||
@cat src/trbl.js > .compressor.js
|
||||
@cat src/compressor.shared.js >> .compressor.js
|
||||
@cat src/util.shared.js > .util.js
|
||||
@cat src/translator.shared.js > .translator.js
|
||||
|
||||
test:
|
||||
@node test/test.js
|
||||
|
||||
web:
|
||||
@make shared
|
||||
@cat .util.js > web/csso.web.js
|
||||
@rm .util.js
|
||||
@cat .parser.js >> web/csso.web.js
|
||||
@rm .parser.js
|
||||
@cat src/compressor.web.js >> web/csso.web.js
|
||||
@cat .compressor.js >> web/csso.web.js
|
||||
@rm .compressor.js
|
||||
@cat .translator.js >> web/csso.web.js
|
||||
@rm .translator.js
|
619
node_modules/piler/node_modules/csso/MANUAL.en.md
generated
vendored
Normal file
619
node_modules/piler/node_modules/csso/MANUAL.en.md
generated
vendored
Normal file
@ -0,0 +1,619 @@
|
||||
# Table of contents
|
||||
|
||||
* 1\. Introduction
|
||||
* 2\. Minification
|
||||
* 2.1\. Basic transformations
|
||||
* 2.1.1\. Removal of whitespace
|
||||
* 2.1.2\. Removal of trailing ';'
|
||||
* 2.1.3\. Removal of comments
|
||||
* 2.1.4\. Removal of invalid @charset and @import declarations
|
||||
* 2.1.5\. Minification of color properties
|
||||
* 2.1.6\. Minification of 0
|
||||
* 2.1.7\. Minification of multi-line strings
|
||||
* 2.1.8\. Minification of the font-weight property
|
||||
* 2.2\. Structural optimization
|
||||
* 2.2.1\. Merging blocks with identical selectors
|
||||
* 2.2.2\. Merging blocks with idential properties
|
||||
* 2.2.3\. Removal of overridden properties
|
||||
* 2.2.3.1\. Removal of overridden shorthand properties
|
||||
* 2.2.4\. Removal of repeating selectors
|
||||
* 2.2.5\. Partial merging of blocks
|
||||
* 2.2.6\. Partial splitting of blocks
|
||||
* 2.2.7\. Removal of empty ruleset and at-rule
|
||||
* 2.2.8\. Minification of margin and padding properties
|
||||
* 3\. Recommendations
|
||||
* 3.1\. Length of selectors
|
||||
* 3.2\. Order of properties
|
||||
* 3.3\. Positioning of similar blocks
|
||||
* 3.4\. Using !important
|
||||
|
||||
# 1. Introduction
|
||||
|
||||
CSSO (CSS Optimizer) is a CSS minimizer unlike others. In addition to usual minification techniques it can perform structural optimization of CSS files, resulting in smaller file size compared to other minifiers.
|
||||
|
||||
This document describes the minification techniques we employ. If you are looking for an installation and usage guide, you can find it [here](https://github.com/afelix/csso/blob/master/README.md).
|
||||
|
||||
# 2. Minification
|
||||
|
||||
Minification is a process of transforming a CSS document into a smaller document without losses. The typical strategies of achieving this are:
|
||||
|
||||
* basic transformations, such as removal of unnecessary elements (e.g. trailing semicolons) or transforming the values into more compact representations (e.g. `0px` to `0`);
|
||||
* structural optimizations, such as removal of overridden properties or merging of blocks.
|
||||
|
||||
## 2.1. Basic transformations
|
||||
|
||||
### 2.1.1. Removal of whitespace
|
||||
|
||||
In some cases, whitespace characters (` `, `\n`, `\r`, `\t`, `\f`) are unnecessary and do not affect rendering.
|
||||
|
||||
* Before:
|
||||
|
||||
.test
|
||||
{
|
||||
margin-top: 1em;
|
||||
|
||||
margin-left : 2em;
|
||||
}
|
||||
* After:
|
||||
|
||||
.test{margin-top:1em;margin-left:2em}
|
||||
|
||||
The following examples are provided with whitespace left intact for better readability.
|
||||
|
||||
### 2.1.2. Removal of trailing ';'
|
||||
|
||||
The last semicolon in a block is not required and does not affect rendering.
|
||||
|
||||
* Before:
|
||||
|
||||
.test {
|
||||
margin-top: 1em;;
|
||||
}
|
||||
* After:
|
||||
|
||||
.test {
|
||||
margin-top: 1em
|
||||
}
|
||||
|
||||
### 2.1.3. Removal of comments
|
||||
|
||||
Comments do not affect rendering: \[[CSS 2.1 / 4.1.9 Comments](http://www.w3.org/TR/CSS21/syndata.html#comments)\].
|
||||
|
||||
* Before:
|
||||
|
||||
/* comment */
|
||||
|
||||
.test /* comment */ {
|
||||
/* comment */ margin-top: /* comment */ 1em;
|
||||
}
|
||||
* After:
|
||||
|
||||
.test {
|
||||
margin-top: 1em
|
||||
}
|
||||
|
||||
### 2.1.4. Removal of invalid @charset and @import declarations
|
||||
|
||||
According to the specification, `@charset` must be placed at the very beginning of the stylesheet: \[[CSS 2.1 / 4.4 CSS style sheet representation](http://www.w3.org/TR/CSS21/syndata.html#charset)\].
|
||||
|
||||
CSSO handles this rule in a slightly relaxed manner - we keep the `@charset` rule which immediately follows whitespace and comments in the beginning of the stylesheet.
|
||||
|
||||
Incorrectly placed `@import` rules are deleted according to \[[CSS 2.1 / 6.3 The @import rule](http://www.w3.org/TR/CSS21/cascade.html#at-import)\].
|
||||
|
||||
* Before:
|
||||
|
||||
/* comment */
|
||||
@charset 'UTF-8';
|
||||
@import "test0.css";
|
||||
@import "test1.css";
|
||||
@charset 'wrong';
|
||||
|
||||
h1 {
|
||||
color: red
|
||||
}
|
||||
|
||||
@import "wrong";
|
||||
* After:
|
||||
|
||||
@charset 'UTF-8';
|
||||
@import "test0.css";
|
||||
@import "test1.css";
|
||||
h1 {
|
||||
color: red
|
||||
}
|
||||
|
||||
### 2.1.5. Minification of color properties
|
||||
|
||||
Some color values are minimized according to \[[CSS 2.1 / 4.3.6 Colors](http://www.w3.org/TR/CSS21/syndata.html#color-units)\].
|
||||
|
||||
* Before:
|
||||
|
||||
.test {
|
||||
color: yellow;
|
||||
border-color: #c0c0c0;
|
||||
background: #ffffff;
|
||||
border-top-color: #f00;
|
||||
outline-color: rgb(0, 0, 0);
|
||||
}
|
||||
* After:
|
||||
|
||||
.test {
|
||||
color: #ff0;
|
||||
border-color: silver;
|
||||
background: #fff;
|
||||
border-top-color: red;
|
||||
outline-color: #000
|
||||
}
|
||||
|
||||
### 2.1.6. Minification of 0
|
||||
|
||||
In some cases, the numeric values can be compacted to `0` or even dropped.
|
||||
|
||||
The `0%` value is not being compacted to avoid the following situation: `rgb(100%, 100%, 0)`.
|
||||
|
||||
* Before:
|
||||
|
||||
.test {
|
||||
fakeprop: .0 0. 0.0 000 00.00 0px 0.1 0.1em 0.000em 00% 00.00% 010.00
|
||||
}
|
||||
* After:
|
||||
|
||||
.test {
|
||||
fakeprop: 0 0 0 0 0 0 .1 .1em 0 0% 0% 10
|
||||
}
|
||||
|
||||
### 2.1.7. Minification of multi-line strings
|
||||
|
||||
Multi-line strings are minified according to \[[CSS 2.1 / 4.3.7 Strings](http://www.w3.org/TR/CSS21/syndata.html#strings)\].
|
||||
|
||||
* Before:
|
||||
|
||||
.test[title="abc\
|
||||
def"] {
|
||||
background: url("foo/\
|
||||
bar")
|
||||
}
|
||||
* After:
|
||||
|
||||
.test[title="abcdef"] {
|
||||
background: url("foo/bar")
|
||||
}
|
||||
|
||||
### 2.1.8. Minification of the font-weight property
|
||||
|
||||
The `bold` and `normal` values of the `font-weight` property are minimized according to \[[CSS 2.1 / 15.6 Font boldness: the 'font-weight' property](http://www.w3.org/TR/CSS21/fonts.html#font-boldness)\].
|
||||
|
||||
* Before:
|
||||
|
||||
.test0 {
|
||||
font-weight: bold
|
||||
}
|
||||
|
||||
.test1 {
|
||||
font-weight: normal
|
||||
}
|
||||
* After:
|
||||
|
||||
.test0 {
|
||||
font-weight: 700
|
||||
}
|
||||
|
||||
.test1 {
|
||||
font-weight: 400
|
||||
}
|
||||
|
||||
## 2.2. Structural optimizations
|
||||
|
||||
### 2.2.1. Merging blocks with identical selectors
|
||||
|
||||
Adjacent blocks with identical selectors are merged.
|
||||
|
||||
* Before:
|
||||
|
||||
.test0 {
|
||||
margin: 0
|
||||
}
|
||||
|
||||
.test1 {
|
||||
border: none
|
||||
}
|
||||
|
||||
.test1 {
|
||||
background-color: green
|
||||
}
|
||||
|
||||
.test0 {
|
||||
padding: 0
|
||||
}
|
||||
* After:
|
||||
|
||||
.test0 {
|
||||
margin: 0
|
||||
}
|
||||
|
||||
.test1 {
|
||||
border: none;
|
||||
background-color: green
|
||||
}
|
||||
|
||||
.test0 {
|
||||
padding: 0
|
||||
}
|
||||
|
||||
### 2.2.2. Merging blocks with identical properties
|
||||
|
||||
Adjacent blocks with identical properties are merged.
|
||||
|
||||
* Before:
|
||||
|
||||
.test0 {
|
||||
margin: 0
|
||||
}
|
||||
|
||||
.test1 {
|
||||
border: none
|
||||
}
|
||||
|
||||
.test2 {
|
||||
border: none
|
||||
}
|
||||
|
||||
.test0 {
|
||||
padding: 0
|
||||
}
|
||||
* After:
|
||||
|
||||
.test0 {
|
||||
margin: 0
|
||||
}
|
||||
|
||||
.test1, .test2 {
|
||||
border: none
|
||||
}
|
||||
|
||||
.test0 {
|
||||
padding: 0
|
||||
}
|
||||
|
||||
### 2.2.3. Removal of overridden properties
|
||||
|
||||
Properties ignored by the browser can be removed using the following rules:
|
||||
|
||||
* the last property in a CSS rule is applied, if none of the properties have an `!important` declaration;
|
||||
* among `!important` properties, the last one is applied.
|
||||
|
||||
* Before:
|
||||
|
||||
.test {
|
||||
color: red;
|
||||
margin: 0;
|
||||
line-height: 3cm;
|
||||
color: green;
|
||||
}
|
||||
* After:
|
||||
|
||||
.test {
|
||||
margin: 0;
|
||||
line-height: 3cm;
|
||||
color: green
|
||||
}
|
||||
|
||||
#### 2.2.3.1. Removal of overridden shorthand properties
|
||||
|
||||
In case of `border`, `margin`, `padding`, `font` and `list-style` properties, the following removal rule will be applied: if the last property is a 'general' one (for example, `border`), then all preceding overridden properties will be removed (for example, `border-top-width` or `border-style`).
|
||||
|
||||
* Before:
|
||||
|
||||
.test {
|
||||
border-top-color: red;
|
||||
border-color: green
|
||||
}
|
||||
* After:
|
||||
|
||||
.test {
|
||||
border-color:green
|
||||
}
|
||||
|
||||
### 2.2.4. Removal of repeating selectors
|
||||
|
||||
Repeating selectors can be removed.
|
||||
|
||||
* Before:
|
||||
|
||||
.test, .test {
|
||||
color: red
|
||||
}
|
||||
* After:
|
||||
|
||||
.test {
|
||||
color: red
|
||||
}
|
||||
|
||||
### 2.2.5. Partial merging of blocks
|
||||
|
||||
Given two adjacent blocks where one of the blocks is a subset of the other one, the following optimization is possible:
|
||||
|
||||
* overlapping properties are removed from the source block;
|
||||
* the remaining properties of the source block are copied into a receiving block.
|
||||
|
||||
Minification will take place if character count of the properties to be copied is smaller than character count of the overlapping properties.
|
||||
|
||||
* Before:
|
||||
|
||||
.test0 {
|
||||
color: red
|
||||
}
|
||||
|
||||
.test1 {
|
||||
color: red;
|
||||
border: none
|
||||
}
|
||||
|
||||
.test2 {
|
||||
border: none
|
||||
}
|
||||
* After:
|
||||
|
||||
.test0, .test1 {
|
||||
color: red
|
||||
}
|
||||
|
||||
.test1, .test2 {
|
||||
border: none
|
||||
}
|
||||
|
||||
Minification won't take place if character count of the properties to be copied is larger than character count of the overlapping properties.
|
||||
|
||||
* Before:
|
||||
|
||||
.test0 {
|
||||
color: red
|
||||
}
|
||||
|
||||
.longlonglong {
|
||||
color: red;
|
||||
border: none
|
||||
}
|
||||
|
||||
.test1 {
|
||||
border: none
|
||||
}
|
||||
* After:
|
||||
|
||||
.test0 {
|
||||
color: red
|
||||
}
|
||||
|
||||
.longlonglong {
|
||||
color: red;
|
||||
border: none
|
||||
}
|
||||
|
||||
.test1 {
|
||||
border: none
|
||||
}
|
||||
|
||||
### 2.2.6. Partial splitting of blocks
|
||||
|
||||
If two adjacent blocks contain intersecting properties the following minification is possible:
|
||||
|
||||
* property intersection is determined;
|
||||
* a new block containing the intersection is created in between the two blocks.
|
||||
|
||||
Minification will take place if there's a gain in character count.
|
||||
|
||||
* Before:
|
||||
|
||||
.test0 {
|
||||
color: red;
|
||||
border: none;
|
||||
margin: 0
|
||||
}
|
||||
|
||||
.test1 {
|
||||
color: green;
|
||||
border: none;
|
||||
margin: 0
|
||||
}
|
||||
* After:
|
||||
|
||||
.test0 {
|
||||
color: red
|
||||
}
|
||||
|
||||
.test0, .test1 {
|
||||
border: none;
|
||||
margin: 0
|
||||
}
|
||||
|
||||
.test1 {
|
||||
color: green
|
||||
}
|
||||
|
||||
Minification won't take place if there's no gain in character count.
|
||||
|
||||
* Before:
|
||||
|
||||
.test0 {
|
||||
color: red;
|
||||
border: none;
|
||||
margin: 0
|
||||
}
|
||||
|
||||
.longlonglong {
|
||||
color: green;
|
||||
border: none;
|
||||
margin: 0
|
||||
}
|
||||
* After:
|
||||
|
||||
.test0 {
|
||||
color: red;
|
||||
border: none;
|
||||
margin: 0
|
||||
}
|
||||
|
||||
.longlonglong {
|
||||
color: green;
|
||||
border: none;
|
||||
margin: 0
|
||||
}
|
||||
|
||||
### 2.2.7. Removal of empty ruleset and at-rule
|
||||
|
||||
Empty ruleset and at-rule will be removed.
|
||||
|
||||
* Before:
|
||||
|
||||
.test {
|
||||
color: red
|
||||
}
|
||||
|
||||
.empty {}
|
||||
|
||||
@font-face {}
|
||||
|
||||
@media print {
|
||||
.empty {}
|
||||
}
|
||||
|
||||
.test {
|
||||
border: none
|
||||
}
|
||||
* After:
|
||||
|
||||
.test{color:red;border:none}
|
||||
|
||||
### 2.2.8. Minification of margin and padding properties
|
||||
|
||||
The `margin` and `padding` properties are minimized according to \[[CSS 2.1 / 8.3 Margin properties](http://www.w3.org/TR/CSS21/box.html#margin-properties)\] и \[[CSS 2.1 / 8.4 Padding properties](http://www.w3.org/TR/CSS21/box.html#padding-properties)\].
|
||||
|
||||
* Before:
|
||||
|
||||
.test0 {
|
||||
margin-top: 1em;
|
||||
margin-right: 2em;
|
||||
margin-bottom: 3em;
|
||||
margin-left: 4em;
|
||||
}
|
||||
|
||||
.test1 {
|
||||
margin: 1 2 3 2
|
||||
}
|
||||
|
||||
.test2 {
|
||||
margin: 1 2 1 2
|
||||
}
|
||||
|
||||
.test3 {
|
||||
margin: 1 1 1 1
|
||||
}
|
||||
|
||||
.test4 {
|
||||
margin: 1 1 1
|
||||
}
|
||||
|
||||
.test5 {
|
||||
margin: 1 1
|
||||
}
|
||||
* After:
|
||||
|
||||
.test0 {
|
||||
margin: 1em 2em 3em 4em
|
||||
}
|
||||
|
||||
.test1 {
|
||||
margin: 1 2 3
|
||||
}
|
||||
|
||||
.test2 {
|
||||
margin: 1 2
|
||||
}
|
||||
|
||||
.test3, .test4, .test5 {
|
||||
margin: 1
|
||||
}
|
||||
|
||||
# 3. Recommendations
|
||||
|
||||
Some stylesheets compress better than the others. Sometimes, one character difference can turn a well-compressible stylesheet to a very inconvenient one.
|
||||
|
||||
You can help the minimizer by following these recommendations.
|
||||
|
||||
## 3.1. Length of selectors
|
||||
|
||||
Shorter selectors are easier to re-group.
|
||||
|
||||
## 3.2. Order of properties
|
||||
|
||||
Stick to the same order of properties throughout the stylesheet - it will allow you to not use the guards. The less manual intervention there is, the easier it is for the minimizer to work optimally.
|
||||
|
||||
## 3.3. Positioning of similar blocks
|
||||
|
||||
Keep blocks with similar sets of properties close to each other.
|
||||
|
||||
Bad:
|
||||
|
||||
* Before:
|
||||
|
||||
.test0 {
|
||||
color: red
|
||||
}
|
||||
|
||||
.test1 {
|
||||
color: green
|
||||
}
|
||||
|
||||
.test2 {
|
||||
color: red
|
||||
}
|
||||
* After (53 characters):
|
||||
|
||||
.test0{color:red}.test1{color:green}.test2{color:red}
|
||||
|
||||
Good:
|
||||
|
||||
* Before:
|
||||
|
||||
.test1 {
|
||||
color: green
|
||||
}
|
||||
|
||||
.test0 {
|
||||
color: red
|
||||
}
|
||||
|
||||
.test2 {
|
||||
color: red
|
||||
}
|
||||
* After (43 characters):
|
||||
|
||||
.test1{color:green}.test0,.test2{color:red}
|
||||
|
||||
## 3.4. Using !important
|
||||
|
||||
It should go without saying that using the `!important` declaration harms minification performance.
|
||||
|
||||
Bad:
|
||||
|
||||
* Before:
|
||||
|
||||
.test {
|
||||
margin-left: 2px !important;
|
||||
margin: 1px;
|
||||
}
|
||||
* After (43 characters):
|
||||
|
||||
.test{margin-left:2px!important;margin:1px}
|
||||
|
||||
Good:
|
||||
|
||||
* Before:
|
||||
|
||||
.test {
|
||||
margin-left: 2px;
|
||||
margin: 1px;
|
||||
}
|
||||
* After (17 characters):
|
||||
|
||||
.test{margin:1px}
|
789
node_modules/piler/node_modules/csso/MANUAL.ru.md
generated
vendored
Normal file
789
node_modules/piler/node_modules/csso/MANUAL.ru.md
generated
vendored
Normal file
@ -0,0 +1,789 @@
|
||||
# Содержание
|
||||
|
||||
* 1\. Описание
|
||||
* 2\. Минимизация
|
||||
* 2.1\. Минимизация без изменения структуры
|
||||
* 2.1.1\. Удаление whitespace
|
||||
* 2.1.2\. Удаление концевых ';'
|
||||
* 2.1.3\. Удаление комментариев
|
||||
* 2.1.4\. Удаление неправильных @charset и @import
|
||||
* 2.1.5\. Минимизация цвета
|
||||
* 2.1.6\. Минимизация 0
|
||||
* 2.1.7\. Слияние многострочных строк в однострочные
|
||||
* 2.1.8\. Минимизация font-weight
|
||||
* 2.2\. Минимизация с изменением структуры
|
||||
* 2.2.1\. Слияние блоков с одинаковыми селекторами
|
||||
* 2.2.2\. Слияние блоков с одинаковыми свойствами
|
||||
* 2.2.3\. Удаление перекрываемых свойств
|
||||
* 2.2.3.1\. Удаление перекрываемых shorthand-свойств
|
||||
* 2.2.4\. Удаление повторяющихся селекторов
|
||||
* 2.2.5\. Частичное слияние блоков
|
||||
* 2.2.6\. Частичное разделение блоков
|
||||
* 2.2.7\. Удаление пустых ruleset и at-rule
|
||||
* 2.2.8\. Минимизация margin и padding
|
||||
* 2.2.9\. Специальная минимизация псевдоклассов
|
||||
* 2.2.9.1\. Сохранение группы
|
||||
* 2.2.9.2\. Минимизация общеподдерживаемых псевдоклассов
|
||||
* 2.2.9.3\. Минимизация :before и :after
|
||||
* 3\. Рекомендации
|
||||
* 3.1\. Длина селекторов
|
||||
* 3.2\. Порядок свойств
|
||||
* 3.3\. Расположение схожих блоков
|
||||
* 3.4\. Использование !important
|
||||
|
||||
# 1. Описание
|
||||
|
||||
CSSO (CSS Optimizer) является минимизатором CSS, выполняющим как минимизацию без изменения структуры, так и структурную минимизацию с целью получить как можно меньший текст.
|
||||
|
||||
Этот документ описывает минимизацию детально. Если вам нужна инструкция по установке, она находится [здесь](https://github.com/afelix/csso/blob/master/README.md).
|
||||
|
||||
# 2. Минимизация
|
||||
|
||||
Цель минимизации заключается в трансформации исходного CSS в CSS меньшего размера. Наиболее распространёнными стратегиями в достижении этой цели являются:
|
||||
|
||||
* минимизация без изменения структуры — удаление необязательных элементов (например, `;` у последнего свойства в блоке), сведение значений к меньшим по размеру (например, `0px` к `0`) и т.п.;
|
||||
* минимизация с изменением структуры — удаление перекрываемых свойств, полное или частичное слияние блоков.
|
||||
|
||||
## 2.1. Минимизация без изменения структуры
|
||||
|
||||
### 2.1.1. Удаление whitespace
|
||||
|
||||
В ряде случаев символы ряда whitespace (` `, `\n`, `\r`, `\t`, `\f`) являются необязательными и не влияют на результат применения таблицы стилей.
|
||||
|
||||
* Было:
|
||||
|
||||
.test
|
||||
{
|
||||
margin-top: 1em;
|
||||
|
||||
margin-left : 2em;
|
||||
}
|
||||
* Стало:
|
||||
|
||||
.test{margin-top:1em;margin-left:2em}
|
||||
|
||||
Для большего удобства чтения текст остальных примеров приводится с пробелами (переводом строки и т.п.).
|
||||
|
||||
### 2.1.2. Удаление концевых ';'
|
||||
|
||||
Символ `;`, завершающий перечисление свойств в блоке, является необязательным и не влияет на результат применения таблицы стилей.
|
||||
|
||||
* Было:
|
||||
|
||||
.test {
|
||||
margin-top: 1em;;
|
||||
}
|
||||
* Стало:
|
||||
|
||||
.test {
|
||||
margin-top: 1em
|
||||
}
|
||||
|
||||
### 2.1.3. Удаление комментариев
|
||||
|
||||
Комментарии не влияют на результат применения таблицы стилей: \[[CSS 2.1 / 4.1.9 Comments](http://www.w3.org/TR/CSS21/syndata.html#comments)\].
|
||||
|
||||
* Было:
|
||||
|
||||
/* comment */
|
||||
|
||||
.test /* comment */ {
|
||||
/* comment */ margin-top: /* comment */ 1em;
|
||||
}
|
||||
* Стало:
|
||||
|
||||
.test {
|
||||
margin-top: 1em
|
||||
}
|
||||
|
||||
### 2.1.4. Удаление неправильных @charset и @import
|
||||
|
||||
Единственно верным расположением `@charset` является начало текста: \[[CSS 2.1 / 4.4 CSS style sheet representation](http://www.w3.org/TR/CSS21/syndata.html#charset)\].
|
||||
|
||||
Однако CSSO позволяет обходиться с этим правилом достаточно вольно, т.к. оставляет первый после whitespace и комментариев `@charset`.
|
||||
|
||||
Правило `@import` на неправильном месте удаляется согласно \[[CSS 2.1 / 6.3 The @import rule](http://www.w3.org/TR/CSS21/cascade.html#at-import)\].
|
||||
|
||||
* Было:
|
||||
|
||||
/* comment */
|
||||
@charset 'UTF-8';
|
||||
@import "test0.css";
|
||||
@import "test1.css";
|
||||
@charset 'wrong';
|
||||
|
||||
h1 {
|
||||
color: red
|
||||
}
|
||||
|
||||
@import "wrong";
|
||||
* Стало:
|
||||
|
||||
@charset 'UTF-8';
|
||||
@import "test0.css";
|
||||
@import "test1.css";
|
||||
h1 {
|
||||
color: red
|
||||
}
|
||||
|
||||
### 2.1.5. Минимизация цвета
|
||||
|
||||
Некоторые значения цвета минимизируются согласно \[[CSS 2.1 / 4.3.6 Colors](http://www.w3.org/TR/CSS21/syndata.html#color-units)\].
|
||||
|
||||
* Было:
|
||||
|
||||
.test {
|
||||
color: yellow;
|
||||
border-color: #c0c0c0;
|
||||
background: #ffffff;
|
||||
border-top-color: #f00;
|
||||
outline-color: rgb(0, 0, 0);
|
||||
}
|
||||
* Стало:
|
||||
|
||||
.test {
|
||||
color: #ff0;
|
||||
border-color: silver;
|
||||
background: #fff;
|
||||
border-top-color: red;
|
||||
outline-color: #000
|
||||
}
|
||||
|
||||
### 2.1.6. Минимизация 0
|
||||
|
||||
В ряде случаев числовое значение можно сократить до `0` или же отбросить `0`.
|
||||
|
||||
Значения `0%` не сокращаются до `0`, чтобы избежать ошибок вида `rgb(100%, 100%, 0)`.
|
||||
|
||||
* Было:
|
||||
|
||||
.test {
|
||||
fakeprop: .0 0. 0.0 000 00.00 0px 0.1 0.1em 0.000em 00% 00.00% 010.00
|
||||
}
|
||||
* Стало:
|
||||
|
||||
.test {
|
||||
fakeprop: 0 0 0 0 0 0 .1 .1em 0 0% 0% 10
|
||||
}
|
||||
|
||||
### 2.1.7. Слияние многострочных строк в однострочные
|
||||
|
||||
Многострочные строки минимизируются согласно \[[CSS 2.1 / 4.3.7 Strings](http://www.w3.org/TR/CSS21/syndata.html#strings)\].
|
||||
|
||||
* Было:
|
||||
|
||||
.test[title="abc\
|
||||
def"] {
|
||||
background: url("foo/\
|
||||
bar")
|
||||
}
|
||||
* Стало:
|
||||
|
||||
.test[title="abcdef"] {
|
||||
background: url("foo/bar")
|
||||
}
|
||||
|
||||
### 2.1.8. Минимизация font-weight
|
||||
|
||||
Значения `bold` и `normal` свойства `font-weight` минимизируются согласно \[[CSS 2.1 / 15.6 Font boldness: the 'font-weight' property](http://www.w3.org/TR/CSS21/fonts.html#font-boldness)\].
|
||||
|
||||
* Было:
|
||||
|
||||
.test0 {
|
||||
font-weight: bold
|
||||
}
|
||||
|
||||
.test1 {
|
||||
font-weight: normal
|
||||
}
|
||||
* Стало:
|
||||
|
||||
.test0 {
|
||||
font-weight: 700
|
||||
}
|
||||
|
||||
.test1 {
|
||||
font-weight: 400
|
||||
}
|
||||
|
||||
## 2.2. Минимизация с изменением структуры
|
||||
|
||||
### 2.2.1. Слияние блоков с одинаковыми селекторами
|
||||
|
||||
В один блок сливаются соседние блоки с одинаковым набором селекторов.
|
||||
|
||||
* Было:
|
||||
|
||||
.test0 {
|
||||
margin: 0
|
||||
}
|
||||
|
||||
.test1 {
|
||||
border: none
|
||||
}
|
||||
|
||||
.test1 {
|
||||
background-color: green
|
||||
}
|
||||
|
||||
.test0 {
|
||||
padding: 0
|
||||
}
|
||||
* Стало:
|
||||
|
||||
.test0 {
|
||||
margin: 0
|
||||
}
|
||||
|
||||
.test1 {
|
||||
border: none;
|
||||
background-color: green
|
||||
}
|
||||
|
||||
.test0 {
|
||||
padding: 0
|
||||
}
|
||||
|
||||
### 2.2.2. Слияние блоков с одинаковыми свойствами
|
||||
|
||||
В один блок сливаются соседние блоки с одинаковым набором свойств.
|
||||
|
||||
* Было:
|
||||
|
||||
.test0 {
|
||||
margin: 0
|
||||
}
|
||||
|
||||
.test1 {
|
||||
border: none
|
||||
}
|
||||
|
||||
.test2 {
|
||||
border: none
|
||||
}
|
||||
|
||||
.test0 {
|
||||
padding: 0
|
||||
}
|
||||
* Стало:
|
||||
|
||||
.test0 {
|
||||
margin: 0
|
||||
}
|
||||
|
||||
.test1, .test2 {
|
||||
border: none
|
||||
}
|
||||
|
||||
.test0 {
|
||||
padding: 0
|
||||
}
|
||||
|
||||
### 2.2.3. Удаление перекрываемых свойств
|
||||
|
||||
Минимизация удалением перекрываемых свойств основана на том, что внутри блока применяется:
|
||||
|
||||
* последнее по порядку свойство, если все свойства не `!important`;
|
||||
* последнее по порядку свойство `!important`.
|
||||
|
||||
Это позволяет избавиться от всех игнорируемых браузером свойств.
|
||||
|
||||
* Было:
|
||||
|
||||
.test {
|
||||
color: red;
|
||||
margin: 0;
|
||||
line-height: 3cm;
|
||||
color: green;
|
||||
}
|
||||
* Стало:
|
||||
|
||||
.test {
|
||||
margin: 0;
|
||||
line-height: 3cm;
|
||||
color: green
|
||||
}
|
||||
|
||||
#### 2.2.3.1. Удаление перекрываемых shorthand свойств
|
||||
|
||||
Для свойств `border`, `margin`, `padding`, `font` и `list-style` используется следующий алгоритм удаления: если последним по порядку свойством является более 'широкое' свойство (например, `border`), то все предыдущие перекрываемые им свойства удаляются (например, `border-top-width` или `border-style`).
|
||||
|
||||
* Было:
|
||||
|
||||
.test {
|
||||
border-top-color: red;
|
||||
border-color: green
|
||||
}
|
||||
* Стало:
|
||||
|
||||
.test {
|
||||
border-color:green
|
||||
}
|
||||
|
||||
### 2.2.4. Удаление повторяющихся селекторов
|
||||
|
||||
Повторяющиеся селекторы излишни и потому могут быть удалены.
|
||||
|
||||
* Было:
|
||||
|
||||
.test, .test {
|
||||
color: red
|
||||
}
|
||||
* Стало:
|
||||
|
||||
.test {
|
||||
color: red
|
||||
}
|
||||
|
||||
### 2.2.5. Частичное слияние блоков
|
||||
|
||||
Если рядом расположены блоки, один из которых набором свойств полностью входит в другой, возможна следующая минимизация:
|
||||
|
||||
* в исходном (наибольшем) блоке удаляется пересекающийся набор свойств;
|
||||
* селекторы исходного блока копируются в принимающий блок.
|
||||
|
||||
Если в символах размер копируемых селекторов меньше размера пересекающегося набора свойств, минимизация происходит.
|
||||
|
||||
* Было:
|
||||
|
||||
.test0 {
|
||||
color: red
|
||||
}
|
||||
|
||||
.test1 {
|
||||
color: red;
|
||||
border: none
|
||||
}
|
||||
|
||||
.test2 {
|
||||
border: none
|
||||
}
|
||||
* Стало:
|
||||
|
||||
.test0, .test1 {
|
||||
color: red
|
||||
}
|
||||
|
||||
.test1, .test2 {
|
||||
border: none
|
||||
}
|
||||
|
||||
Если в символах размер копируемых селекторов больше размера пересекающегося набора свойств, минимизация не происходит.
|
||||
|
||||
* Было:
|
||||
|
||||
.test0 {
|
||||
color: red
|
||||
}
|
||||
|
||||
.longlonglong {
|
||||
color: red;
|
||||
border: none
|
||||
}
|
||||
|
||||
.test1 {
|
||||
border: none
|
||||
}
|
||||
* Стало:
|
||||
|
||||
.test0 {
|
||||
color: red
|
||||
}
|
||||
|
||||
.longlonglong {
|
||||
color: red;
|
||||
border: none
|
||||
}
|
||||
|
||||
.test1 {
|
||||
border: none
|
||||
}
|
||||
|
||||
### 2.2.6. Частичное разделение блоков
|
||||
|
||||
Если рядом расположены блоки, частично пересекающиеся набором свойств, возможна следующая минимизация:
|
||||
|
||||
* из обоих блоков выделяется пересекающийся набор свойств;
|
||||
* между блоками создаётся новый блок с выделенным набором свойств и с селекторами обоих блоков.
|
||||
|
||||
Если в символах размер копируемых селекторов меньше размера пересекающегося набора свойств, минимизация происходит.
|
||||
|
||||
* Было:
|
||||
|
||||
.test0 {
|
||||
color: red;
|
||||
border: none;
|
||||
margin: 0
|
||||
}
|
||||
|
||||
.test1 {
|
||||
color: green;
|
||||
border: none;
|
||||
margin: 0
|
||||
}
|
||||
* Стало:
|
||||
|
||||
.test0 {
|
||||
color: red
|
||||
}
|
||||
|
||||
.test0, .test1 {
|
||||
border: none;
|
||||
margin: 0
|
||||
}
|
||||
|
||||
.test1 {
|
||||
color: green
|
||||
}
|
||||
|
||||
Если в символах размер копируемых селекторов больше размера пересекающегося набора свойств, минимизация не происходит.
|
||||
|
||||
* Было:
|
||||
|
||||
.test0 {
|
||||
color: red;
|
||||
border: none;
|
||||
margin: 0
|
||||
}
|
||||
|
||||
.longlonglong {
|
||||
color: green;
|
||||
border: none;
|
||||
margin: 0
|
||||
}
|
||||
* Стало:
|
||||
|
||||
.test0 {
|
||||
color: red;
|
||||
border: none;
|
||||
margin: 0
|
||||
}
|
||||
|
||||
.longlonglong {
|
||||
color: green;
|
||||
border: none;
|
||||
margin: 0
|
||||
}
|
||||
|
||||
### 2.2.7. Удаление пустых ruleset и at-rule
|
||||
|
||||
Пустые ruleset и at-rule удаляются.
|
||||
|
||||
* Было:
|
||||
|
||||
.test {
|
||||
color: red
|
||||
}
|
||||
|
||||
.empty {}
|
||||
|
||||
@font-face {}
|
||||
|
||||
@media print {
|
||||
.empty {}
|
||||
}
|
||||
|
||||
.test {
|
||||
border: none
|
||||
}
|
||||
* Стало:
|
||||
|
||||
.test{color:red;border:none}
|
||||
|
||||
### 2.2.8. Минимизация margin и padding
|
||||
|
||||
Свойства `margin` и `padding` минимизируются согласно \[[CSS 2.1 / 8.3 Margin properties](http://www.w3.org/TR/CSS21/box.html#margin-properties)\] и \[[CSS 2.1 / 8.4 Padding properties](http://www.w3.org/TR/CSS21/box.html#padding-properties)\].
|
||||
|
||||
* Было:
|
||||
|
||||
.test0 {
|
||||
margin-top: 1em;
|
||||
margin-right: 2em;
|
||||
margin-bottom: 3em;
|
||||
margin-left: 4em;
|
||||
}
|
||||
|
||||
.test1 {
|
||||
margin: 1 2 3 2
|
||||
}
|
||||
|
||||
.test2 {
|
||||
margin: 1 2 1 2
|
||||
}
|
||||
|
||||
.test3 {
|
||||
margin: 1 1 1 1
|
||||
}
|
||||
|
||||
.test4 {
|
||||
margin: 1 1 1
|
||||
}
|
||||
|
||||
.test5 {
|
||||
margin: 1 1
|
||||
}
|
||||
* Стало:
|
||||
|
||||
.test0 {
|
||||
margin: 1em 2em 3em 4em
|
||||
}
|
||||
|
||||
.test1 {
|
||||
margin: 1 2 3
|
||||
}
|
||||
|
||||
.test2 {
|
||||
margin: 1 2
|
||||
}
|
||||
|
||||
.test3, .test4, .test5 {
|
||||
margin: 1
|
||||
}
|
||||
|
||||
Минимизация не происходит в случаях, когда один набор `selector X / shorthands` прерывается другим набором `selector Y / shorthands`.
|
||||
|
||||
* Было:
|
||||
|
||||
.test1 {
|
||||
margin-top: 0
|
||||
}
|
||||
|
||||
.test2 {
|
||||
margin-top: 100px
|
||||
}
|
||||
|
||||
.test1 {
|
||||
margin-left: 0
|
||||
}
|
||||
|
||||
.test1 {
|
||||
margin-bottom: 0
|
||||
}
|
||||
|
||||
.test1 {
|
||||
margin-right: 0
|
||||
}
|
||||
* Стало:
|
||||
|
||||
.test1 {
|
||||
margin-top: 0
|
||||
}
|
||||
|
||||
.test2 {
|
||||
margin-top: 100px
|
||||
}
|
||||
|
||||
.test1 {
|
||||
margin-left: 0;
|
||||
margin-bottom: 0;
|
||||
margin-right: 0
|
||||
}
|
||||
|
||||
* Могло быть (неправильно):
|
||||
|
||||
.test2 {
|
||||
margin-top: 100px
|
||||
}
|
||||
|
||||
.test1 {
|
||||
margin: 0
|
||||
}
|
||||
|
||||
К сожалению, результат рендеринга последнего варианта отличается от рендеринга исходного стиля, потому такая минимизация недопустима.
|
||||
|
||||
### 2.2.9. Специальная минимизация псевдоклассов
|
||||
|
||||
Если в группе селекторов UA обнаружит неподдерживаемый селектор, он, согласно \[[CSS 3 / Selectors / 5. Groups of selectors](http://www.w3.org/TR/selectors/#grouping)\], посчитает неподдерживаемой всю группу и не применит стили к перечисленным в ней селекторам. Этим нередко пользуются для разграничения стилей по браузерам. Вот [пример](http://pornel.net/firefoxhack) метода:
|
||||
|
||||
#hackme, x:-moz-any-link { Firefox 2.0 here }
|
||||
#hackme, x:-moz-any-link, x:default { Firefox 3.0 and newer }
|
||||
|
||||
Чтобы сохранить такие блоки, но в то же время минимизировать то, что поддаётся оптимизации, CSSO применяет нижеперечисленные правила. Предполагается, что вместе эти правила составляют компромисс, удовлетворяющий большинство пользователей.
|
||||
|
||||
#### 2.2.9.1. Сохранение группы
|
||||
|
||||
В общем случае (исключения описаны ниже) минимизация удалением перекрываемого селектора не происходит, если группа селекторов включает псевдокласс или псевдоэлемент.
|
||||
|
||||
* Было:
|
||||
|
||||
a {
|
||||
property: value0
|
||||
}
|
||||
|
||||
a, x:-vendor-class {
|
||||
property: value1
|
||||
}
|
||||
* Стало (структура не изменилась):
|
||||
|
||||
a {
|
||||
property: value0
|
||||
}
|
||||
|
||||
a, x:-vendor-class {
|
||||
property: value1
|
||||
}
|
||||
|
||||
Если же группы селекторов образуют одинаковую "сигнатуру псевдоклассов" (исключается ситуация, в которой браузер поддерживает одну группу, но не поддерживает другую), минимизация происходит.
|
||||
|
||||
* Было:
|
||||
|
||||
a, x:-vendor-class {
|
||||
property: value0
|
||||
}
|
||||
|
||||
a, b, x:-vendor-class {
|
||||
property: value1
|
||||
}
|
||||
* Стало:
|
||||
|
||||
a, b, x:-vendor-class {
|
||||
property: value1
|
||||
}
|
||||
|
||||
#### 2.2.9.2. Минимизация общеподдерживаемых псевдоклассов и псевдоэлементов
|
||||
|
||||
Существуют псевдоклассы и псевдоэлементы, поддерживаемые большинством браузеров: `:link`, `:visited`, `:hover`, `:active`, `:first-letter`, `:first-line`. Для них минимизация происходит в общем порядке без сохранения группы.
|
||||
|
||||
* Было:
|
||||
|
||||
a, x:active {
|
||||
color: red
|
||||
}
|
||||
|
||||
a {
|
||||
color: green
|
||||
}
|
||||
* Стало:
|
||||
x:active {
|
||||
color: red
|
||||
}
|
||||
|
||||
a {
|
||||
color: green
|
||||
}
|
||||
|
||||
#### 2.2.9.3. Минимизация :before и :after
|
||||
|
||||
Псевдоэлементы `:before` и `:after` обычно поддерживаются браузерами парно, потому объединение блоков с их участием безопасно.
|
||||
|
||||
* Было:
|
||||
|
||||
a, x:before {
|
||||
color: red
|
||||
}
|
||||
|
||||
a, x:after {
|
||||
color: red
|
||||
}
|
||||
* Стало:
|
||||
|
||||
a, x:before, x:after {
|
||||
color:red
|
||||
}
|
||||
|
||||
Тем не менее, блоки, в которых участвует только один из этих псевдоэлементов, не объединяются:
|
||||
|
||||
* Было:
|
||||
|
||||
a {
|
||||
color: red
|
||||
}
|
||||
|
||||
a, x:after {
|
||||
color: red
|
||||
}
|
||||
* Стало:
|
||||
|
||||
a {
|
||||
color: red
|
||||
}
|
||||
|
||||
a, x:after {
|
||||
color: red
|
||||
}
|
||||
|
||||
В примере выше можно заметить, что удаление селектора `a` из второго блока не повлияло бы на итоговый рендеринг, но в общем случае это опасная минимизация, потому не применяется.
|
||||
|
||||
# 3. Рекомендации
|
||||
|
||||
С точки зрения минимизации таблицы стилей можно разделить на две группы: удобные и неудобные. Разница даже в один символ может превратить вполне сокращаемый исходный текст в минимально обрабатываемый.
|
||||
|
||||
Если вы хотите помочь минимизатору хорошо выполнить работу, следуйте рекомендациям.
|
||||
|
||||
## 3.1. Длина селекторов
|
||||
|
||||
Чем короче селектор (whitespace не учитываются), тем больше вероятность удачного группирования.
|
||||
|
||||
## 3.2. Порядок свойств
|
||||
|
||||
Придерживайтесь во всём CSS одного порядка, в котором перечисляются свойства, так вам не потребуется защита от смены порядка. Соответственно, меньше вероятность допустить ошибку и помешать минимизатору излишним управлением.
|
||||
|
||||
## 3.3. Расположение схожих блоков
|
||||
|
||||
Располагайте блоки со схожим набором свойств как можно ближе друг к другу.
|
||||
|
||||
Плохо:
|
||||
|
||||
* Было:
|
||||
|
||||
.test0 {
|
||||
color: red
|
||||
}
|
||||
|
||||
.test1 {
|
||||
color: green
|
||||
}
|
||||
|
||||
.test2 {
|
||||
color: red
|
||||
}
|
||||
* Стало (53 символа):
|
||||
|
||||
.test0{color:red}.test1{color:green}.test2{color:red}
|
||||
|
||||
Хорошо:
|
||||
|
||||
* Было:
|
||||
|
||||
.test1 {
|
||||
color: green
|
||||
}
|
||||
|
||||
.test0 {
|
||||
color: red
|
||||
}
|
||||
|
||||
.test2 {
|
||||
color: red
|
||||
}
|
||||
* Стало (43 символа):
|
||||
|
||||
.test1{color:green}.test0,.test2{color:red}
|
||||
|
||||
## 3.4. Использование !important
|
||||
|
||||
Очевидно, `!important` оказывает серьёзное влияние на минимизацию, особенно заметно это может отразиться на минимизации `margin` и `padding`, потому им лучше не злоупотреблять.
|
||||
|
||||
Плохо:
|
||||
|
||||
* Было:
|
||||
|
||||
.test {
|
||||
margin-left: 2px !important;
|
||||
margin: 1px;
|
||||
}
|
||||
* Стало (43 символа):
|
||||
|
||||
.test{margin-left:2px!important;margin:1px}
|
||||
|
||||
Хорошо:
|
||||
|
||||
* Было:
|
||||
|
||||
.test {
|
||||
margin-left: 2px;
|
||||
margin: 1px;
|
||||
}
|
||||
* Стало (17 символов):
|
||||
|
||||
.test{margin:1px}
|
19
node_modules/piler/node_modules/csso/MIT-LICENSE.txt
generated
vendored
Normal file
19
node_modules/piler/node_modules/csso/MIT-LICENSE.txt
generated
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
Copyright (C) 2011 by Sergey Kryzhanovsky
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
139
node_modules/piler/node_modules/csso/README.md
generated
vendored
Normal file
139
node_modules/piler/node_modules/csso/README.md
generated
vendored
Normal file
@ -0,0 +1,139 @@
|
||||
# 1. Introduction
|
||||
|
||||
CSSO (CSS Optimizer) is a CSS minimizer unlike others. In addition to usual minification techniques it can perform structural optimization of CSS files, resulting in smaller file size compared to other minifiers.
|
||||
|
||||
This document describes installation and usage of CSSO. If you want to learn more about the inner workings of CSSO, please consult the [manual] (https://github.com/css/csso/blob/master/MANUAL.en.md).
|
||||
|
||||
Please report issues on [Github] (https://github.com/css/csso/issues).
|
||||
|
||||
For feedback, suggestions, etc. write to <skryzhanovsky@ya.ru>.
|
||||
|
||||
# 2. Installation
|
||||
|
||||
## 2.1. Prerequisites
|
||||
|
||||
* for browser use: any OS and a modern web browser
|
||||
* for command line use: Linux / Mac OS X / any OS with working Node.js
|
||||
|
||||
## 2.2. Install using git
|
||||
|
||||
Prerequisites:
|
||||
|
||||
* git — [http://git-scm.com/](http://git-scm.com/)
|
||||
|
||||
To install:
|
||||
|
||||
* run `git clone git://github.com/css/csso.git`
|
||||
|
||||
## 2.3. Install using npm
|
||||
|
||||
Prerequisites:
|
||||
|
||||
* nodejs 0.4.x — [http://nodejs.org](http://nodejs.org)
|
||||
* npm — [http://github.com/isaacs/npm/](http://github.com/isaacs/npm/)
|
||||
|
||||
To install (global):
|
||||
|
||||
* run `npm install csso -g`
|
||||
|
||||
To update:
|
||||
|
||||
* run `npm update csso`
|
||||
|
||||
To uninstall:
|
||||
|
||||
* run `npm uninstall csso`
|
||||
|
||||
# 3. Usage
|
||||
|
||||
## 3.1. In the browser
|
||||
|
||||
Open `web/csso.html` or [http://css.github.com/csso/csso.html](http://css.github.com/csso/csso.html) in your browser.
|
||||
|
||||
**CSSO is not guaranteed to work in browsers. Preferred way to use this tool is to run it from the command line or via npm modules.**
|
||||
|
||||
## 3.2. As an npm module
|
||||
|
||||
Sample (`test.js`):
|
||||
|
||||
var csso = require('csso'),
|
||||
css = '.test, .test { color: rgb(255, 255, 255) }';
|
||||
|
||||
console.log(csso.justDoIt(css));
|
||||
Output (`> node test.js`):
|
||||
|
||||
.test{color:#fff}
|
||||
Use `csso.justDoIt(css, true)` to turn structure minimization off.
|
||||
|
||||
## 3.3. From the command line
|
||||
|
||||
Run `bin/csso` (when installed from git), you will need to have nodejs 0.4.x installed — [http://nodejs.org](http://nodejs.org)
|
||||
|
||||
Run `csso` (when installed from npm).
|
||||
|
||||
Usage:
|
||||
|
||||
csso
|
||||
shows usage information
|
||||
csso <filename>
|
||||
minimizes the CSS in <filename> and outputs the result to stdout
|
||||
csso <in_filename> <out_filename>
|
||||
csso -i <in_filename> -o <out_filename>
|
||||
csso --input <in_filename> --output <out_filename>
|
||||
minimizes the CSS in <in_filename> and outputs the result to <out_filename>
|
||||
csso -off
|
||||
csso --restructure-off
|
||||
turns structure minimization off
|
||||
csso -h
|
||||
csso --help
|
||||
shows usage information
|
||||
csso -v
|
||||
csso --version
|
||||
shows the version number
|
||||
|
||||
Example:
|
||||
|
||||
$ echo ".test { color: red; color: green }" > test.css
|
||||
$ csso test.css
|
||||
.test{color:green}
|
||||
|
||||
# 4. Minification (in a nutshell)
|
||||
|
||||
Safe transformations:
|
||||
|
||||
* Removal of whitespace
|
||||
* Removal of trailing `;`
|
||||
* Removal of comments
|
||||
* Removal of invalid `@charset` и `@import` declarations
|
||||
* Minification of color properties
|
||||
* Minification of `0`
|
||||
* Minification of multi-line strings
|
||||
* Minification of the `font-weight` property
|
||||
|
||||
Structural optimizations:
|
||||
|
||||
* Merging blocks with identical selectors
|
||||
* Merging blocks with identical properties
|
||||
* Removal of overridden properties
|
||||
* Removal of overridden shorthand properties
|
||||
* Removal of repeating selectors
|
||||
* Partial merging of blocks
|
||||
* Partial splitting of blocks
|
||||
* Removal of empty ruleset and at-rule
|
||||
* Minification of `margin` and `padding` properties
|
||||
|
||||
The minification techniques are described in detail in the [manual](https://github.com/css/csso/blob/master/MANUAL.en.md).
|
||||
|
||||
# 5. Authors
|
||||
|
||||
* initial idea — Vitaly Harisov (<vitaly@harisov.name>)
|
||||
* implementation — Sergey Kryzhanovsky (<skryzhanovsky@ya.ru>)
|
||||
* english translation — Leonid Khachaturov (leonidkhachaturov@gmail.com)
|
||||
|
||||
# 6. And finally
|
||||
|
||||
* CSSO is licensed under [MIT](https://github.com/css/csso/blob/master/MIT-LICENSE.txt)
|
||||
|
||||
<!-- Yandex.Metrika counter -->
|
||||
<img src="//mc.yandex.ru/watch/12831025" style="position:absolute; left:-9999px;" alt="" />
|
||||
<!-- /Yandex.Metrika counter -->
|
139
node_modules/piler/node_modules/csso/README.ru.md
generated
vendored
Normal file
139
node_modules/piler/node_modules/csso/README.ru.md
generated
vendored
Normal file
@ -0,0 +1,139 @@
|
||||
# 1. Описание
|
||||
|
||||
CSSO (CSS Optimizer) является минимизатором CSS, выполняющим как минимизацию без изменения структуры, так и структурную минимизацию с целью получить как можно меньший текст.
|
||||
|
||||
Этот документ является инструкцией по установке и использованию. Если вам нужна детальная инструкция по минимизации, она находится [здесь](https://github.com/css/csso/blob/master/MANUAL.ru.md).
|
||||
|
||||
Замеченные ошибки лучше добавлять в [Issues](https://github.com/css/csso/issues) проекта.
|
||||
|
||||
Советы, предложения, отзывы, а также ошибки, которые почему-то лучше выслать письмом, высылайте на адрес <skryzhanovsky@ya.ru>.
|
||||
|
||||
# 2. Установка
|
||||
|
||||
## 2.1. Предварительные требования
|
||||
|
||||
* для использования из браузера: любая OS с современным браузером
|
||||
* для использования из командной строки: OS Linux / Mac OS X / любая OS с работающим Node.js
|
||||
|
||||
## 2.2. Установка с помощью git
|
||||
|
||||
Предварительные требования:
|
||||
|
||||
* git — [http://git-scm.com/](http://git-scm.com/)
|
||||
|
||||
Установка:
|
||||
|
||||
* выполнить `git clone git://github.com/css/csso.git`
|
||||
|
||||
## 2.3. Установка с помощью npm
|
||||
|
||||
Предварительные требования:
|
||||
|
||||
* nodejs версии 0.4.x — [http://nodejs.org](http://nodejs.org)
|
||||
* npm — [http://github.com/isaacs/npm/](http://github.com/isaacs/npm/)
|
||||
|
||||
Установка (глобально):
|
||||
|
||||
* выполнить `npm install csso -g`
|
||||
|
||||
Обновление:
|
||||
|
||||
* выполнить `npm update csso`
|
||||
|
||||
Удаление:
|
||||
|
||||
* выполнить `npm uninstall csso`
|
||||
|
||||
# 3. Использование
|
||||
|
||||
## 3.1. Через браузер (при установке с помощью git)
|
||||
|
||||
Открыть в браузере файл `web/csso.html` или [http://css.github.com/csso/csso.html](http://css.github.com/csso/csso.html).
|
||||
|
||||
**Работа CSSO в браузерах не гарантирована. Рекомендуемый путь использования этой утилиты — использование из командной строки или npm-модулей.**
|
||||
|
||||
## 3.2. Через npm-модуль (при установке с помощью npm)
|
||||
|
||||
Пример (`test.js`):
|
||||
|
||||
var csso = require('csso'),
|
||||
css = '.test, .test { color: rgb(255, 255, 255) }';
|
||||
|
||||
console.log(csso.justDoIt(css));
|
||||
Вывод (`> node test.js`):
|
||||
|
||||
.test{color:#fff}
|
||||
Используйте `csso.justDoIt(css, true)`, если требуется выключить структурную минимизацию.
|
||||
|
||||
## 3.3. Через командную строку
|
||||
|
||||
При git-установке запускать `bin/csso`, но в таком случае потребуется nodejs версии 0.4.x — [http://nodejs.org](http://nodejs.org)
|
||||
|
||||
При npm-установке запускать `csso`.
|
||||
|
||||
Справка командной строки:
|
||||
|
||||
csso
|
||||
показывает этот текст
|
||||
csso <имя_файла>
|
||||
минимизирует CSS из <имя_файла> и записывает результат в stdout
|
||||
csso <in_имя_файла> <out_имя_файла>
|
||||
csso -i <in_имя_файла> -o <out_имя_файла>
|
||||
csso --input <in_имя_файла> --output <out_имя_файла>
|
||||
минимизирует CSS из <in_имя_файла> и записывает результат в <out_имя_файла>
|
||||
csso -off
|
||||
csso --restructure-off
|
||||
turns structure minimization off
|
||||
csso -h
|
||||
csso --help
|
||||
показывает этот текст
|
||||
csso -v
|
||||
csso --version
|
||||
показывает номер версии CSSO
|
||||
|
||||
Пример использования:
|
||||
|
||||
$ echo ".test { color: red; color: green }" > test.css
|
||||
$ csso test.css
|
||||
.test{color:green}
|
||||
|
||||
# 4. Минимизация (кратко)
|
||||
|
||||
Минимизация без изменения структуры:
|
||||
|
||||
* Удаление whitespace
|
||||
* Удаление концевых `;`
|
||||
* Удаление комментариев
|
||||
* Удаление неправильных `@charset` и `@import`
|
||||
* Минимизация цвета
|
||||
* Минимизация `0`
|
||||
* Слияние многострочных строк в однострочные
|
||||
* Минимизация `font-weight`
|
||||
|
||||
Минимизация с изменением структуры:
|
||||
|
||||
* Слияние блоков с одинаковыми селекторами
|
||||
* Слияние блоков с одинаковыми свойствами
|
||||
* Удаление перекрываемых свойств
|
||||
* Удаление перекрываемых shorthand-свойств
|
||||
* Удаление повторяющихся селекторов
|
||||
* Частичное слияние блоков
|
||||
* Частичное разделение блоков
|
||||
* Удаление пустых ruleset и at-rule
|
||||
* Минимизация `margin` и `padding`
|
||||
|
||||
Детальное описание минимизации находится [здесь](https://github.com/css/csso/blob/master/MANUAL.ru.md).
|
||||
|
||||
# 5. Авторы
|
||||
|
||||
* идея и поддержка — Виталий Харисов (<vitaly@harisov.name>)
|
||||
* реализация — Сергей Крыжановский (<skryzhanovsky@ya.ru>)
|
||||
* перевод на английский язык — Leonid Khachaturov (leonidkhachaturov@gmail.com)
|
||||
|
||||
# 6. Остальное
|
||||
|
||||
* CSSO распространяется под [лицензией MIT](https://github.com/css/csso/blob/master/MIT-LICENSE.txt)
|
||||
|
||||
<!-- Yandex.Metrika counter -->
|
||||
<img src="//mc.yandex.ru/watch/12831025" style="position:absolute; left:-9999px;" alt="" />
|
||||
<!-- /Yandex.Metrika counter -->
|
37
node_modules/piler/node_modules/csso/USAGE
generated
vendored
Normal file
37
node_modules/piler/node_modules/csso/USAGE
generated
vendored
Normal file
@ -0,0 +1,37 @@
|
||||
Usage:
|
||||
csso
|
||||
shows usage information
|
||||
csso <filename>
|
||||
minimizes the CSS in <filename> and outputs the result to stdout
|
||||
csso <in_filename> <out_filename>
|
||||
csso -i <in_filename> -o <out_filename>
|
||||
csso --input <in_filename> --output <out_filename>
|
||||
minimizes the CSS in <in_filename> and outputs the result to <out_filename>
|
||||
csso -off
|
||||
csso --restructure-off
|
||||
turns structure minimization off
|
||||
csso -h
|
||||
csso --help
|
||||
shows usage information
|
||||
csso -v
|
||||
csso --version
|
||||
shows the version number
|
||||
|
||||
Использование:
|
||||
csso
|
||||
показывает этот текст
|
||||
csso <имя_файла>
|
||||
минимизирует CSS из <имя_файла> и записывает результат в stdout
|
||||
csso <in_имя_файла> <out_имя_файла>
|
||||
csso -i <in_имя_файла> -o <out_имя_файла>
|
||||
csso --input <in_имя_файла> --output <out_имя_файла>
|
||||
минимизирует CSS из <in_имя_файла> и записывает результат в <out_имя_файла>
|
||||
csso -off
|
||||
csso --restructure-off
|
||||
выключает структурную минимизацию
|
||||
csso -h
|
||||
csso --help
|
||||
показывает этот текст
|
||||
csso -v
|
||||
csso --version
|
||||
показывает номер версии CSSO
|
1
node_modules/piler/node_modules/csso/VERSION
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/VERSION
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
CSSO 1.2.18
|
14
node_modules/piler/node_modules/csso/bin/csso
generated
vendored
Executable file
14
node_modules/piler/node_modules/csso/bin/csso
generated
vendored
Executable file
@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
SELF_PATH=$(cd -P -- "$(dirname -- "$0")" && pwd -P) && SELF_PATH="$SELF_PATH/$(basename -- "$0")"
|
||||
|
||||
while [ -h "$SELF_PATH" ]; do
|
||||
DIR=$(dirname -- "$SELF_PATH")
|
||||
SYM=$(readlink -- "$SELF_PATH")
|
||||
SELF_PATH=$(cd -- "$DIR" && cd -- $(dirname -- "$SYM") && pwd)/$(basename -- "$SYM")
|
||||
done
|
||||
|
||||
CSSO_HOME=$(dirname -- "$(dirname -- "$SELF_PATH")")
|
||||
|
||||
node $CSSO_HOME/lib/csso.js $@
|
||||
|
320
node_modules/piler/node_modules/csso/doc/compressflow.graphml
generated
vendored
Normal file
320
node_modules/piler/node_modules/csso/doc/compressflow.graphml
generated
vendored
Normal file
@ -0,0 +1,320 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
|
||||
<!--Created by yFiles for Java 2.8-->
|
||||
<key for="graphml" id="d0" yfiles.type="resources"/>
|
||||
<key for="port" id="d1" yfiles.type="portgraphics"/>
|
||||
<key for="port" id="d2" yfiles.type="portgeometry"/>
|
||||
<key for="port" id="d3" yfiles.type="portuserdata"/>
|
||||
<key attr.name="url" attr.type="string" for="node" id="d4"/>
|
||||
<key attr.name="description" attr.type="string" for="node" id="d5"/>
|
||||
<key for="node" id="d6" yfiles.type="nodegraphics"/>
|
||||
<key attr.name="Description" attr.type="string" for="graph" id="d7"/>
|
||||
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
|
||||
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
|
||||
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
|
||||
<graph edgedefault="directed" id="G">
|
||||
<data key="d7"/>
|
||||
<node id="n0">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:ShapeNode>
|
||||
<y:Geometry height="47.0" width="124.0" x="76.5" y="-28.5"/>
|
||||
<y:Fill color="#FFCC00" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="left" autoSizePolicy="content" borderDistance="0.0" fontFamily="Dialog" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="49.931640625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="106.73681640625" x="8.631591796875" y="-1.4658203125">COMMENTS
|
||||
|
||||
clean comments</y:NodeLabel>
|
||||
<y:Shape type="rectangle"/>
|
||||
</y:ShapeNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n1">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:ShapeNode>
|
||||
<y:Geometry height="70.0" width="110.0" x="83.5" y="281.5"/>
|
||||
<y:Fill color="#FFCC00" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="left" autoSizePolicy="content" borderDistance="0.0" fontFamily="Dialog" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="65.2421875" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="96.828125" x="6.5859375" y="2.37890625">PREPARE
|
||||
|
||||
destroy delims
|
||||
pretranslate</y:NodeLabel>
|
||||
<y:Shape type="rectangle"/>
|
||||
</y:ShapeNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n2">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:ShapeNode>
|
||||
<y:Geometry height="30.0" width="88.0" x="286.0" y="9.5"/>
|
||||
<y:Fill color="#99CC00" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" borderDistance="0.0" fontFamily="Dialog" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="19.310546875" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="51.9755859375" x="18.01220703125" y="5.3447265625">DISJOIN</y:NodeLabel>
|
||||
<y:Shape type="rectangle"/>
|
||||
</y:ShapeNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n3">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:ShapeNode>
|
||||
<y:Geometry height="56.0" width="153.0" x="253.5" y="62.0"/>
|
||||
<y:Fill color="#99CC00" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="left" autoSizePolicy="content" borderDistance="0.0" fontFamily="Dialog" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="49.931640625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="132.9462890625" x="10.02685546875" y="3.0341796875">MARK SHORTHANDS
|
||||
|
||||
mark shorthands</y:NodeLabel>
|
||||
<y:Shape type="rectangle"/>
|
||||
</y:ShapeNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n4">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:ShapeNode>
|
||||
<y:Geometry height="70.0" width="174.0" x="245.0" y="140.5"/>
|
||||
<y:Fill color="#99CC00" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="left" autoSizePolicy="content" borderDistance="0.0" fontFamily="Dialog" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="65.2421875" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="137.6181640625" x="18.19091796875" y="2.37890625">CLEAN SHORTHANDS
|
||||
|
||||
clean shorthands
|
||||
clean empty</y:NodeLabel>
|
||||
<y:Shape type="rectangle"/>
|
||||
</y:ShapeNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n5">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:ShapeNode>
|
||||
<y:Geometry height="56.0" width="163.0" x="250.5" y="233.0"/>
|
||||
<y:Fill color="#99CC00" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="left" autoSizePolicy="content" borderDistance="0.0" fontFamily="Dialog" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="49.931640625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="139.306640625" x="11.8466796875" y="3.0341796875">RESTRUCTURE BLOCK
|
||||
|
||||
restructure block</y:NodeLabel>
|
||||
<y:Shape type="rectangle"/>
|
||||
</y:ShapeNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n6">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:ShapeNode>
|
||||
<y:Geometry height="70.0" width="124.0" x="488.5" y="-35.0"/>
|
||||
<y:Fill color="#FF99CC" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="left" autoSizePolicy="content" borderDistance="0.0" fontFamily="Dialog" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="65.2421875" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="104.34375" x="9.828125" y="2.37890625">REJOIN RULESET
|
||||
|
||||
rejoin ruleset
|
||||
clean empty</y:NodeLabel>
|
||||
<y:Shape type="rectangle"/>
|
||||
</y:ShapeNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n7">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:ShapeNode>
|
||||
<y:Geometry height="70.0" width="163.0" x="469.0" y="55.0"/>
|
||||
<y:Fill color="#FF99CC" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="left" autoSizePolicy="content" borderDistance="0.0" fontFamily="Dialog" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="65.2421875" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="150.78955078125" x="6.105224609375" y="2.37890625">RESTRUCTURE RULESET
|
||||
|
||||
restructure ruleset
|
||||
clean empty</y:NodeLabel>
|
||||
<y:Shape type="rectangle"/>
|
||||
</y:ShapeNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n8">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:ShapeNode>
|
||||
<y:Geometry height="83.0" width="110.0" x="495.5" y="258.5"/>
|
||||
<y:Fill color="#FFCC00" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="left" autoSizePolicy="content" borderDistance="0.0" fontFamily="Dialog" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="80.552734375" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="99.51318359375" x="5.243408203125" y="1.2236328125">FINALIZE
|
||||
|
||||
clean empty
|
||||
delim selectors
|
||||
delim blocks</y:NodeLabel>
|
||||
<y:Shape type="rectangle"/>
|
||||
</y:ShapeNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n9">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:ShapeNode>
|
||||
<y:Geometry height="224.0" width="153.0" x="62.0" y="38.0"/>
|
||||
<y:Fill color="#FFCC00" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="left" autoSizePolicy="content" borderDistance="0.0" fontFamily="Dialog" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="218.34765625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="144.23876953125" x="4.380615234375" y="2.826171875">COMPRESS
|
||||
|
||||
clean charset
|
||||
clean import
|
||||
clean whitespace
|
||||
clean decldelim
|
||||
compress number
|
||||
compress color
|
||||
compress dimension
|
||||
compress string
|
||||
compress fontweight
|
||||
compress font
|
||||
compress background
|
||||
clean empty</y:NodeLabel>
|
||||
<y:Shape type="rectangle"/>
|
||||
</y:ShapeNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n10">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:ShapeNode>
|
||||
<y:Geometry height="30.0" width="193.0" x="454.0" y="176.75"/>
|
||||
<y:Fill color="#FF99CC" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="111.572265625" x="40.7138671875" y="5.93359375">Max compression?</y:NodeLabel>
|
||||
<y:Shape type="parallelogram"/>
|
||||
</y:ShapeNode>
|
||||
</data>
|
||||
</node>
|
||||
<edge id="e0" source="n2" target="n3">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="e1" source="n3" target="n4">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="e2" source="n4" target="n5">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="e3" source="n6" target="n7">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="e4" source="n7" target="n10">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="e5" source="n10" target="n8">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="23.072265625" x="2.0" y="16.82379150390625">yes</y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="e6" source="n10" target="n6">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
|
||||
<y:Point x="660.0" y="191.75"/>
|
||||
<y:Point x="660.0" y="0.0"/>
|
||||
</y:Path>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="18.818359375" x="24.6431884765625" y="-104.94140625">no</y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="e7" source="n0" target="n9">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="e8" source="n9" target="n1">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="e9" source="n5" target="n6">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
|
||||
<y:Point x="433.5" y="261.0"/>
|
||||
<y:Point x="433.5" y="0.0"/>
|
||||
</y:Path>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="e10" source="n1" target="n2">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
|
||||
<y:Point x="230.0" y="316.5"/>
|
||||
<y:Point x="230.0" y="24.5"/>
|
||||
</y:Path>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
</graph>
|
||||
<data key="d0">
|
||||
<y:Resources/>
|
||||
</data>
|
||||
</graphml>
|
BIN
node_modules/piler/node_modules/csso/doc/compressflow.png
generated
vendored
Normal file
BIN
node_modules/piler/node_modules/csso/doc/compressflow.png
generated
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 30 KiB |
1453
node_modules/piler/node_modules/csso/lib/compressor.js
generated
vendored
Normal file
1453
node_modules/piler/node_modules/csso/lib/compressor.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
70
node_modules/piler/node_modules/csso/lib/csso.js
generated
vendored
Normal file
70
node_modules/piler/node_modules/csso/lib/csso.js
generated
vendored
Normal file
@ -0,0 +1,70 @@
|
||||
var fs = require('fs'),
|
||||
print = require('util').print,
|
||||
csso = require('./cssoapi.js'),
|
||||
src, x;
|
||||
|
||||
var args = process.argv.slice(2),
|
||||
opts = args.length ? getOpts(args, [
|
||||
'-v', '--version',
|
||||
'-h', '--help',
|
||||
'-dp', '--parser',
|
||||
'-off', '--restructure-off'
|
||||
], [
|
||||
'-r', '--rule',
|
||||
'-i', '--input',
|
||||
'-o', '--output'
|
||||
]) : null,
|
||||
single = opts && opts.single,
|
||||
pairs = opts && opts.pairs,
|
||||
other = opts && opts.other,
|
||||
ro = single && single.contains(['-off', '--restructure-off']),
|
||||
inFile = (pairs && (pairs['-i'] || pairs['--input'])) || (other && other[0]),
|
||||
outFile = (pairs && (pairs['-o'] || pairs['--output'])) || (other && other[1]),
|
||||
rule = pairs && (pairs['-r'] || pairs['--rule']) || 'stylesheet';
|
||||
|
||||
if (single && single.contains(['-v', '--version'])) {
|
||||
printFile('VERSION');
|
||||
} else if (!inFile || !opts || (single && single.contains(['-h', '--help'])) || other.length > 2) {
|
||||
printFile('USAGE');
|
||||
} else {
|
||||
src = fs.readFileSync(inFile).toString().trim();
|
||||
|
||||
if (single.contains(['-dp', '--parser'])) csso.printTree(csso.cleanInfo(csso.parse(src, rule)));
|
||||
else {
|
||||
if (!outFile) print(csso.justDoIt(src, ro));
|
||||
else fs.writeFileSync(outFile, csso.justDoIt(src, ro));
|
||||
}
|
||||
}
|
||||
|
||||
// Utils
|
||||
|
||||
function getOpts(argv, o_single, o_pairs) {
|
||||
var opts = { single : [], pairs : {}, other : [] },
|
||||
arg,
|
||||
i = 0;
|
||||
|
||||
for (; i < argv.length;) {
|
||||
arg = argv[i];
|
||||
if (o_single && o_single.indexOf(arg) !== -1 && (!o_pairs || o_pairs.indexOf(arg) === -1)) {
|
||||
opts.single.push(arg);
|
||||
} else if (o_pairs && o_pairs.indexOf(arg) !== -1 && (!o_single || o_single.indexOf(arg) === -1)) {
|
||||
opts.pairs[arg] = argv[++i];
|
||||
} else opts.other.push(arg);
|
||||
i++;
|
||||
}
|
||||
|
||||
opts.single.contains = function(value) {
|
||||
if (typeof value === 'string') {
|
||||
return this.indexOf(value) !== -1;
|
||||
} else {
|
||||
for (var i = 0; i < value.length; i++) if (this.indexOf(value[i]) !== -1) return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
return opts;
|
||||
}
|
||||
|
||||
function printFile(filename) {
|
||||
print(fs.readFileSync(__dirname.slice(0, __dirname.lastIndexOf('/')) + '/' + filename).toString());
|
||||
}
|
20
node_modules/piler/node_modules/csso/lib/cssoapi.js
generated
vendored
Normal file
20
node_modules/piler/node_modules/csso/lib/cssoapi.js
generated
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
var util = require('./util.js'),
|
||||
parser = require('./parser.js'),
|
||||
translator = require('./translator.js'),
|
||||
compressor = require('./compressor.js');
|
||||
|
||||
var parse = exports.parse = parser.parse;
|
||||
|
||||
var cleanInfo = exports.cleanInfo = util.cleanInfo;
|
||||
|
||||
exports.treeToString = util.treeToString;
|
||||
|
||||
exports.printTree = util.printTree;
|
||||
|
||||
var translate = exports.translate = translator.translate;
|
||||
|
||||
var compress = exports.compress = compressor.compress;
|
||||
|
||||
exports.justDoIt = function(src, ro) {
|
||||
return translate(cleanInfo(compress(parse(src, 'stylesheet'), ro)));
|
||||
};
|
902
node_modules/piler/node_modules/csso/lib/parser.js
generated
vendored
Normal file
902
node_modules/piler/node_modules/csso/lib/parser.js
generated
vendored
Normal file
@ -0,0 +1,902 @@
|
||||
function CSSOParser() {}
|
||||
|
||||
CSSOParser.prototype.parse = function(s, rule) {
|
||||
this._src = s;
|
||||
this._stack = [];
|
||||
this._chains = [];
|
||||
this._i = { f: 0, l: 0 };
|
||||
var r = this.$()._o(rule)._();
|
||||
return r ? r[0] : null;
|
||||
};
|
||||
|
||||
CSSOParser.prototype._push = function(o) {
|
||||
this._stack.push(o);
|
||||
};
|
||||
|
||||
CSSOParser.prototype._last = function() {
|
||||
return this._chains[this._chains.length - 1];
|
||||
};
|
||||
|
||||
CSSOParser.prototype._fail = function() {
|
||||
this._last().fail = true;
|
||||
};
|
||||
|
||||
CSSOParser.prototype._failed = function() {
|
||||
return this._last().fail;
|
||||
};
|
||||
|
||||
CSSOParser.prototype._apply = function(s) {
|
||||
switch (s.charAt(0)) {
|
||||
case '.': return this._s(s.substr(1));
|
||||
case ',': return this._r(s.substr(1));
|
||||
default: return this[s]();
|
||||
}
|
||||
};
|
||||
|
||||
CSSOParser.prototype._gi = function() {
|
||||
return this._last().l;
|
||||
};
|
||||
|
||||
CSSOParser.prototype._si = function(i) {
|
||||
if (this._chains.length) this._last().l = i;
|
||||
};
|
||||
|
||||
CSSOParser.prototype._info = function() {
|
||||
return { f: this._i.f, l: this._i.l };
|
||||
};
|
||||
|
||||
CSSOParser.prototype.$ = function() {
|
||||
var i = this._chains.length ? this._last().l + 1 : 0;
|
||||
this._chains.push({ i: this._stack.length, fail: false, f: i, l: i - 1 });
|
||||
return this;
|
||||
};
|
||||
|
||||
CSSOParser.prototype._ = function() {
|
||||
var c = this._chains.pop(),
|
||||
r = this._stack.splice(c.i);
|
||||
if (!c.fail) {
|
||||
if (c.l >= c.f) this._si(c.l);
|
||||
this._i = { f: c.f, l: c.l };
|
||||
return r.length ? r : null;
|
||||
}
|
||||
};
|
||||
|
||||
CSSOParser.prototype._o = function() {
|
||||
if (!this._failed()) {
|
||||
var a = arguments, b = [], t;
|
||||
for (var i = 0; i < a.length; i++) {
|
||||
if (t = this._apply(a[i])) break;
|
||||
}
|
||||
t !== undefined ? this._push(t) : this._fail();
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
CSSOParser.prototype._om = function() {
|
||||
if (!this._failed()) {
|
||||
var a = arguments, t, n0, n1 = this._gi() + 1, b = [];
|
||||
do {
|
||||
n0 = n1;
|
||||
for (var i = 0; i < a.length; i++) {
|
||||
if (t = this._apply(a[i])) {
|
||||
b.push(t);
|
||||
n1 = this._gi() + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} while (n0 !== n1);
|
||||
b.length ? this._push(b) : this._fail();
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
CSSOParser.prototype._zm = function() {
|
||||
if (!this._failed()) {
|
||||
var a = arguments, t, n0, n1 = this._gi() + 1, b = [];
|
||||
do {
|
||||
n0 = n1;
|
||||
for (var i = 0; i < a.length; i++) {
|
||||
if (t = this._apply(a[i])) {
|
||||
b.push(t);
|
||||
n1 = this._gi() + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} while (n0 !== n1);
|
||||
if (b.length) this._push(b);
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
CSSOParser.prototype._zmn = function() {
|
||||
if (!this._failed()) {
|
||||
var i = this._gi() + 1;
|
||||
this._zm.apply(this, arguments);
|
||||
if (i === this._gi() + 1) this._push(null);
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
CSSOParser.prototype._zme = function() {
|
||||
if (!this._failed()) {
|
||||
var i = this._gi() + 1;
|
||||
this._zm.apply(this, arguments);
|
||||
if (i === this._gi() + 1) this._push([]);
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
CSSOParser.prototype._zo = function() {
|
||||
if (!this._failed()) {
|
||||
var a = arguments, t;
|
||||
for (var i = 0; i < a.length; i++) {
|
||||
if (t = this._apply(a[i])) break;
|
||||
}
|
||||
this._push(t ? t : null);
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
CSSOParser.prototype._not = function() {
|
||||
if (!this._failed()) {
|
||||
var f = this._gi() + 1,
|
||||
s = this._src,
|
||||
a = arguments,
|
||||
p = new CSSOParser(),
|
||||
_s, t, l = s.length + 1;
|
||||
for (var i = f; i < l; i++) {
|
||||
_s = s.substr(i);
|
||||
for (var j = 0; j < a.length; j++) {
|
||||
if ((t = p.parse(_s, a[j])) !== null) {
|
||||
_s = s.substring(f, i);
|
||||
i = l;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (_s) this._si(f + _s.length - 1);
|
||||
this._push(_s);
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
CSSOParser.prototype._s = function(s) {
|
||||
var sl = s.length,
|
||||
f = this._gi() + 1;
|
||||
if (this._src.substr(f, sl) === s) {
|
||||
this._si(f + sl - 1);
|
||||
return s;
|
||||
}
|
||||
};
|
||||
|
||||
CSSOParser.prototype._c = function() {
|
||||
var s = this._src,
|
||||
f = this._gi() + 1;
|
||||
if (f <= s.length) {
|
||||
this._si(f);
|
||||
return s.charAt(f);
|
||||
}
|
||||
};
|
||||
|
||||
CSSOParser.prototype._r = function(r) {
|
||||
var n = r.substr(0, r.indexOf(' ')),
|
||||
f = this._gi() + 1,
|
||||
s = n !== '0' ? this._src.substring(f, f + new Number(n)) : this._src.substr(f),
|
||||
rr = new RegExp(r.substr(n.length + 1)).exec(s);
|
||||
if (rr && rr.index === 0) {
|
||||
this._si(f + rr[0].length - 1);
|
||||
return rr[0];
|
||||
}
|
||||
};
|
||||
|
||||
CSSOParser.prototype._join = function(a) {
|
||||
return a ? a.join('') : '';
|
||||
};
|
||||
|
||||
CSSOParser.prototype._cc = function(x, y) {
|
||||
y.forEach(function(e) {
|
||||
x = x.concat(e);
|
||||
});
|
||||
|
||||
return x;
|
||||
};
|
||||
CSSOParser.prototype.unknown = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('munknown')._()) {
|
||||
return [this._info(), 'unknown', _b_[0]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.mstring1 = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._not('."','.\\"')._()) {
|
||||
return _b_[0];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.mstring2 = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._not('.\'','.\\\'')._()) {
|
||||
return _b_[0];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.mstring = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('."')._zme('.\\"','mstring1')._o('."')._()) {
|
||||
return ('"' + _b_[1].join('') + '"');
|
||||
}
|
||||
if (_b_ = this.$()._o('.\'')._zme('.\\\'','mstring2')._o('.\'')._()) {
|
||||
return ("'" + _b_[1].join('') + "'");
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.string = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('mstring')._()) {
|
||||
return [this._info(), 'string', _b_[0]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.escape = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.\\')._o('_c')._()) {
|
||||
return ('\\' + _b_[1]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.ident = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('mident')._()) {
|
||||
return [this._info(), 'ident', _b_[0]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.atkeyword = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.@')._o('ident')._()) {
|
||||
return [this._info(), 'atkeyword', _b_[1]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.shash = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.#')._o('mname')._()) {
|
||||
return [this._info(), 'shash', _b_[1]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.vhash = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.#')._o('mname2')._()) {
|
||||
return [this._info(), 'vhash', _b_[1]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.number = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('mnumber')._()) {
|
||||
return [this._info(), 'number', _b_[0]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.percentage = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('number')._o('.%')._()) {
|
||||
return [this._info(), 'percentage', _b_[0]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.ident2 = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('mname2')._()) {
|
||||
return [this._info(), 'ident', _b_[0]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.dimension = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('number')._o('ident2')._()) {
|
||||
return [this._info(), 'dimension', _b_[0], _b_[1]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.cdo = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.<!--')._()) {
|
||||
return [this._info(), 'cdo'];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.cdc = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.-->')._()) {
|
||||
return [this._info(), 'cdc'];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.s = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._om('mw')._()) {
|
||||
return [this._info(), 's', _b_[0].join('')];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.attrselector = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.=','.~=','.^=','.$=','.*=','.|=','.~')._()) {
|
||||
return [this._info(), 'attrselector', _b_[0]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.delim = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.,')._()) {
|
||||
return [this._info(), 'delim'];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.comment = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('mcomment1')._()) {
|
||||
return [this._info(), 'comment', _b_[0]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.sc = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('s','comment')._()) {
|
||||
return _b_[0];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.tset = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('vhash','any','sc','operator')._()) {
|
||||
return _b_[0];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.stylesheet = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._zme('cdo','cdc','sc','statement','unknown')._()) {
|
||||
return [this._info(), 'stylesheet'].concat(_b_[0]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.statement = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('ruleset','atrule')._()) {
|
||||
return _b_[0];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.atruleb = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('atkeyword')._zme('tset')._o('block')._()) {
|
||||
return [this._info(), 'atruleb', _b_[0]].concat(_b_[1], [_b_[2]]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.atrules = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('atkeyword')._zme('tset')._o('.;')._()) {
|
||||
return [this._info(), 'atrules', _b_[0]].concat(_b_[1]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.atrulerq = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._zme('tset')._()) {
|
||||
return [this._info(), 'atrulerq'].concat(_b_[0]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.atrulers = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._zme('sc')._zme('ruleset')._zme('sc')._()) {
|
||||
return [this._info(), 'atrulers'].concat(_b_[0], _b_[1], _b_[2]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.atruler = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('atkeyword')._o('atrulerq')._o('.{')._o('atrulers')._o('.}')._()) {
|
||||
return [this._info(), 'atruler', _b_[0], _b_[1], _b_[3]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.atrule = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('atruler','atruleb','atrules')._()) {
|
||||
return _b_[0];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.blockdecl = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._zme('sc')._o('filter','declaration')._o('decldelim')._zme('sc')._()) {
|
||||
return [].concat(_b_[0], [_b_[1]], [_b_[2]], _b_[3]);
|
||||
}
|
||||
if (_b_ = this.$()._zme('sc')._o('filter','declaration')._zme('sc')._()) {
|
||||
return [].concat(_b_[0], [_b_[1]], _b_[2]);
|
||||
}
|
||||
if (_b_ = this.$()._zme('sc')._o('decldelim')._zme('sc')._()) {
|
||||
return [].concat(_b_[0], [_b_[1]], _b_[2]);
|
||||
}
|
||||
if (_b_ = this.$()._om('sc')._()) {
|
||||
return _b_[0];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.decldelim = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.;')._()) {
|
||||
return [this._info(), 'decldelim'];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.block = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.{')._zme('blockdecl')._o('.}')._()) {
|
||||
return this._cc([this._info(), 'block'], _b_[1]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.ruleset = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._zme('selector')._o('block')._()) {
|
||||
return [this._info(), 'ruleset'].concat(_b_[0], [_b_[1]]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.combinator = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.+','.>','.~')._()) {
|
||||
return [this._info(), 'combinator', _b_[0]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.attrib = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.[')._zme('sc')._o('ident')._zme('sc')._o('attrselector')._zme('sc')._o('ident','string')._zme('sc')._o('.]')._()) {
|
||||
return [this._info(), 'attrib'].concat(_b_[1], [_b_[2]], _b_[3], [_b_[4]], _b_[5], [_b_[6]], _b_[7]);
|
||||
}
|
||||
if (_b_ = this.$()._o('.[')._zme('sc')._o('ident')._zme('sc')._o('.]')._()) {
|
||||
return [this._info(), 'attrib'].concat(_b_[1], [_b_[2]], _b_[3]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.clazz = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('..')._o('ident')._()) {
|
||||
return [this._info(), 'clazz', _b_[1]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.pseudoe = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.::')._o('ident')._()) {
|
||||
return [this._info(), 'pseudoe', _b_[1]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.pseudoc = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.:')._o('funktion','ident')._()) {
|
||||
return [this._info(), 'pseudoc', _b_[1]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.pseudo = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('pseudoe','pseudoc')._()) {
|
||||
return _b_[0];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.nthf = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.:')._o('.nth-')._o('.child','.last-child','.of-type','.last-of-type')._()) {
|
||||
return [this._info(), 'ident', _b_[1] + _b_[2]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.nth = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._om(',1 ^[\\d]','.n')._()) {
|
||||
return [this._info(), 'nth', _b_[0].join('')];
|
||||
}
|
||||
if (_b_ = this.$()._o('.even','.odd')._()) {
|
||||
return [this._info(), 'nth', _b_[0]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.nthselector = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('nthf')._o('.(')._zme('sc','unary','nth')._o('.)')._()) {
|
||||
return [this._info(), 'nthselector', _b_[0]].concat(_b_[2]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.namespace = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.|')._()) {
|
||||
return [this._info(), 'namespace'];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.simpleselector = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._om('nthselector','combinator','attrib','pseudo','clazz','shash','any','sc','namespace')._()) {
|
||||
return this._cc([this._info(), 'simpleselector'], [_b_[0]]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.selector = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._om('simpleselector','delim')._()) {
|
||||
return [this._info(), 'selector'].concat(_b_[0]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.declaration = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('property')._o('.:')._o('value')._()) {
|
||||
return [this._info(), 'declaration', _b_[0], _b_[2]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.filtern = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.-filter','.$filter','._filter','.*filter','.-ms-filter','.filter')._()) {
|
||||
return [this._info(), 'ident', _b_[0]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.filterp = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('filtern')._zme('sc')._()) {
|
||||
return [this._info(), 'property', _b_[0]].concat(_b_[1]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.progid0 = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._not('.)','mstring','mcomment2')._()) {
|
||||
return _b_[0];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.progid1 = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.progid:DXImageTransform.Microsoft.')._o(',25 ^[a-zA-Z]+')._o('.(')._om('mstring','mcomment2','progid0')._o('.)')._()) {
|
||||
return [this._info(), 'raw', _b_[0] + _b_[1] + '(' + _b_[3].join('') + ')'];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.progid = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._zme('sc')._o('progid1')._zme('sc')._()) {
|
||||
return [this._info(), 'progid'].concat(_b_[0], [_b_[1]], _b_[2]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.filterv = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._om('progid')._()) {
|
||||
return [this._info(), 'filterv'].concat(_b_[0]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.filter = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('filterp')._o('.:')._o('filterv')._()) {
|
||||
return [this._info(), 'filter', _b_[0], _b_[2]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.identp = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.//')._o('mident')._()) {
|
||||
return [this._info(), 'ident', _b_[0] + _b_[1]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.property = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('identp')._zme('sc')._()) {
|
||||
return [this._info(), 'property', _b_[0]].concat(_b_[1]);
|
||||
}
|
||||
if (_b_ = this.$()._o('ident')._zme('sc')._()) {
|
||||
return [this._info(), 'property', _b_[0]].concat(_b_[1]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.important = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.!')._zme('sc')._o('.important')._()) {
|
||||
return [this._info(), 'important'].concat(_b_[1]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.unary = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.-','.+')._()) {
|
||||
return [this._info(), 'unary', _b_[0]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.operator = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('./','.,','.:','.=')._()) {
|
||||
return [this._info(), 'operator', _b_[0]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.uri0 = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._not('.)','mw')._()) {
|
||||
return [this._info(), 'raw', _b_[0]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.uri = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.url(')._zme('sc')._o('string')._zme('sc')._o('.)')._()) {
|
||||
return [this._info(), 'uri'].concat(_b_[1], [_b_[2]], _b_[3]);
|
||||
}
|
||||
if (_b_ = this.$()._o('.url(')._zme('sc')._o('uri0')._zme('sc')._o('.)')._()) {
|
||||
return [this._info(), 'uri'].concat(_b_[1], [_b_[2]], _b_[3]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.value = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._om('sc','vhash','any','block','atkeyword','operator','important')._()) {
|
||||
return [this._info(), 'value'].concat(_b_[0]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.functionBody = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._zme('tset')._()) {
|
||||
return [this._info(), 'functionBody'].concat(_b_[0]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.funktion = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('notselector')._()) {
|
||||
return _b_[0];
|
||||
}
|
||||
if (_b_ = this.$()._o('ident')._o('.(')._o('functionBody')._o('.)')._()) {
|
||||
return [this._info(), 'funktion', _b_[0], _b_[2]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.notselectorident = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.not')._()) {
|
||||
return [this._info(), 'ident', _b_[0]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.notselector = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('notselectorident')._o('.(')._o('notselectorBody')._o('.)')._()) {
|
||||
return [this._info(), 'funktion', _b_[0], _b_[2]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.notselectorBody = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._zo('simpleselector')._()) {
|
||||
return [this._info(), 'functionBody', _b_[0]];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.braces = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.(')._zme('tset')._o('.)')._()) {
|
||||
return [this._info(), 'braces', '(', ')'].concat(_b_[1]);
|
||||
}
|
||||
if (_b_ = this.$()._o('.[')._zme('tset')._o('.]')._()) {
|
||||
return [this._info(), 'braces', '[', ']'].concat(_b_[1]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.jsLT = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.\n','.\r')._()) {
|
||||
return _b_[0];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.jsComment = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('jsMLComment','jsSLComment')._()) {
|
||||
return _b_[0];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.jsMLComment = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('./*')._not('.*/')._o('.*/')._()) {
|
||||
return (_b_[0] + (_b_[1] ? _b_[1] : '') + _b_[2]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.jsSLComment = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.//')._not('jsLT')._()) {
|
||||
return ('//' + (_b_[1] ? _b_[1] : ''));
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.jsString = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('."')._zme('jsDSChar')._o('."')._()) {
|
||||
return ('"' + _b_[1].join('') + '"');
|
||||
}
|
||||
if (_b_ = this.$()._o('.\'')._zme('jsSSChar')._o('.\'')._()) {
|
||||
return ('\'' + _b_[1].join('') + '\'');
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.jsDSChar = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._not('."','.\\','jsLT','jsEscapeChar','jsLineContinuation')._()) {
|
||||
return _b_[0];
|
||||
}
|
||||
if (_b_ = this.$()._o('jsEscapeChar')._()) {
|
||||
return _b_[0];
|
||||
}
|
||||
if (_b_ = this.$()._o('jsLineContinuation')._()) {
|
||||
return _b_[0];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.jsSSChar = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._not('.\'','.\\','jsLT','jsEscapeChar','jsLineContinuation')._()) {
|
||||
return _b_[0];
|
||||
}
|
||||
if (_b_ = this.$()._o('jsEscapeChar')._()) {
|
||||
return _b_[0];
|
||||
}
|
||||
if (_b_ = this.$()._o('jsLineContinuation')._()) {
|
||||
return _b_[0];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.jsLineContinuation = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.\\')._zme('jsLT')._()) {
|
||||
return ('\\' + _b_[1].join(''));
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.jsEscapeChar = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.\\')._o('_c')._()) {
|
||||
return ('\\' + _b_[1]);
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.jsInBraceChar = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._not('.(','.)','jsComment','jsString','jsEscapeChar')._()) {
|
||||
return _b_[0];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.jsBracesContent = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._om('jsComment','jsString','jsEscapeChar','jsInBraceChar')._()) {
|
||||
return _b_[0].join('');
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.feb = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('functionExpressionBody')._zme('jsBracesContent')._()) {
|
||||
return (_b_[0] + _b_[1].join(''));
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.functionExpressionBody = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.(')._om('jsBracesContent')._zme('feb')._o('.)')._()) {
|
||||
return ('(' + _b_[1].join('') + _b_[2].join('') + ')');
|
||||
}
|
||||
if (_b_ = this.$()._o('.(')._zme('feb')._o('.)')._()) {
|
||||
return ('(' + _b_[1].join('') + ')');
|
||||
}
|
||||
if (_b_ = this.$()._om('jsBracesContent')._zme('feb')._()) {
|
||||
return (_b_[0].join('') + _b_[1].join(''));
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.functionExpression = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('.expression(')._zme('functionExpressionBody')._o('.)')._()) {
|
||||
return [this._info(), 'functionExpression', _b_[1].join('')];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.any = function() {
|
||||
var _b_;
|
||||
if (_b_ = this.$()._o('braces','string','percentage','dimension','number','uri','functionExpression','funktion','ident','unary')._()) {
|
||||
return _b_[0];
|
||||
}
|
||||
};
|
||||
CSSOParser.prototype.mw = function() {
|
||||
var s = this._src,
|
||||
sl = s.length,
|
||||
f = this._gi() + 1, c, i, v = '';
|
||||
for (i = f; i < sl; i++) {
|
||||
c = s.charAt(i);
|
||||
if (/^[ \n\r\t\f]$/.test(c)) v += c;
|
||||
else break;
|
||||
}
|
||||
if (v.length) {
|
||||
this._si(f + v.length - 1);
|
||||
return v;
|
||||
}
|
||||
};
|
||||
|
||||
CSSOParser.prototype.mnumber = function() {
|
||||
var s = this._src,
|
||||
sl = s.length,
|
||||
f = this._gi() + 1, c, i, v = '',
|
||||
n0 = '', d = '', n1 = '';
|
||||
for (i = f; i < sl; i++) {
|
||||
c = s.charAt(i);
|
||||
if (/^[\d]$/.test(c)) n0 += c;
|
||||
else break;
|
||||
}
|
||||
if (s[i++] === '.') {
|
||||
d = '.';
|
||||
for (; i < sl; i++) {
|
||||
c = s.charAt(i);
|
||||
if (/^[\d]$/.test(c)) n1 += c;
|
||||
else break;
|
||||
}
|
||||
}
|
||||
if ((v = n0 + d + n1).length) {
|
||||
this._si(f + v.length - 1);
|
||||
return v;
|
||||
}
|
||||
};
|
||||
|
||||
CSSOParser.prototype.mident = function() {
|
||||
var s = this._src,
|
||||
sl = s.length,
|
||||
f = this._gi() + 1, i = f, v = '', c, n;
|
||||
if (s.charAt(i) === '-') v = '-', i++; // special case
|
||||
c = s.charAt(i); n = s.charAt(i + 1);
|
||||
if (/^[_$a-zA-Z*]$/.test(c)) v += c; // first char
|
||||
else if (c === '\\') {
|
||||
v += c;
|
||||
if (n) v += n, i++;
|
||||
} else return;
|
||||
i++;
|
||||
for (; i < sl; i++) {
|
||||
c = s.charAt(i);
|
||||
n = s.charAt(i + 1);
|
||||
if (/^[_a-zA-Z0-9\-]$/.test(c)) v += c;
|
||||
else if (c === '\\') {
|
||||
v += c;
|
||||
if (n) v += n, i++;
|
||||
} else break;
|
||||
}
|
||||
if (v && v !== '-') {
|
||||
this._si(f + v.length - 1);
|
||||
return v;
|
||||
}
|
||||
};
|
||||
|
||||
CSSOParser.prototype.mcomment1 = function() {
|
||||
var s = this._src,
|
||||
f = this._gi() + 1, v = '', i;
|
||||
if (s.charAt(f) === '/' && s.charAt(f + 1) === '*') {
|
||||
if ((i = s.indexOf('*/', f + 2)) !== -1) {
|
||||
v = s.substring(f + 2, i);
|
||||
this._si(f + v.length + 3);
|
||||
} else {
|
||||
v = s.substr(f + 2);
|
||||
this._si(f + v.length + 1);
|
||||
}
|
||||
return v;
|
||||
}
|
||||
};
|
||||
|
||||
CSSOParser.prototype.mcomment2 = function() {
|
||||
var s = this._src,
|
||||
f = this._gi() + 1, v = '/*', i;
|
||||
if (s.charAt(f) === '/' && s.charAt(f + 1) === '*') {
|
||||
if ((i = s.indexOf('*/', f + 2)) !== -1) {
|
||||
v += s.substring(f + 2, i) + '*/';
|
||||
this._si(f + v.length - 1);
|
||||
} else {
|
||||
v += s.substr(f + 2);
|
||||
this._si(f + v.length - 1);
|
||||
}
|
||||
return v;
|
||||
}
|
||||
};
|
||||
|
||||
CSSOParser.prototype.mname = function() {
|
||||
var s = this._src,
|
||||
sl = s.length,
|
||||
f = this._gi() + 1, i = f, v = '', c, n;
|
||||
for (; i < sl; i++) {
|
||||
c = s.charAt(i);
|
||||
n = s.charAt(i + 1);
|
||||
if (/^[_a-zA-Z0-9\-]$/.test(c)) v += c;
|
||||
else if (c === '\\') {
|
||||
v += c;
|
||||
if (n) v += n, i++;
|
||||
} else break;
|
||||
}
|
||||
if (v) {
|
||||
this._si(f + v.length - 1);
|
||||
return v;
|
||||
}
|
||||
};
|
||||
|
||||
CSSOParser.prototype.mname2 = function() {
|
||||
var s = this._src,
|
||||
sl = s.length,
|
||||
f = this._gi() + 1, i = f, v = '', c, n;
|
||||
for (; i < sl; i++) {
|
||||
c = s.charAt(i);
|
||||
n = s.charAt(i + 1);
|
||||
if (/^[_a-zA-Z0-9]$/.test(c)) v += c;
|
||||
else if (c === '\\') {
|
||||
v += c;
|
||||
if (n) v += n, i++;
|
||||
} else break;
|
||||
}
|
||||
if (v) {
|
||||
this._si(f + v.length - 1);
|
||||
return v;
|
||||
}
|
||||
};
|
||||
|
||||
CSSOParser.prototype.munknown = function() {
|
||||
var s = this._src,
|
||||
sl = s.length,
|
||||
f = this._gi() + 1, i = f, v = '', c, n;
|
||||
for (; i < sl; i++) {
|
||||
c = s.charAt(i);
|
||||
v += c;
|
||||
if (c === '\n' || c === '\r') break;
|
||||
}
|
||||
if (v) {
|
||||
this._si(f + v.length - 1);
|
||||
return v;
|
||||
}
|
||||
};
|
||||
exports.parse = function(s, rule) {
|
||||
return new CSSOParser().parse(s, rule);
|
||||
};
|
126
node_modules/piler/node_modules/csso/lib/translator.js
generated
vendored
Normal file
126
node_modules/piler/node_modules/csso/lib/translator.js
generated
vendored
Normal file
@ -0,0 +1,126 @@
|
||||
function CSSOTranslator() {}
|
||||
|
||||
CSSOTranslator.prototype.translate = function(tree) {
|
||||
return this._t(tree);
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype._m_simple = {
|
||||
'unary': 1, 'nth': 1, 'combinator': 1, 'ident': 1, 'number': 1, 's': 1,
|
||||
'string': 1, 'attrselector': 1, 'operator': 1, 'raw': 1, 'unknown': 1
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype._m_composite = {
|
||||
'simpleselector': 1, 'dimension': 1, 'selector': 1, 'property': 1, 'value': 1,
|
||||
'filterv': 1, 'progid': 1, 'ruleset': 1, 'atruleb': 1, 'atrulerq': 1, 'atrulers': 1,
|
||||
'stylesheet': 1
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype._m_primitive = {
|
||||
'cdo': 'cdo', 'cdc': 'cdc', 'decldelim': ';', 'namespace': '|', 'delim': ','
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype._t = function(tree) {
|
||||
var t = tree[0];
|
||||
if (t in this._m_primitive) return this._m_primitive[t];
|
||||
else if (t in this._m_simple) return this._simple(tree);
|
||||
else if (t in this._m_composite) return this._composite(tree);
|
||||
return this[t](tree);
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype._composite = function(t, i) {
|
||||
var s = '';
|
||||
i = i === undefined ? 1 : i;
|
||||
for (; i < t.length; i++) s += this._t(t[i]);
|
||||
return s;
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype._simple = function(t) {
|
||||
return t[1];
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.percentage = function(t) {
|
||||
return this._t(t[1]) + '%';
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.comment = function(t) {
|
||||
return '/*' + t[1] + '*/';
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.clazz = function(t) {
|
||||
return '.' + this._t(t[1]);
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.atkeyword = function(t) {
|
||||
return '@' + this._t(t[1]);
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.shash = function(t) {
|
||||
return '#' + t[1];
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.vhash = function(t) {
|
||||
return '#' + t[1];
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.attrib = function(t) {
|
||||
return '[' + this._composite(t) + ']';
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.important = function(t) {
|
||||
return '!' + this._composite(t) + 'important';
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.nthselector = function(t) {
|
||||
return ':' + this._simple(t[1]) + '(' + this._composite(t, 2) + ')';
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.funktion = function(t) {
|
||||
return this._simple(t[1]) + '(' + this._composite(t[2]) + ')';
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.declaration = function(t) {
|
||||
return this._t(t[1]) + ':' + this._t(t[2]);
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.filter = function(t) {
|
||||
return this._t(t[1]) + ':' + this._t(t[2]);
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.block = function(t) {
|
||||
return '{' + this._composite(t) + '}';
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.braces = function(t) {
|
||||
return t[1] + this._composite(t, 3) + t[2];
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.atrules = function(t) {
|
||||
return this._composite(t) + ';';
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.atruler = function(t) {
|
||||
return this._t(t[1]) + this._t(t[2]) + '{' + this._t(t[3]) + '}';
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.pseudoe = function(t) {
|
||||
return '::' + this._t(t[1]);
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.pseudoc = function(t) {
|
||||
return ':' + this._t(t[1]);
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.uri = function(t) {
|
||||
return 'url(' + this._composite(t) + ')';
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.functionExpression = function(t) {
|
||||
return 'expression(' + t[1] + ')';
|
||||
};
|
||||
exports.translate = function(tree) {
|
||||
return new CSSOTranslator().translate(tree);
|
||||
};
|
||||
|
||||
exports.translator = function() {
|
||||
return new CSSOTranslator();
|
||||
};
|
41
node_modules/piler/node_modules/csso/lib/util.js
generated
vendored
Normal file
41
node_modules/piler/node_modules/csso/lib/util.js
generated
vendored
Normal file
@ -0,0 +1,41 @@
|
||||
var $util = {};
|
||||
|
||||
$util.cleanInfo = function(tree) {
|
||||
var r = [];
|
||||
tree = tree.slice(1);
|
||||
|
||||
tree.forEach(function(e) {
|
||||
r.push(Array.isArray(e) ? $util.cleanInfo(e) : e);
|
||||
});
|
||||
|
||||
return r;
|
||||
};
|
||||
|
||||
$util.treeToString = function(tree, level) {
|
||||
var spaces = $util.dummySpaces(level),
|
||||
level = level ? level : 0,
|
||||
s = (level ? '\n' + spaces : '') + '[';
|
||||
|
||||
tree.forEach(function(e) {
|
||||
s += (Array.isArray(e) ? $util.treeToString(e, level + 1) : e.f !== undefined ? $util.ircToString(e) : ('\'' + e.toString() + '\'')) + ', ';
|
||||
});
|
||||
|
||||
return s.substr(0, s.length - 2) + ']';
|
||||
};
|
||||
|
||||
$util.ircToString = function(o) {
|
||||
return '{' + o.f + ',' + o.l + '}';
|
||||
};
|
||||
|
||||
$util.dummySpaces = function(num) {
|
||||
return ' '.substr(0, num * 2);
|
||||
};
|
||||
$util.printTree = function(tree) {
|
||||
require('sys').print($util.treeToString(tree));
|
||||
};
|
||||
|
||||
exports.cleanInfo = $util.cleanInfo;
|
||||
|
||||
exports.treeToString = $util.treeToString;
|
||||
|
||||
exports.printTree = $util.printTree;
|
35
node_modules/piler/node_modules/csso/package.json
generated
vendored
Normal file
35
node_modules/piler/node_modules/csso/package.json
generated
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "csso",
|
||||
"description": "CSSO — CSS optimizer",
|
||||
"version": "1.2.18",
|
||||
"homepage": "http://github.com/css/csso",
|
||||
"author": {
|
||||
"name": "Sergey Kryzhanovsky",
|
||||
"email": "skryzhanovsky@ya.ru",
|
||||
"url": "http://github.com/afelix"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "http://github.com/css/csso.git"
|
||||
},
|
||||
"bin": {
|
||||
"csso": "./bin/csso"
|
||||
},
|
||||
"main": "./lib/cssoapi",
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
},
|
||||
"licenses": [
|
||||
{
|
||||
"type": "MIT"
|
||||
}
|
||||
],
|
||||
"readme": "# 1. Introduction\n\nCSSO (CSS Optimizer) is a CSS minimizer unlike others. In addition to usual minification techniques it can perform structural optimization of CSS files, resulting in smaller file size compared to other minifiers.\n\nThis document describes installation and usage of CSSO. If you want to learn more about the inner workings of CSSO, please consult the [manual] (https://github.com/css/csso/blob/master/MANUAL.en.md).\n\nPlease report issues on [Github] (https://github.com/css/csso/issues).\n\nFor feedback, suggestions, etc. write to <skryzhanovsky@ya.ru>.\n\n# 2. Installation\n\n## 2.1. Prerequisites\n\n* for browser use: any OS and a modern web browser\n* for command line use: Linux / Mac OS X / any OS with working Node.js\n\n## 2.2. Install using git\n\nPrerequisites:\n\n* git — [http://git-scm.com/](http://git-scm.com/)\n\nTo install:\n\n* run `git clone git://github.com/css/csso.git`\n\n## 2.3. Install using npm\n\nPrerequisites:\n\n* nodejs 0.4.x — [http://nodejs.org](http://nodejs.org)\n* npm — [http://github.com/isaacs/npm/](http://github.com/isaacs/npm/)\n\nTo install (global):\n\n* run `npm install csso -g`\n\nTo update:\n\n* run `npm update csso`\n\nTo uninstall:\n\n* run `npm uninstall csso`\n\n# 3. Usage\n\n## 3.1. In the browser\n\nOpen `web/csso.html` or [http://css.github.com/csso/csso.html](http://css.github.com/csso/csso.html) in your browser.\n\n**CSSO is not guaranteed to work in browsers. Preferred way to use this tool is to run it from the command line or via npm modules.**\n\n## 3.2. As an npm module\n\nSample (`test.js`):\n\n var csso = require('csso'),\n css = '.test, .test { color: rgb(255, 255, 255) }';\n\n console.log(csso.justDoIt(css));\nOutput (`> node test.js`):\n\n .test{color:#fff}\nUse `csso.justDoIt(css, true)` to turn structure minimization off.\n\n## 3.3. From the command line\n\nRun `bin/csso` (when installed from git), you will need to have nodejs 0.4.x installed — [http://nodejs.org](http://nodejs.org)\n\nRun `csso` (when installed from npm).\n\nUsage:\n\n csso\n shows usage information\n csso <filename>\n minimizes the CSS in <filename> and outputs the result to stdout\n csso <in_filename> <out_filename>\n csso -i <in_filename> -o <out_filename>\n csso --input <in_filename> --output <out_filename>\n minimizes the CSS in <in_filename> and outputs the result to <out_filename>\n csso -off\n csso --restructure-off\n turns structure minimization off\n csso -h\n csso --help\n shows usage information\n csso -v\n csso --version\n shows the version number\n\nExample:\n\n $ echo \".test { color: red; color: green }\" > test.css\n $ csso test.css\n .test{color:green}\n\n# 4. Minification (in a nutshell)\n\nSafe transformations:\n\n* Removal of whitespace\n* Removal of trailing `;`\n* Removal of comments\n* Removal of invalid `@charset` и `@import` declarations\n* Minification of color properties\n* Minification of `0`\n* Minification of multi-line strings\n* Minification of the `font-weight` property\n\nStructural optimizations:\n\n* Merging blocks with identical selectors\n* Merging blocks with identical properties\n* Removal of overridden properties\n* Removal of overridden shorthand properties\n* Removal of repeating selectors\n* Partial merging of blocks\n* Partial splitting of blocks\n* Removal of empty ruleset and at-rule\n* Minification of `margin` and `padding` properties\n\nThe minification techniques are described in detail in the [manual](https://github.com/css/csso/blob/master/MANUAL.en.md).\n\n# 5. Authors\n\n* initial idea — Vitaly Harisov (<vitaly@harisov.name>)\n* implementation — Sergey Kryzhanovsky (<skryzhanovsky@ya.ru>)\n* english translation — Leonid Khachaturov (leonidkhachaturov@gmail.com)\n\n# 6. And finally\n\n* CSSO is licensed under [MIT](https://github.com/css/csso/blob/master/MIT-LICENSE.txt)\n\n<!-- Yandex.Metrika counter -->\n<img src=\"//mc.yandex.ru/watch/12831025\" style=\"position:absolute; left:-9999px;\" alt=\"\" />\n<!-- /Yandex.Metrika counter -->\n",
|
||||
"readmeFilename": "README.md",
|
||||
"_id": "csso@1.2.18",
|
||||
"dist": {
|
||||
"shasum": "a0654d594cd5db4efe6d0defbb7995a3a90d7f23"
|
||||
},
|
||||
"_from": "csso@1.2.x",
|
||||
"_resolved": "https://registry.npmjs.org/csso/-/csso-1.2.18.tgz"
|
||||
}
|
6
node_modules/piler/node_modules/csso/src/compressor.node.js
generated
vendored
Normal file
6
node_modules/piler/node_modules/csso/src/compressor.node.js
generated
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
var translator = require('./translator.js').translator(),
|
||||
cleanInfo = require('./util.js').cleanInfo;
|
||||
|
||||
exports.compress = function(tree, ro) {
|
||||
return new CSSOCompressor().compress(tree, ro);
|
||||
};
|
1281
node_modules/piler/node_modules/csso/src/compressor.shared.js
generated
vendored
Normal file
1281
node_modules/piler/node_modules/csso/src/compressor.shared.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
2
node_modules/piler/node_modules/csso/src/compressor.web.js
generated
vendored
Normal file
2
node_modules/piler/node_modules/csso/src/compressor.web.js
generated
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
var translator = new CSSOTranslator(),
|
||||
cleanInfo = $util.cleanInfo;
|
148
node_modules/piler/node_modules/csso/src/csso.other.js
generated
vendored
Normal file
148
node_modules/piler/node_modules/csso/src/csso.other.js
generated
vendored
Normal file
@ -0,0 +1,148 @@
|
||||
CSSOParser.prototype.mw = function() {
|
||||
var s = this._src,
|
||||
sl = s.length,
|
||||
f = this._gi() + 1, c, i, v = '';
|
||||
for (i = f; i < sl; i++) {
|
||||
c = s.charAt(i);
|
||||
if (/^[ \n\r\t\f]$/.test(c)) v += c;
|
||||
else break;
|
||||
}
|
||||
if (v.length) {
|
||||
this._si(f + v.length - 1);
|
||||
return v;
|
||||
}
|
||||
};
|
||||
|
||||
CSSOParser.prototype.mnumber = function() {
|
||||
var s = this._src,
|
||||
sl = s.length,
|
||||
f = this._gi() + 1, c, i, v = '',
|
||||
n0 = '', d = '', n1 = '';
|
||||
for (i = f; i < sl; i++) {
|
||||
c = s.charAt(i);
|
||||
if (/^[\d]$/.test(c)) n0 += c;
|
||||
else break;
|
||||
}
|
||||
if (s[i++] === '.') {
|
||||
d = '.';
|
||||
for (; i < sl; i++) {
|
||||
c = s.charAt(i);
|
||||
if (/^[\d]$/.test(c)) n1 += c;
|
||||
else break;
|
||||
}
|
||||
}
|
||||
if ((v = n0 + d + n1).length) {
|
||||
this._si(f + v.length - 1);
|
||||
return v;
|
||||
}
|
||||
};
|
||||
|
||||
CSSOParser.prototype.mident = function() {
|
||||
var s = this._src,
|
||||
sl = s.length,
|
||||
f = this._gi() + 1, i = f, v = '', c, n;
|
||||
if (s.charAt(i) === '-') v = '-', i++; // special case
|
||||
c = s.charAt(i); n = s.charAt(i + 1);
|
||||
if (/^[_$a-zA-Z*]$/.test(c)) v += c; // first char
|
||||
else if (c === '\\') {
|
||||
v += c;
|
||||
if (n) v += n, i++;
|
||||
} else return;
|
||||
i++;
|
||||
for (; i < sl; i++) {
|
||||
c = s.charAt(i);
|
||||
n = s.charAt(i + 1);
|
||||
if (/^[_a-zA-Z0-9\-]$/.test(c)) v += c;
|
||||
else if (c === '\\') {
|
||||
v += c;
|
||||
if (n) v += n, i++;
|
||||
} else break;
|
||||
}
|
||||
if (v && v !== '-') {
|
||||
this._si(f + v.length - 1);
|
||||
return v;
|
||||
}
|
||||
};
|
||||
|
||||
CSSOParser.prototype.mcomment1 = function() {
|
||||
var s = this._src,
|
||||
f = this._gi() + 1, v = '', i;
|
||||
if (s.charAt(f) === '/' && s.charAt(f + 1) === '*') {
|
||||
if ((i = s.indexOf('*/', f + 2)) !== -1) {
|
||||
v = s.substring(f + 2, i);
|
||||
this._si(f + v.length + 3);
|
||||
} else {
|
||||
v = s.substr(f + 2);
|
||||
this._si(f + v.length + 1);
|
||||
}
|
||||
return v;
|
||||
}
|
||||
};
|
||||
|
||||
CSSOParser.prototype.mcomment2 = function() {
|
||||
var s = this._src,
|
||||
f = this._gi() + 1, v = '/*', i;
|
||||
if (s.charAt(f) === '/' && s.charAt(f + 1) === '*') {
|
||||
if ((i = s.indexOf('*/', f + 2)) !== -1) {
|
||||
v += s.substring(f + 2, i) + '*/';
|
||||
this._si(f + v.length - 1);
|
||||
} else {
|
||||
v += s.substr(f + 2);
|
||||
this._si(f + v.length - 1);
|
||||
}
|
||||
return v;
|
||||
}
|
||||
};
|
||||
|
||||
CSSOParser.prototype.mname = function() {
|
||||
var s = this._src,
|
||||
sl = s.length,
|
||||
f = this._gi() + 1, i = f, v = '', c, n;
|
||||
for (; i < sl; i++) {
|
||||
c = s.charAt(i);
|
||||
n = s.charAt(i + 1);
|
||||
if (/^[_a-zA-Z0-9\-]$/.test(c)) v += c;
|
||||
else if (c === '\\') {
|
||||
v += c;
|
||||
if (n) v += n, i++;
|
||||
} else break;
|
||||
}
|
||||
if (v) {
|
||||
this._si(f + v.length - 1);
|
||||
return v;
|
||||
}
|
||||
};
|
||||
|
||||
CSSOParser.prototype.mname2 = function() {
|
||||
var s = this._src,
|
||||
sl = s.length,
|
||||
f = this._gi() + 1, i = f, v = '', c, n;
|
||||
for (; i < sl; i++) {
|
||||
c = s.charAt(i);
|
||||
n = s.charAt(i + 1);
|
||||
if (/^[_a-zA-Z0-9]$/.test(c)) v += c;
|
||||
else if (c === '\\') {
|
||||
v += c;
|
||||
if (n) v += n, i++;
|
||||
} else break;
|
||||
}
|
||||
if (v) {
|
||||
this._si(f + v.length - 1);
|
||||
return v;
|
||||
}
|
||||
};
|
||||
|
||||
CSSOParser.prototype.munknown = function() {
|
||||
var s = this._src,
|
||||
sl = s.length,
|
||||
f = this._gi() + 1, i = f, v = '', c, n;
|
||||
for (; i < sl; i++) {
|
||||
c = s.charAt(i);
|
||||
v += c;
|
||||
if (c === '\n' || c === '\r') break;
|
||||
}
|
||||
if (v) {
|
||||
this._si(f + v.length - 1);
|
||||
return v;
|
||||
}
|
||||
};
|
190
node_modules/piler/node_modules/csso/src/csso.pecode
generated
vendored
Normal file
190
node_modules/piler/node_modules/csso/src/csso.pecode
generated
vendored
Normal file
@ -0,0 +1,190 @@
|
||||
pecode CSSOParser {
|
||||
|
||||
@t = [#.info, #.name],
|
||||
@t0 = [#.info, #.name, #0],
|
||||
@t1 = [#.info, #.name, #1],
|
||||
@tc0 = [#.info, #.name].concat(#0),
|
||||
|
||||
unknown = munknown -> @t0,
|
||||
|
||||
mstring1 = !('"', '\\"') -> #0,
|
||||
|
||||
mstring2 = !("'", "\\'") -> #0,
|
||||
|
||||
mstring = '"' *('\\"', mstring1) '"' -> ('"' + #1.join('') + '"')
|
||||
| "'" *("\\'", mstring2) "'" -> ("'" + #1.join('') + "'"),
|
||||
|
||||
string = mstring -> @t0,
|
||||
|
||||
escape = '\\' #char -> ('\\' + #1),
|
||||
|
||||
ident = mident -> @t0,
|
||||
|
||||
atkeyword = '@' ident -> @t1,
|
||||
|
||||
shash = '#' mname -> @t1,
|
||||
|
||||
vhash = '#' mname2 -> @t1,
|
||||
|
||||
number = mnumber -> @t0,
|
||||
|
||||
percentage = number '%' -> @t0,
|
||||
|
||||
ident2 = mname2 -> [#.info, 'ident', #0],
|
||||
|
||||
dimension = number ident2 -> [#.info, #.name, #0, #1],
|
||||
|
||||
cdo = '<!--' -> @t,
|
||||
|
||||
cdc = '-->' -> @t,
|
||||
|
||||
s = +mw -> [#.info, #.name, #0.join('')],
|
||||
|
||||
attrselector = ('=', '~=', '^=', '$=', '*=', '|=', '~') -> @t0,
|
||||
|
||||
delim = ',' -> @t,
|
||||
|
||||
comment = mcomment1 -> @t0,
|
||||
|
||||
sc = (s, comment) -> #0,
|
||||
|
||||
tset = (vhash, any, sc, operator) -> #0,
|
||||
|
||||
stylesheet = *(cdo, cdc, sc, statement, unknown) -> @tc0,
|
||||
|
||||
statement = (ruleset, atrule) -> #0,
|
||||
|
||||
atruleb = atkeyword *tset block -> [#.info, #.name, #0].concat(#1, [#2]),
|
||||
|
||||
atrules = atkeyword *tset ';' -> [#.info, #.name, #0].concat(#1),
|
||||
|
||||
atrulerq = *tset -> @tc0,
|
||||
|
||||
atrulers = *sc *ruleset *sc -> [#.info, #.name].concat(#0, #1, #2),
|
||||
|
||||
atruler = atkeyword atrulerq '{' atrulers '}' -> [#.info, #.name, #0, #1, #3],
|
||||
|
||||
atrule = (atruler, atruleb, atrules) -> #0,
|
||||
|
||||
blockdecl = *sc (filter, declaration) decldelim *sc -> [].concat(#0, [#1], [#2], #3)
|
||||
| *sc (filter, declaration) *sc -> [].concat(#0, [#1], #2)
|
||||
| *sc decldelim *sc -> [].concat(#0, [#1], #2)
|
||||
| +sc -> #0,
|
||||
|
||||
decldelim = ';' -> @t,
|
||||
|
||||
block = '{' *blockdecl '}' -> this._cc([#.info, #.name], #1),
|
||||
|
||||
ruleset = *selector block -> [#.info, #.name].concat(#0, [#1]),
|
||||
|
||||
combinator = ('+', '>', '~') -> @t0,
|
||||
|
||||
attrib = '[' *sc ident *sc attrselector *sc (ident, string) *sc ']' -> [#.info, #.name].concat(#1, [#2], #3, [#4], #5, [#6], #7)
|
||||
| '[' *sc ident *sc ']' -> [#.info, #.name].concat(#1, [#2], #3),
|
||||
|
||||
clazz = '.' ident -> @t1,
|
||||
|
||||
pseudoe = '::' ident -> @t1,
|
||||
|
||||
pseudoc = ':' (funktion, ident) -> @t1,
|
||||
|
||||
pseudo = (pseudoe, pseudoc) -> #0,
|
||||
|
||||
nthf = ':' 'nth-' ('child', 'last-child', 'of-type', 'last-of-type') -> [#.info, 'ident', #1 + #2],
|
||||
|
||||
nth = +(/^[\d]/1, 'n') -> [#.info, #.name, #0.join('')]
|
||||
| ('even', 'odd') -> @t0,
|
||||
|
||||
nthselector = nthf '(' *(sc, unary, nth) ')' -> [#.info, #.name, #0].concat(#2),
|
||||
|
||||
namespace = '|' -> @t,
|
||||
|
||||
simpleselector = +(nthselector, combinator, attrib, pseudo, clazz, shash, any, sc, namespace) -> this._cc([#.info, #.name], [#0]),
|
||||
|
||||
selector = +(simpleselector, delim) -> @tc0,
|
||||
|
||||
declaration = property ':' value -> [#.info, #.name, #0, #2],
|
||||
|
||||
filtern = ('-filter', '$filter', '_filter', '*filter', '-ms-filter', 'filter') -> [#.info, 'ident', #0],
|
||||
|
||||
filterp = filtern *sc -> [#.info, 'property', #0].concat(#1),
|
||||
|
||||
progid0 = !(')', mstring, mcomment2) -> #0,
|
||||
|
||||
progid1 = 'progid:DXImageTransform.Microsoft.' /^[a-zA-Z]+/25 '(' +(mstring, mcomment2, progid0) ')' -> [#.info, 'raw', #0 + #1 + '(' + #3.join('') + ')'],
|
||||
|
||||
progid = *sc progid1 *sc -> [#.info, #.name].concat(#0, [#1], #2),
|
||||
|
||||
filterv = +progid -> @tc0,
|
||||
|
||||
filter = filterp ':' filterv -> [#.info, #.name, #0, #2],
|
||||
|
||||
identp = '//' mident -> [#.info, 'ident', #0 + #1],
|
||||
|
||||
property = identp *sc -> [#.info, #.name, #0].concat(#1)
|
||||
| ident *sc -> [#.info, #.name, #0].concat(#1),
|
||||
|
||||
important = '!' *sc 'important' -> [#.info, #.name].concat(#1),
|
||||
|
||||
unary = ('-', '+') -> @t0,
|
||||
|
||||
operator = ('/', ',', ':', '=') -> @t0,
|
||||
|
||||
uri0 = !(')', mw) -> [#.info, 'raw', #0],
|
||||
|
||||
uri = 'url(' *sc string *sc ')' -> [#.info, #.name].concat(#1, [#2], #3)
|
||||
| 'url(' *sc uri0 *sc ')' -> [#.info, #.name].concat(#1, [#2], #3),
|
||||
|
||||
value = +(sc, vhash, any, block, atkeyword, operator, important) -> @tc0,
|
||||
|
||||
functionBody = *tset -> @tc0,
|
||||
|
||||
funktion = notselector -> #0
|
||||
| ident '(' functionBody ')' -> [#.info, #.name, #0, #2],
|
||||
|
||||
notselectorident = 'not' -> [#.info, 'ident', #0],
|
||||
|
||||
notselector = notselectorident '(' notselectorBody ')' -> [#.info, 'funktion', #0, #2],
|
||||
|
||||
notselectorBody = ?simpleselector -> [#.info, 'functionBody', #0],
|
||||
|
||||
braces = '(' *tset ')' -> [#.info, #.name, '(', ')'].concat(#1)
|
||||
| '[' *tset ']' -> [#.info, #.name, '[', ']'].concat(#1),
|
||||
|
||||
jsLT = ('\n', '\r') -> #0,
|
||||
|
||||
jsComment = (jsMLComment, jsSLComment) -> #0,
|
||||
|
||||
jsMLComment = '/*' !'*/' '*/' -> (#0 + (#1 ? #1 : '') + #2),
|
||||
|
||||
jsSLComment = '//' !jsLT -> ('//' + (#1 ? #1 : '')),
|
||||
|
||||
jsString = '"' *jsDSChar '"' -> ('"' + #1.join('') + '"')
|
||||
| '\'' *jsSSChar '\'' -> ('\'' + #1.join('') + '\''),
|
||||
|
||||
jsDSChar = !('"', '\\', jsLT, jsEscapeChar, jsLineContinuation) -> #0
|
||||
| jsEscapeChar -> #0
|
||||
| jsLineContinuation -> #0,
|
||||
|
||||
jsSSChar = !('\'', '\\', jsLT, jsEscapeChar, jsLineContinuation) -> #0
|
||||
| jsEscapeChar -> #0
|
||||
| jsLineContinuation -> #0,
|
||||
|
||||
jsLineContinuation = '\\' *jsLT -> ('\\' + #1.join('')),
|
||||
|
||||
jsEscapeChar = '\\' #char -> ('\\' + #1),
|
||||
|
||||
jsInBraceChar = !('(', ')', jsComment, jsString, jsEscapeChar) -> #0,
|
||||
|
||||
jsBracesContent = +(jsComment, jsString, jsEscapeChar, jsInBraceChar) -> #0.join(''),
|
||||
|
||||
feb = functionExpressionBody *jsBracesContent -> (#0 + #1.join('')),
|
||||
|
||||
functionExpressionBody = '(' +jsBracesContent *feb ')' -> ('(' + #1.join('') + #2.join('') + ')')
|
||||
| '(' *feb ')' -> ('(' + #1.join('') + ')')
|
||||
| +jsBracesContent *feb -> (#0.join('') + #1.join('')),
|
||||
|
||||
functionExpression = 'expression(' *functionExpressionBody ')' -> [#.info, #.name, #1.join('')],
|
||||
|
||||
any = (braces, string, percentage, dimension, number, uri, functionExpression, funktion, ident, unary) -> #0
|
||||
}
|
3
node_modules/piler/node_modules/csso/src/parser.node.js
generated
vendored
Normal file
3
node_modules/piler/node_modules/csso/src/parser.node.js
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
exports.parse = function(s, rule) {
|
||||
return new CSSOParser().parse(s, rule);
|
||||
};
|
7
node_modules/piler/node_modules/csso/src/translator.node.js
generated
vendored
Normal file
7
node_modules/piler/node_modules/csso/src/translator.node.js
generated
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
exports.translate = function(tree) {
|
||||
return new CSSOTranslator().translate(tree);
|
||||
};
|
||||
|
||||
exports.translator = function() {
|
||||
return new CSSOTranslator();
|
||||
};
|
119
node_modules/piler/node_modules/csso/src/translator.shared.js
generated
vendored
Normal file
119
node_modules/piler/node_modules/csso/src/translator.shared.js
generated
vendored
Normal file
@ -0,0 +1,119 @@
|
||||
function CSSOTranslator() {}
|
||||
|
||||
CSSOTranslator.prototype.translate = function(tree) {
|
||||
return this._t(tree);
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype._m_simple = {
|
||||
'unary': 1, 'nth': 1, 'combinator': 1, 'ident': 1, 'number': 1, 's': 1,
|
||||
'string': 1, 'attrselector': 1, 'operator': 1, 'raw': 1, 'unknown': 1
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype._m_composite = {
|
||||
'simpleselector': 1, 'dimension': 1, 'selector': 1, 'property': 1, 'value': 1,
|
||||
'filterv': 1, 'progid': 1, 'ruleset': 1, 'atruleb': 1, 'atrulerq': 1, 'atrulers': 1,
|
||||
'stylesheet': 1
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype._m_primitive = {
|
||||
'cdo': 'cdo', 'cdc': 'cdc', 'decldelim': ';', 'namespace': '|', 'delim': ','
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype._t = function(tree) {
|
||||
var t = tree[0];
|
||||
if (t in this._m_primitive) return this._m_primitive[t];
|
||||
else if (t in this._m_simple) return this._simple(tree);
|
||||
else if (t in this._m_composite) return this._composite(tree);
|
||||
return this[t](tree);
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype._composite = function(t, i) {
|
||||
var s = '';
|
||||
i = i === undefined ? 1 : i;
|
||||
for (; i < t.length; i++) s += this._t(t[i]);
|
||||
return s;
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype._simple = function(t) {
|
||||
return t[1];
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.percentage = function(t) {
|
||||
return this._t(t[1]) + '%';
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.comment = function(t) {
|
||||
return '/*' + t[1] + '*/';
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.clazz = function(t) {
|
||||
return '.' + this._t(t[1]);
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.atkeyword = function(t) {
|
||||
return '@' + this._t(t[1]);
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.shash = function(t) {
|
||||
return '#' + t[1];
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.vhash = function(t) {
|
||||
return '#' + t[1];
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.attrib = function(t) {
|
||||
return '[' + this._composite(t) + ']';
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.important = function(t) {
|
||||
return '!' + this._composite(t) + 'important';
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.nthselector = function(t) {
|
||||
return ':' + this._simple(t[1]) + '(' + this._composite(t, 2) + ')';
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.funktion = function(t) {
|
||||
return this._simple(t[1]) + '(' + this._composite(t[2]) + ')';
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.declaration = function(t) {
|
||||
return this._t(t[1]) + ':' + this._t(t[2]);
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.filter = function(t) {
|
||||
return this._t(t[1]) + ':' + this._t(t[2]);
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.block = function(t) {
|
||||
return '{' + this._composite(t) + '}';
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.braces = function(t) {
|
||||
return t[1] + this._composite(t, 3) + t[2];
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.atrules = function(t) {
|
||||
return this._composite(t) + ';';
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.atruler = function(t) {
|
||||
return this._t(t[1]) + this._t(t[2]) + '{' + this._t(t[3]) + '}';
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.pseudoe = function(t) {
|
||||
return '::' + this._t(t[1]);
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.pseudoc = function(t) {
|
||||
return ':' + this._t(t[1]);
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.uri = function(t) {
|
||||
return 'url(' + this._composite(t) + ')';
|
||||
};
|
||||
|
||||
CSSOTranslator.prototype.functionExpression = function(t) {
|
||||
return 'expression(' + t[1] + ')';
|
||||
};
|
166
node_modules/piler/node_modules/csso/src/trbl.js
generated
vendored
Normal file
166
node_modules/piler/node_modules/csso/src/trbl.js
generated
vendored
Normal file
@ -0,0 +1,166 @@
|
||||
function TRBL(name, imp) {
|
||||
this.name = TRBL.extractMain(name);
|
||||
this.sides = {
|
||||
'top': null,
|
||||
'right': null,
|
||||
'bottom': null,
|
||||
'left': null
|
||||
};
|
||||
this.imp = imp ? 4 : 0;
|
||||
}
|
||||
|
||||
TRBL.props = {
|
||||
'margin': 1,
|
||||
'margin-top': 1,
|
||||
'margin-right': 1,
|
||||
'margin-bottom': 1,
|
||||
'margin-left': 1,
|
||||
'padding': 1,
|
||||
'padding-top': 1,
|
||||
'padding-right': 1,
|
||||
'padding-bottom': 1,
|
||||
'padding-left': 1
|
||||
};
|
||||
|
||||
TRBL.extractMain = function(name) {
|
||||
var i = name.indexOf('-');
|
||||
return i === -1 ? name : name.substr(0, i);
|
||||
};
|
||||
|
||||
TRBL.prototype.impSum = function() {
|
||||
var imp = 0, n = 0;
|
||||
for (var k in this.sides) {
|
||||
if (this.sides[k]) {
|
||||
n++;
|
||||
if (this.sides[k].imp) imp++;
|
||||
}
|
||||
}
|
||||
return imp === n ? imp : 0;
|
||||
};
|
||||
|
||||
TRBL.prototype.add = function(name, sValue, tValue, imp) {
|
||||
var s = this.sides,
|
||||
currentSide,
|
||||
i, x, side, a = [], last,
|
||||
imp = imp ? 1 : 0,
|
||||
wasUnary = false;
|
||||
if ((i = name.lastIndexOf('-')) !== -1) {
|
||||
side = name.substr(i + 1);
|
||||
if (side in s) {
|
||||
if (!(currentSide = s[side]) || (imp && !currentSide.imp)) {
|
||||
s[side] = { s: imp ? sValue.substring(0, sValue.length - 10) : sValue, t: [tValue[0]], imp: imp };
|
||||
if (tValue[0][1] === 'unary') s[side].t.push(tValue[1]);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
} else if (name === this.name) {
|
||||
for (i = 0; i < tValue.length; i++) {
|
||||
x = tValue[i];
|
||||
last = a[a.length - 1];
|
||||
switch(x[1]) {
|
||||
case 'unary':
|
||||
a.push({ s: x[2], t: [x], imp: imp });
|
||||
wasUnary = true;
|
||||
break;
|
||||
case 'number':
|
||||
case 'ident':
|
||||
if (wasUnary) {
|
||||
last.t.push(x);
|
||||
last.s += x[2];
|
||||
} else {
|
||||
a.push({ s: x[2], t: [x], imp: imp });
|
||||
}
|
||||
wasUnary = false;
|
||||
break;
|
||||
case 'percentage':
|
||||
if (wasUnary) {
|
||||
last.t.push(x);
|
||||
last.s += x[2][2] + '%';
|
||||
} else {
|
||||
a.push({ s: x[2][2] + '%', t: [x], imp: imp });
|
||||
}
|
||||
wasUnary = false;
|
||||
break;
|
||||
case 'dimension':
|
||||
if (wasUnary) {
|
||||
last.t.push(x);
|
||||
last.s += x[2][2] + x[3][2];
|
||||
} else {
|
||||
a.push({ s: x[2][2] + x[3][2], t: [x], imp: imp });
|
||||
}
|
||||
wasUnary = false;
|
||||
break;
|
||||
case 's':
|
||||
case 'comment':
|
||||
case 'important':
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (a.length > 4) return false;
|
||||
|
||||
if (!a[1]) a[1] = a[0];
|
||||
if (!a[2]) a[2] = a[0];
|
||||
if (!a[3]) a[3] = a[1];
|
||||
|
||||
if (!s.top) s.top = a[0];
|
||||
if (!s.right) s.right = a[1];
|
||||
if (!s.bottom) s.bottom = a[2];
|
||||
if (!s.left) s.left = a[3];
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
TRBL.prototype.isOkToMinimize = function() {
|
||||
var s = this.sides,
|
||||
imp;
|
||||
|
||||
if (!!(s.top && s.right && s.bottom && s.left)) {
|
||||
imp = s.top.imp + s.right.imp + s.bottom.imp + s.left.imp;
|
||||
return (imp === 0 || imp === 4 || imp === this.imp);
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
TRBL.prototype.getValue = function() {
|
||||
var s = this.sides,
|
||||
a = [s.top, s.right, s.bottom, s.left],
|
||||
r = [{}, 'value'];
|
||||
|
||||
if (s.left.s === s.right.s) {
|
||||
a.length--;
|
||||
if (s.bottom.s === s.top.s) {
|
||||
a.length--;
|
||||
if (s.right.s === s.top.s) {
|
||||
a.length--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < a.length - 1; i++) {
|
||||
r = r.concat(a[i].t);
|
||||
r.push([{ s: ' ' }, 's', ' ']);
|
||||
}
|
||||
r = r.concat(a[i].t);
|
||||
|
||||
if (this.impSum()) r.push([{ s: '!important'}, 'important']);
|
||||
|
||||
return r;
|
||||
};
|
||||
|
||||
TRBL.prototype.getProperty = function() {
|
||||
return [{ s: this.name }, 'property', [{ s: this.name }, 'ident', this.name]];
|
||||
};
|
||||
|
||||
TRBL.prototype.getString = function() {
|
||||
var p = this.getProperty(),
|
||||
v = this.getValue().slice(2),
|
||||
r = p[0].s + ':';
|
||||
|
||||
for (var i = 0; i < v.length; i++) r += v[i][0].s;
|
||||
|
||||
return r;
|
||||
};
|
9
node_modules/piler/node_modules/csso/src/util.node.js
generated
vendored
Normal file
9
node_modules/piler/node_modules/csso/src/util.node.js
generated
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
$util.printTree = function(tree) {
|
||||
require('sys').print($util.treeToString(tree));
|
||||
};
|
||||
|
||||
exports.cleanInfo = $util.cleanInfo;
|
||||
|
||||
exports.treeToString = $util.treeToString;
|
||||
|
||||
exports.printTree = $util.printTree;
|
32
node_modules/piler/node_modules/csso/src/util.shared.js
generated
vendored
Normal file
32
node_modules/piler/node_modules/csso/src/util.shared.js
generated
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
var $util = {};
|
||||
|
||||
$util.cleanInfo = function(tree) {
|
||||
var r = [];
|
||||
tree = tree.slice(1);
|
||||
|
||||
tree.forEach(function(e) {
|
||||
r.push(Array.isArray(e) ? $util.cleanInfo(e) : e);
|
||||
});
|
||||
|
||||
return r;
|
||||
};
|
||||
|
||||
$util.treeToString = function(tree, level) {
|
||||
var spaces = $util.dummySpaces(level),
|
||||
level = level ? level : 0,
|
||||
s = (level ? '\n' + spaces : '') + '[';
|
||||
|
||||
tree.forEach(function(e) {
|
||||
s += (Array.isArray(e) ? $util.treeToString(e, level + 1) : e.f !== undefined ? $util.ircToString(e) : ('\'' + e.toString() + '\'')) + ', ';
|
||||
});
|
||||
|
||||
return s.substr(0, s.length - 2) + ']';
|
||||
};
|
||||
|
||||
$util.ircToString = function(o) {
|
||||
return '{' + o.f + ',' + o.l + '}';
|
||||
};
|
||||
|
||||
$util.dummySpaces = function(num) {
|
||||
return ' '.substr(0, num * 2);
|
||||
};
|
1
node_modules/piler/node_modules/csso/test/data/test_atkeyword/atkeyword.0.css
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atkeyword/atkeyword.0.css
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@import
|
1
node_modules/piler/node_modules/csso/test/data/test_atkeyword/atkeyword.0.l
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atkeyword/atkeyword.0.l
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@import
|
2
node_modules/piler/node_modules/csso/test/data/test_atkeyword/atkeyword.0.p
generated
vendored
Normal file
2
node_modules/piler/node_modules/csso/test/data/test_atkeyword/atkeyword.0.p
generated
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
['atkeyword',
|
||||
['ident', 'import']]
|
1
node_modules/piler/node_modules/csso/test/data/test_atkeyword/atkeyword.1.css
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atkeyword/atkeyword.1.css
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@font-face
|
1
node_modules/piler/node_modules/csso/test/data/test_atkeyword/atkeyword.1.l
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atkeyword/atkeyword.1.l
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@font-face
|
2
node_modules/piler/node_modules/csso/test/data/test_atkeyword/atkeyword.1.p
generated
vendored
Normal file
2
node_modules/piler/node_modules/csso/test/data/test_atkeyword/atkeyword.1.p
generated
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
['atkeyword',
|
||||
['ident', 'font-face']]
|
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.0.css
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.0.css
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@test{p:v}
|
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.0.l
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.0.l
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@test{p:v}
|
9
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.0.p
generated
vendored
Normal file
9
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.0.p
generated
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
['atruleb',
|
||||
['atkeyword',
|
||||
['ident', 'test']],
|
||||
['block',
|
||||
['declaration',
|
||||
['property',
|
||||
['ident', 'p']],
|
||||
['value',
|
||||
['ident', 'v']]]]]
|
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.1.css
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.1.css
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@test x y {p:v}
|
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.1.l
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.1.l
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@test x y {p:v}
|
14
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.1.p
generated
vendored
Normal file
14
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.1.p
generated
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
['atruleb',
|
||||
['atkeyword',
|
||||
['ident', 'test']],
|
||||
['s', ' '],
|
||||
['ident', 'x'],
|
||||
['s', ' '],
|
||||
['ident', 'y'],
|
||||
['s', ' '],
|
||||
['block',
|
||||
['declaration',
|
||||
['property',
|
||||
['ident', 'p']],
|
||||
['value',
|
||||
['ident', 'v']]]]]
|
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.2.css
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.2.css
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@test x, y x(1+2) {p:v}
|
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.2.l
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.2.l
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@test x, y x(1+2) {p:v}
|
22
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.2.p
generated
vendored
Normal file
22
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.2.p
generated
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
['atruleb',
|
||||
['atkeyword',
|
||||
['ident', 'test']],
|
||||
['s', ' '],
|
||||
['ident', 'x'],
|
||||
['operator', ','],
|
||||
['s', ' '],
|
||||
['ident', 'y'],
|
||||
['s', ' '],
|
||||
['funktion',
|
||||
['ident', 'x'],
|
||||
['functionBody',
|
||||
['number', '1'],
|
||||
['unary', '+'],
|
||||
['number', '2']]],
|
||||
['s', ' '],
|
||||
['block',
|
||||
['declaration',
|
||||
['property',
|
||||
['ident', 'p']],
|
||||
['value',
|
||||
['ident', 'v']]]]]
|
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.c.0.css
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.c.0.css
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@test/*test*/{/*test*/p/*test*/:/*test*/v/*test*/}
|
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.c.0.l
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.c.0.l
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@test/*test*/{/*test*/p/*test*/:/*test*/v/*test*/}
|
14
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.c.0.p
generated
vendored
Normal file
14
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.c.0.p
generated
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
['atruleb',
|
||||
['atkeyword',
|
||||
['ident', 'test']],
|
||||
['comment', 'test'],
|
||||
['block',
|
||||
['comment', 'test'],
|
||||
['declaration',
|
||||
['property',
|
||||
['ident', 'p'],
|
||||
['comment', 'test']],
|
||||
['value',
|
||||
['comment', 'test'],
|
||||
['ident', 'v'],
|
||||
['comment', 'test']]]]]
|
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.c.1.css
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.c.1.css
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@test/*test*/x/*test*/y/*test*/{/*test*/p/*test*/:/*test*/v/*test*/}
|
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.c.1.l
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.c.1.l
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@test/*test*/x/*test*/y/*test*/{/*test*/p/*test*/:/*test*/v/*test*/}
|
18
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.c.1.p
generated
vendored
Normal file
18
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.c.1.p
generated
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
['atruleb',
|
||||
['atkeyword',
|
||||
['ident', 'test']],
|
||||
['comment', 'test'],
|
||||
['ident', 'x'],
|
||||
['comment', 'test'],
|
||||
['ident', 'y'],
|
||||
['comment', 'test'],
|
||||
['block',
|
||||
['comment', 'test'],
|
||||
['declaration',
|
||||
['property',
|
||||
['ident', 'p'],
|
||||
['comment', 'test']],
|
||||
['value',
|
||||
['comment', 'test'],
|
||||
['ident', 'v'],
|
||||
['comment', 'test']]]]]
|
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.c.2.css
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.c.2.css
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@test/*test*/x/*test*/,/*test*/y/*test*/x(/*test*/1/*test*/+/*test*/2/*test*/)/*test*/{/*test*/p/*test*/:/*test*/v/*test*/}
|
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.c.2.l
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.c.2.l
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@test/*test*/x/*test*/,/*test*/y/*test*/x(/*test*/1/*test*/+/*test*/2/*test*/)/*test*/{/*test*/p/*test*/:/*test*/v/*test*/}
|
31
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.c.2.p
generated
vendored
Normal file
31
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.c.2.p
generated
vendored
Normal file
@ -0,0 +1,31 @@
|
||||
['atruleb',
|
||||
['atkeyword',
|
||||
['ident', 'test']],
|
||||
['comment', 'test'],
|
||||
['ident', 'x'],
|
||||
['comment', 'test'],
|
||||
['operator', ','],
|
||||
['comment', 'test'],
|
||||
['ident', 'y'],
|
||||
['comment', 'test'],
|
||||
['funktion',
|
||||
['ident', 'x'],
|
||||
['functionBody',
|
||||
['comment', 'test'],
|
||||
['number', '1'],
|
||||
['comment', 'test'],
|
||||
['unary', '+'],
|
||||
['comment', 'test'],
|
||||
['number', '2'],
|
||||
['comment', 'test']]],
|
||||
['comment', 'test'],
|
||||
['block',
|
||||
['comment', 'test'],
|
||||
['declaration',
|
||||
['property',
|
||||
['ident', 'p'],
|
||||
['comment', 'test']],
|
||||
['value',
|
||||
['comment', 'test'],
|
||||
['ident', 'v'],
|
||||
['comment', 'test']]]]]
|
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.s.0.css
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.s.0.css
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@test { p : v }
|
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.s.0.l
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.s.0.l
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@test { p : v }
|
14
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.s.0.p
generated
vendored
Normal file
14
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.s.0.p
generated
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
['atruleb',
|
||||
['atkeyword',
|
||||
['ident', 'test']],
|
||||
['s', ' '],
|
||||
['block',
|
||||
['s', ' '],
|
||||
['declaration',
|
||||
['property',
|
||||
['ident', 'p'],
|
||||
['s', ' ']],
|
||||
['value',
|
||||
['s', ' '],
|
||||
['ident', 'v'],
|
||||
['s', ' ']]]]]
|
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.s.1.css
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.s.1.css
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@test x y { p : v }
|
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.s.1.l
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.s.1.l
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@test x y { p : v }
|
18
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.s.1.p
generated
vendored
Normal file
18
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.s.1.p
generated
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
['atruleb',
|
||||
['atkeyword',
|
||||
['ident', 'test']],
|
||||
['s', ' '],
|
||||
['ident', 'x'],
|
||||
['s', ' '],
|
||||
['ident', 'y'],
|
||||
['s', ' '],
|
||||
['block',
|
||||
['s', ' '],
|
||||
['declaration',
|
||||
['property',
|
||||
['ident', 'p'],
|
||||
['s', ' ']],
|
||||
['value',
|
||||
['s', ' '],
|
||||
['ident', 'v'],
|
||||
['s', ' ']]]]]
|
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.s.2.css
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.s.2.css
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@test x , y x( 1 + 2 ) { p : v }
|
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.s.2.l
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.s.2.l
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@test x , y x( 1 + 2 ) { p : v }
|
31
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.s.2.p
generated
vendored
Normal file
31
node_modules/piler/node_modules/csso/test/data/test_atruleb/atruleb.s.2.p
generated
vendored
Normal file
@ -0,0 +1,31 @@
|
||||
['atruleb',
|
||||
['atkeyword',
|
||||
['ident', 'test']],
|
||||
['s', ' '],
|
||||
['ident', 'x'],
|
||||
['s', ' '],
|
||||
['operator', ','],
|
||||
['s', ' '],
|
||||
['ident', 'y'],
|
||||
['s', ' '],
|
||||
['funktion',
|
||||
['ident', 'x'],
|
||||
['functionBody',
|
||||
['s', ' '],
|
||||
['number', '1'],
|
||||
['s', ' '],
|
||||
['unary', '+'],
|
||||
['s', ' '],
|
||||
['number', '2'],
|
||||
['s', ' ']]],
|
||||
['s', ' '],
|
||||
['block',
|
||||
['s', ' '],
|
||||
['declaration',
|
||||
['property',
|
||||
['ident', 'p'],
|
||||
['s', ' ']],
|
||||
['value',
|
||||
['s', ' '],
|
||||
['ident', 'v'],
|
||||
['s', ' ']]]]]
|
1
node_modules/piler/node_modules/csso/test/data/test_atruler/atruler.0.css
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atruler/atruler.0.css
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@media {s{p:v}}
|
1
node_modules/piler/node_modules/csso/test/data/test_atruler/atruler.0.l
generated
vendored
Normal file
1
node_modules/piler/node_modules/csso/test/data/test_atruler/atruler.0.l
generated
vendored
Normal file
@ -0,0 +1 @@
|
||||
@media {s{p:v}}
|
16
node_modules/piler/node_modules/csso/test/data/test_atruler/atruler.0.p
generated
vendored
Normal file
16
node_modules/piler/node_modules/csso/test/data/test_atruler/atruler.0.p
generated
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
['atruler',
|
||||
['atkeyword',
|
||||
['ident', 'media']],
|
||||
['atrulerq',
|
||||
['s', ' ']],
|
||||
['atrulers',
|
||||
['ruleset',
|
||||
['selector',
|
||||
['simpleselector',
|
||||
['ident', 's']]],
|
||||
['block',
|
||||
['declaration',
|
||||
['property',
|
||||
['ident', 'p']],
|
||||
['value',
|
||||
['ident', 'v']]]]]]]
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user