docs: function(template, context, partials) {
          if(!this.includes("#", template) && !this.includes("^", template)) {
            return template;
          }
  
          var that = this;
          // CSW - Added "+?" so it finds the tighest bound, not the widest
          var regex = new RegExp(this.otag + "(\\^|\\#)\\s*(.+)\\s*" + this.ctag +
                  "\n*([\\s\\S]+?)" + this.otag + "\\/\\s*\\2\\s*" + this.ctag +
                  "\\s*", "mg");
  
          // for each {{#foo}}{{/foo}} section do...
          return template.replace(regex, function(match, type, name, content) {
            var value = that.find(name, context);
            if(type == "^") { // inverted section
              if(!value || that.is_array(value) && value.length === 0) {
                // false or empty list, render it
                return that.render(content, context, partials, true);
              } else {
                return "";
              }
            } else if(type == "#") { // normal section
              if(that.is_array(value)) { // Enumerable, Let's loop!
                return that.map(value, function(row) {
                  return that.render(content, that.create_context(row),
                    partials, true);
                }).join("");
              } else if(that.is_object(value)) { // Object, Use it as subcontext!
                return that.render(content, that.create_context(value),
                  partials, true);
              } else if(typeof value === "function") {
                // higher order section
                return value.call(context, content, function(text) {
                  return that.render(text, context, partials, true);
                });
              } else if(value) { // boolean section
                return that.render(content, context, partials, true);
              } else {
                return "";
              }
            }
          });
        }