code: function read(buffer) {
  
              var reader = new Reader(buffer, 0, buffer.byteLength, false);
  
              var font = {};
  
              // version
              font.version = reader.readString(0, 4);
  
              if (font.version !== 'OTTO') {
                  error.raise(10301);
              }
  
              // num tables
              font.numTables = reader.readUint16();
  
              if (font.numTables <= 0 || font.numTables > 100) {
                  error.raise(10302);
              }
  
              // searchRenge
              font.searchRenge = reader.readUint16();
  
              // entrySelector
              font.entrySelector = reader.readUint16();
  
              // rengeShift
              font.rengeShift = reader.readUint16();
  
              font.tables = new Directory(reader.offset).read(reader, font);
  
              if (!font.tables.head || !font.tables.cmap || !font.tables.CFF) {
                  error.raise(10302);
              }
  
              font.readOptions = this.options;
  
              // 读取支持的表数据
              Object.keys(supportTables).forEach(function (tableName) {
                  if (font.tables[tableName]) {
                      var offset = font.tables[tableName].offset;
                      font[tableName] = new supportTables[tableName](offset).read(reader, font);
                  }
              });
  
              if (!font.CFF.glyf) {
                  error.raise(10303);
              }
  
              reader.dispose();
  
              return font;
          }
docs: 初始化
  
  @param {ArrayBuffer} buffer buffer对象
  @return {Object} ttf对象