| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537 | 
							- <?php
 
- /**
 
-  * PHPExcel
 
-  *
 
-  * Copyright (c) 2006 - 2014 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 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
 
-  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt	LGPL
 
-  * @version    1.8.0, 2014-03-02
 
-  */
 
- /**
 
-  * PHPExcel_Shared_Escher_DggContainer_BstoreContainer
 
-  *
 
-  * @category   PHPExcel
 
-  * @package    PHPExcel_Writer_Excel5
 
-  * @copyright  Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
 
-  */
 
- class PHPExcel_Writer_Excel5_Escher
 
- {
 
- 	/**
 
- 	 * The object we are writing
 
- 	 */
 
- 	private $_object;
 
- 	/**
 
- 	 * The written binary data
 
- 	 */
 
- 	private $_data;
 
- 	/**
 
- 	 * Shape offsets. Positions in binary stream where a new shape record begins
 
- 	 *
 
- 	 * @var array
 
- 	 */
 
- 	private $_spOffsets;
 
- 	/**
 
- 	 * Shape types.
 
- 	 *
 
- 	 * @var array
 
- 	 */
 
- 	private $_spTypes;
 
- 	
 
- 	/**
 
- 	 * Constructor
 
- 	 *
 
- 	 * @param mixed
 
- 	 */
 
- 	public function __construct($object)
 
- 	{
 
- 		$this->_object = $object;
 
- 	}
 
- 	/**
 
- 	 * Process the object to be written
 
- 	 */
 
- 	public function close()
 
- 	{
 
- 		// initialize
 
- 		$this->_data = '';
 
- 		switch (get_class($this->_object)) {
 
- 		case 'PHPExcel_Shared_Escher':
 
- 			if ($dggContainer = $this->_object->getDggContainer()) {
 
- 				$writer = new PHPExcel_Writer_Excel5_Escher($dggContainer);
 
- 				$this->_data = $writer->close();
 
- 			} else if ($dgContainer = $this->_object->getDgContainer()) {
 
- 				$writer = new PHPExcel_Writer_Excel5_Escher($dgContainer);
 
- 				$this->_data = $writer->close();
 
- 				$this->_spOffsets = $writer->getSpOffsets();
 
- 				$this->_spTypes = $writer->getSpTypes();
 
- 			}
 
- 			break;
 
- 		case 'PHPExcel_Shared_Escher_DggContainer':
 
- 			// this is a container record
 
- 			// initialize
 
- 			$innerData = '';
 
- 			// write the dgg
 
- 			$recVer			= 0x0;
 
- 			$recInstance	= 0x0000;
 
- 			$recType		= 0xF006;
 
- 			$recVerInstance  = $recVer;
 
- 			$recVerInstance |= $recInstance << 4;
 
- 			// dgg data
 
- 			$dggData =
 
- 				pack('VVVV'
 
- 					, $this->_object->getSpIdMax() // maximum shape identifier increased by one
 
- 					, $this->_object->getCDgSaved() + 1 // number of file identifier clusters increased by one
 
- 					, $this->_object->getCSpSaved()
 
- 					, $this->_object->getCDgSaved() // count total number of drawings saved
 
- 				);
 
- 			// add file identifier clusters (one per drawing)
 
- 			$IDCLs = $this->_object->getIDCLs();
 
- 			foreach ($IDCLs as $dgId => $maxReducedSpId) {
 
- 				$dggData .= pack('VV', $dgId, $maxReducedSpId + 1);
 
- 			}
 
- 			$header = pack('vvV', $recVerInstance, $recType, strlen($dggData));
 
- 			$innerData .= $header . $dggData;
 
- 			// write the bstoreContainer
 
- 			if ($bstoreContainer = $this->_object->getBstoreContainer()) {
 
- 				$writer = new PHPExcel_Writer_Excel5_Escher($bstoreContainer);
 
- 				$innerData .= $writer->close();
 
- 			}
 
- 			// write the record
 
- 			$recVer			= 0xF;
 
- 			$recInstance	= 0x0000;
 
- 			$recType		= 0xF000;
 
- 			$length			= strlen($innerData);
 
- 			$recVerInstance  = $recVer;
 
- 			$recVerInstance |= $recInstance << 4;
 
- 			$header = pack('vvV', $recVerInstance, $recType, $length);
 
- 			$this->_data = $header . $innerData;
 
- 			break;
 
- 		case 'PHPExcel_Shared_Escher_DggContainer_BstoreContainer':
 
- 			// this is a container record
 
- 			// initialize
 
- 			$innerData = '';
 
- 			// treat the inner data
 
- 			if ($BSECollection = $this->_object->getBSECollection()) {
 
- 				foreach ($BSECollection as $BSE) {
 
- 					$writer = new PHPExcel_Writer_Excel5_Escher($BSE);
 
- 					$innerData .= $writer->close();
 
- 				}
 
- 			}
 
- 			// write the record
 
- 			$recVer			= 0xF;
 
- 			$recInstance	= count($this->_object->getBSECollection());
 
- 			$recType		= 0xF001;
 
- 			$length			= strlen($innerData);
 
- 			$recVerInstance  = $recVer;
 
- 			$recVerInstance |= $recInstance << 4;
 
- 			$header = pack('vvV', $recVerInstance, $recType, $length);
 
- 			$this->_data = $header . $innerData;
 
- 			break;
 
- 		case 'PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE':
 
- 			// this is a semi-container record
 
- 			// initialize
 
- 			$innerData = '';
 
- 			// here we treat the inner data
 
- 			if ($blip = $this->_object->getBlip()) {
 
- 				$writer = new PHPExcel_Writer_Excel5_Escher($blip);
 
- 				$innerData .= $writer->close();
 
- 			}
 
- 			// initialize
 
- 			$data = '';
 
- 			$btWin32 = $this->_object->getBlipType();
 
- 			$btMacOS = $this->_object->getBlipType();
 
- 			$data .= pack('CC', $btWin32, $btMacOS);
 
- 			$rgbUid = pack('VVVV', 0,0,0,0); // todo
 
- 			$data .= $rgbUid;
 
- 			$tag = 0;
 
- 			$size = strlen($innerData);
 
- 			$cRef = 1;
 
- 			$foDelay = 0; //todo
 
- 			$unused1 = 0x0;
 
- 			$cbName = 0x0;
 
- 			$unused2 = 0x0;
 
- 			$unused3 = 0x0;
 
- 			$data .= pack('vVVVCCCC', $tag, $size, $cRef, $foDelay, $unused1, $cbName, $unused2, $unused3);
 
- 			$data .= $innerData;
 
- 			// write the record
 
- 			$recVer			= 0x2;
 
- 			$recInstance	= $this->_object->getBlipType();
 
- 			$recType		= 0xF007;
 
- 			$length			= strlen($data);
 
- 			$recVerInstance  = $recVer;
 
- 			$recVerInstance |=	$recInstance << 4;
 
- 			$header = pack('vvV', $recVerInstance, $recType, $length);
 
- 			$this->_data = $header;
 
- 			$this->_data .= $data;
 
- 			break;
 
- 		case 'PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip':
 
- 			// this is an atom record
 
- 			// write the record
 
- 			switch ($this->_object->getParent()->getBlipType()) {
 
- 			case PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_JPEG:
 
- 				// initialize
 
- 				$innerData = '';
 
- 				$rgbUid1 = pack('VVVV', 0,0,0,0); // todo
 
- 				$innerData .= $rgbUid1;
 
- 				$tag = 0xFF; // todo
 
- 				$innerData .= pack('C', $tag);
 
- 				$innerData .= $this->_object->getData();
 
- 				$recVer			= 0x0;
 
- 				$recInstance	= 0x46A;
 
- 				$recType		= 0xF01D;
 
- 				$length			= strlen($innerData);
 
- 				$recVerInstance  = $recVer;
 
- 				$recVerInstance |=	$recInstance << 4;
 
- 				$header = pack('vvV', $recVerInstance, $recType, $length);
 
- 				$this->_data = $header;
 
- 				$this->_data .= $innerData;
 
- 				break;
 
- 			case PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG:
 
- 				// initialize
 
- 				$innerData = '';
 
- 				$rgbUid1 = pack('VVVV', 0,0,0,0); // todo
 
- 				$innerData .= $rgbUid1;
 
- 				$tag = 0xFF; // todo
 
- 				$innerData .= pack('C', $tag);
 
- 				$innerData .= $this->_object->getData();
 
- 				$recVer			= 0x0;
 
- 				$recInstance	= 0x6E0;
 
- 				$recType		= 0xF01E;
 
- 				$length			= strlen($innerData);
 
- 				$recVerInstance  = $recVer;
 
- 				$recVerInstance |=	$recInstance << 4;
 
- 				$header = pack('vvV', $recVerInstance, $recType, $length);
 
- 				$this->_data = $header;
 
- 				$this->_data .= $innerData;
 
- 				break;
 
- 			}
 
- 			break;
 
- 		case 'PHPExcel_Shared_Escher_DgContainer':
 
- 			// this is a container record
 
- 			// initialize
 
- 			$innerData = '';
 
- 			// write the dg
 
- 			$recVer			= 0x0;
 
- 			$recInstance	= $this->_object->getDgId();
 
- 			$recType		= 0xF008;
 
- 			$length			= 8;
 
- 			$recVerInstance  = $recVer;
 
- 			$recVerInstance |= $recInstance << 4;
 
- 			$header = pack('vvV', $recVerInstance, $recType, $length);
 
- 			// number of shapes in this drawing (including group shape)
 
- 			$countShapes = count($this->_object->getSpgrContainer()->getChildren());
 
- 			$innerData .= $header . pack('VV', $countShapes, $this->_object->getLastSpId());
 
- 			//$innerData .= $header . pack('VV', 0, 0);
 
- 			// write the spgrContainer
 
- 			if ($spgrContainer = $this->_object->getSpgrContainer()) {
 
- 				$writer = new PHPExcel_Writer_Excel5_Escher($spgrContainer);
 
- 				$innerData .= $writer->close();
 
- 				// get the shape offsets relative to the spgrContainer record
 
- 				$spOffsets = $writer->getSpOffsets();
 
- 				$spTypes   = $writer->getSpTypes();
 
- 				
 
- 				// save the shape offsets relative to dgContainer
 
- 				foreach ($spOffsets as & $spOffset) {
 
- 					$spOffset += 24; // add length of dgContainer header data (8 bytes) plus dg data (16 bytes)
 
- 				}
 
- 				$this->_spOffsets = $spOffsets;
 
- 				$this->_spTypes = $spTypes;
 
- 			}
 
- 			// write the record
 
- 			$recVer			= 0xF;
 
- 			$recInstance	= 0x0000;
 
- 			$recType		= 0xF002;
 
- 			$length			= strlen($innerData);
 
- 			$recVerInstance  = $recVer;
 
- 			$recVerInstance |= $recInstance << 4;
 
- 			$header = pack('vvV', $recVerInstance, $recType, $length);
 
- 			$this->_data = $header . $innerData;
 
- 			break;
 
- 		case 'PHPExcel_Shared_Escher_DgContainer_SpgrContainer':
 
- 			// this is a container record
 
- 			// initialize
 
- 			$innerData = '';
 
- 			// initialize spape offsets
 
- 			$totalSize = 8;
 
- 			$spOffsets = array();
 
- 			$spTypes   = array();
 
- 			// treat the inner data
 
- 			foreach ($this->_object->getChildren() as $spContainer) {
 
- 				$writer = new PHPExcel_Writer_Excel5_Escher($spContainer);
 
- 				$spData = $writer->close();
 
- 				$innerData .= $spData;
 
- 				// save the shape offsets (where new shape records begin)
 
- 				$totalSize += strlen($spData);
 
- 				$spOffsets[] = $totalSize;
 
- 				
 
- 				$spTypes = array_merge($spTypes, $writer->getSpTypes());
 
- 			}
 
- 			// write the record
 
- 			$recVer			= 0xF;
 
- 			$recInstance	= 0x0000;
 
- 			$recType		= 0xF003;
 
- 			$length			= strlen($innerData);
 
- 			$recVerInstance  = $recVer;
 
- 			$recVerInstance |= $recInstance << 4;
 
- 			$header = pack('vvV', $recVerInstance, $recType, $length);
 
- 			$this->_data = $header . $innerData;
 
- 			$this->_spOffsets = $spOffsets;
 
- 			$this->_spTypes = $spTypes;
 
- 			break;
 
- 		case 'PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer':
 
- 			// initialize
 
- 			$data = '';
 
- 			// build the data
 
- 			// write group shape record, if necessary?
 
- 			if ($this->_object->getSpgr()) {
 
- 				$recVer			= 0x1;
 
- 				$recInstance	= 0x0000;
 
- 				$recType		= 0xF009;
 
- 				$length			= 0x00000010;
 
- 				$recVerInstance  = $recVer;
 
- 				$recVerInstance |= $recInstance << 4;
 
- 				$header = pack('vvV', $recVerInstance, $recType, $length);
 
- 				$data .= $header . pack('VVVV', 0,0,0,0);
 
- 			}
 
- 			$this->_spTypes[] = ($this->_object->getSpType());
 
- 			// write the shape record
 
- 			$recVer			= 0x2;
 
- 			$recInstance	= $this->_object->getSpType(); // shape type
 
- 			$recType		= 0xF00A;
 
- 			$length			= 0x00000008;
 
- 			$recVerInstance  = $recVer;
 
- 			$recVerInstance |= $recInstance << 4;
 
- 			$header = pack('vvV', $recVerInstance, $recType, $length);
 
- 			$data .= $header . pack('VV', $this->_object->getSpId(), $this->_object->getSpgr() ? 0x0005 : 0x0A00);
 
- 			// the options
 
- 			if ($this->_object->getOPTCollection()) {
 
- 				$optData = '';
 
- 				$recVer			= 0x3;
 
- 				$recInstance	= count($this->_object->getOPTCollection());
 
- 				$recType		= 0xF00B;
 
- 				foreach ($this->_object->getOPTCollection() as $property => $value) {
 
- 					$optData .= pack('vV', $property, $value);
 
- 				}
 
- 				$length			= strlen($optData);
 
- 				$recVerInstance  = $recVer;
 
- 				$recVerInstance |= $recInstance << 4;
 
- 				$header = pack('vvV', $recVerInstance, $recType, $length);
 
- 				$data .= $header . $optData;
 
- 			}
 
- 			// the client anchor
 
- 			if ($this->_object->getStartCoordinates()) {
 
- 				$clientAnchorData = '';
 
- 				$recVer			= 0x0;
 
- 				$recInstance	= 0x0;
 
- 				$recType		= 0xF010;
 
- 				// start coordinates
 
- 				list($column, $row) = PHPExcel_Cell::coordinateFromString($this->_object->getStartCoordinates());
 
- 				$c1 = PHPExcel_Cell::columnIndexFromString($column) - 1;
 
- 				$r1 = $row - 1;
 
- 				// start offsetX
 
- 				$startOffsetX = $this->_object->getStartOffsetX();
 
- 				// start offsetY
 
- 				$startOffsetY = $this->_object->getStartOffsetY();
 
- 				// end coordinates
 
- 				list($column, $row) = PHPExcel_Cell::coordinateFromString($this->_object->getEndCoordinates());
 
- 				$c2 = PHPExcel_Cell::columnIndexFromString($column) - 1;
 
- 				$r2 = $row - 1;
 
- 				// end offsetX
 
- 				$endOffsetX = $this->_object->getEndOffsetX();
 
- 				// end offsetY
 
- 				$endOffsetY = $this->_object->getEndOffsetY();
 
- 				$clientAnchorData = pack('vvvvvvvvv', $this->_object->getSpFlag(),
 
- 					$c1, $startOffsetX, $r1, $startOffsetY,
 
- 					$c2, $endOffsetX, $r2, $endOffsetY);
 
- 				
 
- 				$length			= strlen($clientAnchorData);
 
- 				$recVerInstance  = $recVer;
 
- 				$recVerInstance |= $recInstance << 4;
 
- 				$header = pack('vvV', $recVerInstance, $recType, $length);
 
- 				$data .= $header . $clientAnchorData;
 
- 			}
 
- 			// the client data, just empty for now
 
- 			if (!$this->_object->getSpgr()) {
 
- 				$clientDataData = '';
 
- 				$recVer			= 0x0;
 
- 				$recInstance	= 0x0;
 
- 				$recType		= 0xF011;
 
- 				$length = strlen($clientDataData);
 
- 				$recVerInstance  = $recVer;
 
- 				$recVerInstance |= $recInstance << 4;
 
- 				$header = pack('vvV', $recVerInstance, $recType, $length);
 
- 				$data .= $header . $clientDataData;
 
- 			}
 
- 			// write the record
 
- 			$recVer			= 0xF;
 
- 			$recInstance	= 0x0000;
 
- 			$recType		= 0xF004;
 
- 			$length			= strlen($data);
 
- 			$recVerInstance  = $recVer;
 
- 			$recVerInstance |= $recInstance << 4;
 
- 			$header = pack('vvV', $recVerInstance, $recType, $length);
 
- 			$this->_data = $header . $data;
 
- 			break;
 
- 		}
 
- 		return $this->_data;
 
- 	}
 
- 	/**
 
- 	 * Gets the shape offsets
 
- 	 *
 
- 	 * @return array
 
- 	 */
 
- 	public function getSpOffsets()
 
- 	{
 
- 		return $this->_spOffsets;
 
- 	}
 
- 	/**
 
- 	 * Gets the shape types
 
- 	 *
 
- 	 * @return array
 
- 	 */
 
- 	public function getSpTypes()
 
- 	{
 
- 		return $this->_spTypes;
 
- 	}
 
- 	
 
- 	
 
- }
 
 
  |