docs: function processTokens(block) {
    // Root is always repetitive
    var first = block.reflect && (block.isRoot || (block.repeat > 1)) ?
      _.first(block.items) : null;
    var last = block.reflect ? _.last(block.items) : null;
  
    block = _.clone(block);
    block.items = _.reduce(block.items, function(accumulator, item) {
      // Process nested blocks
      if (item.isBlock) {
        accumulator.push(processTokens(item));
        return accumulator;
      }
      if (item.isStripe) {
        // Check last item
        if (item === last) {
          accumulator.push(item);
          return accumulator;
        }
        var prev = _.last(accumulator);
        // Check first item
        if (prev && prev.isStripe && (prev !== first)) {
          if (prev.name == item.name) {
            prev = _.clone(accumulator.pop());
            prev.count += item.count;
            accumulator.push(prev);
            return accumulator;
          }
        }
      }
      accumulator.push(item);
      return accumulator;
    }, []);
  
    return block;
  }