code: function writeSubTable4(writer, segments) {
  
              writer.writeUint16(4); // format
              writer.writeUint16(24 + segments.length * 8); // length
              writer.writeUint16(0); // language
  
              var segCount = segments.length + 1;
              var maxExponent = Math.floor(Math.log(segCount) / Math.LN2);
              var searchRange = 2 * Math.pow(2, maxExponent);
  
              writer.writeUint16(segCount * 2); // segCountX2
              writer.writeUint16(searchRange); // searchRange
              writer.writeUint16(maxExponent); // entrySelector
              writer.writeUint16(2 * segCount - searchRange); // rangeShift
  
              // end list
              segments.forEach(function (segment) {
                  writer.writeUint16(segment.end);
              });
              writer.writeUint16(0xFFFF); // end code
              writer.writeUint16(0); // reservedPad
  
  
              // start list
              segments.forEach(function (segment) {
                  writer.writeUint16(segment.start);
              });
              writer.writeUint16(0xFFFF); // start code
  
              // id delta
              segments.forEach(function (segment) {
                  writer.writeUint16(segment.delta);
              });
              writer.writeUint16(1);
  
              // Array of range offsets, it doesn't matter when deltas present
              for (var i = 0, l = segments.length; i < l; i++) {
                  writer.writeUint16(0);
              }
              writer.writeUint16(0); // rangeOffsetArray should be finished with 0
  
              return writer;
          }
docs: 创建`子表4`
  
  @param {Writer} writer 写对象
  @param {Array} segments 分块编码列表
  @return {Writer}