Subversion Repositories eFlore/Applications.cel

Rev

Rev 3857 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
/**
 * PHPExcel
 *
 * Copyright (c) 2006 - 2013 PHPExcel
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @category   PHPExcel
 * @package    PHPExcel_Writer_Excel5
 * @copyright  Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel)
 * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
 * @version    ##VERSION##, ##DATE##
 */


/**
 * PHPExcel_Writer_Excel5_Font
 *
 * @category   PHPExcel
 * @package    PHPExcel_Writer_Excel5
 * @copyright  Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel)
 */
class PHPExcel_Writer_Excel5_Font
{
        /**
         * Color index
         *
         * @var int
         */
        private $_colorIndex;

        /**
         * Font
         *
         * @var PHPExcel_Style_Font
         */
        private $_font;

        /**
         * Constructor
         *
         * @param PHPExcel_Style_Font $font
         */
        public function __construct(PHPExcel_Style_Font $font = null)
        {
                $this->_colorIndex = 0x7FFF;
                $this->_font = $font;
        }

        /**
         * Set the color index
         *
         * @param int $colorIndex
         */
        public function setColorIndex($colorIndex)
        {
                $this->_colorIndex = $colorIndex;
        }

        /**
         * Get font record data
         *
         * @return string
         */
        public function writeFont()
        {
                $font_outline = 0;
                $font_shadow = 0;

                $icv = $this->_colorIndex; // Index to color palette
                if ($this->_font->getSuperScript()) {
                        $sss = 1;
                } else if ($this->_font->getSubScript()) {
                        $sss = 2;
                } else {
                        $sss = 0;
                }
                $bFamily = 0; // Font family
                $bCharSet = PHPExcel_Shared_Font::getCharsetFromFontName($this->_font->getName()); // Character set

                $record = 0x31;         // Record identifier
                $reserved = 0x00;       // Reserved
                $grbit = 0x00;          // Font attributes
                if ($this->_font->getItalic()) {
                        $grbit |= 0x02;
                }
                if ($this->_font->getStrikethrough()) {
                        $grbit |= 0x08;
                }
                if ($font_outline) {
                        $grbit |= 0x10;
                }
                if ($font_shadow) {
                        $grbit |= 0x20;
                }

                $data = pack("vvvvvCCCC",
                        $this->_font->getSize() * 20,                                           //      Fontsize (in twips)
                        $grbit,
                        $icv,                                                                                           //      Colour
                        self::_mapBold($this->_font->getBold()),                        //      Font weight
                        $sss,                                                                                           //      Superscript/Subscript
                        self::_mapUnderline($this->_font->getUnderline()),
                        $bFamily,
                        $bCharSet,
                        $reserved
                );
                $data .= PHPExcel_Shared_String::UTF8toBIFF8UnicodeShort($this->_font->getName());

                $length = strlen($data);
                $header = pack("vv", $record, $length);

                return($header . $data);
        }

        /**
         * Map to BIFF5-BIFF8 codes for bold
         *
         * @param boolean $bold
         * @return int
         */
        private static function _mapBold($bold) {
                if ($bold) {
                        return 0x2BC;   //      700 = Bold font weight
                }
                return 0x190;           //      400 = Normal font weight
        }

        /**
         * Map of BIFF2-BIFF8 codes for underline styles
         * @static      array of int
         *
         */
        private static $_mapUnderline = array(  PHPExcel_Style_Font::UNDERLINE_NONE                                     => 0x00,
                                                                                        PHPExcel_Style_Font::UNDERLINE_SINGLE                           => 0x01,
                                                                                        PHPExcel_Style_Font::UNDERLINE_DOUBLE                           => 0x02,
                                                                                        PHPExcel_Style_Font::UNDERLINE_SINGLEACCOUNTING         => 0x21,
                                                                                        PHPExcel_Style_Font::UNDERLINE_DOUBLEACCOUNTING         => 0x22,
                                                                                 );
        /**
         * Map underline
         *
         * @param string
         * @return int
         */
        private static function _mapUnderline($underline) {
                if (isset(self::$_mapUnderline[$underline]))
                        return self::$_mapUnderline[$underline];
                return 0x00;
        }

}