OTS解析错误:表目录的entrySelector错误(OpenType字体错误) [英] OTS parsing error: incorrect entrySelector for table directory (OpenType font error)

查看:134
本文介绍了OTS解析错误:表目录的entrySelector错误(OpenType字体错误)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我大概有这个cmap表:

I have this cmap table roughly:

{ name: 'cmap',
   fields:
    { version: { type: 'USHORT', value: 0 },
      numTables: { type: 'USHORT', value: 1 },
      platformID: { type: 'USHORT', value: 0 },
      encodingID: { type: 'USHORT', value: 6 },
      offset: { type: 'ULONG', value: 12 },
      format: { type: 'USHORT', value: 4 },
      cmap4Length: { type: 'USHORT', value: 16 },
      language: { type: 'USHORT', value: 0 },
      segCountX2: { type: 'USHORT', value: 126 },
      searchRange: { type: 'USHORT', value: 64 },
      entrySelector: { type: 'USHORT', value: 5 },
      rangeShift: { type: 'USHORT', value: 62 },
      end_0: { type: 'USHORT', value: 48 },
      end_1: { type: 'USHORT', value: 49 },
      end_2: { type: 'USHORT', value: 50 },
      end_3: { type: 'USHORT', value: 51 },
      end_4: { type: 'USHORT', value: 52 },
      end_5: { type: 'USHORT', value: 53 },
      end_6: { type: 'USHORT', value: 54 },
      end_7: { type: 'USHORT', value: 55 },
      end_8: { type: 'USHORT', value: 56 },
      end_9: { type: 'USHORT', value: 57 },
      end_10: { type: 'USHORT', value: 65 },
      end_11: { type: 'USHORT', value: 66 },
      end_12: { type: 'USHORT', value: 67 },
      end_13: { type: 'USHORT', value: 68 },
      end_14: { type: 'USHORT', value: 69 },
      end_15: { type: 'USHORT', value: 70 },
      end_16: { type: 'USHORT', value: 71 },
      end_17: { type: 'USHORT', value: 72 },
      end_18: { type: 'USHORT', value: 73 },
      end_19: { type: 'USHORT', value: 74 },
      end_20: { type: 'USHORT', value: 75 },
      end_21: { type: 'USHORT', value: 76 },
      end_22: { type: 'USHORT', value: 77 },
      end_23: { type: 'USHORT', value: 78 },
      end_24: { type: 'USHORT', value: 79 },
      end_25: { type: 'USHORT', value: 80 },
      end_26: { type: 'USHORT', value: 81 },
      end_27: { type: 'USHORT', value: 82 },
      end_28: { type: 'USHORT', value: 83 },
      end_29: { type: 'USHORT', value: 84 },
      end_30: { type: 'USHORT', value: 85 },
      end_31: { type: 'USHORT', value: 86 },
      end_32: { type: 'USHORT', value: 87 },
      end_33: { type: 'USHORT', value: 88 },
      end_34: { type: 'USHORT', value: 89 },
      end_35: { type: 'USHORT', value: 90 },
      end_36: { type: 'USHORT', value: 97 },
      end_37: { type: 'USHORT', value: 98 },
      end_38: { type: 'USHORT', value: 99 },
      end_39: { type: 'USHORT', value: 100 },
      end_40: { type: 'USHORT', value: 101 },
      end_41: { type: 'USHORT', value: 102 },
      end_42: { type: 'USHORT', value: 103 },
      end_43: { type: 'USHORT', value: 104 },
      end_44: { type: 'USHORT', value: 105 },
      end_45: { type: 'USHORT', value: 106 },
      end_46: { type: 'USHORT', value: 107 },
      end_47: { type: 'USHORT', value: 108 },
      end_48: { type: 'USHORT', value: 109 },
      end_49: { type: 'USHORT', value: 110 },
      end_50: { type: 'USHORT', value: 111 },
      end_51: { type: 'USHORT', value: 112 },
      end_52: { type: 'USHORT', value: 113 },
      end_53: { type: 'USHORT', value: 114 },
      end_54: { type: 'USHORT', value: 115 },
      end_55: { type: 'USHORT', value: 116 },
      end_56: { type: 'USHORT', value: 117 },
      end_57: { type: 'USHORT', value: 118 },
      end_58: { type: 'USHORT', value: 119 },
      end_59: { type: 'USHORT', value: 120 },
      end_60: { type: 'USHORT', value: 121 },
      end_61: { type: 'USHORT', value: 122 },
      end_62: { type: 'USHORT', value: 65535 },
      reservedPad: { type: 'USHORT', value: 0 },
      start_0: { type: 'USHORT', value: 48 },
      start_1: { type: 'USHORT', value: 49 },
      start_2: { type: 'USHORT', value: 50 },
      start_3: { type: 'USHORT', value: 51 },
      start_4: { type: 'USHORT', value: 52 },
      start_5: { type: 'USHORT', value: 53 },
      start_6: { type: 'USHORT', value: 54 },
      start_7: { type: 'USHORT', value: 55 },
      start_8: { type: 'USHORT', value: 56 },
      start_9: { type: 'USHORT', value: 57 },
      start_10: { type: 'USHORT', value: 65 },
      start_11: { type: 'USHORT', value: 66 },
      start_12: { type: 'USHORT', value: 67 },
      start_13: { type: 'USHORT', value: 68 },
      start_14: { type: 'USHORT', value: 69 },
      start_15: { type: 'USHORT', value: 70 },
      start_16: { type: 'USHORT', value: 71 },
      start_17: { type: 'USHORT', value: 72 },
      start_18: { type: 'USHORT', value: 73 },
      start_19: { type: 'USHORT', value: 74 },
      start_20: { type: 'USHORT', value: 75 },
      start_21: { type: 'USHORT', value: 76 },
      start_22: { type: 'USHORT', value: 77 },
      start_23: { type: 'USHORT', value: 78 },
      start_24: { type: 'USHORT', value: 79 },
      start_25: { type: 'USHORT', value: 80 },
      start_26: { type: 'USHORT', value: 81 },
      start_27: { type: 'USHORT', value: 82 },
      start_28: { type: 'USHORT', value: 83 },
      start_29: { type: 'USHORT', value: 84 },
      start_30: { type: 'USHORT', value: 85 },
      start_31: { type: 'USHORT', value: 86 },
      start_32: { type: 'USHORT', value: 87 },
      start_33: { type: 'USHORT', value: 88 },
      start_34: { type: 'USHORT', value: 89 },
      start_35: { type: 'USHORT', value: 90 },
      start_36: { type: 'USHORT', value: 97 },
      start_37: { type: 'USHORT', value: 98 },
      start_38: { type: 'USHORT', value: 99 },
      start_39: { type: 'USHORT', value: 100 },
      start_40: { type: 'USHORT', value: 101 },
      start_41: { type: 'USHORT', value: 102 },
      start_42: { type: 'USHORT', value: 103 },
      start_43: { type: 'USHORT', value: 104 },
      start_44: { type: 'USHORT', value: 105 },
      start_45: { type: 'USHORT', value: 106 },
      start_46: { type: 'USHORT', value: 107 },
      start_47: { type: 'USHORT', value: 108 },
      start_48: { type: 'USHORT', value: 109 },
      start_49: { type: 'USHORT', value: 110 },
      start_50: { type: 'USHORT', value: 111 },
      start_51: { type: 'USHORT', value: 112 },
      start_52: { type: 'USHORT', value: 113 },
      start_53: { type: 'USHORT', value: 114 },
      start_54: { type: 'USHORT', value: 115 },
      start_55: { type: 'USHORT', value: 116 },
      start_56: { type: 'USHORT', value: 117 },
      start_57: { type: 'USHORT', value: 118 },
      start_58: { type: 'USHORT', value: 119 },
      start_59: { type: 'USHORT', value: 120 },
      start_60: { type: 'USHORT', value: 121 },
      start_61: { type: 'USHORT', value: 122 },
      start_62: { type: 'USHORT', value: 65535 },
      idDelta_0: { type: 'SHORT', value: 4 },
      idDelta_1: { type: 'SHORT', value: 4 },
      idDelta_2: { type: 'SHORT', value: 4 },
      idDelta_3: { type: 'SHORT', value: 4 },
      idDelta_4: { type: 'SHORT', value: 4 },
      idDelta_5: { type: 'SHORT', value: 4 },
      idDelta_6: { type: 'SHORT', value: 4 },
      idDelta_7: { type: 'SHORT', value: 4 },
      idDelta_8: { type: 'SHORT', value: 4 },
      idDelta_9: { type: 'SHORT', value: 4 },
      idDelta_10: { type: 'SHORT', value: -39 },
      idDelta_11: { type: 'SHORT', value: -39 },
      idDelta_12: { type: 'SHORT', value: -39 },
      idDelta_13: { type: 'SHORT', value: -39 },
      idDelta_14: { type: 'SHORT', value: -39 },
      idDelta_15: { type: 'SHORT', value: -39 },
      idDelta_16: { type: 'SHORT', value: -39 },
      idDelta_17: { type: 'SHORT', value: -39 },
      idDelta_18: { type: 'SHORT', value: -39 },
      idDelta_19: { type: 'SHORT', value: -39 },
      idDelta_20: { type: 'SHORT', value: -39 },
      idDelta_21: { type: 'SHORT', value: -39 },
      idDelta_22: { type: 'SHORT', value: -39 },
      idDelta_23: { type: 'SHORT', value: -39 },
      idDelta_24: { type: 'SHORT', value: -39 },
      idDelta_25: { type: 'SHORT', value: -39 },
      idDelta_26: { type: 'SHORT', value: -39 },
      idDelta_27: { type: 'SHORT', value: -39 },
      idDelta_28: { type: 'SHORT', value: -39 },
      idDelta_29: { type: 'SHORT', value: -39 },
      idDelta_30: { type: 'SHORT', value: -39 },
      idDelta_31: { type: 'SHORT', value: -39 },
      idDelta_32: { type: 'SHORT', value: -39 },
      idDelta_33: { type: 'SHORT', value: -39 },
      idDelta_34: { type: 'SHORT', value: -39 },
      idDelta_35: { type: 'SHORT', value: -39 },
      idDelta_36: { type: 'SHORT', value: -97 },
      idDelta_37: { type: 'SHORT', value: -97 },
      idDelta_38: { type: 'SHORT', value: -97 },
      idDelta_39: { type: 'SHORT', value: -97 },
      idDelta_40: { type: 'SHORT', value: -97 },
      idDelta_41: { type: 'SHORT', value: -97 },
      idDelta_42: { type: 'SHORT', value: -97 },
      idDelta_43: { type: 'SHORT', value: -97 },
      idDelta_44: { type: 'SHORT', value: -97 },
      idDelta_45: { type: 'SHORT', value: -97 },
      idDelta_46: { type: 'SHORT', value: -97 },
      idDelta_47: { type: 'SHORT', value: -97 },
      idDelta_48: { type: 'SHORT', value: -97 },
      idDelta_49: { type: 'SHORT', value: -97 },
      idDelta_50: { type: 'SHORT', value: -97 },
      idDelta_51: { type: 'SHORT', value: -97 },
      idDelta_52: { type: 'SHORT', value: -97 },
      idDelta_53: { type: 'SHORT', value: -97 },
      idDelta_54: { type: 'SHORT', value: -97 },
      idDelta_55: { type: 'SHORT', value: -97 },
      idDelta_56: { type: 'SHORT', value: -97 },
      idDelta_57: { type: 'SHORT', value: -97 },
      idDelta_58: { type: 'SHORT', value: -97 },
      idDelta_59: { type: 'SHORT', value: -97 },
      idDelta_60: { type: 'SHORT', value: -97 },
      idDelta_61: { type: 'SHORT', value: -97 },
      idDelta_62: { type: 'SHORT', value: 1 },
      idRangeOffset_0: { type: 'USHORT', value: 0 },
      idRangeOffset_1: { type: 'USHORT', value: 0 },
      idRangeOffset_2: { type: 'USHORT', value: 0 },
      idRangeOffset_3: { type: 'USHORT', value: 0 },
      idRangeOffset_4: { type: 'USHORT', value: 0 },
      idRangeOffset_5: { type: 'USHORT', value: 0 },
      idRangeOffset_6: { type: 'USHORT', value: 0 },
      idRangeOffset_7: { type: 'USHORT', value: 0 },
      idRangeOffset_8: { type: 'USHORT', value: 0 },
      idRangeOffset_9: { type: 'USHORT', value: 0 },
      idRangeOffset_10: { type: 'USHORT', value: 0 },
      idRangeOffset_11: { type: 'USHORT', value: 0 },
      idRangeOffset_12: { type: 'USHORT', value: 0 },
      idRangeOffset_13: { type: 'USHORT', value: 0 },
      idRangeOffset_14: { type: 'USHORT', value: 0 },
      idRangeOffset_15: { type: 'USHORT', value: 0 },
      idRangeOffset_16: { type: 'USHORT', value: 0 },
      idRangeOffset_17: { type: 'USHORT', value: 0 },
      idRangeOffset_18: { type: 'USHORT', value: 0 },
      idRangeOffset_19: { type: 'USHORT', value: 0 },
      idRangeOffset_20: { type: 'USHORT', value: 0 },
      idRangeOffset_21: { type: 'USHORT', value: 0 },
      idRangeOffset_22: { type: 'USHORT', value: 0 },
      idRangeOffset_23: { type: 'USHORT', value: 0 },
      idRangeOffset_24: { type: 'USHORT', value: 0 },
      idRangeOffset_25: { type: 'USHORT', value: 0 },
      idRangeOffset_26: { type: 'USHORT', value: 0 },
      idRangeOffset_27: { type: 'USHORT', value: 0 },
      idRangeOffset_28: { type: 'USHORT', value: 0 },
      idRangeOffset_29: { type: 'USHORT', value: 0 },
      idRangeOffset_30: { type: 'USHORT', value: 0 },
      idRangeOffset_31: { type: 'USHORT', value: 0 },
      idRangeOffset_32: { type: 'USHORT', value: 0 },
      idRangeOffset_33: { type: 'USHORT', value: 0 },
      idRangeOffset_34: { type: 'USHORT', value: 0 },
      idRangeOffset_35: { type: 'USHORT', value: 0 },
      idRangeOffset_36: { type: 'USHORT', value: 0 },
      idRangeOffset_37: { type: 'USHORT', value: 0 },
      idRangeOffset_38: { type: 'USHORT', value: 0 },
      idRangeOffset_39: { type: 'USHORT', value: 0 },
      idRangeOffset_40: { type: 'USHORT', value: 0 },
      idRangeOffset_41: { type: 'USHORT', value: 0 },
      idRangeOffset_42: { type: 'USHORT', value: 0 },
      idRangeOffset_43: { type: 'USHORT', value: 0 },
      idRangeOffset_44: { type: 'USHORT', value: 0 },
      idRangeOffset_45: { type: 'USHORT', value: 0 },
      idRangeOffset_46: { type: 'USHORT', value: 0 },
      idRangeOffset_47: { type: 'USHORT', value: 0 },
      idRangeOffset_48: { type: 'USHORT', value: 0 },
      idRangeOffset_49: { type: 'USHORT', value: 0 },
      idRangeOffset_50: { type: 'USHORT', value: 0 },
      idRangeOffset_51: { type: 'USHORT', value: 0 },
      idRangeOffset_52: { type: 'USHORT', value: 0 },
      idRangeOffset_53: { type: 'USHORT', value: 0 },
      idRangeOffset_54: { type: 'USHORT', value: 0 },
      idRangeOffset_55: { type: 'USHORT', value: 0 },
      idRangeOffset_56: { type: 'USHORT', value: 0 },
      idRangeOffset_57: { type: 'USHORT', value: 0 },
      idRangeOffset_58: { type: 'USHORT', value: 0 },
      idRangeOffset_59: { type: 'USHORT', value: 0 },
      idRangeOffset_60: { type: 'USHORT', value: 0 },
      idRangeOffset_61: { type: 'USHORT', value: 0 },
      idRangeOffset_62: { type: 'USHORT', value: 0 } } }

编码后的输出为8位整数数组,如下所示:

With the encoded output as an array of 8-bit integers like this:

0 0 0 1 0 0 0 6 0 0 0 12 0 4 0 16 0 0 0 126 0 64 0 5 0 62 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 97 0 98 0 99 0 100 0 101 0 102 0 103 0 104 0 105 0 106 0 107 0 108 0 109 0 110 0 111 0 112 0 113 0 114 0 115 0 116 0 117 0 118 0 119 0 120 0 121 0 122 255 255 0 0 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 97 0 98 0 99 0 100 0 101 0 102 0 103 0 104 0 105 0 106 0 107 0 108 0 109 0 110 0 111 0 112 0 113 0 114 0 115 0 116 0 117 0 118 0 119 0 120 0 121 0 122 255 255 255 0 4 0 4 0 4 0 4 0 4 0 4 0 4 0 4 0 4 0 4 255 217 255 217 255 217 255 217 255 217 217 255 217 255 217 255 217 255 255 217 255 217 255 217 255 217 217 255 217 255 217 255 217 255 255 217 255 217 255 217 217 255 217 255 217 255 217 255 217 255 217 255 217 255 217255217217255217255 1 59 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 1 0 0 0 6 0 0 0 12 0 4 0 16 0 0 0 126 0 64 0 5 0 62 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 97 0 98 0 99 0 100 0 101 0 102 0 103 0 104 0 105 0 106 0 107 0 108 0 109 0 110 0 111 0 112 0 113 0 114 0 115 0 116 0 117 0 118 0 119 0 120 0 121 0 122 255 255 0 0 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 65 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 97 0 98 0 99 0 100 0 101 0 102 0 103 0 104 0 105 0 106 0 107 0 108 0 109 0 110 0 111 0 112 0 113 0 114 0 115 0 116 0 117 0 118 0 119 0 120 0 121 0 122 255 255 0 4 0 4 0 4 0 4 0 4 0 4 0 4 0 4 0 4 0 4 255 217 255 217 255 217 255 217 255 217 255 217 255 217 255 217 255 217 255 217 255 217 255 217 255 217 255 217 255 217 255 217 255 217 255 217 255 217 255 217 255 217 255 217 255 217 255 217 255 217 255 217 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 255 159 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

我不确定如何最好地调试它,但是我想问一下这看起来是否正确,或者我应该做什么调试.我不问确切的值是否正确,但是我非常确定正确输入的值是不超过rangeShift的所有值.之后生成它.但是,从segCountX2rangeShift的那些值,即使我认为我没错,我仍然会收到此错误:OTS parsing error: incorrect entrySelector for table directory,即使我只是使字体文件仅包含所有该字段观点!因此,字体文件很小,但仍然存在相同的错误.我正在根据 spec 进行计算,就像这样:

I am not sure how to best debug this, but I wanted to ask if this looks right, or what I should do to debug. Not asking if the exact values are right, but the values I am pretty sure I entered in correctly are everything up to rangeShift. After that it is generated. But those values from segCountX2 to rangeShift, even though I think I'm getting them right, I keep getting this error: OTS parsing error: incorrect entrySelector for table directory, even if I just make the font-file only have all the fields up to that point! So the font file is tiny, but still the same error. I am doing the calculations according to the spec, like this:

var numTables = tables.length
var highestPowerOf2 = Math.pow(2, Math.log2(numTables))
var searchRange = 16 * highestPowerOf2
var entrySelector = Math.log2(highestPowerOf2) * 16
var rangeShift = (numTables * 16) - searchRange

var fields = {
  sfntVersion: { type: 'TAG', value: 'OTTO'},
  numTables: { type: 'USHORT', value: numTables},
  searchRange: { type: 'USHORT', value: searchRange},
  entrySelector: { type: 'USHORT', value: entrySelector},
  rangeShift: { type: 'USHORT', value: rangeShift},
}

但仍然无法正常工作.我也尝试过.

But still not working. I have also tried this.

推荐答案

似乎已通过切换为使用Apple参考代替Microsoft参考来解决:

It seems to have been fixed by switching to use the Apple reference instead of Microsofts for the calculations:

https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html

表4中记录的offset子表以字体的缩放器类型开头.以下是'sfnt'中标记表的数量.表目录本身和任何子表均不包括在此计数中. searchRange,entrySelector和rangeShift的条目用于促进随后的表目录的快速二进制搜索.除非字体具有大量表,否则顺序搜索将足够快.

The offset subtable, documented in Table 4, begins with the scaler type of the font. The number of tagged tables in the 'sfnt' follows.The table directory itself and any subtables are not included in this count. The entries for searchRange, entrySelector and rangeShift are used to facilitate quick binary searches of the table directory that follows. Unless a font has a large number of tables, a sequential search will be fast enough.

如果需要更快的搜索,则二进制搜索最容易在许多项上进行,即为2的幂.这使得可以通过移动将要搜索的项目数量减少一半.剩余的偏移量子表条目应设置如下:

If a faster search is necessary, a binary search is most easily done on a number of entries that is a power of two. This makes it possible to cut the number of items to search in half by shifting. The remaining offset subtable entries should be set as follows:

searchRange是小于或等于表中项目数的2的最大幂,即可以轻松搜索的最大项目数. rangeShift是项数减去searchRange;也就是说,如果仅查看searchRange项目,则无法查看的项目数. 在搜索循环开始之前,将目标项目与编号为rangeShift的项目进行比较.如果目标项目小于rangeShift,则从表的开头进行搜索.如果更大,请从编号为rangeShift的项目开始搜索.

searchRange is the largest power of two less than or equal to the number of items in the table, i.e. the largest number of items that can be easily searched. rangeShift is the number of items minus searchRange; i.e. the number of items that will not get looked at if you only look at searchRange items. Before the search loop starts, compare the target item to the item with number rangeShift. If the target item is less than rangeShift, search from the beginning of the table. If it is greater, search starting at the item with number rangeShift.

entrySelector是log2(searchRange).它告诉您需要搜索循环的迭代次数. (即将范围减半的次数) 请注意,searchRange,entrySelector和rangeShift都乘以16,代表目录条目的大小.

entrySelector is log2(searchRange). It tells how many iterations of the search loop are needed. (i.e. how many times to cut the range in half) Note that the searchRange, the entrySelector and the rangeShift are all multiplied by 16 which represents the size of a directory entry.

这篇关于OTS解析错误:表目录的entrySelector错误(OpenType字体错误)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆