web/lib/Zend/Pdf/FileParser/Font.php
changeset 64 162c1de6545a
parent 19 1c2f13fd785c
child 68 ecaf28ffe26e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/Zend/Pdf/FileParser/Font.php	Fri Mar 11 15:05:35 2011 +0100
@@ -0,0 +1,217 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category   Zend
+ * @package    Zend_Pdf
+ * @subpackage FileParser
+ * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ * @version    $Id: Font.php 20096 2010-01-06 02:05:09Z bkarwin $
+ */
+
+/** Internally used classes */
+require_once 'Zend/Pdf/Font.php';
+
+
+/** Zend_Pdf_FileParser */
+require_once 'Zend/Pdf/FileParser.php';
+
+/**
+ * Abstract helper class for {@link Zend_Pdf_Font} that parses font files.
+ *
+ * Defines the public interface for concrete subclasses which are responsible
+ * for parsing the raw binary data from the font file on disk. Also provides
+ * a debug logging interface and a couple of shared utility methods.
+ *
+ * @package    Zend_Pdf
+ * @subpackage FileParser
+ * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ */
+abstract class Zend_Pdf_FileParser_Font extends Zend_Pdf_FileParser
+{
+  /**** Instance Variables ****/
+
+
+    /**
+     * Array of parsed font properties. Used with {@link __get()} and
+     * {@link __set()}.
+     * @var array
+     */
+    private $_fontProperties = array();
+
+    /**
+     * Flag indicating whether or not debug logging is active.
+     * @var boolean
+     */
+    private $_debug = false;
+
+
+
+  /**** Public Interface ****/
+
+
+  /* Object Lifecycle */
+
+    /**
+     * Object constructor.
+     *
+     * Validates the data source and enables debug logging if so configured.
+     *
+     * @param Zend_Pdf_FileParserDataSource $dataSource
+     * @throws Zend_Pdf_Exception
+     */
+    public function __construct(Zend_Pdf_FileParserDataSource $dataSource)
+    {
+        parent::__construct($dataSource);
+        $this->fontType = Zend_Pdf_Font::TYPE_UNKNOWN;
+    }
+
+
+  /* Accessors */
+
+    /**
+     * Get handler
+     *
+     * @param string $property
+     * @return mixed
+     */
+    public function __get($property)
+    {
+        if (isset($this->_fontProperties[$property])) {
+            return $this->_fontProperties[$property];
+        } else {
+            return null;
+        }
+    }
+
+    /* NOTE: The set handler is defined below in the internal methods group. */
+
+
+  /* Parser Methods */
+
+    /**
+     * Reads the Unicode UTF-16-encoded string from the binary file at the
+     * current offset location. Overridden to fix return character set at UTF-16BE.
+     *
+     * @todo Deal with to-dos in the parent method.
+     *
+     * @param integer $byteCount Number of bytes (characters * 2) to return.
+     * @param integer $byteOrder (optional) Big- or little-endian byte order.
+     *   Use the BYTE_ORDER_ constants defined in {@link Zend_Pdf_FileParser}. If
+     *   omitted, uses big-endian.
+     * @param string $characterSet (optional) --Ignored--
+     * @return string
+     * @throws Zend_Pdf_Exception
+     */
+    public function readStringUTF16($byteCount,
+                                    $byteOrder = Zend_Pdf_FileParser::BYTE_ORDER_BIG_ENDIAN,
+                                    $characterSet = '')
+    {
+        return parent::readStringUTF16($byteCount, $byteOrder, 'UTF-16BE');
+    }
+
+    /**
+     * Reads the Mac Roman-encoded string from the binary file at the current
+     * offset location. Overridden to fix return character set at UTF-16BE.
+     *
+     * @param integer $byteCount Number of bytes (characters) to return.
+     * @param string $characterSet (optional) --Ignored--
+     * @return string
+     * @throws Zend_Pdf_Exception
+     */
+    public function readStringMacRoman($byteCount, $characterSet = '')
+    {
+        return parent::readStringMacRoman($byteCount, 'UTF-16BE');
+    }
+
+    /**
+     * Reads the Pascal string from the binary file at the current offset
+     * location. Overridden to fix return character set at UTF-16BE.
+     *
+     * @param string $characterSet (optional) --Ignored--
+     * @param integer $lengthBytes (optional) Number of bytes that make up the
+     *   length. Default is 1.
+     * @return string
+     * @throws Zend_Pdf_Exception
+     */
+    public function readStringPascal($characterSet = '', $lengthBytes = 1)
+    {
+        return parent::readStringPascal('UTF-16BE');
+    }
+
+
+  /* Utility Methods */
+
+    /**
+     * Writes the entire font properties array to STDOUT. Used only for debugging.
+     */
+    public function writeDebug()
+    {
+        print_r($this->_fontProperties);
+    }
+
+
+
+  /**** Internal Methods ****/
+
+
+  /* Internal Accessors */
+
+    /**
+     * Set handler
+     *
+     * NOTE: This method is protected. Other classes may freely interrogate
+     * the font properties, but only this and its subclasses may set them.
+     *
+     * @param string $property
+     * @param  mixed $value
+     */
+    public function __set($property, $value)
+    {
+        if ($value === null) {
+            unset($this->_fontProperties[$property]);
+        } else {
+            $this->_fontProperties[$property] = $value;
+        }
+    }
+
+
+  /* Internal Utility Methods */
+
+    /**
+     * If debug logging is enabled, writes the log message.
+     *
+     * The log message is a sprintf() style string and any number of arguments
+     * may accompany it as additional parameters.
+     *
+     * @param string $message
+     * @param mixed (optional, multiple) Additional arguments
+     */
+    protected function _debugLog($message)
+    {
+        if (! $this->_debug) {
+            return;
+        }
+        if (func_num_args() > 1) {
+            $args = func_get_args();
+            $message = array_shift($args);
+            $message = vsprintf($message, $args);
+        }
+
+        require_once 'Zend/Log.php';
+        $logger = new Zend_Log();
+        $logger->log($message, Zend_Log::DEBUG);
+    }
+}