User talk:Hummel-riegel
Add topicAppearance
GraphViz-Version by Bytesmiths
[edit]- Date
- 2011-01-18
Hi, you left a note on my talk page about the GraphVis extension.
Here is the version I modified and use. Hope this is helpful to you!
<?php
# CoffMan (http://www.wickle.com) code adapted from timeline extension.
# JWS_050315: added support for other Graphviz layout engines.
class GraphVizSettings {
var $execPath;
};
$wgGraphVizSettings = new GraphVizSettings;
$wgGraphVizSettings->execPath = '/sw/bin/';
$wgExtensionFunctions[] = 'wfGraphVizExtension';
function wfGraphVizExtension() {
global $wgParser;
$wgParser->setHook('graphviz', 'renderGraphviz');
$wgParser->setHook('graphvizl', 'renderGraphvizLeft');
$wgParser->setHook('graphvizr', 'renderGraphvizRight');
}
function renderGraphvizLeft($dotsrc) {
return renderGraphviz($dotsrc, 'style="float:left"');
}
function renderGraphvizRight($dotsrc) {
return renderGraphviz($dotsrc, 'style="float:right"');
}
function renderGraphviz($dotsrc, $style='')
{
$cmd = '';
global $wgUploadDirectory, $wgUploadPath, $IP, $wgGraphVizSettings, $wgArticlePath, $wgTmpDirectory;
$hash = md5($dotsrc);
$dest = $wgUploadDirectory . '/graphviz/';
if(!is_dir($dest)) mkdir($dest, 0777);
if(!is_dir($wgTmpDirectory)) mkdir($wgTmpDirectory, 0777);
if(!strncmp($dotsrc, '#!/', 3))
$cmd = substr($dotsrc, 2, strpos($dotsrc, '
') -2);
switch($cmd) {
case $wgGraphVizSettings->execPath . 'circo':
case $wgGraphVizSettings->execPath . 'dot':
case $wgGraphVizSettings->execPath . 'fdp':
case $wgGraphVizSettings->execPath . 'neato':
case $wgGraphVizSettings->execPath . 'twopi':
break;
default:
$cmd = $wgGraphVizSettings->execPath . 'dot';
}
$fname = $dest . $hash;
if(!(file_exists($fname . '.png') || file_exists($fname . '.err')))
{
$handle = fopen($fname, 'w');
fwrite($handle, $dotsrc);
fclose($handle);
$cmdline = wfEscapeShellArg($cmd)
. ' -Tpng -o '
. wfEscapeShellArg($fname . '.png')
. ' '
. wfEscapeShellArg($fname);
$cmdlinemap = wfEscapeShellArg($cmd)
. ' -Tcmapx -o '
. wfEscapeShellArg($fname. '.map')
. ' '
. wfEscapeShellArg($fname);
$ret = shell_exec($cmdline);
$ret = `{$cmdlinemap}`;
unlink($fname);
}
@$err=file_get_contents($fname . '.err');
if($err != '') {
$txt = "<div id=\"toc\"><tt>$err</tt></div>";
} else {
@$map = file_get_contents($fname . '.map');
$map = preg_replace('#<ma(.*)>#', ' ', $map);
if(substr(php_uname(), 0, 7) == 'Windows') {
$ext = 'gif';
} else {
$ext = 'png';
}
$txt = "<map id=\"$hash\" name=\"$hash\">{$map}"
. "<img usemap=\"#{$hash}\" src=\"{$wgUploadPath}/graphviz/{$hash}.{$ext}\" {$style}>";
}
return $txt;
}
?>