code: function Engine(options) {
          this.options = {
              commandOpen: '<!--',
              commandClose: '-->',
              commandSyntax: /^\s*(\/)?([a-z]*)\s*(?::([\s\S]*))?$/,
              variableOpen: '${',
              variableClose: '}',
              defaultFilter: 'html'
          };
  
          this.commandTypes = {};
          addCommandType(this, 'target', TargetCommand);
          addCommandType(this, 'block', BlockCommand);
          addCommandType(this, 'import', ImportCommand);
          addCommandType(this, 'use', UseCommand);
          addCommandType(this, 'var', VarCommand);
          addCommandType(this, 'for', ForCommand);
          addCommandType(this, 'if', IfCommand);
          addCommandType(this, 'elif', ElifCommand);
          addCommandType(this, 'else', ElseCommand);
          addCommandType(this, 'filter', FilterCommand);
  
          this.config(options);
          this.targets = {};
          this.filters = extend({}, DEFAULT_FILTERS);
      }
docs: etpl引擎类
  
  @constructor
  @param {Object=} options 引擎参数
  @param {string=} options.commandOpen 命令语法起始串
  @param {string=} options.commandClose 命令语法结束串
  @param {string=} options.variableOpen 变量语法起始串
  @param {string=} options.variableClose 变量语法结束串
  @param {string=} options.defaultFilter 默认变量替换的filter
  @param {boolean=} options.strip 是否清除命令标签前后的空白字符
  @param {string=} options.namingConflict target名字冲突时的处理策略
  @param {string=} options.missTarget target不存在时的处理策略