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