Geen omschrijving

kern.php 1.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. /**
  3. * @package php-font-lib
  4. * @link https://github.com/PhenX/php-font-lib
  5. * @author Fabien Ménager <fabien.menager@gmail.com>
  6. * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
  7. */
  8. namespace FontLib\Table\Type;
  9. use FontLib\Table\Table;
  10. /**
  11. * `kern` font table.
  12. *
  13. * @package php-font-lib
  14. */
  15. class kern extends Table {
  16. protected function _parse() {
  17. $font = $this->getFont();
  18. $data = $font->unpack(array(
  19. "version" => self::uint16,
  20. "nTables" => self::uint16,
  21. // only the first subtable will be parsed
  22. "subtableVersion" => self::uint16,
  23. "length" => self::uint16,
  24. "coverage" => self::uint16,
  25. ));
  26. $data["format"] = ($data["coverage"] >> 8);
  27. $subtable = array();
  28. switch ($data["format"]) {
  29. case 0:
  30. $subtable = $font->unpack(array(
  31. "nPairs" => self::uint16,
  32. "searchRange" => self::uint16,
  33. "entrySelector" => self::uint16,
  34. "rangeShift" => self::uint16,
  35. ));
  36. $pairs = array();
  37. $tree = array();
  38. $values = $font->readUInt16Many($subtable["nPairs"] * 3);
  39. for ($i = 0, $idx = 0; $i < $subtable["nPairs"]; $i++) {
  40. $left = $values[$idx++];
  41. $right = $values[$idx++];
  42. $value = $values[$idx++];
  43. if ($value >= 0x8000) {
  44. $value -= 0x10000;
  45. }
  46. $pairs[] = array(
  47. "left" => $left,
  48. "right" => $right,
  49. "value" => $value,
  50. );
  51. $tree[$left][$right] = $value;
  52. }
  53. //$subtable["pairs"] = $pairs;
  54. $subtable["tree"] = $tree;
  55. break;
  56. case 1:
  57. case 2:
  58. case 3:
  59. break;
  60. }
  61. $data["subtable"] = $subtable;
  62. $this->data = $data;
  63. }
  64. }