/var/www/hkosl.com/imusiccircle/webadmin/libraies/phenx/php-font-lib/src/FontLib/Table/DirectoryEntry.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<?php
/**
 * @package php-font-lib
 * @link    https://github.com/PhenX/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace FontLib\Table;

use 
FontLib\TrueType\File;
use 
FontLib\Font;
use 
FontLib\BinaryStream;

/**
 * Generic Font table directory entry.
 *
 * @package php-font-lib
 */
class DirectoryEntry extends BinaryStream {
  
/**
   * @var File
   */
  
protected $font;

  
/**
   * @var Table
   */
  
protected $font_table;

  public 
$entryLength 4;

  public 
$tag;
  public 
$checksum;
  public 
$offset;
  public 
$length;

  protected 
$origF;

  static function 
computeChecksum($data) {
    
$len strlen($data);
    
$mod $len 4;

    if (
$mod) {
      
$data str_pad($data$len + ($mod), "\0");
    }

    
$len strlen($data);

    
$hi 0x0000;
    
$lo 0x0000;

    for (
$i 0$i $len$i += 4) {
      
$hi += (ord($data[$i]) << 8) + ord($data[$i 1]);
      
$lo += (ord($data[$i 2]) << 8) + ord($data[$i 3]);
      
$hi += $lo >> 16;
      
$lo $lo 0xFFFF;
      
$hi $hi 0xFFFF;
    }

    return (
$hi << 8) + $lo;
  }

  function 
__construct(File $font) {
    
$this->font $font;
    
$this->f    $font->f;
  }

  function 
parse() {
    
$this->tag $this->font->read(4);
  }

  function 
open($filename$mode self::modeRead) {
    
// void
  
}

  function 
setTable(Table $font_table) {
    
$this->font_table $font_table;
  }

  function 
encode($entry_offset) {
    
Font::d("\n==== $this->tag ====");
    
//Font::d("Entry offset  = $entry_offset");

    
$data $this->font_table;
    
$font $this->font;

    
$table_offset $font->pos();
    
$this->offset $table_offset;
    
$table_length $data->encode();

    
$font->seek($table_offset);
    
$table_data $font->read($table_length);

    
$font->seek($entry_offset);

    
$font->write($this->tag4);
    
$font->writeUInt32(self::computeChecksum($table_data));
    
$font->writeUInt32($table_offset);
    
$font->writeUInt32($table_length);

    
Font::d("Bytes written = $table_length");

    
$font->seek($table_offset $table_length);
  }

  
/**
   * @return File
   */
  
function getFont() {
    return 
$this->font;
  }

  function 
startRead() {
    
$this->font->seek($this->offset);
  }

  function 
endRead() {
    
//
  
}

  function 
startWrite() {
    
$this->font->seek($this->offset);
  }

  function 
endWrite() {
    
//
  
}
}