306 lines
7.7 KiB
PHP
Executable File
306 lines
7.7 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* ttfInfo class
|
|
* Retrieve data stored in a TTF files 'name' table
|
|
*
|
|
* @original author Unknown
|
|
* found at http://www.phpclasses.org/browse/package/2144.html
|
|
*
|
|
* @ported for used on http://www.nufont.com
|
|
* @author Jason Arencibia
|
|
* @version 0.2
|
|
* @copyright (c) 2006 GrayTap Media
|
|
* @website http://www.graytap.com
|
|
* @license GPL 2.0
|
|
* @access public
|
|
*
|
|
* @todo: Make it Retrieve additional information from other tables
|
|
*
|
|
*/
|
|
class TTF_Info {
|
|
/**
|
|
* variable $_dirRestriction
|
|
* Restrict the resource pointer to this directory and above.
|
|
* Change to 1 for to allow the class to look outside of it current directory
|
|
* @protected
|
|
* @var int
|
|
*/
|
|
protected $_dirRestriction = true;
|
|
/**
|
|
* variable $_dirRestriction
|
|
* Restrict the resource pointer to this directory and above.
|
|
* Change to 1 for nested directories
|
|
* @protected
|
|
* @var int
|
|
*/
|
|
protected $_recursive = true;
|
|
|
|
/**
|
|
* variable $fontsdir
|
|
* This is to declare this variable as protected
|
|
* don't edit this!!!
|
|
* @protected
|
|
*/
|
|
protected $fontsdir;
|
|
/**
|
|
* variable $filename
|
|
* This is to declare this varable as protected
|
|
* don't edit this!!!
|
|
* @protected
|
|
*/
|
|
protected $filename;
|
|
|
|
/**
|
|
* function setFontFile()
|
|
* set the filename
|
|
* @public
|
|
* @param string $data the new value
|
|
* @return object reference to this
|
|
*/
|
|
public function setFontFile($data)
|
|
{
|
|
if ($this->_dirRestriction && preg_match('[\.\/|\.\.\/]', $data))
|
|
{
|
|
$this->exitClass('Error: Directory restriction is enforced!');
|
|
}
|
|
|
|
$this->filename = $data;
|
|
return $this;
|
|
} // public function setFontFile
|
|
|
|
/**
|
|
* function setFontsDir()
|
|
* set the Font Directory
|
|
* @public
|
|
* @param string $data the new value
|
|
* @return object referrence to this
|
|
*/
|
|
public function setFontsDir($data)
|
|
{
|
|
if ($this->_dirRestriction && preg_match('[\.\/|\.\.\/]', $data))
|
|
{
|
|
$this->exitClass('Error: Directory restriction is enforced!');
|
|
}
|
|
|
|
$this->fontsdir = $data;
|
|
return $this;
|
|
} // public function setFontsDir
|
|
|
|
/**
|
|
* function readFontsDir()
|
|
* @public
|
|
* @return information contained in the TTF 'name' table of all fonts in a directory.
|
|
*/
|
|
public function readFontsDir()
|
|
{
|
|
if (empty($this->fontsdir)) { $this->exitClass('Error: Fonts Directory has not been set with setFontsDir().'); }
|
|
if (empty($this->backupDir)){ $this->backupDir = $this->fontsdir; }
|
|
|
|
//$this->array = array();
|
|
$d = dir($this->fontsdir);
|
|
|
|
while (false !== ($e = $d->read()))
|
|
{
|
|
if($e != '.' && $e != '..')
|
|
{
|
|
$e = $this->fontsdir . $e;
|
|
if($this->_recursive && is_dir($e))
|
|
{
|
|
$this->setFontsDir($e);
|
|
$this->readFontsDir();
|
|
}
|
|
else if ($this->is_ttf($e) === true)
|
|
{
|
|
$this->setFontFile($e);
|
|
$this->array[] = $this->getFontInfo();
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!empty($this->backupDir)){ $this->fontsdir = $this->backupDir; }
|
|
|
|
$d->close();
|
|
return $this;
|
|
} // public function readFontsDir
|
|
|
|
/**
|
|
* function setProtectedVar()
|
|
* @public
|
|
* @param string $var the new variable
|
|
* @param string $data the new value
|
|
* @return object reference to this
|
|
|
|
* DISABLED, NO REAL USE YET
|
|
|
|
public function setProtectedVar($var, $data)
|
|
{
|
|
if ($var == 'filename')
|
|
{
|
|
$this->setFontFile($data);
|
|
} else {
|
|
//if (isset($var) && !empty($data))
|
|
$this->$var = $data;
|
|
}
|
|
return $this;
|
|
}
|
|
*/
|
|
/**
|
|
* function getFontInfo()
|
|
* @public
|
|
* @return information contained in the TTF 'name' table.
|
|
*/
|
|
public function getFontInfo()
|
|
{
|
|
$fd = fopen ($this->filename, "r");
|
|
$this->text = fread ($fd, filesize($this->filename));
|
|
fclose ($fd);
|
|
|
|
$number_of_tables = hexdec($this->dec2ord($this->text[4]).$this->dec2ord($this->text[5]));
|
|
|
|
for ($i=0;$i<$number_of_tables;$i++)
|
|
{
|
|
$tag = $this->text[12+$i*16].$this->text[12+$i*16+1].$this->text[12+$i*16+2].$this->text[12+$i*16+3];
|
|
|
|
if ($tag == 'name')
|
|
{
|
|
$this->ntOffset = hexdec(
|
|
$this->dec2ord($this->text[12+$i*16+8]).$this->dec2ord($this->text[12+$i*16+8+1]).
|
|
$this->dec2ord($this->text[12+$i*16+8+2]).$this->dec2ord($this->text[12+$i*16+8+3]));
|
|
|
|
$offset_storage_dec = hexdec($this->dec2ord($this->text[$this->ntOffset+4]).$this->dec2ord($this->text[$this->ntOffset+5]));
|
|
$number_name_records_dec = hexdec($this->dec2ord($this->text[$this->ntOffset+2]).$this->dec2ord($this->text[$this->ntOffset+3]));
|
|
}
|
|
}
|
|
|
|
$storage_dec = $offset_storage_dec + $this->ntOffset;
|
|
$storage_hex = strtoupper(dechex($storage_dec));
|
|
|
|
for ($j=0;$j<$number_name_records_dec;$j++)
|
|
{
|
|
$platform_id_dec = hexdec($this->dec2ord($this->text[$this->ntOffset+6+$j*12+0]).$this->dec2ord($this->text[$this->ntOffset+6+$j*12+1]));
|
|
$name_id_dec = hexdec($this->dec2ord($this->text[$this->ntOffset+6+$j*12+6]).$this->dec2ord($this->text[$this->ntOffset+6+$j*12+7]));
|
|
$string_length_dec = hexdec($this->dec2ord($this->text[$this->ntOffset+6+$j*12+8]).$this->dec2ord($this->text[$this->ntOffset+6+$j*12+9]));
|
|
$string_offset_dec = hexdec($this->dec2ord($this->text[$this->ntOffset+6+$j*12+10]).$this->dec2ord($this->text[$this->ntOffset+6+$j*12+11]));
|
|
|
|
if (!empty($name_id_dec) and empty($font_tags[$name_id_dec]))
|
|
{
|
|
for($l=0;$l<$string_length_dec;$l++)
|
|
{
|
|
if (ord($this->text[$storage_dec+$string_offset_dec+$l]) == '0') { continue; }
|
|
else { $font_tags[$name_id_dec] .= ($this->text[$storage_dec+$string_offset_dec+$l]); }
|
|
}
|
|
}
|
|
}
|
|
return $font_tags;
|
|
} // public function getFontInfo
|
|
|
|
/**
|
|
* function getCopyright()
|
|
* @public
|
|
* @return 'Copyright notice' contained in the TTF 'name' table at index 0
|
|
*/
|
|
public function getCopyright()
|
|
{
|
|
$this->info = $this->getFontInfo();
|
|
return $this->info[0];
|
|
} // public function getCopyright
|
|
|
|
/**
|
|
* function getFontFamily()
|
|
* @public
|
|
* @return 'Font Family name' contained in the TTF 'name' table at index 1
|
|
*/
|
|
public function getFontFamily()
|
|
{
|
|
$this->info = $this->getFontInfo();
|
|
return $this->info[1];
|
|
} // public function getFontFamily
|
|
|
|
/**
|
|
* function getFontSubFamily()
|
|
* @public
|
|
* @return 'Font Subfamily name' contained in the TTF 'name' table at index 2
|
|
*/
|
|
public function getFontSubFamily()
|
|
{
|
|
$this->info = $this->getFontInfo();
|
|
return $this->info[2];
|
|
} // public function getFontSubFamily
|
|
|
|
/**
|
|
* function getFontId()
|
|
* @public
|
|
* @return 'Unique font identifier' contained in the TTF 'name' table at index 3
|
|
*/
|
|
public function getFontId()
|
|
{
|
|
$this->info = $this->getFontInfo();
|
|
return $this->info[3];
|
|
} // public function getFontId
|
|
|
|
/**
|
|
* function getFullFontName()
|
|
* @public
|
|
* @return 'Full font name' contained in the TTF 'name' table at index 4
|
|
*/
|
|
public function getFullFontName()
|
|
{
|
|
$this->info = $this->getFontInfo();
|
|
return $this->info[4];
|
|
} // public function getFullFontName
|
|
|
|
/**
|
|
* function dec2ord()
|
|
* Used to lessen redundant calls to multiple functions.
|
|
* @protected
|
|
* @return object
|
|
*/
|
|
protected function dec2ord($dec)
|
|
{
|
|
return $this->dec2hex(ord($dec));
|
|
} // protected function dec2ord
|
|
|
|
/**
|
|
* function dec2hex()
|
|
* private function to perform Hexadecimal to decimal with proper padding.
|
|
* @protected
|
|
* @return object
|
|
*/
|
|
protected function dec2hex($dec)
|
|
{
|
|
return str_repeat('0', 2-strlen(($hex=strtoupper(dechex($dec))))) . $hex;
|
|
} // protected function dec2hex
|
|
|
|
/**
|
|
* function dec2hex()
|
|
* private function to perform Hexadecimal to decimal with proper padding.
|
|
* @protected
|
|
* @return object
|
|
*/
|
|
protected function exitClass($message)
|
|
{
|
|
echo $message;
|
|
exit;
|
|
} // protected function dec2hex
|
|
|
|
/**
|
|
* function dec2hex()
|
|
* private helper function to test in the file in question is a ttf.
|
|
* @protected
|
|
* @return object
|
|
*/
|
|
protected function is_ttf($file)
|
|
{
|
|
$ext = explode('.', $file);
|
|
$ext = $ext[count($ext)-1];
|
|
return preg_match("/ttf$/i",$ext) ? true : false;
|
|
} // protected function is_ttf
|
|
} // class ttfInfo
|
|
|
|
function getFontInfo($resource)
|
|
{
|
|
$ttfInfo = new TTF_Info;
|
|
$ttfInfo->setFontFile($resource);
|
|
return $ttfInfo->getFontInfo();
|
|
}
|
|
?>
|