stylus-source 0.15.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.DS_Store +0 -0
- data/README.md +3 -0
- data/lib/.DS_Store +0 -0
- data/lib/node_modules/cssom/.idea/CSSOM.iml +9 -0
- data/lib/node_modules/cssom/.idea/dictionaries/nv.xml +3 -0
- data/lib/node_modules/cssom/.idea/encodings.xml +5 -0
- data/lib/node_modules/cssom/.idea/misc.xml +17 -0
- data/lib/node_modules/cssom/.idea/modules.xml +9 -0
- data/lib/node_modules/cssom/.idea/projectCodeStyle.xml +82 -0
- data/lib/node_modules/cssom/.idea/vcs.xml +8 -0
- data/lib/node_modules/cssom/.idea/workspace.xml +467 -0
- data/lib/node_modules/cssom/.livereload +19 -0
- data/lib/node_modules/cssom/Jakefile +37 -0
- data/lib/node_modules/cssom/README.mdown +33 -0
- data/lib/node_modules/cssom/Rakefile +23 -0
- data/lib/node_modules/cssom/docs/.livereload +19 -0
- data/lib/node_modules/cssom/docs/bar.css +3 -0
- data/lib/node_modules/cssom/docs/demo.css +0 -0
- data/lib/node_modules/cssom/docs/foo.css +4 -0
- data/lib/node_modules/cssom/docs/parse.html +170 -0
- data/lib/node_modules/cssom/docs/parse2.html +431 -0
- data/lib/node_modules/cssom/index.html +100 -0
- data/lib/node_modules/cssom/lib/CSSImportRule.js +34 -0
- data/lib/node_modules/cssom/lib/CSSMediaRule.js +38 -0
- data/lib/node_modules/cssom/lib/CSSOM.js +3 -0
- data/lib/node_modules/cssom/lib/CSSRule.js +38 -0
- data/lib/node_modules/cssom/lib/CSSStyleDeclaration.js +130 -0
- data/lib/node_modules/cssom/lib/CSSStyleRule.js +187 -0
- data/lib/node_modules/cssom/lib/CSSStyleSheet.js +85 -0
- data/lib/node_modules/cssom/lib/MediaList.js +61 -0
- data/lib/node_modules/cssom/lib/StyleSheet.js +15 -0
- data/lib/node_modules/cssom/lib/clone.js +69 -0
- data/lib/node_modules/cssom/lib/index.js +10 -0
- data/lib/node_modules/cssom/lib/parse.js +195 -0
- data/lib/node_modules/cssom/media.html +17 -0
- data/lib/node_modules/cssom/package.json +30 -0
- data/lib/node_modules/cssom/plugins/toHTML.js +32 -0
- data/lib/node_modules/cssom/server/index.html +22 -0
- data/lib/node_modules/cssom/server/index.js +21 -0
- data/lib/node_modules/cssom/shorthands.html +21 -0
- data/lib/node_modules/cssom/test/CSSStyleDeclaration.test.js +35 -0
- data/lib/node_modules/cssom/test/CSSStyleRule.test.js +12 -0
- data/lib/node_modules/cssom/test/CSSStyleSheet.test.js +16 -0
- data/lib/node_modules/cssom/test/MediaList.test.js +21 -0
- data/lib/node_modules/cssom/test/clone.test.js +38 -0
- data/lib/node_modules/cssom/test/fixtures/dummy.css +3 -0
- data/lib/node_modules/cssom/test/helper.js +97 -0
- data/lib/node_modules/cssom/test/index.html +42 -0
- data/lib/node_modules/cssom/test/parse.test.js +346 -0
- data/lib/node_modules/cssom/test/vendor/qunit.css +189 -0
- data/lib/node_modules/cssom/test/vendor/qunit.js +1341 -0
- data/lib/node_modules/growl/History.md +16 -0
- data/lib/node_modules/growl/Readme.md +74 -0
- data/lib/node_modules/growl/lib/growl.js +82 -0
- data/lib/node_modules/growl/package.json +6 -0
- data/lib/node_modules/growl/test.js +17 -0
- data/lib/stylus/colors.js +156 -0
- data/lib/stylus/convert/css.js +130 -0
- data/lib/stylus/errors.js +58 -0
- data/lib/stylus/functions/image.js +120 -0
- data/lib/stylus/functions/index.js +722 -0
- data/lib/stylus/functions/index.styl +123 -0
- data/lib/stylus/functions/url.js +98 -0
- data/lib/stylus/lexer.js +728 -0
- data/lib/stylus/middleware.js +223 -0
- data/lib/stylus/nodes/arguments.js +65 -0
- data/lib/stylus/nodes/binop.js +54 -0
- data/lib/stylus/nodes/block.js +99 -0
- data/lib/stylus/nodes/boolean.js +103 -0
- data/lib/stylus/nodes/call.js +57 -0
- data/lib/stylus/nodes/charset.js +42 -0
- data/lib/stylus/nodes/comment.js +32 -0
- data/lib/stylus/nodes/each.js +56 -0
- data/lib/stylus/nodes/expression.js +168 -0
- data/lib/stylus/nodes/fontface.js +55 -0
- data/lib/stylus/nodes/function.js +104 -0
- data/lib/stylus/nodes/group.js +79 -0
- data/lib/stylus/nodes/hsla.js +256 -0
- data/lib/stylus/nodes/ident.js +127 -0
- data/lib/stylus/nodes/if.js +55 -0
- data/lib/stylus/nodes/import.js +30 -0
- data/lib/stylus/nodes/index.js +52 -0
- data/lib/stylus/nodes/jsliteral.js +32 -0
- data/lib/stylus/nodes/keyframes.js +78 -0
- data/lib/stylus/nodes/literal.js +92 -0
- data/lib/stylus/nodes/media.js +42 -0
- data/lib/stylus/nodes/node.js +209 -0
- data/lib/stylus/nodes/null.js +72 -0
- data/lib/stylus/nodes/page.js +43 -0
- data/lib/stylus/nodes/params.js +72 -0
- data/lib/stylus/nodes/property.js +72 -0
- data/lib/stylus/nodes/return.js +44 -0
- data/lib/stylus/nodes/rgba.js +335 -0
- data/lib/stylus/nodes/root.js +50 -0
- data/lib/stylus/nodes/selector.js +57 -0
- data/lib/stylus/nodes/string.js +120 -0
- data/lib/stylus/nodes/ternary.js +51 -0
- data/lib/stylus/nodes/unaryop.js +46 -0
- data/lib/stylus/nodes/unit.js +207 -0
- data/lib/stylus/parser.js +1514 -0
- data/lib/stylus/renderer.js +157 -0
- data/lib/stylus/source.rb +7 -0
- data/lib/stylus/stack/frame.js +66 -0
- data/lib/stylus/stack/index.js +146 -0
- data/lib/stylus/stack/scope.js +53 -0
- data/lib/stylus/stylus.js +102 -0
- data/lib/stylus/token.js +53 -0
- data/lib/stylus/utils.js +237 -0
- data/lib/stylus/visitor/compiler.js +472 -0
- data/lib/stylus/visitor/evaluator.js +1070 -0
- data/lib/stylus/visitor/index.js +31 -0
- data/stylus-source.gemspec +15 -0
- metadata +158 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
|
|
2
|
+
/*!
|
|
3
|
+
* Stylus - Call
|
|
4
|
+
* Copyright(c) 2010 LearnBoost <dev@learnboost.com>
|
|
5
|
+
* MIT Licensed
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Module dependencies.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
var Node = require('./node');
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Initialize a new `Call` with `name` and `args`.
|
|
16
|
+
*
|
|
17
|
+
* @param {String} name
|
|
18
|
+
* @param {Expression} args
|
|
19
|
+
* @api public
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
var Call = module.exports = function Call(name, args){
|
|
23
|
+
Node.call(this);
|
|
24
|
+
this.name = name;
|
|
25
|
+
this.args = args;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Inherit from `Node.prototype`.
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
Call.prototype.__proto__ = Node.prototype;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Return a clone of this node.
|
|
36
|
+
*
|
|
37
|
+
* @return {Node}
|
|
38
|
+
* @api public
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
Call.prototype.clone = function(){
|
|
42
|
+
var clone = new Call(this.name, this.args.clone());
|
|
43
|
+
clone.lineno = this.lineno;
|
|
44
|
+
clone.filename = this.filename;
|
|
45
|
+
return clone;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Return <name>().
|
|
50
|
+
*
|
|
51
|
+
* @return {String}
|
|
52
|
+
* @api public
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
Call.prototype.toString = function(){
|
|
56
|
+
return this.name + '()';
|
|
57
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
|
|
2
|
+
/*!
|
|
3
|
+
* Stylus - Charset
|
|
4
|
+
* Copyright(c) 2010 LearnBoost <dev@learnboost.com>
|
|
5
|
+
* MIT Licensed
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Module dependencies.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
var Node = require('./node')
|
|
13
|
+
, nodes = require('./');
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Initialize a new `Charset` with the given `val`
|
|
17
|
+
*
|
|
18
|
+
* @param {String} val
|
|
19
|
+
* @api public
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
var Charset = module.exports = function Charset(val){
|
|
23
|
+
Node.call(this);
|
|
24
|
+
this.val = val;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Inherit from `Node.prototype`.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
Charset.prototype.__proto__ = Node.prototype;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Return @charset "val".
|
|
35
|
+
*
|
|
36
|
+
* @return {String}
|
|
37
|
+
* @api public
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
Charset.prototype.toString = function(){
|
|
41
|
+
return '@charset ' + this.val;
|
|
42
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
|
|
2
|
+
/*!
|
|
3
|
+
* Stylus - Comment
|
|
4
|
+
* Copyright(c) 2010 LearnBoost <dev@learnboost.com>
|
|
5
|
+
* MIT Licensed
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Module dependencies.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
var Node = require('./node');
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Initialize a new `Comment` with the given `str`.
|
|
16
|
+
*
|
|
17
|
+
* @param {String} str
|
|
18
|
+
* @param {Boolean} suppress
|
|
19
|
+
* @api public
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
var Comment = module.exports = function Comment(str, suppress){
|
|
23
|
+
Node.call(this);
|
|
24
|
+
this.str = str;
|
|
25
|
+
this.suppress = suppress;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Inherit from `Node.prototype`.
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
Comment.prototype.__proto__ = Node.prototype;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
|
|
2
|
+
/*!
|
|
3
|
+
* Stylus - Each
|
|
4
|
+
* Copyright(c) 2010 LearnBoost <dev@learnboost.com>
|
|
5
|
+
* MIT Licensed
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Module dependencies.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
var Node = require('./node')
|
|
13
|
+
, nodes = require('./');
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Initialize a new `Each` node with the given `val` name,
|
|
17
|
+
* `key` name, `expr`, and `block`.
|
|
18
|
+
*
|
|
19
|
+
* @param {String} val
|
|
20
|
+
* @param {String} key
|
|
21
|
+
* @param {Expression} expr
|
|
22
|
+
* @param {Block} block
|
|
23
|
+
* @api public
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
var Each = module.exports = function Each(val, key, expr, block){
|
|
27
|
+
Node.call(this);
|
|
28
|
+
this.val = val;
|
|
29
|
+
this.key = key;
|
|
30
|
+
this.expr = expr;
|
|
31
|
+
this.block = block;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Inherit from `Node.prototype`.
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
Each.prototype.__proto__ = Node.prototype;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Return a clone of this node.
|
|
42
|
+
*
|
|
43
|
+
* @return {Node}
|
|
44
|
+
* @api public
|
|
45
|
+
*/
|
|
46
|
+
|
|
47
|
+
Each.prototype.clone = function(){
|
|
48
|
+
var clone = new Each(
|
|
49
|
+
this.val
|
|
50
|
+
, this.key
|
|
51
|
+
, this.expr.clone()
|
|
52
|
+
, this.block.clone());
|
|
53
|
+
clone.lineno = this.lineno;
|
|
54
|
+
clone.filename = this.filename;
|
|
55
|
+
return clone;
|
|
56
|
+
};
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
|
|
2
|
+
/*!
|
|
3
|
+
* Stylus - Expression
|
|
4
|
+
* Copyright(c) 2010 LearnBoost <dev@learnboost.com>
|
|
5
|
+
* MIT Licensed
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Module dependencies.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
var Node = require('./node')
|
|
13
|
+
, nodes = require('../nodes')
|
|
14
|
+
, utils = require('../utils');
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Initialize a new `Expression`.
|
|
18
|
+
*
|
|
19
|
+
* @param {Boolean} isList
|
|
20
|
+
* @api public
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
var Expression = module.exports = function Expression(isList){
|
|
24
|
+
Node.call(this);
|
|
25
|
+
this.nodes = [];
|
|
26
|
+
this.isList = isList;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Check if the variable has a value.
|
|
31
|
+
*
|
|
32
|
+
* @return {Boolean}
|
|
33
|
+
* @api public
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
Expression.prototype.__defineGetter__('isEmpty', function(){
|
|
37
|
+
return !this.nodes.length;
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Return the first node in this expression.
|
|
42
|
+
*
|
|
43
|
+
* @return {Node}
|
|
44
|
+
* @api public
|
|
45
|
+
*/
|
|
46
|
+
|
|
47
|
+
Expression.prototype.__defineGetter__('first', function(){
|
|
48
|
+
return this.nodes[0]
|
|
49
|
+
? this.nodes[0].first
|
|
50
|
+
: nodes.null;
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Hash all the nodes in order.
|
|
55
|
+
*
|
|
56
|
+
* @return {String}
|
|
57
|
+
* @api public
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
Expression.prototype.__defineGetter__('hash', function(){
|
|
61
|
+
return this.nodes.map(function(node){
|
|
62
|
+
return node.hash;
|
|
63
|
+
}).join('::');
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Inherit from `Node.prototype`.
|
|
68
|
+
*/
|
|
69
|
+
|
|
70
|
+
Expression.prototype.__proto__ = Node.prototype;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Return a clone of this node.
|
|
74
|
+
*
|
|
75
|
+
* @return {Node}
|
|
76
|
+
* @api public
|
|
77
|
+
*/
|
|
78
|
+
|
|
79
|
+
Expression.prototype.clone = function(){
|
|
80
|
+
var clone = new this.constructor(this.isList);
|
|
81
|
+
clone.preserve = this.preserve;
|
|
82
|
+
clone.lineno = this.lineno;
|
|
83
|
+
clone.filename = this.filename;
|
|
84
|
+
for (var i = 0; i < this.nodes.length; ++i) {
|
|
85
|
+
clone.push(this.nodes[i].clone());
|
|
86
|
+
}
|
|
87
|
+
return clone;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Push the given `node`.
|
|
92
|
+
*
|
|
93
|
+
* @param {Node} node
|
|
94
|
+
* @api public
|
|
95
|
+
*/
|
|
96
|
+
|
|
97
|
+
Expression.prototype.push = function(node){
|
|
98
|
+
this.nodes.push(node);
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Operate on `right` with the given `op`.
|
|
103
|
+
*
|
|
104
|
+
* @param {String} op
|
|
105
|
+
* @param {Node} right
|
|
106
|
+
* @return {Node}
|
|
107
|
+
* @api public
|
|
108
|
+
*/
|
|
109
|
+
|
|
110
|
+
Expression.prototype.operate = function(op, right, val){
|
|
111
|
+
switch (op) {
|
|
112
|
+
case '[]=':
|
|
113
|
+
var self = this
|
|
114
|
+
, range = utils.unwrap(right).nodes
|
|
115
|
+
, val = utils.unwrap(val)
|
|
116
|
+
, len;
|
|
117
|
+
range.forEach(function(unit){
|
|
118
|
+
len = self.nodes.length;
|
|
119
|
+
if ('unit' == unit.nodeName) {
|
|
120
|
+
var i = unit.val;
|
|
121
|
+
while (i-- > len) self.nodes[i] = nodes.null;
|
|
122
|
+
self.nodes[unit.val] = val;
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
return val;
|
|
126
|
+
case '[]':
|
|
127
|
+
var expr = new nodes.Expression
|
|
128
|
+
, vals = utils.unwrap(this).nodes
|
|
129
|
+
, range = utils.unwrap(right).nodes;
|
|
130
|
+
range.forEach(function(unit){
|
|
131
|
+
if ('unit' == unit.nodeName) {
|
|
132
|
+
var node = vals[unit.val];
|
|
133
|
+
if (node) expr.push(node);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
return expr.isEmpty
|
|
137
|
+
? nodes.null
|
|
138
|
+
: utils.unwrap(expr);
|
|
139
|
+
case '||':
|
|
140
|
+
// we consider lists with length > 1 truth,
|
|
141
|
+
// for example (0 1 2)
|
|
142
|
+
if (this.nodes.length > 1) return this;
|
|
143
|
+
|
|
144
|
+
// check the return value, and return the lhs expr
|
|
145
|
+
// as a whole rather than the first item
|
|
146
|
+
var ret = this.first.operate(op, right, val);
|
|
147
|
+
return ret == this.nodes[0] ? this : right;
|
|
148
|
+
case 'in':
|
|
149
|
+
return Node.prototype.operate.call(this, op, right);
|
|
150
|
+
default:
|
|
151
|
+
return this.first.operate(op, right, val);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Return "<a> <b> <c>" or "<a>, <b>, <c>" if
|
|
157
|
+
* the expression represents a list.
|
|
158
|
+
*
|
|
159
|
+
* @return {String}
|
|
160
|
+
* @api public
|
|
161
|
+
*/
|
|
162
|
+
|
|
163
|
+
Expression.prototype.toString = function(){
|
|
164
|
+
return '(' + this.nodes.map(function(node){
|
|
165
|
+
return node.toString();
|
|
166
|
+
}).join(this.isList ? ', ' : ' ') + ')';
|
|
167
|
+
};
|
|
168
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
|
|
2
|
+
/*!
|
|
3
|
+
* Stylus - FontFace
|
|
4
|
+
* Copyright(c) 2010 LearnBoost <dev@learnboost.com>
|
|
5
|
+
* MIT Licensed
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Module dependencies.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
var Node = require('./node');
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Initialize a new `FontFace` with the given `block`.
|
|
16
|
+
*
|
|
17
|
+
* @param {Block} block
|
|
18
|
+
* @api public
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
var FontFace = module.exports = function FontFace(block){
|
|
22
|
+
Node.call(this);
|
|
23
|
+
this.block = block;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Inherit from `Node.prototype`.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
FontFace.prototype.__proto__ = Node.prototype;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Return a clone of this node.
|
|
34
|
+
*
|
|
35
|
+
* @return {Node}
|
|
36
|
+
* @api public
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
FontFace.prototype.clone = function(){
|
|
40
|
+
var clone = new FontFace(this.block.clone());
|
|
41
|
+
clone.lineno = this.lineno;
|
|
42
|
+
clone.filename = this.filename;
|
|
43
|
+
return clone;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Return `@oage name`.
|
|
48
|
+
*
|
|
49
|
+
* @return {String}
|
|
50
|
+
* @api public
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
FontFace.prototype.toString = function(){
|
|
54
|
+
return '@font-face';
|
|
55
|
+
};
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
|
|
2
|
+
/*!
|
|
3
|
+
* Stylus - Function
|
|
4
|
+
* Copyright(c) 2010 LearnBoost <dev@learnboost.com>
|
|
5
|
+
* MIT Licensed
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Module dependencies.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
var Node = require('./node');
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Initialize a new `Function` with `name`, `params`, and `body`.
|
|
16
|
+
*
|
|
17
|
+
* @param {String} name
|
|
18
|
+
* @param {Params|Function} params
|
|
19
|
+
* @param {Block} body
|
|
20
|
+
* @api public
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
var Function = module.exports = function Function(name, params, body){
|
|
24
|
+
Node.call(this);
|
|
25
|
+
this.name = name;
|
|
26
|
+
this.params = params;
|
|
27
|
+
this.block = body;
|
|
28
|
+
if ('function' == typeof params) this.fn = params;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Check function arity.
|
|
33
|
+
*
|
|
34
|
+
* @return {Boolean}
|
|
35
|
+
* @api public
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
Function.prototype.__defineGetter__('arity', function(){
|
|
39
|
+
return this.params.length;
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Inherit from `Node.prototype`.
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
Function.prototype.__proto__ = Node.prototype;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Return hash.
|
|
50
|
+
*
|
|
51
|
+
* @return {String}
|
|
52
|
+
* @api public
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
Function.prototype.__defineGetter__('hash', function(){
|
|
56
|
+
return 'function ' + this.name;
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Return a clone of this node.
|
|
61
|
+
*
|
|
62
|
+
* @return {Node}
|
|
63
|
+
* @api public
|
|
64
|
+
*/
|
|
65
|
+
|
|
66
|
+
Function.prototype.clone = function(){
|
|
67
|
+
if (this.fn) {
|
|
68
|
+
var clone = new Function(
|
|
69
|
+
this.name
|
|
70
|
+
, this.fn);
|
|
71
|
+
} else {
|
|
72
|
+
var clone = new Function(
|
|
73
|
+
this.name
|
|
74
|
+
, this.params.clone()
|
|
75
|
+
, this.block.clone());
|
|
76
|
+
}
|
|
77
|
+
clone.lineno = this.lineno;
|
|
78
|
+
clone.filename = this.filename;
|
|
79
|
+
return clone;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Return <name>(param1, param2, ...).
|
|
84
|
+
*
|
|
85
|
+
* @return {String}
|
|
86
|
+
* @api public
|
|
87
|
+
*/
|
|
88
|
+
|
|
89
|
+
Function.prototype.toString = function(){
|
|
90
|
+
if (this.fn) {
|
|
91
|
+
return this.name
|
|
92
|
+
+ '('
|
|
93
|
+
+ this.fn.toString()
|
|
94
|
+
.match(/^function *\((.*?)\)/)
|
|
95
|
+
.slice(1)
|
|
96
|
+
.join(', ')
|
|
97
|
+
+ ')';
|
|
98
|
+
} else {
|
|
99
|
+
return this.name
|
|
100
|
+
+ '('
|
|
101
|
+
+ this.params.nodes.join(', ')
|
|
102
|
+
+ ')';
|
|
103
|
+
}
|
|
104
|
+
};
|