Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 2 |
CRAP | |
89.47% |
17 / 19 |
Svg | |
0.00% |
0 / 1 |
|
0.00% |
0 / 2 |
4.02 | |
89.47% |
17 / 19 |
checkGraphviz() | |
0.00% |
0 / 1 |
2.06 | |
75.00% |
3 / 4 |
|||
export() | |
0.00% |
0 / 1 |
2.00 | |
93.33% |
14 / 15 |
<?php | |
/* | |
* Mondrian | |
*/ | |
namespace Trismegiste\Mondrian\Transform\Format; | |
/** | |
* SvgExporter is an exporter to svg format | |
* | |
* Use "dot" from GraphViz as a renderer from dot format to svg format | |
*/ | |
class Svg extends Graphviz | |
{ | |
private function checkGraphviz() | |
{ | |
$output = shell_exec('dot -V 2>&1'); // for all platforms | |
if (!preg_match('#graphviz version#', $output)) { | |
throw new \RuntimeException('Graphviz is not installed on this computer'); | |
} | |
} | |
public function export() | |
{ | |
$this->checkGraphviz(); | |
$descriptorspec = array( | |
0 => array("pipe", "r"), // stdin is a pipe | |
1 => array("pipe", "w"), // stdout is a pipe | |
2 => array("pipe", "a") // stderr is also a pipe | |
); | |
$process = proc_open('dot -Tsvg', $descriptorspec, $pipes); | |
if (is_resource($process)) { | |
fwrite($pipes[0], parent::export()); | |
fclose($pipes[0]); | |
$newFile = stream_get_contents($pipes[1]); | |
fclose($pipes[1]); | |
fclose($pipes[2]); | |
proc_close($process); | |
return $newFile; | |
} | |
} | |
} |