PHPExcel_Writer_Excel2007
[ class tree: PHPExcel_Writer_Excel2007 ] [ index: PHPExcel_Writer_Excel2007 ] [ all elements ]

Source for file Drawing.php

Documentation is available at Drawing.php

  1. <?php
  2. /**
  3.  * PHPExcel
  4.  *
  5.  * Copyright (c) 2006 - 2010 PHPExcel
  6.  *
  7.  * This library is free software; you can redistribute it and/or
  8.  * modify it under the terms of the GNU Lesser General Public
  9.  * License as published by the Free Software Foundation; either
  10.  * version 2.1 of the License, or (at your option) any later version.
  11.  *
  12.  * This library is distributed in the hope that it will be useful,
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15.  * Lesser General Public License for more details.
  16.  *
  17.  * You should have received a copy of the GNU Lesser General Public
  18.  * License along with this library; if not, write to the Free Software
  19.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  20.  *
  21.  * @category   PHPExcel
  22.  * @package    PHPExcel_Writer_Excel2007
  23.  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  24.  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
  25.  * @version    1.7.2, 2010-01-11
  26.  */
  27.  
  28.  
  29. /** PHPExcel root directory */
  30. if (!defined('PHPEXCEL_ROOT')) {
  31.     /**
  32.      * @ignore
  33.      */
  34.     define('PHPEXCEL_ROOT'dirname(__FILE__'/../../../');
  35. }
  36.  
  37. /** PHPExcel */
  38. require_once PHPEXCEL_ROOT 'PHPExcel.php';
  39.  
  40. /** PHPExcel_Writer_Excel2007 */
  41. require_once PHPEXCEL_ROOT 'PHPExcel/Writer/Excel2007.php';
  42.  
  43. /** PHPExcel_Writer_Excel2007_WriterPart */
  44. require_once PHPEXCEL_ROOT 'PHPExcel/Writer/Excel2007/WriterPart.php';
  45.  
  46. /** PHPExcel_Worksheet_BaseDrawing */
  47. require_once PHPEXCEL_ROOT 'PHPExcel/Worksheet/BaseDrawing.php';
  48.  
  49. /** PHPExcel_Worksheet_Drawing */
  50. require_once PHPEXCEL_ROOT 'PHPExcel/Worksheet/Drawing.php';
  51.  
  52. /** PHPExcel_Worksheet_MemoryDrawing */
  53. require_once PHPEXCEL_ROOT 'PHPExcel/Worksheet/MemoryDrawing.php';
  54.  
  55. /** PHPExcel_Worksheet */
  56. require_once PHPEXCEL_ROOT 'PHPExcel/Worksheet.php';
  57.  
  58. /** PHPExcel_Cell */
  59. require_once PHPEXCEL_ROOT 'PHPExcel/Cell.php';
  60.  
  61. /** PHPExcel_Shared_Drawing */
  62. require_once PHPEXCEL_ROOT 'PHPExcel/Shared/Drawing.php';
  63.  
  64. /** PHPExcel_Shared_XMLWriter */
  65. require_once PHPEXCEL_ROOT 'PHPExcel/Shared/XMLWriter.php';
  66.  
  67.  
  68. /**
  69.  * PHPExcel_Writer_Excel2007_Drawing
  70.  *
  71.  * @category   PHPExcel
  72.  * @package    PHPExcel_Writer_Excel2007
  73.  * @copyright  Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  74.  */
  75. {
  76.     /**
  77.      * Write drawings to XML format
  78.      *
  79.      * @param     PHPExcel_Worksheet                $pWorksheet 
  80.      * @return     string                                 XML Output
  81.      * @throws     Exception
  82.      */
  83.     public function writeDrawings(PHPExcel_Worksheet $pWorksheet null)
  84.     {
  85.         // Create XML writer
  86.         $objWriter null;
  87.         if ($this->getParentWriter()->getUseDiskCaching()) {
  88.             $objWriter new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK$this->getParentWriter()->getDiskCachingDirectory());
  89.         else {
  90.             $objWriter new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY);
  91.         }
  92.  
  93.         // XML header
  94.         $objWriter->startDocument('1.0','UTF-8','yes');
  95.  
  96.         // xdr:wsDr
  97.         $objWriter->startElement('xdr:wsDr');
  98.         $objWriter->writeAttribute('xmlns:xdr''http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing');
  99.         $objWriter->writeAttribute('xmlns:a''http://schemas.openxmlformats.org/drawingml/2006/main');
  100.  
  101.             // Loop through images and write drawings
  102.             $i 1;
  103.             $iterator $pWorksheet->getDrawingCollection()->getIterator();
  104.             while ($iterator->valid()) {
  105.                 $this->_writeDrawing($objWriter$iterator->current()$i);
  106.  
  107.                 $iterator->next();
  108.                 ++$i;
  109.             }
  110.  
  111.         $objWriter->endElement();
  112.  
  113.         // Return
  114.         return $objWriter->getData();
  115.     }
  116.  
  117.     /**
  118.      * Write drawings to XML format
  119.      *
  120.      * @param     PHPExcel_Shared_XMLWriter            $objWriter         XML Writer
  121.      * @param     PHPExcel_Worksheet_BaseDrawing        $pDrawing 
  122.      * @param     int                                    $pRelationId 
  123.      * @throws     Exception
  124.      */
  125.     public function _writeDrawing(PHPExcel_Shared_XMLWriter $objWriter nullPHPExcel_Worksheet_BaseDrawing $pDrawing null$pRelationId = -1)
  126.     {
  127.         if ($pRelationId >= 0{
  128.             // xdr:oneCellAnchor
  129.             $objWriter->startElement('xdr:oneCellAnchor');
  130.                 // Image location
  131.                 $aCoordinates         PHPExcel_Cell::coordinateFromString($pDrawing->getCoordinates());
  132.                 $aCoordinates[0]     PHPExcel_Cell::columnIndexFromString($aCoordinates[0]);
  133.  
  134.                 // xdr:from
  135.                 $objWriter->startElement('xdr:from');
  136.                     $objWriter->writeElement('xdr:col'$aCoordinates[01);
  137.                     $objWriter->writeElement('xdr:colOff'PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getOffsetX()));
  138.                     $objWriter->writeElement('xdr:row'$aCoordinates[11);
  139.                     $objWriter->writeElement('xdr:rowOff'PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getOffsetY()));
  140.                 $objWriter->endElement();
  141.  
  142.                 // xdr:ext
  143.                 $objWriter->startElement('xdr:ext');
  144.                     $objWriter->writeAttribute('cx'PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getWidth()));
  145.                     $objWriter->writeAttribute('cy'PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getHeight()));
  146.                 $objWriter->endElement();
  147.  
  148.                 // xdr:pic
  149.                 $objWriter->startElement('xdr:pic');
  150.  
  151.                     // xdr:nvPicPr
  152.                     $objWriter->startElement('xdr:nvPicPr');
  153.  
  154.                         // xdr:cNvPr
  155.                         $objWriter->startElement('xdr:cNvPr');
  156.                         $objWriter->writeAttribute('id'$pRelationId);
  157.                         $objWriter->writeAttribute('name'$pDrawing->getName());
  158.                         $objWriter->writeAttribute('descr'$pDrawing->getDescription());
  159.                         $objWriter->endElement();
  160.  
  161.                         // xdr:cNvPicPr
  162.                         $objWriter->startElement('xdr:cNvPicPr');
  163.  
  164.                             // a:picLocks
  165.                             $objWriter->startElement('a:picLocks');
  166.                             $objWriter->writeAttribute('noChangeAspect''1');
  167.                             $objWriter->endElement();
  168.  
  169.                         $objWriter->endElement();
  170.  
  171.                     $objWriter->endElement();
  172.  
  173.                     // xdr:blipFill
  174.                     $objWriter->startElement('xdr:blipFill');
  175.  
  176.                         // a:blip
  177.                         $objWriter->startElement('a:blip');
  178.                         $objWriter->writeAttribute('xmlns:r''http://schemas.openxmlformats.org/officeDocument/2006/relationships');
  179.                         $objWriter->writeAttribute('r:embed''rId' $pRelationId);
  180.                         $objWriter->endElement();
  181.  
  182.                         // a:stretch
  183.                         $objWriter->startElement('a:stretch');
  184.                             $objWriter->writeElement('a:fillRect'null);
  185.                         $objWriter->endElement();
  186.  
  187.                     $objWriter->endElement();
  188.  
  189.                     // xdr:spPr
  190.                     $objWriter->startElement('xdr:spPr');
  191.  
  192.                         // a:xfrm
  193.                         $objWriter->startElement('a:xfrm');
  194.                         $objWriter->writeAttribute('rot'PHPExcel_Shared_Drawing::degreesToAngle($pDrawing->getRotation()));
  195.                         $objWriter->endElement();
  196.  
  197.                         // a:prstGeom
  198.                         $objWriter->startElement('a:prstGeom');
  199.                         $objWriter->writeAttribute('prst''rect');
  200.  
  201.                             // a:avLst
  202.                             $objWriter->writeElement('a:avLst'null);
  203.  
  204.                         $objWriter->endElement();
  205.  
  206.                         // a:solidFill
  207.                         $objWriter->startElement('a:solidFill');
  208.  
  209.                             // a:srgbClr
  210.                             $objWriter->startElement('a:srgbClr');
  211.                             $objWriter->writeAttribute('val''FFFFFF');
  212.  
  213. /* SHADE
  214.                                 // a:shade
  215.                                 $objWriter->startElement('a:shade');
  216.                                 $objWriter->writeAttribute('val', '85000');
  217.                                 $objWriter->endElement();
  218. */
  219.  
  220.                             $objWriter->endElement();
  221.  
  222.                         $objWriter->endElement();
  223. /*
  224.                         // a:ln
  225.                         $objWriter->startElement('a:ln');
  226.                         $objWriter->writeAttribute('w', '88900');
  227.                         $objWriter->writeAttribute('cap', 'sq');
  228.  
  229.                             // a:solidFill
  230.                             $objWriter->startElement('a:solidFill');
  231.  
  232.                                 // a:srgbClr
  233.                                 $objWriter->startElement('a:srgbClr');
  234.                                 $objWriter->writeAttribute('val', 'FFFFFF');
  235.                                 $objWriter->endElement();
  236.  
  237.                             $objWriter->endElement();
  238.  
  239.                             // a:miter
  240.                             $objWriter->startElement('a:miter');
  241.                             $objWriter->writeAttribute('lim', '800000');
  242.                             $objWriter->endElement();
  243.  
  244.                         $objWriter->endElement();
  245. */
  246.  
  247.                         if ($pDrawing->getShadow()->getVisible()) {
  248.                             // a:effectLst
  249.                             $objWriter->startElement('a:effectLst');
  250.  
  251.                                 // a:outerShdw
  252.                                 $objWriter->startElement('a:outerShdw');
  253.                                 $objWriter->writeAttribute('blurRad',         PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getShadow()->getBlurRadius()));
  254.                                 $objWriter->writeAttribute('dist',            PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getShadow()->getDistance()));
  255.                                 $objWriter->writeAttribute('dir',            PHPExcel_Shared_Drawing::degreesToAngle($pDrawing->getShadow()->getDirection()));
  256.                                 $objWriter->writeAttribute('algn',            $pDrawing->getShadow()->getAlignment());
  257.                                 $objWriter->writeAttribute('rotWithShape',     '0');
  258.  
  259.                                     // a:srgbClr
  260.                                     $objWriter->startElement('a:srgbClr');
  261.                                     $objWriter->writeAttribute('val',        $pDrawing->getShadow()->getColor()->getRGB());
  262.  
  263.                                         // a:alpha
  264.                                         $objWriter->startElement('a:alpha');
  265.                                         $objWriter->writeAttribute('val',     $pDrawing->getShadow()->getAlpha(1000);
  266.                                         $objWriter->endElement();
  267.  
  268.                                     $objWriter->endElement();
  269.  
  270.                                 $objWriter->endElement();
  271.  
  272.                             $objWriter->endElement();
  273.                         }
  274. /*
  275.  
  276.                         // a:scene3d
  277.                         $objWriter->startElement('a:scene3d');
  278.  
  279.                             // a:camera
  280.                             $objWriter->startElement('a:camera');
  281.                             $objWriter->writeAttribute('prst', 'orthographicFront');
  282.                             $objWriter->endElement();
  283.  
  284.                             // a:lightRig
  285.                             $objWriter->startElement('a:lightRig');
  286.                             $objWriter->writeAttribute('rig', 'twoPt');
  287.                             $objWriter->writeAttribute('dir', 't');
  288.  
  289.                                 // a:rot
  290.                                 $objWriter->startElement('a:rot');
  291.                                 $objWriter->writeAttribute('lat', '0');
  292.                                 $objWriter->writeAttribute('lon', '0');
  293.                                 $objWriter->writeAttribute('rev', '0');
  294.                                 $objWriter->endElement();
  295.  
  296.                             $objWriter->endElement();
  297.  
  298.                         $objWriter->endElement();
  299. */
  300. /*
  301.                         // a:sp3d
  302.                         $objWriter->startElement('a:sp3d');
  303.  
  304.                             // a:bevelT
  305.                             $objWriter->startElement('a:bevelT');
  306.                             $objWriter->writeAttribute('w', '25400');
  307.                             $objWriter->writeAttribute('h', '19050');
  308.                             $objWriter->endElement();
  309.  
  310.                             // a:contourClr
  311.                             $objWriter->startElement('a:contourClr');
  312.  
  313.                                 // a:srgbClr
  314.                                 $objWriter->startElement('a:srgbClr');
  315.                                 $objWriter->writeAttribute('val', 'FFFFFF');
  316.                                 $objWriter->endElement();
  317.  
  318.                             $objWriter->endElement();
  319.  
  320.                         $objWriter->endElement();
  321. */
  322.                     $objWriter->endElement();
  323.  
  324.                 $objWriter->endElement();
  325.  
  326.                 // xdr:clientData
  327.                 $objWriter->writeElement('xdr:clientData'null);
  328.  
  329.             $objWriter->endElement();
  330.         else {
  331.             throw new Exception("Invalid parameters passed.");
  332.         }
  333.     }
  334.  
  335.     /**
  336.      * Write VML header/footer images to XML format
  337.      *
  338.      * @param     PHPExcel_Worksheet                $pWorksheet 
  339.      * @return     string                                 XML Output
  340.      * @throws     Exception
  341.      */
  342.     public function writeVMLHeaderFooterImages(PHPExcel_Worksheet $pWorksheet null)
  343.     {
  344.         // Create XML writer
  345.         $objWriter null;
  346.         if ($this->getParentWriter()->getUseDiskCaching()) {
  347.             $objWriter new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK$this->getParentWriter()->getDiskCachingDirectory());
  348.         else {
  349.             $objWriter new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY);
  350.         }
  351.  
  352.         // XML header
  353.         $objWriter->startDocument('1.0','UTF-8','yes');
  354.  
  355.           // Header/footer images
  356.           $images $pWorksheet->getHeaderFooter()->getImages();
  357.  
  358.         // xml
  359.         $objWriter->startElement('xml');
  360.         $objWriter->writeAttribute('xmlns:v''urn:schemas-microsoft-com:vml');
  361.         $objWriter->writeAttribute('xmlns:o''urn:schemas-microsoft-com:office:office');
  362.         $objWriter->writeAttribute('xmlns:x''urn:schemas-microsoft-com:office:excel');
  363.  
  364.             // o:shapelayout
  365.             $objWriter->startElement('o:shapelayout');
  366.             $objWriter->writeAttribute('v:ext',         'edit');
  367.  
  368.                 // o:idmap
  369.                 $objWriter->startElement('o:idmap');
  370.                 $objWriter->writeAttribute('v:ext',     'edit');
  371.                 $objWriter->writeAttribute('data',         '1');
  372.                 $objWriter->endElement();
  373.  
  374.             $objWriter->endElement();
  375.  
  376.             // v:shapetype
  377.             $objWriter->startElement('v:shapetype');
  378.             $objWriter->writeAttribute('id',                     '_x0000_t75');
  379.             $objWriter->writeAttribute('coordsize',             '21600,21600');
  380.             $objWriter->writeAttribute('o:spt',                 '75');
  381.             $objWriter->writeAttribute('o:preferrelative',         't');
  382.             $objWriter->writeAttribute('path',                     'm@4@5l@4@11@9@11@9@5xe');
  383.             $objWriter->writeAttribute('filled',                 'f');
  384.             $objWriter->writeAttribute('stroked',                 'f');
  385.  
  386.                 // v:stroke
  387.                 $objWriter->startElement('v:stroke');
  388.                 $objWriter->writeAttribute('joinstyle',         'miter');
  389.                 $objWriter->endElement();
  390.  
  391.                 // v:formulas
  392.                 $objWriter->startElement('v:formulas');
  393.  
  394.                     // v:f
  395.                     $objWriter->startElement('v:f');
  396.                     $objWriter->writeAttribute('eqn',         'if lineDrawn pixelLineWidth 0');
  397.                     $objWriter->endElement();
  398.  
  399.                     // v:f
  400.                     $objWriter->startElement('v:f');
  401.                     $objWriter->writeAttribute('eqn',         'sum @0 1 0');
  402.                     $objWriter->endElement();
  403.  
  404.                     // v:f
  405.                     $objWriter->startElement('v:f');
  406.                     $objWriter->writeAttribute('eqn',         'sum 0 0 @1');
  407.                     $objWriter->endElement();
  408.  
  409.                     // v:f
  410.                     $objWriter->startElement('v:f');
  411.                     $objWriter->writeAttribute('eqn',         'prod @2 1 2');
  412.                     $objWriter->endElement();
  413.  
  414.                     // v:f
  415.                     $objWriter->startElement('v:f');
  416.                     $objWriter->writeAttribute('eqn',         'prod @3 21600 pixelWidth');
  417.                     $objWriter->endElement();
  418.  
  419.                     // v:f
  420.                     $objWriter->startElement('v:f');
  421.                     $objWriter->writeAttribute('eqn',         'prod @3 21600 pixelHeight');
  422.                     $objWriter->endElement();
  423.  
  424.                     // v:f
  425.                     $objWriter->startElement('v:f');
  426.                     $objWriter->writeAttribute('eqn',         'sum @0 0 1');
  427.                     $objWriter->endElement();
  428.  
  429.                     // v:f
  430.                     $objWriter->startElement('v:f');
  431.                     $objWriter->writeAttribute('eqn',         'prod @6 1 2');
  432.                     $objWriter->endElement();
  433.  
  434.                     // v:f
  435.                     $objWriter->startElement('v:f');
  436.                     $objWriter->writeAttribute('eqn',         'prod @7 21600 pixelWidth');
  437.                     $objWriter->endElement();
  438.  
  439.                     // v:f
  440.                     $objWriter->startElement('v:f');
  441.                     $objWriter->writeAttribute('eqn',         'sum @8 21600 0');
  442.                     $objWriter->endElement();
  443.  
  444.                     // v:f
  445.                     $objWriter->startElement('v:f');
  446.                     $objWriter->writeAttribute('eqn',         'prod @7 21600 pixelHeight');
  447.                     $objWriter->endElement();
  448.  
  449.                     // v:f
  450.                     $objWriter->startElement('v:f');
  451.                     $objWriter->writeAttribute('eqn',         'sum @10 21600 0');
  452.                     $objWriter->endElement();
  453.  
  454.                 $objWriter->endElement();
  455.  
  456.                 // v:path
  457.                 $objWriter->startElement('v:path');
  458.                 $objWriter->writeAttribute('o:extrusionok',     'f');
  459.                 $objWriter->writeAttribute('gradientshapeok',     't');
  460.                 $objWriter->writeAttribute('o:connecttype',     'rect');
  461.                 $objWriter->endElement();
  462.  
  463.                 // o:lock
  464.                 $objWriter->startElement('o:lock');
  465.                 $objWriter->writeAttribute('v:ext',             'edit');
  466.                 $objWriter->writeAttribute('aspectratio',         't');
  467.                 $objWriter->endElement();
  468.  
  469.             $objWriter->endElement();
  470.  
  471.             // Loop through images
  472.             foreach ($images as $key => $value{
  473.                 $this->_writeVMLHeaderFooterImage($objWriter$key$value);
  474.             }
  475.  
  476.         $objWriter->endElement();
  477.  
  478.         // Return
  479.         return $objWriter->getData();
  480.     }
  481.  
  482.     /**
  483.      * Write VML comment to XML format
  484.      *
  485.      * @param     PHPExcel_Shared_XMLWriter        $objWriter             XML Writer
  486.      * @param    string                            $pReference            Reference
  487.      * @param     PHPExcel_Worksheet_HeaderFooterDrawing    $pImage        Image
  488.      * @throws     Exception
  489.      */
  490.     public function _writeVMLHeaderFooterImage(PHPExcel_Shared_XMLWriter $objWriter null$pReference ''PHPExcel_Worksheet_HeaderFooterDrawing $pImage null)
  491.     {
  492.         // Calculate object id
  493.         preg_match('{(\d+)}'md5($pReference)$m);
  494.         $id 1500 (substr($m[1]021);
  495.  
  496.         // Calculate offset
  497.         $width $pImage->getWidth();
  498.         $height $pImage->getHeight();
  499.         $marginLeft $pImage->getOffsetX();
  500.         $marginTop $pImage->getOffsetY();
  501.  
  502.         // v:shape
  503.         $objWriter->startElement('v:shape');
  504.         $objWriter->writeAttribute('id',             $pReference);
  505.         $objWriter->writeAttribute('o:spid',         '_x0000_s' $id);
  506.         $objWriter->writeAttribute('type',             '#_x0000_t75');
  507.         $objWriter->writeAttribute('style',         "position:absolute;margin-left:{$marginLeft}px;margin-top:{$marginTop}px;width:{$width}px;height:{$height}px;z-index:1");
  508.  
  509.             // v:imagedata
  510.             $objWriter->startElement('v:imagedata');
  511.             $objWriter->writeAttribute('o:relid',         'rId' $pReference);
  512.             $objWriter->writeAttribute('o:title',         $pImage->getName());
  513.             $objWriter->endElement();
  514.  
  515.             // o:lock
  516.             $objWriter->startElement('o:lock');
  517.             $objWriter->writeAttribute('v:ext',         'edit');
  518.             $objWriter->writeAttribute('rotation',         't');
  519.             $objWriter->endElement();
  520.  
  521.         $objWriter->endElement();
  522.     }
  523.  
  524.  
  525.     /**
  526.      * Get an array of all drawings
  527.      *
  528.      * @param     PHPExcel                            $pPHPExcel 
  529.      * @return     PHPExcel_Worksheet_Drawing[]        All drawings in PHPExcel
  530.      * @throws     Exception
  531.      */
  532.     public function allDrawings(PHPExcel $pPHPExcel null)
  533.     {
  534.         // Get an array of all drawings
  535.         $aDrawings    array();
  536.  
  537.         // Loop through PHPExcel
  538.         $sheetCount $pPHPExcel->getSheetCount();
  539.         for ($i 0$i $sheetCount++$i{
  540.             // Loop through images and add to array
  541.             $iterator $pPHPExcel->getSheet($i)->getDrawingCollection()->getIterator();
  542.             while ($iterator->valid()) {
  543.                 $aDrawings[$iterator->current();
  544.  
  545.                   $iterator->next();
  546.             }
  547.         }
  548.  
  549.         return $aDrawings;
  550.     }
  551. }

Documentation generated on Mon, 11 Jan 2010 08:08:03 +0100 by phpDocumentor 1.4.1