| helpers.coffee | |
|---|---|
| This file contains the common helper functions that we'd like to share among the Lexer, Rewriter, and the Nodes. Merge objects, flatten arrays, count characters, that sort of thing. |  | 
| Peek at the beginning of a given string to see if it matches a sequence. | exports.starts = (string, literal, start) ->
  literal is string.substr start, literal.length | 
| Peek at the end of a given string to see if it matches a sequence. | exports.ends = (string, literal, back) ->
  len = literal.length
  literal is string.substr string.length - len - (back or 0), len | 
| Trim out all falsy values from an array. | exports.compact = (array) ->
  item for item in array when item | 
| Count the number of occurrences of a character in a string. | exports.count = (string, letter) ->
  num = pos = 0
  num++ while pos = 1 + string.indexOf letter, pos
  num | 
| Merge objects, returning a fresh copy with attributes from both sides.
Used every time  | exports.merge = (options, overrides) ->
  extend (extend {}, options), overrides | 
| Extend a source object with the properties of another object (shallow copy). | extend = exports.extend = (object, properties) ->
  for all key, val of properties
    object[key] = val
  object | 
| Return a flattened version of an array.
Handy for getting a list of  | exports.flatten = flatten = (array) ->
  flattened = []
  for element in array
    if element instanceof Array
      flattened = flattened.concat flatten element
    else
      flattened.push element
  flattened | 
| Delete a key from an object, returning the value. Useful when a node is looking for a particular method in an options hash. | exports.del = (obj, key) ->
  val =  obj[key]
  delete obj[key]
  val | 
| Gets the last item of an array(-like) object. | exports.last = (array, back) -> array[array.length - (back or 0) - 1]
 |