docs: function(){
      var tok = this.accept('start-pipeless-text');
      if (!tok) return;
      var block = this.emptyBlock(tok.loc.start.line);
      while (this.peek().type !== 'end-pipeless-text') {
        var tok = this.advance();
        switch (tok.type) {
          case 'text':
            block.nodes.push({
              type: 'Text',
              val: tok.val,
              line: tok.loc.start.line,
              column: tok.loc.start.column,
              filename: this.filename
            });
            break;
          case 'newline':
            block.nodes.push({
              type: 'Text',
              val: '\n',
              line: tok.loc.start.line,
              column: tok.loc.start.column,
              filename: this.filename
            });
            break;
          case 'start-pug-interpolation':
            block.nodes.push(this.parseExpr());
            this.expect('end-pug-interpolation');
            break;
          case 'interpolated-code':
            block.nodes.push({
              type: 'Code',
              val: tok.val,
              buffer: tok.buffer,
              mustEscape: tok.mustEscape !== false,
              isInline: true,
              line: tok.loc.start.line,
              column: tok.loc.start.column,
              filename: this.filename
            });
            break;
          default:
            var pluginResult = this.runPlugin('textBlockTokens', tok, block, tok);
            if (pluginResult) break;
            this.error('INVALID_TOKEN', 'Unexpected token type: ' + tok.type, tok);
        }
      }
      this.advance();
      return block;
    }