text: // # Excerpt Helper
  // Usage: `{{excerpt}}`, `{{excerpt words="50"}}`, `{{excerpt characters="256"}}`
  //
  // Attempts to remove all HTML from the string, and then shortens the result according to the provided option.
  //
  // Defaults to words="50"
  
  var hbs             = require('express-hbs'),
      _               = require('lodash'),
      downsize        = require('downsize'),
      excerpt;
  
  excerpt = function (options) {
      var truncateOptions = (options || {}).hash || {},
          excerpt;
  
      truncateOptions = _.pick(truncateOptions, ['words', 'characters']);
      _.keys(truncateOptions).map(function (key) {
          truncateOptions[key] = parseInt(truncateOptions[key], 10);
      });
  
      /*jslint regexp:true */
      excerpt = String(this.html);
      // Strip inline and bottom footnotes
      excerpt = excerpt.replace(/<a href="#fn.*?rel="footnote">.*?<\/a>/gi, '');
      excerpt = excerpt.replace(/<div class="footnotes"><ol>.*?<\/ol><\/div>/, '');
      // custom: strip hide blocks
      excerpt = excerpt.replace(/<!--hide\{-->[\s\S]*?<!--\}hide-->/g, '');
      // Strip other html
      excerpt = excerpt.replace(/<\/?[^>]+>/gi, '');
      excerpt = excerpt.replace(/(\r\n|\n|\r)+/gm, ' ');
      /*jslint regexp:false */
  
      if (!truncateOptions.words && !truncateOptions.characters) {
          truncateOptions.words = 50;
      }
  
      return new hbs.handlebars.SafeString(
          downsize(excerpt, truncateOptions)
      );
  };
  
  module.exports = excerpt;
  