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