haml-more 0.4.0.c → 0.4.0.d
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/vendor/coffee-script/Cakefile +8 -0
- data/vendor/coffee-script/Rakefile +11 -0
- data/vendor/coffee-script/documentation/index.html.erb +85 -50
- data/vendor/coffee-script/documentation/js/aliases.js +1 -1
- data/vendor/coffee-script/documentation/js/arguments.js +1 -1
- data/vendor/coffee-script/documentation/js/array_comprehensions.js +1 -1
- data/vendor/coffee-script/documentation/js/assignment.js +1 -1
- data/vendor/coffee-script/documentation/js/cake_tasks.js +1 -1
- data/vendor/coffee-script/documentation/js/comparisons.js +1 -1
- data/vendor/coffee-script/documentation/js/conditionals.js +1 -1
- data/vendor/coffee-script/documentation/js/embedded.js +1 -1
- data/vendor/coffee-script/documentation/js/existence.js +1 -1
- data/vendor/coffee-script/documentation/js/expressions.js +1 -1
- data/vendor/coffee-script/documentation/js/expressions_assignment.js +1 -1
- data/vendor/coffee-script/documentation/js/expressions_comprehension.js +1 -1
- data/vendor/coffee-script/documentation/js/expressions_try.js +1 -1
- data/vendor/coffee-script/documentation/js/fat_arrow.js +1 -1
- data/vendor/coffee-script/documentation/js/functions.js +1 -1
- data/vendor/coffee-script/documentation/js/heredocs.js +1 -1
- data/vendor/coffee-script/documentation/js/multiple_return_values.js +1 -1
- data/vendor/coffee-script/documentation/js/object_comprehensions.js +1 -1
- data/vendor/coffee-script/documentation/js/object_extraction.js +1 -1
- data/vendor/coffee-script/documentation/js/objects_and_arrays.js +1 -1
- data/vendor/coffee-script/documentation/js/overview.js +1 -1
- data/vendor/coffee-script/documentation/js/parallel_assignment.js +1 -1
- data/vendor/coffee-script/documentation/js/range_comprehensions.js +1 -1
- data/vendor/coffee-script/documentation/js/scope.js +1 -1
- data/vendor/coffee-script/documentation/js/slices.js +1 -1
- data/vendor/coffee-script/documentation/js/soaks.js +1 -1
- data/vendor/coffee-script/documentation/js/splats.js +1 -1
- data/vendor/coffee-script/documentation/js/splices.js +1 -1
- data/vendor/coffee-script/documentation/js/strings.js +1 -1
- data/vendor/coffee-script/documentation/js/super.js +1 -1
- data/vendor/coffee-script/documentation/js/switch.js +1 -1
- data/vendor/coffee-script/documentation/js/try.js +1 -1
- data/vendor/coffee-script/documentation/js/while.js +1 -1
- data/vendor/coffee-script/extras/EXTRAS +9 -1
- data/vendor/coffee-script/extras/coffee-script.js +1 -0
- data/vendor/coffee-script/index.html +83 -48
- data/vendor/coffee-script/lib/cake.js +30 -32
- data/vendor/coffee-script/lib/coffee-script.js +12 -16
- data/vendor/coffee-script/lib/command_line.js +64 -74
- data/vendor/coffee-script/lib/grammar.js +1 -1
- data/vendor/coffee-script/lib/lexer.js +1 -1
- data/vendor/coffee-script/lib/narwhal.js +1 -1
- data/vendor/coffee-script/lib/nodes.js +48 -44
- data/vendor/coffee-script/lib/optparse.js +11 -17
- data/vendor/coffee-script/lib/repl.js +1 -1
- data/vendor/coffee-script/lib/rewriter.js +1 -1
- data/vendor/coffee-script/lib/scope.js +1 -1
- data/vendor/coffee-script/package.json +1 -1
- data/vendor/coffee-script/src/cake.coffee +15 -15
- data/vendor/coffee-script/src/coffee-script.coffee +6 -6
- data/vendor/coffee-script/src/command_line.coffee +43 -39
- data/vendor/coffee-script/src/nodes.coffee +43 -41
- data/vendor/coffee-script/src/optparse.coffee +6 -13
- data/vendor/coffee-script/test/test_destructuring_assignment.coffee +6 -0
- metadata +7 -6
@@ -1,5 +1,5 @@
|
|
1
1
|
(function(){
|
2
|
-
var AccessorNode, ArrayNode, AssignNode, CallNode, ClosureNode, CodeNode, CommentNode, ExistenceNode, Expressions, ExtendsNode, ForNode, IDENTIFIER, IfNode, IndexNode, LiteralNode,
|
2
|
+
var AccessorNode, ArrayNode, AssignNode, BaseNode, CallNode, ClosureNode, CodeNode, CommentNode, ExistenceNode, Expressions, ExtendsNode, ForNode, IDENTIFIER, IfNode, IndexNode, LiteralNode, ObjectNode, OpNode, ParentheticalNode, PushNode, RangeNode, ReturnNode, SliceNode, SplatNode, TAB, TRAILING_WHITESPACE, ThrowNode, TryNode, ValueNode, WhileNode, compact, del, flatten, inherit, merge, statement;
|
3
3
|
var __hasProp = Object.prototype.hasOwnProperty;
|
4
4
|
(typeof process !== "undefined" && process !== null) ? process.mixin(require('scope')) : (this.exports = this);
|
5
5
|
// Some helper functions
|
@@ -90,12 +90,12 @@
|
|
90
90
|
// generated code should be wrapped up in a closure. An options hash is passed
|
91
91
|
// and cloned throughout, containing messages from higher in the AST,
|
92
92
|
// information about the current scope, and indentation level.
|
93
|
-
|
93
|
+
BaseNode = (exports.BaseNode = function BaseNode() { });
|
94
94
|
// This is extremely important -- we convert JS statements into expressions
|
95
95
|
// by wrapping them in a closure, only if it's possible, and we're not at
|
96
96
|
// the top level of a block (which would be unnecessary), and we haven't
|
97
97
|
// already been asked to return the result.
|
98
|
-
|
98
|
+
BaseNode.prototype.compile = function compile(o) {
|
99
99
|
var closure, top;
|
100
100
|
this.options = merge(o || {});
|
101
101
|
this.indent = o.indent;
|
@@ -110,21 +110,21 @@
|
|
110
110
|
};
|
111
111
|
// Statements converted into expressions share scope with their parent
|
112
112
|
// closure, to preserve JavaScript-style lexical scope.
|
113
|
-
|
113
|
+
BaseNode.prototype.compile_closure = function compile_closure(o) {
|
114
114
|
this.indent = o.indent;
|
115
115
|
o.shared_scope = o.scope;
|
116
116
|
return ClosureNode.wrap(this).compile(o);
|
117
117
|
};
|
118
118
|
// If the code generation wishes to use the result of a complex expression
|
119
119
|
// in multiple places, ensure that the expression is only ever evaluated once.
|
120
|
-
|
120
|
+
BaseNode.prototype.compile_reference = function compile_reference(o) {
|
121
121
|
var compiled, reference;
|
122
122
|
reference = new LiteralNode(o.scope.free_variable());
|
123
123
|
compiled = new AssignNode(reference, this);
|
124
124
|
return [compiled, reference];
|
125
125
|
};
|
126
126
|
// Quick short method for the current indentation level, plus tabbing in.
|
127
|
-
|
127
|
+
BaseNode.prototype.idt = function idt(tabs) {
|
128
128
|
var _a, _b, _c, _d, i, idt;
|
129
129
|
idt = (this.indent || '');
|
130
130
|
_c = 0; _d = (tabs || 0);
|
@@ -134,7 +134,7 @@
|
|
134
134
|
return idt;
|
135
135
|
};
|
136
136
|
// Does this node, or any of its children, contain a node of a certain kind?
|
137
|
-
|
137
|
+
BaseNode.prototype.contains = function contains(block) {
|
138
138
|
var _a, _b, node;
|
139
139
|
_a = this.children;
|
140
140
|
for (_b = 0; _b < _a.length; _b++) {
|
@@ -142,14 +142,14 @@
|
|
142
142
|
if (block(node)) {
|
143
143
|
return true;
|
144
144
|
}
|
145
|
-
if (node instanceof
|
145
|
+
if (node instanceof BaseNode && node.contains(block)) {
|
146
146
|
return true;
|
147
147
|
}
|
148
148
|
}
|
149
149
|
return false;
|
150
150
|
};
|
151
151
|
// toString representation of the node, for inspecting the parse tree.
|
152
|
-
|
152
|
+
BaseNode.prototype.toString = function toString(idt) {
|
153
153
|
var _a, _b, _c, child;
|
154
154
|
idt = idt || '';
|
155
155
|
return '\n' + idt + this.type + (function() {
|
@@ -162,24 +162,24 @@
|
|
162
162
|
}).call(this).join('');
|
163
163
|
};
|
164
164
|
// Default implementations of the common node methods.
|
165
|
-
|
165
|
+
BaseNode.prototype.unwrap = function unwrap() {
|
166
166
|
return this;
|
167
167
|
};
|
168
|
-
|
169
|
-
|
168
|
+
BaseNode.prototype.children = [];
|
169
|
+
BaseNode.prototype.is_statement = function is_statement() {
|
170
170
|
return false;
|
171
171
|
};
|
172
|
-
|
172
|
+
BaseNode.prototype.is_statement_only = function is_statement_only() {
|
173
173
|
return false;
|
174
174
|
};
|
175
|
-
|
175
|
+
BaseNode.prototype.top_sensitive = function top_sensitive() {
|
176
176
|
return false;
|
177
177
|
};
|
178
|
-
|
178
|
+
BaseNode.prototype.operation_sensitive = function operation_sensitive() {
|
179
179
|
return false;
|
180
180
|
};
|
181
181
|
// A collection of nodes, each one representing an expression.
|
182
|
-
Expressions = (exports.Expressions = inherit(
|
182
|
+
Expressions = (exports.Expressions = inherit(BaseNode, {
|
183
183
|
type: 'Expressions',
|
184
184
|
constructor: function constructor(nodes) {
|
185
185
|
this.children = (this.expressions = compact(flatten(nodes || [])));
|
@@ -212,7 +212,7 @@
|
|
212
212
|
},
|
213
213
|
compile: function compile(o) {
|
214
214
|
o = o || {};
|
215
|
-
return o.scope ?
|
215
|
+
return o.scope ? BaseNode.prototype.compile.call(this, o) : this.compile_root(o);
|
216
216
|
},
|
217
217
|
// Compile each expression in the Expressions body.
|
218
218
|
compile_node: function compile_node(o) {
|
@@ -233,7 +233,7 @@
|
|
233
233
|
o.scope = new Scope(null, this, null);
|
234
234
|
code = o.globals ? this.compile_node(o) : this.compile_with_declarations(o);
|
235
235
|
code = code.replace(TRAILING_WHITESPACE, '');
|
236
|
-
return o.no_wrap ? code : "(function(){\n" + code + "\n})()
|
236
|
+
return o.no_wrap ? code : "(function(){\n" + code + "\n})();\n";
|
237
237
|
},
|
238
238
|
// Compile the expressions body, with declarations of all inner variables
|
239
239
|
// pushed up to the top.
|
@@ -287,7 +287,7 @@
|
|
287
287
|
statement(Expressions);
|
288
288
|
// Literals are static values that can be passed through directly into
|
289
289
|
// JavaScript without translation, eg.: strings, numbers, true, false, null...
|
290
|
-
LiteralNode = (exports.LiteralNode = inherit(
|
290
|
+
LiteralNode = (exports.LiteralNode = inherit(BaseNode, {
|
291
291
|
type: 'Literal',
|
292
292
|
constructor: function constructor(value) {
|
293
293
|
this.value = value;
|
@@ -310,7 +310,7 @@
|
|
310
310
|
}));
|
311
311
|
LiteralNode.prototype.is_statement_only = LiteralNode.prototype.is_statement;
|
312
312
|
// Return an expression, or wrap it in a closure and return it.
|
313
|
-
ReturnNode = (exports.ReturnNode = inherit(
|
313
|
+
ReturnNode = (exports.ReturnNode = inherit(BaseNode, {
|
314
314
|
type: 'Return',
|
315
315
|
constructor: function constructor(expression) {
|
316
316
|
this.children = [(this.expression = expression)];
|
@@ -327,7 +327,7 @@
|
|
327
327
|
}));
|
328
328
|
statement(ReturnNode, true);
|
329
329
|
// A value, indexed or dotted into, or vanilla.
|
330
|
-
ValueNode = (exports.ValueNode = inherit(
|
330
|
+
ValueNode = (exports.ValueNode = inherit(BaseNode, {
|
331
331
|
type: 'Value',
|
332
332
|
SOAK: " == undefined ? undefined : ",
|
333
333
|
constructor: function constructor(base, properties) {
|
@@ -399,7 +399,7 @@
|
|
399
399
|
}));
|
400
400
|
// Pass through CoffeeScript comments into JavaScript comments at the
|
401
401
|
// same position.
|
402
|
-
CommentNode = (exports.CommentNode = inherit(
|
402
|
+
CommentNode = (exports.CommentNode = inherit(BaseNode, {
|
403
403
|
type: 'Comment',
|
404
404
|
constructor: function constructor(lines) {
|
405
405
|
this.lines = lines;
|
@@ -412,7 +412,7 @@
|
|
412
412
|
statement(CommentNode);
|
413
413
|
// Node for a function invocation. Takes care of converting super() calls into
|
414
414
|
// calls against the prototype's function of the same name.
|
415
|
-
CallNode = (exports.CallNode = inherit(
|
415
|
+
CallNode = (exports.CallNode = inherit(BaseNode, {
|
416
416
|
type: 'Call',
|
417
417
|
constructor: function constructor(variable, args) {
|
418
418
|
this.children = flatten([(this.variable = variable), (this.args = (args || []))]);
|
@@ -477,7 +477,7 @@
|
|
477
477
|
}));
|
478
478
|
// Node to extend an object's prototype with an ancestor object.
|
479
479
|
// After goog.inherits from the Closure Library.
|
480
|
-
ExtendsNode = (exports.ExtendsNode = inherit(
|
480
|
+
ExtendsNode = (exports.ExtendsNode = inherit(BaseNode, {
|
481
481
|
type: 'Extends',
|
482
482
|
constructor: function constructor(child, parent) {
|
483
483
|
this.children = [(this.child = child), (this.parent = parent)];
|
@@ -506,7 +506,7 @@
|
|
506
506
|
statement(ExtendsNode);
|
507
507
|
// A dotted accessor into a part of a value, or the :: shorthand for
|
508
508
|
// an accessor into the object's prototype.
|
509
|
-
AccessorNode = (exports.AccessorNode = inherit(
|
509
|
+
AccessorNode = (exports.AccessorNode = inherit(BaseNode, {
|
510
510
|
type: 'Accessor',
|
511
511
|
constructor: function constructor(name, tag) {
|
512
512
|
this.children = [(this.name = name)];
|
@@ -519,7 +519,7 @@
|
|
519
519
|
}
|
520
520
|
}));
|
521
521
|
// An indexed accessor into a part of an array or object.
|
522
|
-
IndexNode = (exports.IndexNode = inherit(
|
522
|
+
IndexNode = (exports.IndexNode = inherit(BaseNode, {
|
523
523
|
type: 'Index',
|
524
524
|
constructor: function constructor(index, tag) {
|
525
525
|
this.children = [(this.index = index)];
|
@@ -532,7 +532,7 @@
|
|
532
532
|
}));
|
533
533
|
// A range literal. Ranges can be used to extract portions (slices) of arrays,
|
534
534
|
// or to specify a range for list comprehensions.
|
535
|
-
RangeNode = (exports.RangeNode = inherit(
|
535
|
+
RangeNode = (exports.RangeNode = inherit(BaseNode, {
|
536
536
|
type: 'Range',
|
537
537
|
constructor: function constructor(from, to, exclusive) {
|
538
538
|
this.children = [(this.from = from), (this.to = to)];
|
@@ -577,7 +577,7 @@
|
|
577
577
|
// An array slice literal. Unlike JavaScript's Array#slice, the second parameter
|
578
578
|
// specifies the index of the end of the slice (just like the first parameter)
|
579
579
|
// is the index of the beginning.
|
580
|
-
SliceNode = (exports.SliceNode = inherit(
|
580
|
+
SliceNode = (exports.SliceNode = inherit(BaseNode, {
|
581
581
|
type: 'Slice',
|
582
582
|
constructor: function constructor(range) {
|
583
583
|
this.children = [(this.range = range)];
|
@@ -592,7 +592,7 @@
|
|
592
592
|
}
|
593
593
|
}));
|
594
594
|
// An object literal.
|
595
|
-
ObjectNode = (exports.ObjectNode = inherit(
|
595
|
+
ObjectNode = (exports.ObjectNode = inherit(BaseNode, {
|
596
596
|
type: 'Object',
|
597
597
|
constructor: function constructor(props) {
|
598
598
|
this.children = (this.objects = (this.properties = props || []));
|
@@ -639,7 +639,7 @@
|
|
639
639
|
}
|
640
640
|
}));
|
641
641
|
// An array literal.
|
642
|
-
ArrayNode = (exports.ArrayNode = inherit(
|
642
|
+
ArrayNode = (exports.ArrayNode = inherit(BaseNode, {
|
643
643
|
type: 'Array',
|
644
644
|
constructor: function constructor(objects) {
|
645
645
|
this.children = (this.objects = objects || []);
|
@@ -694,7 +694,7 @@
|
|
694
694
|
}
|
695
695
|
});
|
696
696
|
// Setting the value of a local variable, or the value of an object property.
|
697
|
-
AssignNode = (exports.AssignNode = inherit(
|
697
|
+
AssignNode = (exports.AssignNode = inherit(BaseNode, {
|
698
698
|
type: 'Assign',
|
699
699
|
PROTO_ASSIGN: /^(\S+)\.prototype/,
|
700
700
|
LEADING_DOT: /^\.(prototype\.)?/,
|
@@ -756,7 +756,7 @@
|
|
756
756
|
// object literals to a value. Peeks at their properties to assign inner names.
|
757
757
|
// See: http://wiki.ecmascript.org/doku.php?id=harmony:destructuring
|
758
758
|
compile_pattern_match: function compile_pattern_match(o) {
|
759
|
-
var _a, _b, access_class, assigns, i, idx, obj, val, val_var;
|
759
|
+
var _a, _b, access_class, assigns, code, i, idx, obj, val, val_var;
|
760
760
|
val_var = o.scope.free_variable();
|
761
761
|
assigns = [this.idt() + val_var + ' = ' + this.value.compile(o) + ';'];
|
762
762
|
o.top = true;
|
@@ -781,7 +781,11 @@
|
|
781
781
|
}
|
782
782
|
assigns.push(new AssignNode(obj, val).compile(o));
|
783
783
|
}
|
784
|
-
|
784
|
+
code = assigns.join("\n");
|
785
|
+
if (o.returns) {
|
786
|
+
code += '\n' + this.idt() + 'return ' + this.variable.compile(o) + ';';
|
787
|
+
}
|
788
|
+
return code;
|
785
789
|
},
|
786
790
|
compile_splice: function compile_splice(o) {
|
787
791
|
var from, l, name, plus, range, to;
|
@@ -798,7 +802,7 @@
|
|
798
802
|
}));
|
799
803
|
// A function definition. The only node that creates a new Scope.
|
800
804
|
// A CodeNode does not have any children -- they're within the new scope.
|
801
|
-
CodeNode = (exports.CodeNode = inherit(
|
805
|
+
CodeNode = (exports.CodeNode = inherit(BaseNode, {
|
802
806
|
type: 'Code',
|
803
807
|
constructor: function constructor(params, body, tag) {
|
804
808
|
this.params = params;
|
@@ -865,7 +869,7 @@
|
|
865
869
|
}));
|
866
870
|
// A splat, either as a parameter to a function, an argument to a call,
|
867
871
|
// or in a destructuring assignment.
|
868
|
-
SplatNode = (exports.SplatNode = inherit(
|
872
|
+
SplatNode = (exports.SplatNode = inherit(BaseNode, {
|
869
873
|
type: 'Splat',
|
870
874
|
constructor: function constructor(name) {
|
871
875
|
if (!(name.compile)) {
|
@@ -890,7 +894,7 @@
|
|
890
894
|
}));
|
891
895
|
// A while loop, the only sort of low-level loop exposed by CoffeeScript. From
|
892
896
|
// it, all other loops can be manufactured.
|
893
|
-
WhileNode = (exports.WhileNode = inherit(
|
897
|
+
WhileNode = (exports.WhileNode = inherit(BaseNode, {
|
894
898
|
type: 'While',
|
895
899
|
constructor: function constructor(condition, opts) {
|
896
900
|
this.children = [(this.condition = condition)];
|
@@ -933,7 +937,7 @@
|
|
933
937
|
statement(WhileNode);
|
934
938
|
// Simple Arithmetic and logical operations. Performs some conversion from
|
935
939
|
// CoffeeScript operations into their JavaScript equivalents.
|
936
|
-
OpNode = (exports.OpNode = inherit(
|
940
|
+
OpNode = (exports.OpNode = inherit(BaseNode, {
|
937
941
|
type: 'Op',
|
938
942
|
CONVERSIONS: {
|
939
943
|
'==': '===',
|
@@ -1019,7 +1023,7 @@
|
|
1019
1023
|
}
|
1020
1024
|
}));
|
1021
1025
|
// A try/catch/finally block.
|
1022
|
-
TryNode = (exports.TryNode = inherit(
|
1026
|
+
TryNode = (exports.TryNode = inherit(BaseNode, {
|
1023
1027
|
type: 'Try',
|
1024
1028
|
constructor: function constructor(attempt, error, recovery, ensure) {
|
1025
1029
|
this.children = compact([(this.attempt = attempt), (this.recovery = recovery), (this.ensure = ensure)]);
|
@@ -1040,7 +1044,7 @@
|
|
1040
1044
|
}));
|
1041
1045
|
statement(TryNode);
|
1042
1046
|
// Throw an exception.
|
1043
|
-
ThrowNode = (exports.ThrowNode = inherit(
|
1047
|
+
ThrowNode = (exports.ThrowNode = inherit(BaseNode, {
|
1044
1048
|
type: 'Throw',
|
1045
1049
|
constructor: function constructor(expression) {
|
1046
1050
|
this.children = [(this.expression = expression)];
|
@@ -1052,7 +1056,7 @@
|
|
1052
1056
|
}));
|
1053
1057
|
statement(ThrowNode, true);
|
1054
1058
|
// Check an expression for existence (meaning not null or undefined).
|
1055
|
-
ExistenceNode = (exports.ExistenceNode = inherit(
|
1059
|
+
ExistenceNode = (exports.ExistenceNode = inherit(BaseNode, {
|
1056
1060
|
type: 'Existence',
|
1057
1061
|
constructor: function constructor(expression) {
|
1058
1062
|
this.children = [(this.expression = expression)];
|
@@ -1075,7 +1079,7 @@
|
|
1075
1079
|
return '(typeof ' + first.compile(o) + ' !== "undefined" && ' + second.compile(o) + ' !== null)';
|
1076
1080
|
};
|
1077
1081
|
// An extra set of parentheses, specified explicitly in the source.
|
1078
|
-
ParentheticalNode = (exports.ParentheticalNode = inherit(
|
1082
|
+
ParentheticalNode = (exports.ParentheticalNode = inherit(BaseNode, {
|
1079
1083
|
type: 'Paren',
|
1080
1084
|
constructor: function constructor(expression) {
|
1081
1085
|
this.children = [(this.expression = expression)];
|
@@ -1101,7 +1105,7 @@
|
|
1101
1105
|
// into a for loop. Also acts as an expression, able to return the result
|
1102
1106
|
// of the comprehenion. Unlike Python array comprehensions, it's able to pass
|
1103
1107
|
// the current index of the loop as a second parameter.
|
1104
|
-
ForNode = (exports.ForNode = inherit(
|
1108
|
+
ForNode = (exports.ForNode = inherit(BaseNode, {
|
1105
1109
|
type: 'For',
|
1106
1110
|
constructor: function constructor(body, source, name, index) {
|
1107
1111
|
var _a;
|
@@ -1199,7 +1203,7 @@
|
|
1199
1203
|
// expression by pushing down requested returns to the expression bodies.
|
1200
1204
|
// Single-expression IfNodes are compiled into ternary operators if possible,
|
1201
1205
|
// because ternaries are first-class returnable assignable expressions.
|
1202
|
-
IfNode = (exports.IfNode = inherit(
|
1206
|
+
IfNode = (exports.IfNode = inherit(BaseNode, {
|
1203
1207
|
type: 'If',
|
1204
1208
|
constructor: function constructor(condition, body, else_body, tags) {
|
1205
1209
|
this.condition = condition;
|
@@ -1325,4 +1329,4 @@
|
|
1325
1329
|
return if_part + ' : ' + else_part;
|
1326
1330
|
}
|
1327
1331
|
}));
|
1328
|
-
})();
|
1332
|
+
})();
|
@@ -1,21 +1,19 @@
|
|
1
1
|
(function(){
|
2
2
|
var LONG_FLAG, OPTIONAL, SHORT_FLAG, build_rule, build_rules, op, spaces;
|
3
3
|
// Create an OptionParser with a list of valid options.
|
4
|
-
op = (exports.OptionParser = function OptionParser(rules) {
|
5
|
-
this.banner = 'Usage: [Options]';
|
4
|
+
op = (exports.OptionParser = function OptionParser(rules, banner) {
|
5
|
+
this.banner = banner || 'Usage: [Options]';
|
6
6
|
this.options_title = 'Available options:';
|
7
7
|
this.rules = build_rules(rules);
|
8
|
-
this.actions = {};
|
9
8
|
return this;
|
10
9
|
});
|
11
|
-
// Add a callback to fire when a particular option is encountered.
|
12
|
-
op.prototype.add = function add(value, callback) {
|
13
|
-
return this.actions[value] = callback;
|
14
|
-
};
|
15
10
|
// Parse the argument array, calling defined callbacks, returning the remaining non-option arguments.
|
16
11
|
op.prototype.parse = function parse(args) {
|
17
|
-
var _a, _b, arg,
|
18
|
-
|
12
|
+
var _a, _b, arg, is_option, options, rule;
|
13
|
+
arguments = Array.prototype.slice.call(arguments, 0);
|
14
|
+
options = {
|
15
|
+
arguments: []
|
16
|
+
};
|
19
17
|
args = args.concat([]);
|
20
18
|
while (((arg = args.shift()))) {
|
21
19
|
is_option = false;
|
@@ -23,20 +21,16 @@
|
|
23
21
|
for (_b = 0; _b < _a.length; _b++) {
|
24
22
|
rule = _a[_b];
|
25
23
|
if (rule.letter === arg || rule.flag === arg) {
|
26
|
-
|
27
|
-
value = rule.argument && args.shift();
|
28
|
-
if (callback) {
|
29
|
-
callback(value);
|
30
|
-
}
|
24
|
+
options[rule.name] = rule.argument ? args.shift() : true;
|
31
25
|
is_option = true;
|
32
26
|
break;
|
33
27
|
}
|
34
28
|
}
|
35
29
|
if (!(is_option)) {
|
36
|
-
|
30
|
+
options.arguments.push(arg);
|
37
31
|
}
|
38
32
|
}
|
39
|
-
return
|
33
|
+
return options;
|
40
34
|
};
|
41
35
|
// Return the help text for this OptionParser, for --help and such.
|
42
36
|
op.prototype.help = function help() {
|
@@ -114,4 +108,4 @@
|
|
114
108
|
}
|
115
109
|
return builder.join('');
|
116
110
|
};
|
117
|
-
})();
|
111
|
+
})();
|