Значение этой числовой функции с различными числовыми значениями в блоках if - PullRequest
0 голосов
/ 16 января 2019

Хотите знать, что означает эта функция encode_number, все разные числа. В частности, я знаю, что 32768 предназначен для 16 бит (Math.pow(2, 16) / 2), и что последний блок else является (из комментариев исходного кода) 32-битным числом. Но я не понимаю, откуда эти цифры: 107, 139, 108, 1131, 247, 251, 28, 29. Хотелось бы узнать, что означает эта функция. С здесь .

function encode_number(v) {
  if (v >= -107 && v <= 107) {
    return [v + 139]
  } else if (v >= 108 && v <= 1131) {
      v = v - 108
    return [(v >> 8) + 247, v & 0xFF]
  } else if (v >= -1131 && v <= -108) {
      v = -v - 108
    return [(v >> 8) + 251, v & 0xFF]
  } else if (v >= -32768 && v <= 32767) {
    // encode_number16
    return [28, (v >> 8) & 0xFF, v & 0xFF]
  } else {
    // encode_number32
    return [29, (v >> 24) & 0xFF, (v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF]
  }
}

1 Ответ

0 голосов
/ 16 января 2019

Ну, это было просто:

  • Используя blame представление этого связанного исходного кода, вы сталкиваетесь с коммитом , который вводит эти строки . Сообщение о коммите было: «Добавить кодировку таблицы CFF».
  • При поиске CFF и 107 вы найдете объяснение этого формата словаря CFF

Итак, эта функция используется для кодирования чего-либо для того «Компактного формата шрифта», который принадлежит OpenType. Но что это на самом деле означает , мне не известно;)

...