<?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\EOT;





/**


 * EOT font file.


 *


 * @package php-font-lib


 */


class File extends \FontLib\TrueType\File {


  const TTEMBED_SUBSET                   = 0x00000001;


  const TTEMBED_TTCOMPRESSED             = 0x00000004;


  const TTEMBED_FAILIFVARIATIONSIMULATED = 0x00000010;


  const TTMBED_EMBEDEUDC                 = 0x00000020;


  const TTEMBED_VALIDATIONTESTS          = 0x00000040; // Deprecated


  const TTEMBED_WEBOBJECT      = 0x00000080;


  const TTEMBED_XORENCRYPTDATA = 0x10000000;





  /**


   * @var Header


   */


  public $header;





  function parseHeader() {


    if (!empty($this->header)) {


      return;


    }





    $this->header = new Header($this);


    $this->header->parse();


  }





  function parse() {


    $this->parseHeader();





    $flags = $this->header->data["Flags"];





    if ($flags & self::TTEMBED_TTCOMPRESSED) {


      $mtx_version    = $this->readUInt8();


      $mtx_copy_limit = $this->readUInt8() << 16 | $this->readUInt8() << 8 | $this->readUInt8();


      $mtx_offset_1   = $this->readUInt8() << 16 | $this->readUInt8() << 8 | $this->readUInt8();


      $mtx_offset_2   = $this->readUInt8() << 16 | $this->readUInt8() << 8 | $this->readUInt8();


      /*


      var_dump("$mtx_version $mtx_copy_limit $mtx_offset_1 $mtx_offset_2");





      $pos = $this->pos();


      $size = $mtx_offset_1 - $pos;


      var_dump("pos: $pos");


      var_dump("size: $size");*/


    }





    if ($flags & self::TTEMBED_XORENCRYPTDATA) {


      // Process XOR


    }


    // TODO Read font data ...


  }





    /**


     * Little endian version of the read method


     *


     * @param int $n The number of bytes to read


     *


     * @return string


     */


  public function read($n) {


    if ($n < 1) {


      return "";


    }





    $string = fread($this->f, $n);


    $chunks = str_split($string, 2);


    $chunks = array_map("strrev", $chunks);





    return implode("", $chunks);


  }





  public function readUInt32() {


    $uint32 = parent::readUInt32();





    return $uint32 >> 16 & 0x0000FFFF | $uint32 << 16 & 0xFFFF0000;


  }





  /**


   * Get font copyright


   *


   * @return string|null


   */


  function getFontCopyright() {


    return null;


  }





  /**


   * Get font name


   *


   * @return string|null


   */


  function getFontName() {


    return $this->header->data["FamilyName"];


  }





  /**


   * Get font subfamily


   *


   * @return string|null


   */


  function getFontSubfamily() {


    return $this->header->data["StyleName"];


  }





  /**


   * Get font subfamily ID


   *


   * @return string|null


   */


  function getFontSubfamilyID() {


    return $this->header->data["StyleName"];


  }





  /**


   * Get font full name


   *


   * @return string|null


   */


  function getFontFullName() {


    return $this->header->data["FullName"];


  }





  /**


   * Get font version


   *


   * @return string|null


   */


  function getFontVersion() {


    return $this->header->data["VersionName"];


  }





  /**


   * Get font weight


   *


   * @return string|null


   */


  function getFontWeight() {


    return $this->header->data["Weight"];


  }





  /**


   * Get font Postscript name


   *


   * @return string|null


   */


  function getFontPostscriptName() {


    return null;


  }


}


