diff options
Diffstat (limited to 'tests/lexers/coffee-script/example2.txt')
| -rw-r--r-- | tests/lexers/coffee-script/example2.txt | 4594 |
1 files changed, 4594 insertions, 0 deletions
diff --git a/tests/lexers/coffee-script/example2.txt b/tests/lexers/coffee-script/example2.txt new file mode 100644 index 00000000..3df68276 --- /dev/null +++ b/tests/lexers/coffee-script/example2.txt @@ -0,0 +1,4594 @@ +---input--- + + # Underscore.coffee + # (c) 2010 Jeremy Ashkenas, DocumentCloud Inc. + # Underscore is freely distributable under the terms of the MIT license. + # Portions of Underscore are inspired by or borrowed from Prototype.js, + # Oliver Steele's Functional, and John Resig's Micro-Templating. + # For all details and documentation: + # http://documentcloud.github.com/underscore/ + + + # ------------------------- Baseline setup --------------------------------- + + # Establish the root object, "window" in the browser, or "global" on the server. + root: this + + + # Save the previous value of the "_" variable. + previousUnderscore: root._ + + + # If Underscore is called as a function, it returns a wrapped object that + # can be used OO-style. This wrapper holds altered versions of all the + # underscore functions. Wrapped objects may be chained. + wrapper: (obj) -> + this._wrapped: obj + this + + + # Establish the object that gets thrown to break out of a loop iteration. + breaker: if typeof(StopIteration) is 'undefined' then '__break__' else StopIteration + + + # Create a safe reference to the Underscore object forreference below. + _: root._: (obj) -> new wrapper(obj) + + + # Export the Underscore object for CommonJS. + if typeof(exports) != 'undefined' then exports._: _ + + + # Create quick reference variables for speed access to core prototypes. + slice: Array::slice + unshift: Array::unshift + toString: Object::toString + hasOwnProperty: Object::hasOwnProperty + propertyIsEnumerable: Object::propertyIsEnumerable + + + # Current version. + _.VERSION: '0.5.7' + + + # ------------------------ Collection Functions: --------------------------- + + # The cornerstone, an each implementation. + # Handles objects implementing forEach, arrays, and raw objects. + _.each: (obj, iterator, context) -> + index: 0 + try + return obj.forEach(iterator, context) if obj.forEach + if _.isArray(obj) or _.isArguments(obj) + return iterator.call(context, obj[i], i, obj) for i in [0...obj.length] + iterator.call(context, val, key, obj) for key, val of obj + catch e + throw e if e isnt breaker + obj + + + # Return the results of applying the iterator to each element. Use JavaScript + # 1.6's version of map, if possible. + _.map: (obj, iterator, context) -> + return obj.map(iterator, context) if (obj and _.isFunction(obj.map)) + results: [] + _.each obj, (value, index, list) -> + results.push(iterator.call(context, value, index, list)) + results + + + # Reduce builds up a single result from a list of values. Also known as + # inject, or foldl. Uses JavaScript 1.8's version of reduce, if possible. + _.reduce: (obj, memo, iterator, context) -> + return obj.reduce(_.bind(iterator, context), memo) if (obj and _.isFunction(obj.reduce)) + _.each obj, (value, index, list) -> + memo: iterator.call(context, memo, value, index, list) + memo + + + # The right-associative version of reduce, also known as foldr. Uses + # JavaScript 1.8's version of reduceRight, if available. + _.reduceRight: (obj, memo, iterator, context) -> + return obj.reduceRight(_.bind(iterator, context), memo) if (obj and _.isFunction(obj.reduceRight)) + _.each _.clone(_.toArray(obj)).reverse(), (value, index) -> + memo: iterator.call(context, memo, value, index, obj) + memo + + + # Return the first value which passes a truth test. + _.detect: (obj, iterator, context) -> + result: null + _.each obj, (value, index, list) -> + if iterator.call(context, value, index, list) + result: value + _.breakLoop() + result + + + # Return all the elements that pass a truth test. Use JavaScript 1.6's + # filter(), if it exists. + _.select: (obj, iterator, context) -> + if obj and _.isFunction(obj.filter) then return obj.filter(iterator, context) + results: [] + _.each obj, (value, index, list) -> + results.push(value) if iterator.call(context, value, index, list) + results + + + # Return all the elements for which a truth test fails. + _.reject: (obj, iterator, context) -> + results: [] + _.each obj, (value, index, list) -> + results.push(value) if not iterator.call(context, value, index, list) + results + + + # Determine whether all of the elements match a truth test. Delegate to + # JavaScript 1.6's every(), if it is present. + _.all: (obj, iterator, context) -> + iterator ||= _.identity + return obj.every(iterator, context) if obj and _.isFunction(obj.every) + result: true + _.each obj, (value, index, list) -> + _.breakLoop() unless (result: result and iterator.call(context, value, index, list)) + result + + + # Determine if at least one element in the object matches a truth test. Use + # JavaScript 1.6's some(), if it exists. + _.any: (obj, iterator, context) -> + iterator ||= _.identity + return obj.some(iterator, context) if obj and _.isFunction(obj.some) + result: false + _.each obj, (value, index, list) -> + _.breakLoop() if (result: iterator.call(context, value, index, list)) + result + + + # Determine if a given value is included in the array or object, + # based on '==='. + _.include: (obj, target) -> + return _.indexOf(obj, target) isnt -1 if _.isArray(obj) + for key, val of obj + return true if val is target + false + + + # Invoke a method with arguments on every item in a collection. + _.invoke: (obj, method) -> + args: _.rest(arguments, 2) + (if method then val[method] else val).apply(val, args) for val in obj + + + # Convenience version of a common use case of map: fetching a property. + _.pluck: (obj, key) -> + _.map(obj, ((val) -> val[key])) + + + # Return the maximum item or (item-based computation). + _.max: (obj, iterator, context) -> + return Math.max.apply(Math, obj) if not iterator and _.isArray(obj) + result: {computed: -Infinity} + _.each obj, (value, index, list) -> + computed: if iterator then iterator.call(context, value, index, list) else value + computed >= result.computed and (result: {value: value, computed: computed}) + result.value + + + # Return the minimum element (or element-based computation). + _.min: (obj, iterator, context) -> + return Math.min.apply(Math, obj) if not iterator and _.isArray(obj) + result: {computed: Infinity} + _.each obj, (value, index, list) -> + computed: if iterator then iterator.call(context, value, index, list) else value + computed < result.computed and (result: {value: value, computed: computed}) + result.value + + + # Sort the object's values by a criteria produced by an iterator. + _.sortBy: (obj, iterator, context) -> + _.pluck(((_.map obj, (value, index, list) -> + {value: value, criteria: iterator.call(context, value, index, list)} + ).sort((left, right) -> + a: left.criteria; b: right.criteria + if a < b then -1 else if a > b then 1 else 0 + )), 'value') + + + # Use a comparator function to figure out at what index an object should + # be inserted so as to maintain order. Uses binary search. + _.sortedIndex: (array, obj, iterator) -> + iterator ||= _.identity + low: 0; high: array.length + while low < high + mid: (low + high) >> 1 + if iterator(array[mid]) < iterator(obj) then low: mid + 1 else high: mid + low + + + # Convert anything iterable into a real, live array. + _.toArray: (iterable) -> + return [] if (!iterable) + return iterable.toArray() if (iterable.toArray) + return iterable if (_.isArray(iterable)) + return slice.call(iterable) if (_.isArguments(iterable)) + _.values(iterable) + + + # Return the number of elements in an object. + _.size: (obj) -> _.toArray(obj).length + + + # -------------------------- Array Functions: ------------------------------ + + # Get the first element of an array. Passing "n" will return the first N + # values in the array. Aliased as "head". The "guard" check allows it to work + # with _.map. + _.first: (array, n, guard) -> + if n and not guard then slice.call(array, 0, n) else array[0] + + + # Returns everything but the first entry of the array. Aliased as "tail". + # Especially useful on the arguments object. Passing an "index" will return + # the rest of the values in the array from that index onward. The "guard" + # check allows it to work with _.map. + _.rest: (array, index, guard) -> + slice.call(array, if _.isUndefined(index) or guard then 1 else index) + + + # Get the last element of an array. + _.last: (array) -> array[array.length - 1] + + + # Trim out all falsy values from an array. + _.compact: (array) -> array[i] for i in [0...array.length] when array[i] + + + # Return a completely flattened version of an array. + _.flatten: (array) -> + _.reduce array, [], (memo, value) -> + return memo.concat(_.flatten(value)) if _.isArray(value) + memo.push(value) + memo + + + # Return a version of the array that does not contain the specified value(s). + _.without: (array) -> + values: _.rest(arguments) + val for val in _.toArray(array) when not _.include(values, val) + + + # Produce a duplicate-free version of the array. If the array has already + # been sorted, you have the option of using a faster algorithm. + _.uniq: (array, isSorted) -> + memo: [] + for el, i in _.toArray(array) + memo.push(el) if i is 0 || (if isSorted is true then _.last(memo) isnt el else not _.include(memo, el)) + memo + + + # Produce an array that contains every item shared between all the + # passed-in arrays. + _.intersect: (array) -> + rest: _.rest(arguments) + _.select _.uniq(array), (item) -> + _.all rest, (other) -> + _.indexOf(other, item) >= 0 + + + # Zip together multiple lists into a single array -- elements that share + # an index go together. + _.zip: -> + length: _.max(_.pluck(arguments, 'length')) + results: new Array(length) + for i in [0...length] + results[i]: _.pluck(arguments, String(i)) + results + + + # If the browser doesn't supply us with indexOf (I'm looking at you, MSIE), + # we need this function. Return the position of the first occurence of an + # item in an array, or -1 if the item is not included in the array. + _.indexOf: (array, item) -> + return array.indexOf(item) if array.indexOf + i: 0; l: array.length + while l - i + if array[i] is item then return i else i++ + -1 + + + # Provide JavaScript 1.6's lastIndexOf, delegating to the native function, + # if possible. + _.lastIndexOf: (array, item) -> + return array.lastIndexOf(item) if array.lastIndexOf + i: array.length + while i + if array[i] is item then return i else i-- + -1 + + + # Generate an integer Array containing an arithmetic progression. A port of + # the native Python range() function. See: + # http://docs.python.org/library/functions.html#range + _.range: (start, stop, step) -> + a: arguments + solo: a.length <= 1 + i: start: if solo then 0 else a[0]; + stop: if solo then a[0] else a[1]; + step: a[2] or 1 + len: Math.ceil((stop - start) / step) + return [] if len <= 0 + range: new Array(len) + idx: 0 + while true + return range if (if step > 0 then i - stop else stop - i) >= 0 + range[idx]: i + idx++ + i+= step + + + # ----------------------- Function Functions: ----------------------------- + + # Create a function bound to a given object (assigning 'this', and arguments, + # optionally). Binding with arguments is also known as 'curry'. + _.bind: (func, obj) -> + args: _.rest(arguments, 2) + -> func.apply(obj or root, args.concat(arguments)) + + + # Bind all of an object's methods to that object. Useful for ensuring that + # all callbacks defined on an object belong to it. + _.bindAll: (obj) -> + funcs: if arguments.length > 1 then _.rest(arguments) else _.functions(obj) + _.each(funcs, (f) -> obj[f]: _.bind(obj[f], obj)) + obj + + + # Delays a function for the given number of milliseconds, and then calls + # it with the arguments supplied. + _.delay: (func, wait) -> + args: _.rest(arguments, 2) + setTimeout((-> func.apply(func, args)), wait) + + + # Defers a function, scheduling it to run after the current call stack has + # cleared. + _.defer: (func) -> + _.delay.apply(_, [func, 1].concat(_.rest(arguments))) + + + # Returns the first function passed as an argument to the second, + # allowing you to adjust arguments, run code before and after, and + # conditionally execute the original function. + _.wrap: (func, wrapper) -> + -> wrapper.apply(wrapper, [func].concat(arguments)) + + + # Returns a function that is the composition of a list of functions, each + # consuming the return value of the function that follows. + _.compose: -> + funcs: arguments + -> + args: arguments + for i in [(funcs.length - 1)..0] + args: [funcs[i].apply(this, args)] + args[0] + + + # ------------------------- Object Functions: ---------------------------- + + # Retrieve the names of an object's properties. + _.keys: (obj) -> + return _.range(0, obj.length) if _.isArray(obj) + key for key, val of obj + + + # Retrieve the values of an object's properties. + _.values: (obj) -> + _.map(obj, _.identity) + + + # Return a sorted list of the function names available in Underscore. + _.functions: (obj) -> + _.select(_.keys(obj), (key) -> _.isFunction(obj[key])).sort() + + + # Extend a given object with all of the properties in a source object. + _.extend: (destination, source) -> + for key, val of source + destination[key]: val + destination + + + # Create a (shallow-cloned) duplicate of an object. + _.clone: (obj) -> + return obj.slice(0) if _.isArray(obj) + _.extend({}, obj) + + + # Invokes interceptor with the obj, and then returns obj. + # The primary purpose of this method is to "tap into" a method chain, in order to perform operations on intermediate results within the chain. + _.tap: (obj, interceptor) -> + interceptor(obj) + obj + + + # Perform a deep comparison to check if two objects are equal. + _.isEqual: (a, b) -> + # Check object identity. + return true if a is b + # Different types? + atype: typeof(a); btype: typeof(b) + return false if atype isnt btype + # Basic equality test (watch out for coercions). + return true if `a == b` + # One is falsy and the other truthy. + return false if (!a and b) or (a and !b) + # One of them implements an isEqual()? + return a.isEqual(b) if a.isEqual + # Check dates' integer values. + return a.getTime() is b.getTime() if _.isDate(a) and _.isDate(b) + # Both are NaN? + return true if _.isNaN(a) and _.isNaN(b) + # Compare regular expressions. + if _.isRegExp(a) and _.isRegExp(b) + return a.source is b.source and + a.global is b.global and + a.ignoreCase is b.ignoreCase and + a.multiline is b.multiline + # If a is not an object by this point, we can't handle it. + return false if atype isnt 'object' + # Check for different array lengths before comparing contents. + return false if a.length and (a.length isnt b.length) + # Nothing else worked, deep compare the contents. + aKeys: _.keys(a); bKeys: _.keys(b) + # Different object sizes? + return false if aKeys.length isnt bKeys.length + # Recursive comparison of contents. + # for (var key in a) if (!_.isEqual(a[key], b[key])) return false; + return true + + + # Is a given array or object empty? + _.isEmpty: (obj) -> _.keys(obj).length is 0 + + + # Is a given value a DOM element? + _.isElement: (obj) -> obj and obj.nodeType is 1 + + + # Is a given value an array? + _.isArray: (obj) -> !!(obj and obj.concat and obj.unshift) + + + # Is a given variable an arguments object? + _.isArguments: (obj) -> obj and _.isNumber(obj.length) and not obj.concat and + not obj.substr and not obj.apply and not propertyIsEnumerable.call(obj, 'length') + + + # Is the given value a function? + _.isFunction: (obj) -> !!(obj and obj.constructor and obj.call and obj.apply) + + + # Is the given value a string? + _.isString: (obj) -> !!(obj is '' or (obj and obj.charCodeAt and obj.substr)) + + + # Is a given value a number? + _.isNumber: (obj) -> (obj is +obj) or toString.call(obj) is '[object Number]' + + + # Is a given value a Date? + _.isDate: (obj) -> !!(obj and obj.getTimezoneOffset and obj.setUTCFullYear) + + + # Is the given value a regular expression? + _.isRegExp: (obj) -> !!(obj and obj.exec and (obj.ignoreCase or obj.ignoreCase is false)) + + + # Is the given value NaN -- this one is interesting. NaN != NaN, and + # isNaN(undefined) == true, so we make sure it's a number first. + _.isNaN: (obj) -> _.isNumber(obj) and window.isNaN(obj) + + + # Is a given value equal to null? + _.isNull: (obj) -> obj is null + + + # Is a given variable undefined? + _.isUndefined: (obj) -> typeof obj is 'undefined' + + + # -------------------------- Utility Functions: -------------------------- + + # Run Underscore.js in noConflict mode, returning the '_' variable to its + # previous owner. Returns a reference to the Underscore object. + _.noConflict: -> + root._: previousUnderscore + this + + + # Keep the identity function around for default iterators. + _.identity: (value) -> value + + + # Break out of the middle of an iteration. + _.breakLoop: -> throw breaker + + + # Generate a unique integer id (unique within the entire client session). + # Useful for temporary DOM ids. + idCounter: 0 + _.uniqueId: (prefix) -> + (prefix or '') + idCounter++ + + + # By default, Underscore uses ERB-style template delimiters, change the + # following template settings to use alternative delimiters. + _.templateSettings: { + start: '<%' + end: '%>' + interpolate: /<%=(.+?)%>/g + } + + + # JavaScript templating a-la ERB, pilfered from John Resig's + # "Secrets of the JavaScript Ninja", page 83. + # Single-quotea fix from Rick Strahl's version. + _.template: (str, data) -> + c: _.templateSettings + fn: new Function 'obj', + 'var p=[],print=function(){p.push.apply(p,arguments);};' + + 'with(obj){p.push(\'' + + str.replace(/[\r\t\n]/g, " ") + .replace(new RegExp("'(?=[^"+c.end[0]+"]*"+c.end+")","g"),"\t") + .split("'").join("\\'") + .split("\t").join("'") + .replace(c.interpolate, "',$1,'") + .split(c.start).join("');") + .split(c.end).join("p.push('") + + "');}return p.join('');" + if data then fn(data) else fn + + + # ------------------------------- Aliases ---------------------------------- + + _.forEach: _.each + _.foldl: _.inject: _.reduce + _.foldr: _.reduceRight + _.filter: _.select + _.every: _.all + _.some: _.any + _.head: _.first + _.tail: _.rest + _.methods: _.functions + + + # /*------------------------ Setup the OOP Wrapper: --------------------------*/ + + # Helper function to continue chaining intermediate results. + result: (obj, chain) -> + if chain then _(obj).chain() else obj + + + # Add all of the Underscore functions to the wrapper object. + _.each _.functions(_), (name) -> + method: _[name] + wrapper.prototype[name]: -> + unshift.call(arguments, this._wrapped) + result(method.apply(_, arguments), this._chain) + + + # Add all mutator Array functions to the wrapper. + _.each ['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], (name) -> + method: Array.prototype[name] + wrapper.prototype[name]: -> + method.apply(this._wrapped, arguments) + result(this._wrapped, this._chain) + + + # Add all accessor Array functions to the wrapper. + _.each ['concat', 'join', 'slice'], (name) -> + method: Array.prototype[name] + wrapper.prototype[name]: -> + result(method.apply(this._wrapped, arguments), this._chain) + + + # Start chaining a wrapped Underscore object. + wrapper::chain: -> + this._chain: true + this + + + # Extracts the result from a wrapped and chained object. + wrapper::value: -> this._wrapped + +---tokens--- +' ' Text +'# Underscore.coffee\n' Comment.Single + +' ' Text +'# (c) 2010 Jeremy Ashkenas, DocumentCloud Inc.\n' Comment.Single + +' ' Text +'# Underscore is freely distributable under the terms of the MIT license.\n' Comment.Single + +' ' Text +'# Portions of Underscore are inspired by or borrowed from Prototype.js,\n' Comment.Single + +' ' Text +"# Oliver Steele's Functional, and John Resig's Micro-Templating.\n" Comment.Single + +' ' Text +'# For all details and documentation:\n' Comment.Single + +' ' Text +'# http://documentcloud.github.com/underscore/\n' Comment.Single + +'\n\n ' Text +'# ------------------------- Baseline setup ---------------------------------\n' Comment.Single + +'\n ' Text +'# Establish the root object, "window" in the browser, or "global" on the server.\n' Comment.Single + +' ' Text +'root: ' Name.Variable +'this' Keyword +'\n\n\n ' Text +'# Save the previous value of the "_" variable.\n' Comment.Single + +' ' Text +'previousUnderscore: ' Name.Variable +'root' Name.Other +'.' Punctuation +'_' Name.Other +'\n\n\n ' Text +'# If Underscore is called as a function, it returns a wrapped object that\n' Comment.Single + +' ' Text +'# can be used OO-style. This wrapper holds altered versions of all the\n' Comment.Single + +' ' Text +'# underscore functions. Wrapped objects may be chained.\n' Comment.Single + +' ' Text +'wrapper: ' Name.Variable +'(obj) ->' Name.Function +'\n ' Text +'this' Keyword +'.' Punctuation +'_wrapped: ' Name.Variable +'obj' Name.Other +'\n ' Text +'this' Keyword +'\n\n\n ' Text +'# Establish the object that gets thrown to break out of a loop iteration.\n' Comment.Single + +' ' Text +'breaker: ' Name.Variable +'if' Keyword +' ' Text +'typeof' Keyword +'(' Punctuation +'StopIteration' Name.Other +')' Punctuation +' ' Text +'is' Operator +' ' Text +"'" Literal.String +'undefined' Literal.String +"'" Literal.String +' ' Text +'then' Keyword +' ' Text +"'" Literal.String +'__break__' Literal.String +"'" Literal.String +' ' Text +'else' Keyword +' ' Text +'StopIteration' Name.Other +'\n\n\n ' Text +'# Create a safe reference to the Underscore object forreference below.\n' Comment.Single + +' ' Text +'_: ' Name.Variable +'root._: ' Name.Variable +'(obj) ->' Name.Function +' ' Text +'new' Keyword +' ' Text +'wrapper' Name.Other +'(' Punctuation +'obj' Name.Other +')' Punctuation +'\n\n\n ' Text +'# Export the Underscore object for CommonJS.\n' Comment.Single + +' ' Text +'if' Keyword +' ' Text +'typeof' Keyword +'(' Punctuation +'exports' Name.Other +')' Punctuation +' ' Text +'!=' Operator +' ' Text +"'" Literal.String +'undefined' Literal.String +"'" Literal.String +' ' Text +'then' Keyword +' ' Text +'exports._: ' Name.Variable +'_' Name.Other +'\n\n\n ' Text +'# Create quick reference variables for speed access to core prototypes.\n' Comment.Single + +' ' Text +'slice: ' Name.Variable +' ' Text +'Array' Name.Builtin +':' Operator +':' Operator +'slice' Name.Other +'\n ' Text +'unshift: ' Name.Variable +' ' Text +'Array' Name.Builtin +':' Operator +':' Operator +'unshift' Name.Other +'\n ' Text +'toString: ' Name.Variable +' ' Text +'Object' Name.Builtin +':' Operator +':' Operator +'toString' Name.Other +'\n ' Text +'hasOwnProperty: ' Name.Variable +' ' Text +'Object' Name.Builtin +':' Operator +':' Operator +'hasOwnProperty' Name.Other +'\n ' Text +'propertyIsEnumerable: ' Name.Variable +'Object' Name.Builtin +':' Operator +':' Operator +'propertyIsEnumerable' Name.Other +'\n\n\n ' Text +'# Current version.\n' Comment.Single + +' ' Text +'_.VERSION: ' Name.Variable +"'" Literal.String +'0.5.7' Literal.String +"'" Literal.String +'\n\n\n ' Text +'# ------------------------ Collection Functions: ---------------------------\n' Comment.Single + +'\n ' Text +'# The cornerstone, an each implementation.\n' Comment.Single + +' ' Text +'# Handles objects implementing forEach, arrays, and raw objects.\n' Comment.Single + +' ' Text +'_.each: ' Name.Variable +'(obj, iterator, context) ->' Name.Function +'\n ' Text +'index: ' Name.Variable +'0' Literal.Number.Integer +'\n ' Text +'try' Keyword +'\n ' Text +'return' Keyword +' ' Text +'obj' Name.Other +'.' Punctuation +'forEach' Name.Other +'(' Punctuation +'iterator' Name.Other +',' Punctuation +' ' Text +'context' Name.Other +')' Punctuation +' ' Text +'if' Keyword +' ' Text +'obj' Name.Other +'.' Punctuation +'forEach' Name.Other +'\n ' Text +'if' Keyword +' ' Text +'_' Name.Other +'.' Punctuation +'isArray' Name.Other +'(' Punctuation +'obj' Name.Other +')' Punctuation +' ' Text +'or' Operator +' ' Text +'_' Name.Other +'.' Punctuation +'isArguments' Name.Other +'(' Punctuation +'obj' Name.Other +')' Punctuation +'\n ' Text +'return' Keyword +' ' Text +'iterator' Name.Other +'.' Punctuation +'call' Name.Other +'(' Punctuation +'context' Name.Other +',' Punctuation +' ' Text +'obj' Name.Other +'[' Punctuation +'i' Name.Other +']' Punctuation +',' Punctuation +' ' Text +'i' Name.Other +',' Punctuation +' ' Text +'obj' Name.Other +')' Punctuation +' ' Text +'for' Keyword +' ' Text +'i' Name.Other +' ' Text +'in' Keyword +' ' Text +'[' Punctuation +'0' Literal.Number.Integer +'.' Punctuation +'.' Punctuation +'.' Punctuation +'obj' Name.Other +'.' Punctuation +'length' Name.Other +']' Punctuation +'\n ' Text +'iterator' Name.Other +'.' Punctuation +'call' Name.Other +'(' Punctuation +'context' Name.Other +',' Punctuation +' ' Text +'val' Name.Other +',' Punctuation +' ' Text +'key' Name.Other +',' Punctuation +' ' Text +'obj' Name.Other +')' Punctuation +' ' Text +'for' Keyword +' ' Text +'key' Name.Other +',' Punctuation +' ' Text +'val' Name.Other +' ' Text +'of' Keyword +' ' Text +'obj' Name.Other +'\n ' Text +'catch' Keyword +' ' Text +'e' Name.Other +'\n ' Text +'throw' Keyword +' ' Text +'e' Name.Other +' ' Text +'if' Keyword +' ' Text +'e' Name.Other +' ' Text +'isnt' Operator +' ' Text +'breaker' Name.Other +'\n ' Text +'obj' Name.Other +'\n\n\n ' Text +'# Return the results of applying the iterator to each element. Use JavaScript\n' Comment.Single + +' ' Text +"# 1.6's version of map, if possible.\n" Comment.Single + +' ' Text +'_.map: ' Name.Variable +'(obj, iterator, context) ->' Name.Function +'\n ' Text +'return' Keyword +' ' Text +'obj' Name.Other +'.' Punctuation +'map' Name.Other +'(' Punctuation +'iterator' Name.Other +',' Punctuation +' ' Text +'context' Name.Other +')' Punctuation +' ' Text +'if' Keyword +' ' Text +'(' Punctuation +'obj' Name.Other +' ' Text +'and' Operator +' ' Text +'_' Name.Other +'.' Punctuation +'isFunction' Name.Other +'(' Punctuation +'obj' Name.Other +'.' Punctuation +'map' Name.Other +')' Punctuation +')' Punctuation +'\n ' Text +'results: ' Name.Variable +'[' Punctuation +']' Punctuation +'\n ' Text +'_' Name.Other +'.' Punctuation +'each' Name.Other +' ' Text +'obj' Name.Other +',' Punctuation +' ' Text +'(value, index, list) ->' Name.Function +'\n ' Text +'results' Name.Other +'.' Punctuation +'push' Name.Other +'(' Punctuation +'iterator' Name.Other +'.' Punctuation +'call' Name.Other +'(' Punctuation +'context' Name.Other +',' Punctuation +' ' Text +'value' Name.Other +',' Punctuation +' ' Text +'index' Name.Other +',' Punctuation +' ' Text +'list' Name.Other +')' Punctuation +')' Punctuation +'\n ' Text +'results' Name.Other +'\n\n\n ' Text +'# Reduce builds up a single result from a list of values. Also known as\n' Comment.Single + +' ' Text +"# inject, or foldl. Uses JavaScript 1.8's version of reduce, if possible.\n" Comment.Single + +' ' Text +'_.reduce: ' Name.Variable +'(obj, memo, iterator, context) ->' Name.Function +'\n ' Text +'return' Keyword +' ' Text +'obj' Name.Other +'.' Punctuation +'reduce' Name.Other +'(' Punctuation +'_' Name.Other +'.' Punctuation +'bind' Name.Other +'(' Punctuation +'iterator' Name.Other +',' Punctuation +' ' Text +'context' Name.Other +')' Punctuation +',' Punctuation +' ' Text +'memo' Name.Other +')' Punctuation +' ' Text +'if' Keyword +' ' Text +'(' Punctuation +'obj' Name.Other +' ' Text +'and' Operator +' ' Text +'_' Name.Other +'.' Punctuation +'isFunction' Name.Other +'(' Punctuation +'obj' Name.Other +'.' Punctuation +'reduce' Name.Other +')' Punctuation +')' Punctuation +'\n ' Text +'_' Name.Other +'.' Punctuation +'each' Name.Other +' ' Text +'obj' Name.Other +',' Punctuation +' ' Text +'(value, index, list) ->' Name.Function +'\n ' Text +'memo: ' Name.Variable +'iterator' Name.Other +'.' Punctuation +'call' Name.Other +'(' Punctuation +'context' Name.Other +',' Punctuation +' ' Text +'memo' Name.Other +',' Punctuation +' ' Text +'value' Name.Other +',' Punctuation +' ' Text +'index' Name.Other +',' Punctuation +' ' Text +'list' Name.Other +')' Punctuation +'\n ' Text +'memo' Name.Other +'\n\n\n ' Text +'# The right-associative version of reduce, also known as foldr. Uses\n' Comment.Single + +' ' Text +"# JavaScript 1.8's version of reduceRight, if available.\n" Comment.Single + +' ' Text +'_.reduceRight: ' Name.Variable +'(obj, memo, iterator, context) ->' Name.Function +'\n ' Text +'return' Keyword +' ' Text +'obj' Name.Other +'.' Punctuation +'reduceRight' Name.Other +'(' Punctuation +'_' Name.Other +'.' Punctuation +'bind' Name.Other +'(' Punctuation +'iterator' Name.Other +',' Punctuation +' ' Text +'context' Name.Other +')' Punctuation +',' Punctuation +' ' Text +'memo' Name.Other +')' Punctuation +' ' Text +'if' Keyword +' ' Text +'(' Punctuation +'obj' Name.Other +' ' Text +'and' Operator +' ' Text +'_' Name.Other +'.' Punctuation +'isFunction' Name.Other +'(' Punctuation +'obj' Name.Other +'.' Punctuation +'reduceRight' Name.Other +')' Punctuation +')' Punctuation +'\n ' Text +'_' Name.Other +'.' Punctuation +'each' Name.Other +' ' Text +'_' Name.Other +'.' Punctuation +'clone' Name.Other +'(' Punctuation +'_' Name.Other +'.' Punctuation +'toArray' Name.Other +'(' Punctuation +'obj' Name.Other +')' Punctuation +')' Punctuation +'.' Punctuation +'reverse' Name.Other +'(' Punctuation +')' Punctuation +',' Punctuation +' ' Text +'(value, index) ->' Name.Function +'\n ' Text +'memo: ' Name.Variable +'iterator' Name.Other +'.' Punctuation +'call' Name.Other +'(' Punctuation +'context' Name.Other +',' Punctuation +' ' Text +'memo' Name.Other +',' Punctuation +' ' Text +'value' Name.Other +',' Punctuation +' ' Text +'index' Name.Other +',' Punctuation +' ' Text +'obj' Name.Other +')' Punctuation +'\n ' Text +'memo' Name.Other +'\n\n\n ' Text +'# Return the first value which passes a truth test.\n' Comment.Single + +' ' Text +'_.detect: ' Name.Variable +'(obj, iterator, context) ->' Name.Function +'\n ' Text +'result: ' Name.Variable +'null' Keyword.Constant +'\n ' Text +'_' Name.Other +'.' Punctuation +'each' Name.Other +' ' Text +'obj' Name.Other +',' Punctuation +' ' Text +'(value, index, list) ->' Name.Function +'\n ' Text +'if' Keyword +' ' Text +'iterator' Name.Other +'.' Punctuation +'call' Name.Other +'(' Punctuation +'context' Name.Other +',' Punctuation +' ' Text +'value' Name.Other +',' Punctuation +' ' Text +'index' Name.Other +',' Punctuation +' ' Text +'list' Name.Other +')' Punctuation +'\n ' Text +'result: ' Name.Variable +'value' Name.Other +'\n ' Text +'_' Name.Other +'.' Punctuation +'breakLoop' Name.Other +'(' Punctuation +')' Punctuation +'\n ' Text +'result' Name.Other +'\n\n\n ' Text +"# Return all the elements that pass a truth test. Use JavaScript 1.6's\n" Comment.Single + +' ' Text +'# filter(), if it exists.\n' Comment.Single + +' ' Text +'_.select: ' Name.Variable +'(obj, iterator, context) ->' Name.Function +'\n ' Text +'if' Keyword +' ' Text +'obj' Name.Other +' ' Text +'and' Operator +' ' Text +'_' Name.Other +'.' Punctuation +'isFunction' Name.Other +'(' Punctuation +'obj' Name.Other +'.' Punctuation +'filter' Name.Other +')' Punctuation +' ' Text +'then' Keyword +' ' Text +'return' Keyword +' ' Text +'obj' Name.Other +'.' Punctuation +'filter' Name.Other +'(' Punctuation +'iterator' Name.Other +',' Punctuation +' ' Text +'context' Name.Other +')' Punctuation +'\n ' Text +'results: ' Name.Variable +'[' Punctuation +']' Punctuation +'\n ' Text +'_' Name.Other +'.' Punctuation +'each' Name.Other +' ' Text +'obj' Name.Other +',' Punctuation +' ' Text +'(value, index, list) ->' Name.Function +'\n ' Text +'results' Name.Other +'.' Punctuation +'push' Name.Other +'(' Punctuation +'value' Name.Other +')' Punctuation +' ' Text +'if' Keyword +' ' Text +'iterator' Name.Other +'.' Punctuation +'call' Name.Other +'(' Punctuation +'context' Name.Other +',' Punctuation +' ' Text +'value' Name.Other +',' Punctuation +' ' Text +'index' Name.Other +',' Punctuation +' ' Text +'list' Name.Other +')' Punctuation +'\n ' Text +'results' Name.Other +'\n\n\n ' Text +'# Return all the elements for which a truth test fails.\n' Comment.Single + +' ' Text +'_.reject: ' Name.Variable +'(obj, iterator, context) ->' Name.Function +'\n ' Text +'results: ' Name.Variable +'[' Punctuation +']' Punctuation +'\n ' Text +'_' Name.Other +'.' Punctuation +'each' Name.Other +' ' Text +'obj' Name.Other +',' Punctuation +' ' Text +'(value, index, list) ->' Name.Function +'\n ' Text +'results' Name.Other +'.' Punctuation +'push' Name.Other +'(' Punctuation +'value' Name.Other +')' Punctuation +' ' Text +'if' Keyword +' ' Text +'not' Operator +' ' Text +'iterator' Name.Other +'.' Punctuation +'call' Name.Other +'(' Punctuation +'context' Name.Other +',' Punctuation +' ' Text +'value' Name.Other +',' Punctuation +' ' Text +'index' Name.Other +',' Punctuation +' ' Text +'list' Name.Other +')' Punctuation +'\n ' Text +'results' Name.Other +'\n\n\n ' Text +'# Determine whether all of the elements match a truth test. Delegate to\n' Comment.Single + +' ' Text +"# JavaScript 1.6's every(), if it is present.\n" Comment.Single + +' ' Text +'_.all: ' Name.Variable +'(obj, iterator, context) ->' Name.Function +'\n ' Text +'iterator' Name.Other +' ' Text +'||' Operator +'=' Operator +' ' Text +'_' Name.Other +'.' Punctuation +'identity' Name.Other +'\n ' Text +'return' Keyword +' ' Text +'obj' Name.Other +'.' Punctuation +'every' Name.Other +'(' Punctuation +'iterator' Name.Other +',' Punctuation +' ' Text +'context' Name.Other +')' Punctuation +' ' Text +'if' Keyword +' ' Text +'obj' Name.Other +' ' Text +'and' Operator +' ' Text +'_' Name.Other +'.' Punctuation +'isFunction' Name.Other +'(' Punctuation +'obj' Name.Other +'.' Punctuation +'every' Name.Other +')' Punctuation +'\n ' Text +'result: ' Name.Variable +'true' Keyword.Constant +'\n ' Text +'_' Name.Other +'.' Punctuation +'each' Name.Other +' ' Text +'obj' Name.Other +',' Punctuation +' ' Text +'(value, index, list) ->' Name.Function +'\n ' Text +'_' Name.Other +'.' Punctuation +'breakLoop' Name.Other +'(' Punctuation +')' Punctuation +' ' Text +'unless' Keyword +' ' Text +'(' Punctuation +'result: ' Name.Variable +'result' Name.Other +' ' Text +'and' Operator +' ' Text +'iterator' Name.Other +'.' Punctuation +'call' Name.Other +'(' Punctuation +'context' Name.Other +',' Punctuation +' ' Text +'value' Name.Other +',' Punctuation +' ' Text +'index' Name.Other +',' Punctuation +' ' Text +'list' Name.Other +')' Punctuation +')' Punctuation +'\n ' Text +'result' Name.Other +'\n\n\n ' Text +'# Determine if at least one element in the object matches a truth test. Use\n' Comment.Single + +' ' Text +"# JavaScript 1.6's some(), if it exists.\n" Comment.Single + +' ' Text +'_.any: ' Name.Variable +'(obj, iterator, context) ->' Name.Function +'\n ' Text +'iterator' Name.Other +' ' Text +'||' Operator +'=' Operator +' ' Text +'_' Name.Other +'.' Punctuation +'identity' Name.Other +'\n ' Text +'return' Keyword +' ' Text +'obj' Name.Other +'.' Punctuation +'some' Name.Other +'(' Punctuation +'iterator' Name.Other +',' Punctuation +' ' Text +'context' Name.Other +')' Punctuation +' ' Text +'if' Keyword +' ' Text +'obj' Name.Other +' ' Text +'and' Operator +' ' Text +'_' Name.Other +'.' Punctuation +'isFunction' Name.Other +'(' Punctuation +'obj' Name.Other +'.' Punctuation +'some' Name.Other +')' Punctuation +'\n ' Text +'result: ' Name.Variable +'false' Keyword.Constant +'\n ' Text +'_' Name.Other +'.' Punctuation +'each' Name.Other +' ' Text +'obj' Name.Other +',' Punctuation +' ' Text +'(value, index, list) ->' Name.Function +'\n ' Text +'_' Name.Other +'.' Punctuation +'breakLoop' Name.Other +'(' Punctuation +')' Punctuation +' ' Text +'if' Keyword +' ' Text +'(' Punctuation +'result: ' Name.Variable +'iterator' Name.Other +'.' Punctuation +'call' Name.Other +'(' Punctuation +'context' Name.Other +',' Punctuation +' ' Text +'value' Name.Other +',' Punctuation +' ' Text +'index' Name.Other +',' Punctuation +' ' Text +'list' Name.Other +')' Punctuation +')' Punctuation +'\n ' Text +'result' Name.Other +'\n\n\n ' Text +'# Determine if a given value is included in the array or object,\n' Comment.Single + +' ' Text +"# based on '==='.\n" Comment.Single + +' ' Text +'_.include: ' Name.Variable +'(obj, target) ->' Name.Function +'\n ' Text +'return' Keyword +' ' Text +'_' Name.Other +'.' Punctuation +'indexOf' Name.Other +'(' Punctuation +'obj' Name.Other +',' Punctuation +' ' Text +'target' Name.Other +')' Punctuation +' ' Text +'isnt' Operator +' ' Text +'-' Operator +'1' Literal.Number.Integer +' ' Text +'if' Keyword +' ' Text +'_' Name.Other +'.' Punctuation +'isArray' Name.Other +'(' Punctuation +'obj' Name.Other +')' Punctuation +'\n ' Text +'for' Keyword +' ' Text +'key' Name.Other +',' Punctuation +' ' Text +'val' Name.Other +' ' Text +'of' Keyword +' ' Text +'obj' Name.Other +'\n ' Text +'return' Keyword +' ' Text +'true' Keyword.Constant +' ' Text +'if' Keyword +' ' Text +'val' Name.Other +' ' Text +'is' Operator +' ' Text +'target' Name.Other +'\n ' Text +'false' Keyword.Constant +'\n\n\n ' Text +'# Invoke a method with arguments on every item in a collection.\n' Comment.Single + +' ' Text +'_.invoke: ' Name.Variable +'(obj, method) ->' Name.Function +'\n ' Text +'args: ' Name.Variable +'_' Name.Other +'.' Punctuation +'rest' Name.Other +'(' Punctuation +'arguments' Name.Other +',' Punctuation +' ' Text +'2' Literal.Number.Integer +')' Punctuation +'\n ' Text +'(' Punctuation +'if' Keyword +' ' Text +'method' Name.Other +' ' Text +'then' Keyword +' ' Text +'val' Name.Other +'[' Punctuation +'method' Name.Other +']' Punctuation +' ' Text +'else' Keyword +' ' Text +'val' Name.Other +')' Punctuation +'.' Punctuation +'apply' Name.Other +'(' Punctuation +'val' Name.Other +',' Punctuation +' ' Text +'args' Name.Other +')' Punctuation +' ' Text +'for' Keyword +' ' Text +'val' Name.Other +' ' Text +'in' Keyword +' ' Text +'obj' Name.Other +'\n\n\n ' Text +'# Convenience version of a common use case of map: fetching a property.\n' Comment.Single + +' ' Text +'_.pluck: ' Name.Variable +'(obj, key) ->' Name.Function +'\n ' Text +'_' Name.Other +'.' Punctuation +'map' Name.Other +'(' Punctuation +'obj' Name.Other +',' Punctuation +' ' Text +'(' Punctuation +'(val) ->' Name.Function +' ' Text +'val' Name.Other +'[' Punctuation +'key' Name.Other +']' Punctuation +')' Punctuation +')' Punctuation +'\n\n\n ' Text +'# Return the maximum item or (item-based computation).\n' Comment.Single + +' ' Text +'_.max: ' Name.Variable +'(obj, iterator, context) ->' Name.Function +'\n ' Text +'return' Keyword +' ' Text +'Math' Name.Builtin +'.' Punctuation +'max' Name.Other +'.' Punctuation +'apply' Name.Other +'(' Punctuation +'Math' Name.Builtin +',' Punctuation +' ' Text +'obj' Name.Other +')' Punctuation +' ' Text +'if' Keyword +' ' Text +'not' Operator +' ' Text +'iterator' Name.Other +' ' Text +'and' Operator +' ' Text +'_' Name.Other +'.' Punctuation +'isArray' Name.Other +'(' Punctuation +'obj' Name.Other +')' Punctuation +'\n ' Text +'result: ' Name.Variable +'{' Punctuation +'computed: ' Name.Variable +'-' Operator +'Infinity' Keyword.Constant +'}' Punctuation +'\n ' Text +'_' Name.Other +'.' Punctuation +'each' Name.Other +' ' Text +'obj' Name.Other +',' Punctuation +' ' Text +'(value, index, list) ->' Name.Function +'\n ' Text +'computed: ' Name.Variable +'if' Keyword +' ' Text +'iterator' Name.Other +' ' Text +'then' Keyword +' ' Text +'iterator' Name.Other +'.' Punctuation +'call' Name.Other +'(' Punctuation +'context' Name.Other +',' Punctuation +' ' Text +'value' Name.Other +',' Punctuation +' ' Text +'index' Name.Other +',' Punctuation +' ' Text +'list' Name.Other +')' Punctuation +' ' Text +'else' Keyword +' ' Text +'value' Name.Other +'\n ' Text +'computed' Name.Other +' ' Text +'>=' Operator +' ' Text +'result' Name.Other +'.' Punctuation +'computed' Name.Other +' ' Text +'and' Operator +' ' Text +'(' Punctuation +'result: ' Name.Variable +'{' Punctuation +'value: ' Name.Variable +'value' Name.Other +',' Punctuation +' ' Text +'computed: ' Name.Variable +'computed' Name.Other +'}' Punctuation +')' Punctuation +'\n ' Text +'result' Name.Other +'.' Punctuation +'value' Name.Other +'\n\n\n ' Text +'# Return the minimum element (or element-based computation).\n' Comment.Single + +' ' Text +'_.min: ' Name.Variable +'(obj, iterator, context) ->' Name.Function +'\n ' Text +'return' Keyword +' ' Text +'Math' Name.Builtin +'.' Punctuation +'min' Name.Other +'.' Punctuation +'apply' Name.Other +'(' Punctuation +'Math' Name.Builtin +',' Punctuation +' ' Text +'obj' Name.Other +')' Punctuation +' ' Text +'if' Keyword +' ' Text +'not' Operator +' ' Text +'iterator' Name.Other +' ' Text +'and' Operator +' ' Text +'_' Name.Other +'.' Punctuation +'isArray' Name.Other +'(' Punctuation +'obj' Name.Other +')' Punctuation +'\n ' Text +'result: ' Name.Variable +'{' Punctuation +'computed: ' Name.Variable +'Infinity' Keyword.Constant +'}' Punctuation +'\n ' Text +'_' Name.Other +'.' Punctuation +'each' Name.Other +' ' Text +'obj' Name.Other +',' Punctuation +' ' Text +'(value, index, list) ->' Name.Function +'\n ' Text +'computed: ' Name.Variable +'if' Keyword +' ' Text +'iterator' Name.Other +' ' Text +'then' Keyword +' ' Text +'iterator' Name.Other +'.' Punctuation +'call' Name.Other +'(' Punctuation +'context' Name.Other +',' Punctuation +' ' Text +'value' Name.Other +',' Punctuation +' ' Text +'index' Name.Other +',' Punctuation +' ' Text +'list' Name.Other +')' Punctuation +' ' Text +'else' Keyword +' ' Text +'value' Name.Other +'\n ' Text +'computed' Name.Other +' ' Text +'<' Operator +' ' Text +'result' Name.Other +'.' Punctuation +'computed' Name.Other +' ' Text +'and' Operator +' ' Text +'(' Punctuation +'result: ' Name.Variable +'{' Punctuation +'value: ' Name.Variable +'value' Name.Other +',' Punctuation +' ' Text +'computed: ' Name.Variable +'computed' Name.Other +'}' Punctuation +')' Punctuation +'\n ' Text +'result' Name.Other +'.' Punctuation +'value' Name.Other +'\n\n\n ' Text +"# Sort the object's values by a criteria produced by an iterator.\n" Comment.Single + +' ' Text +'_.sortBy: ' Name.Variable +'(obj, iterator, context) ->' Name.Function +'\n ' Text +'_' Name.Other +'.' Punctuation +'pluck' Name.Other +'(' Punctuation +'(' Punctuation +'(' Punctuation +'_' Name.Other +'.' Punctuation +'map' Name.Other +' ' Text +'obj' Name.Other +',' Punctuation +' ' Text +'(value, index, list) ->' Name.Function +'\n ' Text +'{' Punctuation +'value: ' Name.Variable +'value' Name.Other +',' Punctuation +' ' Text +'criteria: ' Name.Variable +'iterator' Name.Other +'.' Punctuation +'call' Name.Other +'(' Punctuation +'context' Name.Other +',' Punctuation +' ' Text +'value' Name.Other +',' Punctuation +' ' Text +'index' Name.Other +',' Punctuation +' ' Text +'list' Name.Other +')' Punctuation +'}' Punctuation +'\n ' Text +')' Punctuation +'.' Punctuation +'sort' Name.Other +'(' Punctuation +'(left, right) ->' Name.Function +'\n ' Text +'a: ' Name.Variable +'left' Name.Other +'.' Punctuation +'criteria' Name.Other +';' Punctuation +' ' Text +'b: ' Name.Variable +'right' Name.Other +'.' Punctuation +'criteria' Name.Other +'\n ' Text +'if' Keyword +' ' Text +'a' Name.Other +' ' Text +'<' Operator +' ' Text +'b' Name.Other +' ' Text +'then' Keyword +' ' Text +'-' Operator +'1' Literal.Number.Integer +' ' Text +'else' Keyword +' ' Text +'if' Keyword +' ' Text +'a' Name.Other +' ' Text +'>' Operator +' ' Text +'b' Name.Other +' ' Text +'then' Keyword +' ' Text +'1' Literal.Number.Integer +' ' Text +'else' Keyword +' ' Text +'0' Literal.Number.Integer +'\n ' Text +')' Punctuation +')' Punctuation +',' Punctuation +' ' Text +"'" Literal.String +'value' Literal.String +"'" Literal.String +')' Punctuation +'\n\n\n ' Text +'# Use a comparator function to figure out at what index an object should\n' Comment.Single + +' ' Text +'# be inserted so as to maintain order. Uses binary search.\n' Comment.Single + +' ' Text +'_.sortedIndex: ' Name.Variable +'(array, obj, iterator) ->' Name.Function +'\n ' Text +'iterator' Name.Other +' ' Text +'||' Operator +'=' Operator +' ' Text +'_' Name.Other +'.' Punctuation +'identity' Name.Other +'\n ' Text +'low: ' Name.Variable +'0' Literal.Number.Integer +';' Punctuation +' ' Text +'high: ' Name.Variable +'array' Name.Other +'.' Punctuation +'length' Name.Other +'\n ' Text +'while' Keyword +' ' Text +'low' Name.Other +' ' Text +'<' Operator +' ' Text +'high' Name.Other +'\n ' Text +'mid: ' Name.Variable +'(' Punctuation +'low' Name.Other +' ' Text +'+' Operator +' ' Text +'high' Name.Other +')' Punctuation +' ' Text +'>>' Operator +' ' Text +'1' Literal.Number.Integer +'\n ' Text +'if' Keyword +' ' Text +'iterator' Name.Other +'(' Punctuation +'array' Name.Other +'[' Punctuation +'mid' Name.Other +']' Punctuation +')' Punctuation +' ' Text +'<' Operator +' ' Text +'iterator' Name.Other +'(' Punctuation +'obj' Name.Other +')' Punctuation +' ' Text +'then' Keyword +' ' Text +'low: ' Name.Variable +'mid' Name.Other +' ' Text +'+' Operator +' ' Text +'1' Literal.Number.Integer +' ' Text +'else' Keyword +' ' Text +'high: ' Name.Variable +'mid' Name.Other +'\n ' Text +'low' Name.Other +'\n\n\n ' Text +'# Convert anything iterable into a real, live array.\n' Comment.Single + +' ' Text +'_.toArray: ' Name.Variable +'(iterable) ->' Name.Function +'\n ' Text +'return' Keyword +' ' Text +'[' Punctuation +']' Punctuation +' ' Text +'if' Keyword +' ' Text +'(' Punctuation +'!' Operator +'iterable' Name.Other +')' Punctuation +'\n ' Text +'return' Keyword +' ' Text +'iterable' Name.Other +'.' Punctuation +'toArray' Name.Other +'(' Punctuation +')' Punctuation +' ' Text +'if' Keyword +' ' Text +'(' Punctuation +'iterable' Name.Other +'.' Punctuation +'toArray' Name.Other +')' Punctuation +'\n ' Text +'return' Keyword +' ' Text +'iterable' Name.Other +' ' Text +'if' Keyword +' ' Text +'(' Punctuation +'_' Name.Other +'.' Punctuation +'isArray' Name.Other +'(' Punctuation +'iterable' Name.Other +')' Punctuation +')' Punctuation +'\n ' Text +'return' Keyword +' ' Text +'slice' Name.Other +'.' Punctuation +'call' Name.Other +'(' Punctuation +'iterable' Name.Other +')' Punctuation +' ' Text +'if' Keyword +' ' Text +'(' Punctuation +'_' Name.Other +'.' Punctuation +'isArguments' Name.Other +'(' Punctuation +'iterable' Name.Other +')' Punctuation +')' Punctuation +'\n ' Text +'_' Name.Other +'.' Punctuation +'values' Name.Other +'(' Punctuation +'iterable' Name.Other +')' Punctuation +'\n\n\n ' Text +'# Return the number of elements in an object.\n' Comment.Single + +' ' Text +'_.size: ' Name.Variable +'(obj) ->' Name.Function +' ' Text +'_' Name.Other +'.' Punctuation +'toArray' Name.Other +'(' Punctuation +'obj' Name.Other +')' Punctuation +'.' Punctuation +'length' Name.Other +'\n\n\n ' Text +'# -------------------------- Array Functions: ------------------------------\n' Comment.Single + +'\n ' Text +'# Get the first element of an array. Passing "n" will return the first N\n' Comment.Single + +' ' Text +'# values in the array. Aliased as "head". The "guard" check allows it to work\n' Comment.Single + +' ' Text +'# with _.map.\n' Comment.Single + +' ' Text +'_.first: ' Name.Variable +'(array, n, guard) ->' Name.Function +'\n ' Text +'if' Keyword +' ' Text +'n' Name.Other +' ' Text +'and' Operator +' ' Text +'not' Operator +' ' Text +'guard' Name.Other +' ' Text +'then' Keyword +' ' Text +'slice' Name.Other +'.' Punctuation +'call' Name.Other +'(' Punctuation +'array' Name.Other +',' Punctuation +' ' Text +'0' Literal.Number.Integer +',' Punctuation +' ' Text +'n' Name.Other +')' Punctuation +' ' Text +'else' Keyword +' ' Text +'array' Name.Other +'[' Punctuation +'0' Literal.Number.Integer +']' Punctuation +'\n\n\n ' Text +'# Returns everything but the first entry of the array. Aliased as "tail".\n' Comment.Single + +' ' Text +'# Especially useful on the arguments object. Passing an "index" will return\n' Comment.Single + +' ' Text +'# the rest of the values in the array from that index onward. The "guard"\n' Comment.Single + +' ' Text +'# check allows it to work with _.map.\n' Comment.Single + +' ' Text +'_.rest: ' Name.Variable +'(array, index, guard) ->' Name.Function +'\n ' Text +'slice' Name.Other +'.' Punctuation +'call' Name.Other +'(' Punctuation +'array' Name.Other +',' Punctuation +' ' Text +'if' Keyword +' ' Text +'_' Name.Other +'.' Punctuation +'isUndefined' Name.Other +'(' Punctuation +'index' Name.Other +')' Punctuation +' ' Text +'or' Operator +' ' Text +'guard' Name.Other +' ' Text +'then' Keyword +' ' Text +'1' Literal.Number.Integer +' ' Text +'else' Keyword +' ' Text +'index' Name.Other +')' Punctuation +'\n\n\n ' Text +'# Get the last element of an array.\n' Comment.Single + +' ' Text +'_.last: ' Name.Variable +'(array) ->' Name.Function +' ' Text +'array' Name.Other +'[' Punctuation +'array' Name.Other +'.' Punctuation +'length' Name.Other +' ' Text +'-' Operator +' ' Text +'1' Literal.Number.Integer +']' Punctuation +'\n\n\n ' Text +'# Trim out all falsy values from an array.\n' Comment.Single + +' ' Text +'_.compact: ' Name.Variable +'(array) ->' Name.Function +' ' Text +'array' Name.Other +'[' Punctuation +'i' Name.Other +']' Punctuation +' ' Text +'for' Keyword +' ' Text +'i' Name.Other +' ' Text +'in' Keyword +' ' Text +'[' Punctuation +'0' Literal.Number.Integer +'.' Punctuation +'.' Punctuation +'.' Punctuation +'array' Name.Other +'.' Punctuation +'length' Name.Other +']' Punctuation +' ' Text +'when' Keyword +' ' Text +'array' Name.Other +'[' Punctuation +'i' Name.Other +']' Punctuation +'\n\n\n ' Text +'# Return a completely flattened version of an array.\n' Comment.Single + +' ' Text +'_.flatten: ' Name.Variable +'(array) ->' Name.Function +'\n ' Text +'_' Name.Other +'.' Punctuation +'reduce' Name.Other +' ' Text +'array' Name.Other +',' Punctuation +' ' Text +'[' Punctuation +']' Punctuation +',' Punctuation +' ' Text +'(memo, value) ->' Name.Function +'\n ' Text +'return' Keyword +' ' Text +'memo' Name.Other +'.' Punctuation +'concat' Name.Other +'(' Punctuation +'_' Name.Other +'.' Punctuation +'flatten' Name.Other +'(' Punctuation +'value' Name.Other +')' Punctuation +')' Punctuation +' ' Text +'if' Keyword +' ' Text +'_' Name.Other +'.' Punctuation +'isArray' Name.Other +'(' Punctuation +'value' Name.Other +')' Punctuation +'\n ' Text +'memo' Name.Other +'.' Punctuation +'push' Name.Other +'(' Punctuation +'value' Name.Other +')' Punctuation +'\n ' Text +'memo' Name.Other +'\n\n\n ' Text +'# Return a version of the array that does not contain the specified value(s).\n' Comment.Single + +' ' Text +'_.without: ' Name.Variable +'(array) ->' Name.Function +'\n ' Text +'values: ' Name.Variable +'_' Name.Other +'.' Punctuation +'rest' Name.Other +'(' Punctuation +'arguments' Name.Other +')' Punctuation +'\n ' Text +'val' Name.Other +' ' Text +'for' Keyword +' ' Text +'val' Name.Other +' ' Text +'in' Keyword +' ' Text +'_' Name.Other +'.' Punctuation +'toArray' Name.Other +'(' Punctuation +'array' Name.Other +')' Punctuation +' ' Text +'when' Keyword +' ' Text +'not' Operator +' ' Text +'_' Name.Other +'.' Punctuation +'include' Name.Other +'(' Punctuation +'values' Name.Other +',' Punctuation +' ' Text +'val' Name.Other +')' Punctuation +'\n\n\n ' Text +'# Produce a duplicate-free version of the array. If the array has already\n' Comment.Single + +' ' Text +'# been sorted, you have the option of using a faster algorithm.\n' Comment.Single + +' ' Text +'_.uniq: ' Name.Variable +'(array, isSorted) ->' Name.Function +'\n ' Text +'memo: ' Name.Variable +'[' Punctuation +']' Punctuation +'\n ' Text +'for' Keyword +' ' Text +'el' Name.Other +',' Punctuation +' ' Text +'i' Name.Other +' ' Text +'in' Keyword +' ' Text +'_' Name.Other +'.' Punctuation +'toArray' Name.Other +'(' Punctuation +'array' Name.Other +')' Punctuation +'\n ' Text +'memo' Name.Other +'.' Punctuation +'push' Name.Other +'(' Punctuation +'el' Name.Other +')' Punctuation +' ' Text +'if' Keyword +' ' Text +'i' Name.Other +' ' Text +'is' Operator +' ' Text +'0' Literal.Number.Integer +' ' Text +'||' Operator +' ' Text +'(' Punctuation +'if' Keyword +' ' Text +'isSorted' Name.Other +' ' Text +'is' Operator +' ' Text +'true' Keyword.Constant +' ' Text +'then' Keyword +' ' Text +'_' Name.Other +'.' Punctuation +'last' Name.Other +'(' Punctuation +'memo' Name.Other +')' Punctuation +' ' Text +'isnt' Operator +' ' Text +'el' Name.Other +' ' Text +'else' Keyword +' ' Text +'not' Operator +' ' Text +'_' Name.Other +'.' Punctuation +'include' Name.Other +'(' Punctuation +'memo' Name.Other +',' Punctuation +' ' Text +'el' Name.Other +')' Punctuation +')' Punctuation +'\n ' Text +'memo' Name.Other +'\n\n\n ' Text +'# Produce an array that contains every item shared between all the\n' Comment.Single + +' ' Text +'# passed-in arrays.\n' Comment.Single + +' ' Text +'_.intersect: ' Name.Variable +'(array) ->' Name.Function +'\n ' Text +'rest: ' Name.Variable +'_' Name.Other +'.' Punctuation +'rest' Name.Other +'(' Punctuation +'arguments' Name.Other +')' Punctuation +'\n ' Text +'_' Name.Other +'.' Punctuation +'select' Name.Other +' ' Text +'_' Name.Other +'.' Punctuation +'uniq' Name.Other +'(' Punctuation +'array' Name.Other +')' Punctuation +',' Punctuation +' ' Text +'(item) ->' Name.Function +'\n ' Text +'_' Name.Other +'.' Punctuation +'all' Name.Other +' ' Text +'rest' Name.Other +',' Punctuation +' ' Text +'(other) ->' Name.Function +'\n ' Text +'_' Name.Other +'.' Punctuation +'indexOf' Name.Other +'(' Punctuation +'other' Name.Other +',' Punctuation +' ' Text +'item' Name.Other +')' Punctuation +' ' Text +'>=' Operator +' ' Text +'0' Literal.Number.Integer +'\n\n\n ' Text +'# Zip together multiple lists into a single array -- elements that share\n' Comment.Single + +' ' Text +'# an index go together.\n' Comment.Single + +' ' Text +'_.zip: ' Name.Variable +'->' Name.Function +'\n ' Text +'length: ' Name.Variable +' ' Text +'_' Name.Other +'.' Punctuation +'max' Name.Other +'(' Punctuation +'_' Name.Other +'.' Punctuation +'pluck' Name.Other +'(' Punctuation +'arguments' Name.Other +',' Punctuation +' ' Text +"'" Literal.String +'length' Literal.String +"'" Literal.String +')' Punctuation +')' Punctuation +'\n ' Text +'results: ' Name.Variable +' ' Text +'new' Keyword +' ' Text +'Array' Name.Builtin +'(' Punctuation +'length' Name.Other +')' Punctuation +'\n ' Text +'for' Keyword +' ' Text +'i' Name.Other +' ' Text +'in' Keyword +' ' Text +'[' Punctuation +'0' Literal.Number.Integer +'.' Punctuation +'.' Punctuation +'.' Punctuation +'length' Name.Other +']' Punctuation +'\n ' Text +'results' Name.Other +'[' Punctuation +'i' Name.Other +']' Punctuation +':' Operator +' ' Text +'_' Name.Other +'.' Punctuation +'pluck' Name.Other +'(' Punctuation +'arguments' Name.Other +',' Punctuation +' ' Text +'String' Name.Builtin +'(' Punctuation +'i' Name.Other +')' Punctuation +')' Punctuation +'\n ' Text +'results' Name.Other +'\n\n\n ' Text +"# If the browser doesn't supply us with indexOf (I'm looking at you, MSIE),\n" Comment.Single + +' ' Text +'# we need this function. Return the position of the first occurence of an\n' Comment.Single + +' ' Text +'# item in an array, or -1 if the item is not included in the array.\n' Comment.Single + +' ' Text +'_.indexOf: ' Name.Variable +'(array, item) ->' Name.Function +'\n ' Text +'return' Keyword +' ' Text +'array' Name.Other +'.' Punctuation +'indexOf' Name.Other +'(' Punctuation +'item' Name.Other +')' Punctuation +' ' Text +'if' Keyword +' ' Text +'array' Name.Other +'.' Punctuation +'indexOf' Name.Other +'\n ' Text +'i: ' Name.Variable +'0' Literal.Number.Integer +';' Punctuation +' ' Text +'l: ' Name.Variable +'array' Name.Other +'.' Punctuation +'length' Name.Other +'\n ' Text +'while' Keyword +' ' Text +'l' Name.Other +' ' Text +'-' Operator +' ' Text +'i' Name.Other +'\n ' Text +'if' Keyword +' ' Text +'array' Name.Other +'[' Punctuation +'i' Name.Other +']' Punctuation +' ' Text +'is' Operator +' ' Text +'item' Name.Other +' ' Text +'then' Keyword +' ' Text +'return' Keyword +' ' Text +'i' Name.Other +' ' Text +'else' Keyword +' ' Text +'i' Name.Other +'++' Operator +'\n ' Text +'-' Operator +'1' Literal.Number.Integer +'\n\n\n ' Text +"# Provide JavaScript 1.6's lastIndexOf, delegating to the native function,\n" Comment.Single + +' ' Text +'# if possible.\n' Comment.Single + +' ' Text +'_.lastIndexOf: ' Name.Variable +'(array, item) ->' Name.Function +'\n ' Text +'return' Keyword +' ' Text +'array' Name.Other +'.' Punctuation +'lastIndexOf' Name.Other +'(' Punctuation +'item' Name.Other +')' Punctuation +' ' Text +'if' Keyword +' ' Text +'array' Name.Other +'.' Punctuation +'lastIndexOf' Name.Other +'\n ' Text +'i: ' Name.Variable +'array' Name.Other +'.' Punctuation +'length' Name.Other +'\n ' Text +'while' Keyword +' ' Text +'i' Name.Other +'\n ' Text +'if' Keyword +' ' Text +'array' Name.Other +'[' Punctuation +'i' Name.Other +']' Punctuation +' ' Text +'is' Operator +' ' Text +'item' Name.Other +' ' Text +'then' Keyword +' ' Text +'return' Keyword +' ' Text +'i' Name.Other +' ' Text +'else' Keyword +' ' Text +'i' Name.Other +'-' Operator +'-' Operator +'\n ' Text +'-' Operator +'1' Literal.Number.Integer +'\n\n\n ' Text +'# Generate an integer Array containing an arithmetic progression. A port of\n' Comment.Single + +' ' Text +'# the native Python range() function. See:\n' Comment.Single + +' ' Text +'# http://docs.python.org/library/functions.html#range\n' Comment.Single + +' ' Text +'_.range: ' Name.Variable +'(start, stop, step) ->' Name.Function +'\n ' Text +'a: ' Name.Variable +' ' Text +'arguments' Name.Other +'\n ' Text +'solo: ' Name.Variable +' ' Text +'a' Name.Other +'.' Punctuation +'length' Name.Other +' ' Text +'<=' Operator +' ' Text +'1' Literal.Number.Integer +'\n ' Text +'i: ' Name.Variable +'start: ' Name.Variable +'if' Keyword +' ' Text +'solo' Name.Other +' ' Text +'then' Keyword +' ' Text +'0' Literal.Number.Integer +' ' Text +'else' Keyword +' ' Text +'a' Name.Other +'[' Punctuation +'0' Literal.Number.Integer +']' Punctuation +';' Punctuation +'\n ' Text +'stop: ' Name.Variable +' ' Text +'if' Keyword +' ' Text +'solo' Name.Other +' ' Text +'then' Keyword +' ' Text +'a' Name.Other +'[' Punctuation +'0' Literal.Number.Integer +']' Punctuation +' ' Text +'else' Keyword +' ' Text +'a' Name.Other +'[' Punctuation +'1' Literal.Number.Integer +']' Punctuation +';' Punctuation +'\n ' Text +'step: ' Name.Variable +' ' Text +'a' Name.Other +'[' Punctuation +'2' Literal.Number.Integer +']' Punctuation +' ' Text +'or' Operator +' ' Text +'1' Literal.Number.Integer +'\n ' Text +'len: ' Name.Variable +' ' Text +'Math' Name.Builtin +'.' Punctuation +'ceil' Name.Other +'(' Punctuation +'(' Punctuation +'stop' Name.Other +' ' Text +'-' Operator +' ' Text +'start' Name.Other +')' Punctuation +' ' Text +'/' Operator +' ' Text +'step' Name.Other +')' Punctuation +'\n ' Text +'return' Keyword +' ' Text +'[' Punctuation +']' Punctuation +' ' Text +'if' Keyword +' ' Text +'len' Name.Other +' ' Text +'<=' Operator +' ' Text +'0' Literal.Number.Integer +'\n ' Text +'range: ' Name.Variable +' ' Text +'new' Keyword +' ' Text +'Array' Name.Builtin +'(' Punctuation +'len' Name.Other +')' Punctuation +'\n ' Text +'idx: ' Name.Variable +' ' Text +'0' Literal.Number.Integer +'\n ' Text +'while' Keyword +' ' Text +'true' Keyword.Constant +'\n ' Text +'return' Keyword +' ' Text +'range' Name.Other +' ' Text +'if' Keyword +' ' Text +'(' Punctuation +'if' Keyword +' ' Text +'step' Name.Other +' ' Text +'>' Operator +' ' Text +'0' Literal.Number.Integer +' ' Text +'then' Keyword +' ' Text +'i' Name.Other +' ' Text +'-' Operator +' ' Text +'stop' Name.Other +' ' Text +'else' Keyword +' ' Text +'stop' Name.Other +' ' Text +'-' Operator +' ' Text +'i' Name.Other +')' Punctuation +' ' Text +'>=' Operator +' ' Text +'0' Literal.Number.Integer +'\n ' Text +'range' Name.Other +'[' Punctuation +'idx' Name.Other +']' Punctuation +':' Operator +' ' Text +'i' Name.Other +'\n ' Text +'idx' Name.Other +'++' Operator +'\n ' Text +'i' Name.Other +'+=' Operator +' ' Text +'step' Name.Other +'\n\n\n ' Text +'# ----------------------- Function Functions: -----------------------------\n' Comment.Single + +'\n ' Text +"# Create a function bound to a given object (assigning 'this', and arguments,\n" Comment.Single + +' ' Text +"# optionally). Binding with arguments is also known as 'curry'.\n" Comment.Single + +' ' Text +'_.bind: ' Name.Variable +'(func, obj) ->' Name.Function +'\n ' Text +'args: ' Name.Variable +'_' Name.Other +'.' Punctuation +'rest' Name.Other +'(arguments, 2)\n ->' Name.Function +' ' Text +'func' Name.Other +'.' Punctuation +'apply' Name.Other +'(' Punctuation +'obj' Name.Other +' ' Text +'or' Operator +' ' Text +'root' Name.Other +',' Punctuation +' ' Text +'args' Name.Other +'.' Punctuation +'concat' Name.Other +'(' Punctuation +'arguments' Name.Other +')' Punctuation +')' Punctuation +'\n\n\n ' Text +"# Bind all of an object's methods to that object. Useful for ensuring that\n" Comment.Single + +' ' Text +'# all callbacks defined on an object belong to it.\n' Comment.Single + +' ' Text +'_.bindAll: ' Name.Variable +'(obj) ->' Name.Function +'\n ' Text +'funcs: ' Name.Variable +'if' Keyword +' ' Text +'arguments' Name.Other +'.' Punctuation +'length' Name.Other +' ' Text +'>' Operator +' ' Text +'1' Literal.Number.Integer +' ' Text +'then' Keyword +' ' Text +'_' Name.Other +'.' Punctuation +'rest' Name.Other +'(' Punctuation +'arguments' Name.Other +')' Punctuation +' ' Text +'else' Keyword +' ' Text +'_' Name.Other +'.' Punctuation +'functions' Name.Other +'(' Punctuation +'obj' Name.Other +')' Punctuation +'\n ' Text +'_' Name.Other +'.' Punctuation +'each' Name.Other +'(' Punctuation +'funcs' Name.Other +',' Punctuation +' ' Text +'(f) ->' Name.Function +' ' Text +'obj' Name.Other +'[' Punctuation +'f' Name.Other +']' Punctuation +':' Operator +' ' Text +'_' Name.Other +'.' Punctuation +'bind' Name.Other +'(' Punctuation +'obj' Name.Other +'[' Punctuation +'f' Name.Other +']' Punctuation +',' Punctuation +' ' Text +'obj' Name.Other +')' Punctuation +')' Punctuation +'\n ' Text +'obj' Name.Other +'\n\n\n ' Text +'# Delays a function for the given number of milliseconds, and then calls\n' Comment.Single + +' ' Text +'# it with the arguments supplied.\n' Comment.Single + +' ' Text +'_.delay: ' Name.Variable +'(func, wait) ->' Name.Function +'\n ' Text +'args: ' Name.Variable +'_' Name.Other +'.' Punctuation +'rest' Name.Other +'(' Punctuation +'arguments' Name.Other +',' Punctuation +' ' Text +'2' Literal.Number.Integer +')' Punctuation +'\n ' Text +'setTimeout' Name.Other +'(' Punctuation +'(' Punctuation +'->' Name.Function +' ' Text +'func' Name.Other +'.' Punctuation +'apply' Name.Other +'(' Punctuation +'func' Name.Other +',' Punctuation +' ' Text +'args' Name.Other +')' Punctuation +')' Punctuation +',' Punctuation +' ' Text +'wait' Name.Other +')' Punctuation +'\n\n\n ' Text +'# Defers a function, scheduling it to run after the current call stack has\n' Comment.Single + +' ' Text +'# cleared.\n' Comment.Single + +' ' Text +'_.defer: ' Name.Variable +'(func) ->' Name.Function +'\n ' Text +'_' Name.Other +'.' Punctuation +'delay' Name.Other +'.' Punctuation +'apply' Name.Other +'(' Punctuation +'_' Name.Other +',' Punctuation +' ' Text +'[' Punctuation +'func' Name.Other +',' Punctuation +' ' Text +'1' Literal.Number.Integer +']' Punctuation +'.' Punctuation +'concat' Name.Other +'(' Punctuation +'_' Name.Other +'.' Punctuation +'rest' Name.Other +'(' Punctuation +'arguments' Name.Other +')' Punctuation +')' Punctuation +')' Punctuation +'\n\n\n ' Text +'# Returns the first function passed as an argument to the second,\n' Comment.Single + +' ' Text +'# allowing you to adjust arguments, run code before and after, and\n' Comment.Single + +' ' Text +'# conditionally execute the original function.\n' Comment.Single + +' ' Text +'_.wrap: ' Name.Variable +'(func, wrapper) ->' Name.Function +'\n ' Text +'->' Name.Function +' ' Text +'wrapper' Name.Other +'.' Punctuation +'apply' Name.Other +'(' Punctuation +'wrapper' Name.Other +',' Punctuation +' ' Text +'[' Punctuation +'func' Name.Other +']' Punctuation +'.' Punctuation +'concat' Name.Other +'(' Punctuation +'arguments' Name.Other +')' Punctuation +')' Punctuation +'\n\n\n ' Text +'# Returns a function that is the composition of a list of functions, each\n' Comment.Single + +' ' Text +'# consuming the return value of the function that follows.\n' Comment.Single + +' ' Text +'_.compose: ' Name.Variable +'->' Name.Function +'\n ' Text +'funcs: ' Name.Variable +'arguments' Name.Other +'\n ' Text +'->' Name.Function +'\n ' Text +'args: ' Name.Variable +'arguments' Name.Other +'\n ' Text +'for' Keyword +' ' Text +'i' Name.Other +' ' Text +'in' Keyword +' ' Text +'[' Punctuation +'(' Punctuation +'funcs' Name.Other +'.' Punctuation +'length' Name.Other +' ' Text +'-' Operator +' ' Text +'1' Literal.Number.Integer +')' Punctuation +'.' Punctuation +'.' Punctuation +'0' Literal.Number.Integer +']' Punctuation +'\n ' Text +'args: ' Name.Variable +'[' Punctuation +'funcs' Name.Other +'[' Punctuation +'i' Name.Other +']' Punctuation +'.' Punctuation +'apply' Name.Other +'(' Punctuation +'this' Keyword +',' Punctuation +' ' Text +'args' Name.Other +')' Punctuation +']' Punctuation +'\n ' Text +'args' Name.Other +'[' Punctuation +'0' Literal.Number.Integer +']' Punctuation +'\n\n\n ' Text +'# ------------------------- Object Functions: ----------------------------\n' Comment.Single + +'\n ' Text +"# Retrieve the names of an object's properties.\n" Comment.Single + +' ' Text +'_.keys: ' Name.Variable +'(obj) ->' Name.Function +'\n ' Text +'return' Keyword +' ' Text +'_' Name.Other +'.' Punctuation +'range' Name.Other +'(' Punctuation +'0' Literal.Number.Integer +',' Punctuation +' ' Text +'obj' Name.Other +'.' Punctuation +'length' Name.Other +')' Punctuation +' ' Text +'if' Keyword +' ' Text +'_' Name.Other +'.' Punctuation +'isArray' Name.Other +'(' Punctuation +'obj' Name.Other +')' Punctuation +'\n ' Text +'key' Name.Other +' ' Text +'for' Keyword +' ' Text +'key' Name.Other +',' Punctuation +' ' Text +'val' Name.Other +' ' Text +'of' Keyword +' ' Text +'obj' Name.Other +'\n\n\n ' Text +"# Retrieve the values of an object's properties.\n" Comment.Single + +' ' Text +'_.values: ' Name.Variable +'(obj) ->' Name.Function +'\n ' Text +'_' Name.Other +'.' Punctuation +'map' Name.Other +'(' Punctuation +'obj' Name.Other +',' Punctuation +' ' Text +'_' Name.Other +'.' Punctuation +'identity' Name.Other +')' Punctuation +'\n\n\n ' Text +'# Return a sorted list of the function names available in Underscore.\n' Comment.Single + +' ' Text +'_.functions: ' Name.Variable +'(obj) ->' Name.Function +'\n ' Text +'_' Name.Other +'.' Punctuation +'select' Name.Other +'(' Punctuation +'_' Name.Other +'.' Punctuation +'keys' Name.Other +'(' Punctuation +'obj' Name.Other +')' Punctuation +',' Punctuation +' ' Text +'(key) ->' Name.Function +' ' Text +'_' Name.Other +'.' Punctuation +'isFunction' Name.Other +'(' Punctuation +'obj' Name.Other +'[' Punctuation +'key' Name.Other +']' Punctuation +')' Punctuation +')' Punctuation +'.' Punctuation +'sort' Name.Other +'(' Punctuation +')' Punctuation +'\n\n\n ' Text +'# Extend a given object with all of the properties in a source object.\n' Comment.Single + +' ' Text +'_.extend: ' Name.Variable +'(destination, source) ->' Name.Function +'\n ' Text +'for' Keyword +' ' Text +'key' Name.Other +',' Punctuation +' ' Text +'val' Name.Other +' ' Text +'of' Keyword +' ' Text +'source' Name.Other +'\n ' Text +'destination' Name.Other +'[' Punctuation +'key' Name.Other +']' Punctuation +':' Operator +' ' Text +'val' Name.Other +'\n ' Text +'destination' Name.Other +'\n\n\n ' Text +'# Create a (shallow-cloned) duplicate of an object.\n' Comment.Single + +' ' Text +'_.clone: ' Name.Variable +'(obj) ->' Name.Function +'\n ' Text +'return' Keyword +' ' Text +'obj' Name.Other +'.' Punctuation +'slice' Name.Other +'(' Punctuation +'0' Literal.Number.Integer +')' Punctuation +' ' Text +'if' Keyword +' ' Text +'_' Name.Other +'.' Punctuation +'isArray' Name.Other +'(' Punctuation +'obj' Name.Other +')' Punctuation +'\n ' Text +'_' Name.Other +'.' Punctuation +'extend' Name.Other +'(' Punctuation +'{' Punctuation +'}' Punctuation +',' Punctuation +' ' Text +'obj' Name.Other +')' Punctuation +'\n\n\n ' Text +'# Invokes interceptor with the obj, and then returns obj.\n' Comment.Single + +' ' Text +'# The primary purpose of this method is to "tap into" a method chain, in order to perform operations on intermediate results within the chain.\n' Comment.Single + +' ' Text +'_.tap: ' Name.Variable +'(obj, interceptor) ->' Name.Function +'\n ' Text +'interceptor' Name.Other +'(' Punctuation +'obj' Name.Other +')' Punctuation +'\n ' Text +'obj' Name.Other +'\n\n\n ' Text +'# Perform a deep comparison to check if two objects are equal.\n' Comment.Single + +' ' Text +'_.isEqual: ' Name.Variable +'(a, b) ->' Name.Function +'\n ' Text +'# Check object identity.\n' Comment.Single + +' ' Text +'return' Keyword +' ' Text +'true' Keyword.Constant +' ' Text +'if' Keyword +' ' Text +'a' Name.Other +' ' Text +'is' Operator +' ' Text +'b' Name.Other +'\n ' Text +'# Different types?\n' Comment.Single + +' ' Text +'atype: ' Name.Variable +'typeof' Keyword +'(' Punctuation +'a' Name.Other +')' Punctuation +';' Punctuation +' ' Text +'btype: ' Name.Variable +'typeof' Keyword +'(' Punctuation +'b' Name.Other +')' Punctuation +'\n ' Text +'return' Keyword +' ' Text +'false' Keyword.Constant +' ' Text +'if' Keyword +' ' Text +'atype' Name.Other +' ' Text +'isnt' Operator +' ' Text +'btype' Name.Other +'\n ' Text +'# Basic equality test (watch out for coercions).\n' Comment.Single + +' ' Text +'return' Keyword +' ' Text +'true' Keyword.Constant +' ' Text +'if' Keyword +' ' Text +'`' Operator +'a' Name.Other +' ' Text +'==' Operator +' ' Text +'b' Name.Other +'`' Operator +'\n ' Text +'# One is falsy and the other truthy.\n' Comment.Single + +' ' Text +'return' Keyword +' ' Text +'false' Keyword.Constant +' ' Text +'if' Keyword +' ' Text +'(' Punctuation +'!' Operator +'a' Name.Other +' ' Text +'and' Operator +' ' Text +'b' Name.Other +')' Punctuation +' ' Text +'or' Operator +' ' Text +'(' Punctuation +'a' Name.Other +' ' Text +'and' Operator +' ' Text +'!' Operator +'b' Name.Other +')' Punctuation +'\n ' Text +'# One of them implements an isEqual()?\n' Comment.Single + +' ' Text +'return' Keyword +' ' Text +'a' Name.Other +'.' Punctuation +'isEqual' Name.Other +'(' Punctuation +'b' Name.Other +')' Punctuation +' ' Text +'if' Keyword +' ' Text +'a' Name.Other +'.' Punctuation +'isEqual' Name.Other +'\n ' Text +"# Check dates' integer values.\n" Comment.Single + +' ' Text +'return' Keyword +' ' Text +'a' Name.Other +'.' Punctuation +'getTime' Name.Other +'(' Punctuation +')' Punctuation +' ' Text +'is' Operator +' ' Text +'b' Name.Other +'.' Punctuation +'getTime' Name.Other +'(' Punctuation +')' Punctuation +' ' Text +'if' Keyword +' ' Text +'_' Name.Other +'.' Punctuation +'isDate' Name.Other +'(' Punctuation +'a' Name.Other +')' Punctuation +' ' Text +'and' Operator +' ' Text +'_' Name.Other +'.' Punctuation +'isDate' Name.Other +'(' Punctuation +'b' Name.Other +')' Punctuation +'\n ' Text +'# Both are NaN?\n' Comment.Single + +' ' Text +'return' Keyword +' ' Text +'true' Keyword.Constant +' ' Text +'if' Keyword +' ' Text +'_' Name.Other +'.' Punctuation +'isNaN' Name.Builtin +'(' Punctuation +'a' Name.Other +')' Punctuation +' ' Text +'and' Operator +' ' Text +'_' Name.Other +'.' Punctuation +'isNaN' Name.Builtin +'(' Punctuation +'b' Name.Other +')' Punctuation +'\n ' Text +'# Compare regular expressions.\n' Comment.Single + +' ' Text +'if' Keyword +' ' Text +'_' Name.Other +'.' Punctuation +'isRegExp' Name.Other +'(' Punctuation +'a' Name.Other +')' Punctuation +' ' Text +'and' Operator +' ' Text +'_' Name.Other +'.' Punctuation +'isRegExp' Name.Other +'(' Punctuation +'b' Name.Other +')' Punctuation +'\n ' Text +'return' Keyword +' ' Text +'a' Name.Other +'.' Punctuation +'source' Name.Other +' ' Text +'is' Operator +' ' Text +'b' Name.Other +'.' Punctuation +'source' Name.Other +' ' Text +'and' Operator +'\n ' Text +'a' Name.Other +'.' Punctuation +'global' Name.Other +' ' Text +'is' Operator +' ' Text +'b' Name.Other +'.' Punctuation +'global' Name.Other +' ' Text +'and' Operator +'\n ' Text +'a' Name.Other +'.' Punctuation +'ignoreCase' Name.Other +' ' Text +'is' Operator +' ' Text +'b' Name.Other +'.' Punctuation +'ignoreCase' Name.Other +' ' Text +'and' Operator +'\n ' Text +'a' Name.Other +'.' Punctuation +'multiline' Name.Other +' ' Text +'is' Operator +' ' Text +'b' Name.Other +'.' Punctuation +'multiline' Name.Other +'\n ' Text +"# If a is not an object by this point, we can't handle it.\n" Comment.Single + +' ' Text +'return' Keyword +' ' Text +'false' Keyword.Constant +' ' Text +'if' Keyword +' ' Text +'atype' Name.Other +' ' Text +'isnt' Operator +' ' Text +"'" Literal.String +'object' Literal.String +"'" Literal.String +'\n ' Text +'# Check for different array lengths before comparing contents.\n' Comment.Single + +' ' Text +'return' Keyword +' ' Text +'false' Keyword.Constant +' ' Text +'if' Keyword +' ' Text +'a' Name.Other +'.' Punctuation +'length' Name.Other +' ' Text +'and' Operator +' ' Text +'(' Punctuation +'a' Name.Other +'.' Punctuation +'length' Name.Other +' ' Text +'isnt' Operator +' ' Text +'b' Name.Other +'.' Punctuation +'length' Name.Other +')' Punctuation +'\n ' Text +'# Nothing else worked, deep compare the contents.\n' Comment.Single + +' ' Text +'aKeys: ' Name.Variable +'_' Name.Other +'.' Punctuation +'keys' Name.Other +'(' Punctuation +'a' Name.Other +')' Punctuation +';' Punctuation +' ' Text +'bKeys: ' Name.Variable +'_' Name.Other +'.' Punctuation +'keys' Name.Other +'(' Punctuation +'b' Name.Other +')' Punctuation +'\n ' Text +'# Different object sizes?\n' Comment.Single + +' ' Text +'return' Keyword +' ' Text +'false' Keyword.Constant +' ' Text +'if' Keyword +' ' Text +'aKeys' Name.Other +'.' Punctuation +'length' Name.Other +' ' Text +'isnt' Operator +' ' Text +'bKeys' Name.Other +'.' Punctuation +'length' Name.Other +'\n ' Text +'# Recursive comparison of contents.\n' Comment.Single + +' ' Text +'# for (var key in a) if (!_.isEqual(a[key], b[key])) return false;\n' Comment.Single + +' ' Text +'return' Keyword +' ' Text +'true' Keyword.Constant +'\n\n\n ' Text +'# Is a given array or object empty?\n' Comment.Single + +' ' Text +'_.isEmpty: ' Name.Variable +' ' Text +'(obj) ->' Name.Function +' ' Text +'_' Name.Other +'.' Punctuation +'keys' Name.Other +'(' Punctuation +'obj' Name.Other +')' Punctuation +'.' Punctuation +'length' Name.Other +' ' Text +'is' Operator +' ' Text +'0' Literal.Number.Integer +'\n\n\n ' Text +'# Is a given value a DOM element?\n' Comment.Single + +' ' Text +'_.isElement: ' Name.Variable +' ' Text +'(obj) ->' Name.Function +' ' Text +'obj' Name.Other +' ' Text +'and' Operator +' ' Text +'obj' Name.Other +'.' Punctuation +'nodeType' Name.Other +' ' Text +'is' Operator +' ' Text +'1' Literal.Number.Integer +'\n\n\n ' Text +'# Is a given value an array?\n' Comment.Single + +' ' Text +'_.isArray: ' Name.Variable +' ' Text +'(obj) ->' Name.Function +' ' Text +'!' Operator +'!' Operator +'(' Punctuation +'obj' Name.Other +' ' Text +'and' Operator +' ' Text +'obj' Name.Other +'.' Punctuation +'concat' Name.Other +' ' Text +'and' Operator +' ' Text +'obj' Name.Other +'.' Punctuation +'unshift' Name.Other +')' Punctuation +'\n\n\n ' Text +'# Is a given variable an arguments object?\n' Comment.Single + +' ' Text +'_.isArguments: ' Name.Variable +' ' Text +'(obj) ->' Name.Function +' ' Text +'obj' Name.Other +' ' Text +'and' Operator +' ' Text +'_' Name.Other +'.' Punctuation +'isNumber' Name.Other +'(' Punctuation +'obj' Name.Other +'.' Punctuation +'length' Name.Other +')' Punctuation +' ' Text +'and' Operator +' ' Text +'not' Operator +' ' Text +'obj' Name.Other +'.' Punctuation +'concat' Name.Other +' ' Text +'and' Operator +'\n ' Text +'not' Operator +' ' Text +'obj' Name.Other +'.' Punctuation +'substr' Name.Other +' ' Text +'and' Operator +' ' Text +'not' Operator +' ' Text +'obj' Name.Other +'.' Punctuation +'apply' Name.Other +' ' Text +'and' Operator +' ' Text +'not' Operator +' ' Text +'propertyIsEnumerable' Name.Other +'.' Punctuation +'call' Name.Other +'(' Punctuation +'obj' Name.Other +',' Punctuation +' ' Text +"'" Literal.String +'length' Literal.String +"'" Literal.String +')' Punctuation +'\n\n\n ' Text +'# Is the given value a function?\n' Comment.Single + +' ' Text +'_.isFunction: ' Name.Variable +' ' Text +'(obj) ->' Name.Function +' ' Text +'!' Operator +'!' Operator +'(' Punctuation +'obj' Name.Other +' ' Text +'and' Operator +' ' Text +'obj' Name.Other +'.' Punctuation +'constructor' Name.Other +' ' Text +'and' Operator +' ' Text +'obj' Name.Other +'.' Punctuation +'call' Name.Other +' ' Text +'and' Operator +' ' Text +'obj' Name.Other +'.' Punctuation +'apply' Name.Other +')' Punctuation +'\n\n\n ' Text +'# Is the given value a string?\n' Comment.Single + +' ' Text +'_.isString: ' Name.Variable +' ' Text +'(obj) ->' Name.Function +' ' Text +'!' Operator +'!' Operator +'(' Punctuation +'obj' Name.Other +' ' Text +'is' Operator +' ' Text +"'" Literal.String +"'" Literal.String +' ' Text +'or' Operator +' ' Text +'(' Punctuation +'obj' Name.Other +' ' Text +'and' Operator +' ' Text +'obj' Name.Other +'.' Punctuation +'charCodeAt' Name.Other +' ' Text +'and' Operator +' ' Text +'obj' Name.Other +'.' Punctuation +'substr' Name.Other +')' Punctuation +')' Punctuation +'\n\n\n ' Text +'# Is a given value a number?\n' Comment.Single + +' ' Text +'_.isNumber: ' Name.Variable +' ' Text +'(obj) ->' Name.Function +' ' Text +'(' Punctuation +'obj' Name.Other +' ' Text +'is' Operator +' ' Text +'+' Operator +'obj' Name.Other +')' Punctuation +' ' Text +'or' Operator +' ' Text +'toString' Name.Other +'.' Punctuation +'call' Name.Other +'(' Punctuation +'obj' Name.Other +')' Punctuation +' ' Text +'is' Operator +' ' Text +"'" Literal.String +'[object Number]' Literal.String +"'" Literal.String +'\n\n\n ' Text +'# Is a given value a Date?\n' Comment.Single + +' ' Text +'_.isDate: ' Name.Variable +' ' Text +'(obj) ->' Name.Function +' ' Text +'!' Operator +'!' Operator +'(' Punctuation +'obj' Name.Other +' ' Text +'and' Operator +' ' Text +'obj' Name.Other +'.' Punctuation +'getTimezoneOffset' Name.Other +' ' Text +'and' Operator +' ' Text +'obj' Name.Other +'.' Punctuation +'setUTCFullYear' Name.Other +')' Punctuation +'\n\n\n ' Text +'# Is the given value a regular expression?\n' Comment.Single + +' ' Text +'_.isRegExp: ' Name.Variable +' ' Text +'(obj) ->' Name.Function +' ' Text +'!' Operator +'!' Operator +'(' Punctuation +'obj' Name.Other +' ' Text +'and' Operator +' ' Text +'obj' Name.Other +'.' Punctuation +'exec' Name.Other +' ' Text +'and' Operator +' ' Text +'(' Punctuation +'obj' Name.Other +'.' Punctuation +'ignoreCase' Name.Other +' ' Text +'or' Operator +' ' Text +'obj' Name.Other +'.' Punctuation +'ignoreCase' Name.Other +' ' Text +'is' Operator +' ' Text +'false' Keyword.Constant +')' Punctuation +')' Punctuation +'\n\n\n ' Text +'# Is the given value NaN -- this one is interesting. NaN != NaN, and\n' Comment.Single + +' ' Text +"# isNaN(undefined) == true, so we make sure it's a number first.\n" Comment.Single + +' ' Text +'_.isNaN: ' Name.Variable +' ' Text +'(obj) ->' Name.Function +' ' Text +'_' Name.Other +'.' Punctuation +'isNumber' Name.Other +'(' Punctuation +'obj' Name.Other +')' Punctuation +' ' Text +'and' Operator +' ' Text +'window' Name.Builtin +'.' Punctuation +'isNaN' Name.Builtin +'(' Punctuation +'obj' Name.Other +')' Punctuation +'\n\n\n ' Text +'# Is a given value equal to null?\n' Comment.Single + +' ' Text +'_.isNull: ' Name.Variable +' ' Text +'(obj) ->' Name.Function +' ' Text +'obj' Name.Other +' ' Text +'is' Operator +' ' Text +'null' Keyword.Constant +'\n\n\n ' Text +'# Is a given variable undefined?\n' Comment.Single + +' ' Text +'_.isUndefined: ' Name.Variable +' ' Text +'(obj) ->' Name.Function +' ' Text +'typeof' Keyword +' ' Text +'obj' Name.Other +' ' Text +'is' Operator +' ' Text +"'" Literal.String +'undefined' Literal.String +"'" Literal.String +'\n\n\n ' Text +'# -------------------------- Utility Functions: --------------------------\n' Comment.Single + +'\n ' Text +"# Run Underscore.js in noConflict mode, returning the '_' variable to its\n" Comment.Single + +' ' Text +'# previous owner. Returns a reference to the Underscore object.\n' Comment.Single + +' ' Text +'_.noConflict: ' Name.Variable +'->' Name.Function +'\n ' Text +'root._: ' Name.Variable +'previousUnderscore' Name.Other +'\n ' Text +'this' Keyword +'\n\n\n ' Text +'# Keep the identity function around for default iterators.\n' Comment.Single + +' ' Text +'_.identity: ' Name.Variable +'(value) ->' Name.Function +' ' Text +'value' Name.Other +'\n\n\n ' Text +'# Break out of the middle of an iteration.\n' Comment.Single + +' ' Text +'_.breakLoop: ' Name.Variable +'->' Name.Function +' ' Text +'throw' Keyword +' ' Text +'breaker' Name.Other +'\n\n\n ' Text +'# Generate a unique integer id (unique within the entire client session).\n' Comment.Single + +' ' Text +'# Useful for temporary DOM ids.\n' Comment.Single + +' ' Text +'idCounter: ' Name.Variable +'0' Literal.Number.Integer +'\n ' Text +'_.uniqueId: ' Name.Variable +'(prefix) ->' Name.Function +'\n ' Text +'(' Punctuation +'prefix' Name.Other +' ' Text +'or' Operator +' ' Text +"'" Literal.String +"'" Literal.String +')' Punctuation +' ' Text +'+' Operator +' ' Text +'idCounter' Name.Other +'++' Operator +'\n\n\n ' Text +'# By default, Underscore uses ERB-style template delimiters, change the\n' Comment.Single + +' ' Text +'# following template settings to use alternative delimiters.\n' Comment.Single + +' ' Text +'_.templateSettings: ' Name.Variable +'{' Punctuation +'\n ' Text +'start: ' Name.Variable +' ' Text +"'" Literal.String +'<%' Literal.String +"'" Literal.String +'\n ' Text +'end: ' Name.Variable +' ' Text +"'" Literal.String +'%>' Literal.String +"'" Literal.String +'\n ' Text +'interpolate: ' Name.Variable +' ' Text +'/<%=(.+?)%>/g' Literal.String.Regex +'\n ' Text +'}' Punctuation +'\n\n\n ' Text +"# JavaScript templating a-la ERB, pilfered from John Resig's\n" Comment.Single + +' ' Text +'# "Secrets of the JavaScript Ninja", page 83.\n' Comment.Single + +' ' Text +"# Single-quotea fix from Rick Strahl's version.\n" Comment.Single + +' ' Text +'_.template: ' Name.Variable +'(str, data) ->' Name.Function +'\n ' Text +'c: ' Name.Variable +'_' Name.Other +'.' Punctuation +'templateSettings' Name.Other +'\n ' Text +'fn: ' Name.Variable +'new' Keyword +' ' Text +'Function' Name.Builtin +' ' Text +"'" Literal.String +'obj' Literal.String +"'" Literal.String +',' Punctuation +'\n ' Text +"'" Literal.String +'var p=[],print=function(){p.push.apply(p,arguments);};' Literal.String +"'" Literal.String +' ' Text +'+' Operator +'\n ' Text +"'" Literal.String +'with(obj){p.push(' Literal.String +"\\'" Literal.String +"'" Literal.String +' ' Text +'+' Operator +'\n ' Text +'str' Name.Other +'.' Punctuation +'replace' Name.Other +'(' Punctuation +'/[\\r\\t\\n]/g' Literal.String.Regex +',' Punctuation +' ' Text +'"' Literal.String +' ' Literal.String +'"' Literal.String +')' Punctuation +'\n ' Text +'.' Punctuation +'replace' Name.Other +'(' Punctuation +'new' Keyword +' ' Text +'RegExp' Name.Builtin +'(' Punctuation +'"' Literal.String +"'" Literal.String +'(?=[^' Literal.String +'"' Literal.String +'+' Operator +'c' Name.Other +'.' Punctuation +'end' Name.Other +'[' Punctuation +'0' Literal.Number.Integer +']' Punctuation +'+' Operator +'"' Literal.String +']*' Literal.String +'"' Literal.String +'+' Operator +'c' Name.Other +'.' Punctuation +'end' Name.Other +'+' Operator +'"' Literal.String +')' Literal.String +'"' Literal.String +',' Punctuation +'"' Literal.String +'g' Literal.String +'"' Literal.String +')' Punctuation +',' Punctuation +'"' Literal.String +'\\t' Literal.String +'"' Literal.String +')' Punctuation +'\n ' Text +'.' Punctuation +'split' Name.Other +'(' Punctuation +'"' Literal.String +"'" Literal.String +'"' Literal.String +')' Punctuation +'.' Punctuation +'join' Name.Other +'(' Punctuation +'"' Literal.String +'\\\\' Literal.String +"'" Literal.String +'"' Literal.String +')' Punctuation +'\n ' Text +'.' Punctuation +'split' Name.Other +'(' Punctuation +'"' Literal.String +'\\t' Literal.String +'"' Literal.String +')' Punctuation +'.' Punctuation +'join' Name.Other +'(' Punctuation +'"' Literal.String +"'" Literal.String +'"' Literal.String +')' Punctuation +'\n ' Text +'.' Punctuation +'replace' Name.Other +'(' Punctuation +'c' Name.Other +'.' Punctuation +'interpolate' Name.Other +',' Punctuation +' ' Text +'"' Literal.String +"'" Literal.String +',$1,' Literal.String +"'" Literal.String +'"' Literal.String +')' Punctuation +'\n ' Text +'.' Punctuation +'split' Name.Other +'(' Punctuation +'c' Name.Other +'.' Punctuation +'start' Name.Other +')' Punctuation +'.' Punctuation +'join' Name.Other +'(' Punctuation +'"' Literal.String +"'" Literal.String +');' Literal.String +'"' Literal.String +')' Punctuation +'\n ' Text +'.' Punctuation +'split' Name.Other +'(' Punctuation +'c' Name.Other +'.' Punctuation +'end' Name.Other +')' Punctuation +'.' Punctuation +'join' Name.Other +'(' Punctuation +'"' Literal.String +'p.push(' Literal.String +"'" Literal.String +'"' Literal.String +')' Punctuation +' ' Text +'+' Operator +'\n ' Text +'"' Literal.String +"'" Literal.String +');}return p.join(' Literal.String +"'" Literal.String +"'" Literal.String +');' Literal.String +'"' Literal.String +'\n ' Text +'if' Keyword +' ' Text +'data' Name.Other +' ' Text +'then' Keyword +' ' Text +'fn' Name.Other +'(' Punctuation +'data' Name.Other +')' Punctuation +' ' Text +'else' Keyword +' ' Text +'fn' Name.Other +'\n\n\n ' Text +'# ------------------------------- Aliases ----------------------------------\n' Comment.Single + +'\n ' Text +'_.forEach: ' Name.Variable +'_' Name.Other +'.' Punctuation +'each' Name.Other +'\n ' Text +'_.foldl: ' Name.Variable +' ' Text +'_.inject: ' Name.Variable +' ' Text +'_' Name.Other +'.' Punctuation +'reduce' Name.Other +'\n ' Text +'_.foldr: ' Name.Variable +' ' Text +'_' Name.Other +'.' Punctuation +'reduceRight' Name.Other +'\n ' Text +'_.filter: ' Name.Variable +' ' Text +'_' Name.Other +'.' Punctuation +'select' Name.Other +'\n ' Text +'_.every: ' Name.Variable +' ' Text +'_' Name.Other +'.' Punctuation +'all' Name.Other +'\n ' Text +'_.some: ' Name.Variable +' ' Text +'_' Name.Other +'.' Punctuation +'any' Name.Other +'\n ' Text +'_.head: ' Name.Variable +' ' Text +'_' Name.Other +'.' Punctuation +'first' Name.Other +'\n ' Text +'_.tail: ' Name.Variable +' ' Text +'_' Name.Other +'.' Punctuation +'rest' Name.Other +'\n ' Text +'_.methods: ' Name.Variable +'_' Name.Other +'.' Punctuation +'functions' Name.Other +'\n\n\n ' Text +'# /*------------------------ Setup the OOP Wrapper: --------------------------*/\n' Comment.Single + +'\n ' Text +'# Helper function to continue chaining intermediate results.\n' Comment.Single + +' ' Text +'result: ' Name.Variable +'(obj, chain) ->' Name.Function +'\n ' Text +'if' Keyword +' ' Text +'chain' Name.Other +' ' Text +'then' Keyword +' ' Text +'_' Name.Other +'(' Punctuation +'obj' Name.Other +')' Punctuation +'.' Punctuation +'chain' Name.Other +'(' Punctuation +')' Punctuation +' ' Text +'else' Keyword +' ' Text +'obj' Name.Other +'\n\n\n ' Text +'# Add all of the Underscore functions to the wrapper object.\n' Comment.Single + +' ' Text +'_' Name.Other +'.' Punctuation +'each' Name.Other +' ' Text +'_' Name.Other +'.' Punctuation +'functions' Name.Other +'(' Punctuation +'_' Name.Other +')' Punctuation +',' Punctuation +' ' Text +'(name) ->' Name.Function +'\n ' Text +'method: ' Name.Variable +'_' Name.Other +'[' Punctuation +'name' Name.Other +']' Punctuation +'\n ' Text +'wrapper' Name.Other +'.' Punctuation +'prototype' Name.Other +'[' Punctuation +'name' Name.Other +']' Punctuation +':' Operator +' ' Text +'->' Name.Function +'\n ' Text +'unshift' Name.Other +'.' Punctuation +'call' Name.Other +'(' Punctuation +'arguments' Name.Other +',' Punctuation +' ' Text +'this' Keyword +'.' Punctuation +'_wrapped' Name.Other +')' Punctuation +'\n ' Text +'result' Name.Other +'(' Punctuation +'method' Name.Other +'.' Punctuation +'apply' Name.Other +'(' Punctuation +'_' Name.Other +',' Punctuation +' ' Text +'arguments' Name.Other +')' Punctuation +',' Punctuation +' ' Text +'this' Keyword +'.' Punctuation +'_chain' Name.Other +')' Punctuation +'\n\n\n ' Text +'# Add all mutator Array functions to the wrapper.\n' Comment.Single + +' ' Text +'_' Name.Other +'.' Punctuation +'each' Name.Other +' ' Text +'[' Punctuation +"'" Literal.String +'pop' Literal.String +"'" Literal.String +',' Punctuation +' ' Text +"'" Literal.String +'push' Literal.String +"'" Literal.String +',' Punctuation +' ' Text +"'" Literal.String +'reverse' Literal.String +"'" Literal.String +',' Punctuation +' ' Text +"'" Literal.String +'shift' Literal.String +"'" Literal.String +',' Punctuation +' ' Text +"'" Literal.String +'sort' Literal.String +"'" Literal.String +',' Punctuation +' ' Text +"'" Literal.String +'splice' Literal.String +"'" Literal.String +',' Punctuation +' ' Text +"'" Literal.String +'unshift' Literal.String +"'" Literal.String +']' Punctuation +',' Punctuation +' ' Text +'(name) ->' Name.Function +'\n ' Text +'method: ' Name.Variable +'Array' Name.Builtin +'.' Punctuation +'prototype' Name.Other +'[' Punctuation +'name' Name.Other +']' Punctuation +'\n ' Text +'wrapper' Name.Other +'.' Punctuation +'prototype' Name.Other +'[' Punctuation +'name' Name.Other +']' Punctuation +':' Operator +' ' Text +'->' Name.Function +'\n ' Text +'method' Name.Other +'.' Punctuation +'apply' Name.Other +'(' Punctuation +'this' Keyword +'.' Punctuation +'_wrapped' Name.Other +',' Punctuation +' ' Text +'arguments' Name.Other +')' Punctuation +'\n ' Text +'result' Name.Other +'(' Punctuation +'this' Keyword +'.' Punctuation +'_wrapped' Name.Other +',' Punctuation +' ' Text +'this' Keyword +'.' Punctuation +'_chain' Name.Other +')' Punctuation +'\n\n\n ' Text +'# Add all accessor Array functions to the wrapper.\n' Comment.Single + +' ' Text +'_' Name.Other +'.' Punctuation +'each' Name.Other +' ' Text +'[' Punctuation +"'" Literal.String +'concat' Literal.String +"'" Literal.String +',' Punctuation +' ' Text +"'" Literal.String +'join' Literal.String +"'" Literal.String +',' Punctuation +' ' Text +"'" Literal.String +'slice' Literal.String +"'" Literal.String +']' Punctuation +',' Punctuation +' ' Text +'(name) ->' Name.Function +'\n ' Text +'method: ' Name.Variable +'Array' Name.Builtin +'.' Punctuation +'prototype' Name.Other +'[' Punctuation +'name' Name.Other +']' Punctuation +'\n ' Text +'wrapper' Name.Other +'.' Punctuation +'prototype' Name.Other +'[' Punctuation +'name' Name.Other +']' Punctuation +':' Operator +' ' Text +'->' Name.Function +'\n ' Text +'result' Name.Other +'(' Punctuation +'method' Name.Other +'.' Punctuation +'apply' Name.Other +'(' Punctuation +'this' Keyword +'.' Punctuation +'_wrapped' Name.Other +',' Punctuation +' ' Text +'arguments' Name.Other +')' Punctuation +',' Punctuation +' ' Text +'this' Keyword +'.' Punctuation +'_chain' Name.Other +')' Punctuation +'\n\n\n ' Text +'# Start chaining a wrapped Underscore object.\n' Comment.Single + +' ' Text +'wrapper::chain: ' Name.Variable +'->' Name.Function +'\n ' Text +'this' Keyword +'.' Punctuation +'_chain: ' Name.Variable +'true' Keyword.Constant +'\n ' Text +'this' Keyword +'\n\n\n ' Text +'# Extracts the result from a wrapped and chained object.\n' Comment.Single + +' ' Text +'wrapper::value: ' Name.Variable +'->' Name.Function +' ' Text +'this' Keyword +'.' Punctuation +'_wrapped' Name.Other +'\n' Text |
