예제 #1
0
파일: Graph.php 프로젝트: hjr3/Docblox
 /**
  * Generates an array containing class to path references and then invokes the Source specific method.
  *
  * @param DOMDocument                        $structure
  * @param DocBlox_Transformer_Transformation $transformation
  *
  * @return void
  */
 public function transform(DOMDocument $structure, DocBlox_Transformer_Transformation $transformation)
 {
     // NOTE: the -V flag sends output using STDERR and STDOUT
     exec('dot -V 2>&1', $output, $error);
     if ($error != 0) {
         $this->log('Unable to find the `dot` command of the GraphViz package. Is GraphViz correctly installed and present in your path?', Zend_Log::ERR);
         return;
     }
     // add to classes
     $xpath = new DOMXPath($structure);
     $qry = $xpath->query('//class[full_name]/..');
     $class_paths = array();
     /** @var DOMElement $element */
     foreach ($qry as $element) {
         $path = $element->getAttribute('generated-path');
         foreach ($element->getElementsByTagName('class') as $class) {
             $class_paths[$class->getElementsByTagName('full_name')->item(0)->nodeValue] = $path;
         }
     }
     // add to interfaces
     $qry = $xpath->query('//interface[full_name]/..');
     /** @var DOMElement $element */
     foreach ($qry as $element) {
         $path = $element->getAttribute('generated-path');
         foreach ($element->getElementsByTagName('interface') as $class) {
             $class_paths[$class->getElementsByTagName('full_name')->item(0)->nodeValue] = $path;
         }
     }
     $this->class_paths = $class_paths;
     $type_method = 'process' . ucfirst($transformation->getSource());
     $this->{$type_method}($structure, $transformation);
 }
예제 #2
0
파일: Pdf.php 프로젝트: hjr3/Docblox
 /**
  * Calls the wkhtmltopdf executable to generate a PDF.
  *
  * @param DOMDocument            $structure
  * @param DocBlox_Transformer_Transformation $transformation
  *
  * @return void
  */
 public function transform(DOMDocument $structure, DocBlox_Transformer_Transformation $transformation)
 {
     $artifact = $transformation->getTransformer()->getTarget() . DIRECTORY_SEPARATOR . $transformation->getArtifact();
     $transformation->setArtifact($artifact);
     $source = substr($transformation->getSource(), 0, 1) != DIRECTORY_SEPARATOR ? $transformation->getTransformer()->getTarget() . DIRECTORY_SEPARATOR . $transformation->getSource() : $transformation->getSource();
     $transformation->setSource($source);
     $options = '';
     if ($transformation->getParameter('toc', 'false') == 'true') {
         $options = ' toc ';
     }
     // TODO: add parameter to provide a cover HTML
     // TODO: add a parameter to provide a header HTML
     // TODO: add a parameter to provide a footer HTML
     // first try if there is a wkhtmltopdf in the global path, this helps windows users
     exec('wkhtmltopdf ' . $options . ' ' . $transformation->getSource() . ' ' . $transformation->getArtifact() . ' 2>&1', $output, $error);
     $output = implode(PHP_EOL, $output);
     // this notice is linux specific; if it is found no global wkhtmltopdf was installed; try the one which is included
     // with docblox
     if (strpos($output, 'wkhtmltopdf: not found') !== false) {
         exec($this->getConfig()->paths->application . '/src/wkhtmltopdf/wkhtmltopdf-i386 ' . $options . ' ' . $transformation->getSource() . ' ' . $transformation->getArtifact() . ' 2>&1', $output, $error);
         $output = implode(PHP_EOL, $output) . PHP_EOL;
     }
     // log message and output
     $this->log('Generating PDF file ' . $transformation->getArtifact() . ' from ' . $transformation->getSource());
     $this->log($output, $error == 0 ? DocBlox_Core_Log::INFO : DocBlox_Core_Log::CRIT);
     // CRASH!
     if ($error != 0) {
         throw new Exception('Conversion to PDF failed, see output for details');
     }
 }