Added node-modules

This commit is contained in:
Dobie Wollert
2014-09-14 07:04:16 -04:00
parent 663941bf57
commit 6a92348cf5
4870 changed files with 670395 additions and 0 deletions

1
node_modules/piler/node_modules/.bin/cake generated vendored Symbolic link
View File

@ -0,0 +1 @@
../coffee-script/bin/cake

1
node_modules/piler/node_modules/.bin/coffee generated vendored Symbolic link
View File

@ -0,0 +1 @@
../coffee-script/bin/coffee

1
node_modules/piler/node_modules/.bin/csso generated vendored Symbolic link
View File

@ -0,0 +1 @@
../csso/bin/csso

1
node_modules/piler/node_modules/.bin/uglifyjs generated vendored Symbolic link
View File

@ -0,0 +1 @@
../uglify-js/bin/uglifyjs

9
node_modules/piler/node_modules/async/.gitmodules generated vendored Normal file
View 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
View File

@ -0,0 +1,4 @@
deps
dist
test
nodelint.cfg

19
node_modules/piler/node_modules/async/LICENSE generated vendored Normal file
View 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
View 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

File diff suppressed because it is too large Load Diff

3
node_modules/piler/node_modules/async/index.js generated vendored Normal file
View 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
View 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

File diff suppressed because one or more lines are too long

View 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
View File

@ -0,0 +1 @@
coffeescript.org

22
node_modules/piler/node_modules/coffee-script/LICENSE generated vendored Normal file
View 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
View 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
View 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
View 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
View 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();

View 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

View 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);

View 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);

View 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);

View 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);

View 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);

View 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);

View 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);

View 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);

File diff suppressed because it is too large Load Diff

View 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);

File diff suppressed because one or more lines are too long

View 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);

View 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);

View 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);

View 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
View 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
View 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
View 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 меньшего размера. Наиболее распространёнными стратегиями в достижении этой цели являются:
* минимизация без изменения структуры&nbsp;— удаление необязательных элементов (например, `;` у последнего свойства в блоке), сведение значений к меньшим по размеру (например, `0px` к `0`) и т.п.;
* минимизация с изменением структуры&nbsp;— удаление перекрываемых свойств, полное или частичное слияние блоков.
## 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
View 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
View 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&nbsp;— [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&nbsp;— [http://nodejs.org](http://nodejs.org)
* npm&nbsp;— [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&nbsp;— [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&nbsp;— Vitaly Harisov (<vitaly@harisov.name>)
* implementation&nbsp;— Sergey Kryzhanovsky (<skryzhanovsky@ya.ru>)
* english translation&nbsp;— 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
View 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&nbsp;— [http://git-scm.com/](http://git-scm.com/)
Установка:
* выполнить `git clone git://github.com/css/csso.git`
## 2.3. Установка с помощью npm
Предварительные требования:
* nodejs версии 0.4.x&nbsp;— [http://nodejs.org](http://nodejs.org)
* npm&nbsp;— [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 в браузерах не гарантирована. Рекомендуемый путь использования этой утилиты&nbsp;— использование из командной строки или 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&nbsp;— [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. Авторы
* идея и поддержка&nbsp;— Виталий Харисов (<vitaly@harisov.name>)
* реализация&nbsp;— Сергей Крыжановский (<skryzhanovsky@ya.ru>)
* перевод на английский язык&nbsp;— 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
View 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
View File

@ -0,0 +1 @@
CSSO 1.2.18

14
node_modules/piler/node_modules/csso/bin/csso generated vendored Executable file
View 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 $@

View 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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

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
View 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
View 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
View 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
View 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
View 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
View 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&nbsp;— [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&nbsp;— [http://nodejs.org](http://nodejs.org)\n* npm&nbsp;— [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&nbsp;— [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&nbsp;— Vitaly Harisov (<vitaly@harisov.name>)\n* implementation&nbsp;— Sergey Kryzhanovsky (<skryzhanovsky@ya.ru>)\n* english translation&nbsp;— 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"
}

View 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);
};

File diff suppressed because it is too large Load Diff

View 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
View 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
View 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
}

View File

@ -0,0 +1,3 @@
exports.parse = function(s, rule) {
return new CSSOParser().parse(s, rule);
};

View File

@ -0,0 +1,7 @@
exports.translate = function(tree) {
return new CSSOTranslator().translate(tree);
};
exports.translator = function() {
return new CSSOTranslator();
};

View 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
View 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;
};

View 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;

View 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);
};

View File

@ -0,0 +1 @@
@import

View File

@ -0,0 +1 @@
@import

View File

@ -0,0 +1,2 @@
['atkeyword',
['ident', 'import']]

View File

@ -0,0 +1 @@
@font-face

View File

@ -0,0 +1 @@
@font-face

View File

@ -0,0 +1,2 @@
['atkeyword',
['ident', 'font-face']]

View File

@ -0,0 +1 @@
@test{p:v}

View File

@ -0,0 +1 @@
@test{p:v}

View File

@ -0,0 +1,9 @@
['atruleb',
['atkeyword',
['ident', 'test']],
['block',
['declaration',
['property',
['ident', 'p']],
['value',
['ident', 'v']]]]]

View File

@ -0,0 +1 @@
@test x y {p:v}

View File

@ -0,0 +1 @@
@test x y {p:v}

View File

@ -0,0 +1,14 @@
['atruleb',
['atkeyword',
['ident', 'test']],
['s', ' '],
['ident', 'x'],
['s', ' '],
['ident', 'y'],
['s', ' '],
['block',
['declaration',
['property',
['ident', 'p']],
['value',
['ident', 'v']]]]]

View File

@ -0,0 +1 @@
@test x, y x(1+2) {p:v}

View File

@ -0,0 +1 @@
@test x, y x(1+2) {p:v}

View 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']]]]]

View File

@ -0,0 +1 @@
@test/*test*/{/*test*/p/*test*/:/*test*/v/*test*/}

View File

@ -0,0 +1 @@
@test/*test*/{/*test*/p/*test*/:/*test*/v/*test*/}

View 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']]]]]

View File

@ -0,0 +1 @@
@test/*test*/x/*test*/y/*test*/{/*test*/p/*test*/:/*test*/v/*test*/}

View File

@ -0,0 +1 @@
@test/*test*/x/*test*/y/*test*/{/*test*/p/*test*/:/*test*/v/*test*/}

View 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']]]]]

View 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*/}

View 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*/}

View 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']]]]]

View File

@ -0,0 +1 @@
@test { p : v }

View File

@ -0,0 +1 @@
@test { p : v }

View File

@ -0,0 +1,14 @@
['atruleb',
['atkeyword',
['ident', 'test']],
['s', ' '],
['block',
['s', ' '],
['declaration',
['property',
['ident', 'p'],
['s', ' ']],
['value',
['s', ' '],
['ident', 'v'],
['s', ' ']]]]]

View File

@ -0,0 +1 @@
@test x y { p : v }

View File

@ -0,0 +1 @@
@test x y { p : v }

View 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', ' ']]]]]

View File

@ -0,0 +1 @@
@test x , y x( 1 + 2 ) { p : v }

View File

@ -0,0 +1 @@
@test x , y x( 1 + 2 ) { p : v }

View 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', ' ']]]]]

View File

@ -0,0 +1 @@
@media {s{p:v}}

View File

@ -0,0 +1 @@
@media {s{p:v}}

View 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