"world";
}
=] :)
You set these variables to override defaults (usually
set inside your config.php before including the recipe):
$PmGraphVizCache = Path to cache dir ($FarmD/pub/pmgraphviz)
$PmGraphVizDotPgm = Path to graphviz dot (/usr/bin/dot)
$PmGraphVizWebCache = Url to cache dir ($FarmPubUrl/pmgraphviz);
-<0.01: Initial release.
-<0.02: Bug fixes, use Keep, added client side image map handling.
->Variables:
[=
mapname Set this to the graphname if you include URL's for image mapping.
=]
***********************************************************/
/* pmgraphviz */
Markup('pmgraphviz','directives',"/^\(:pmgraphviz[ ]*(.*?) -- (.*?):\)\s*$/e",
"pmgraphviz('$1','$2')");
function pmgraphviz($opts, $dotcmds) {
global $KPV, $KeepToken, $FarmD, $FarmPubDirUrl, $pagename, $MaxIncludes, $HTMLHeaderFmt, $PmGraphicVizCache, $PmGraphVizDotPgm, $PmGraphVizWebCache, $PmGraphVizConvertPgm;
SDV($PmGraphVizCache, $FarmD.'/pub/pmgraphviz');
SDV($PmGraphVizDotPgm, '/usr/bin/dot');
SDV($PmGraphVizWebCache, $FarmPubDirUrl.'/pmgraphviz');
// If PmGraphVizConvertPgm is empty, then don't process with convert
SDV($PmGraphVizConvertPgm, '/usr/bin/convert');
// Enabling debug will write the dot file to /tmp/pmgraphviz.out
$debug=0;
// Problem scaling using ImageMagick convert... disable this for now.
$convert=0;
if ($PmGraphVizConvertPgm != '')
$convert=0;
// Determine this Group
//
$group = FmtPageName('$Group',$pagename);
$name = FmtPageName('$Name',$pagename);
// Process markup arguments first
//
$defaults = array(
'typeext'=>'png',
'unsafe'=>'false',
'overrides'=>'true',
'mapname'=>'_anonymous_0'
);
$args = array_merge($defaults, ParseArgs($opts));
$urladd='';
// Allows overrides=false in the :pmgraphviz: markup to disallow
// settings on the URL line.
//
$overrides = $args['overrides'];
if ($overrides == 'false') {
$_GET = NULL;
}
$typeext = isset($_GET['typeext']) ? $_GET['typeext'] :
$args['typeext'];
if (isset($_GET['typeext']))
$urladd.="&typeext=".urlencode($_GET['typeext']);
// For unsafe (?) things
// Like handling creating of arbitrarily named files from the
// url line.
$unsafe=$args['unsafe'];
if ($unsafe == 'true') {
$mapname = isset($_GET['mapname']) ? $_GET['mapname'] :
$args['mapname'];
if (isset($_GET['mapname']))
$urladd.="&mapname=".urlencode($_GET['mapname']);
} else {
$mapname=$args['mapname'];
}
$out='';
// Compute the md5 of the opts plus dotcmds, if we
// find a match in the cache, then return back
// the graphic file there.
//
// Files may collect there over time. You may
// want to create a skulking routine to clean
// out old entries in order to remove orphans.
$dotcmds = preg_replace( "/$KeepToken(\\d+?)$KeepToken/e", '$KPV[$1]', $dotcmds);
$dotcmds = preg_replace( "/>/", ">", $dotcmds);
$dotcmds = preg_replace( "/</", "<", $dotcmds);
$checkmd5 = md5("$opts"."$dotcmds");
$filename = $checkmd5.".".$typeext;
if (is_readable($PmGraphVizCache."/".$filename)) {
$out.="";
$html_map=file_get_contents($PmGraphVizCache."/".$filename."-map");
$out.="\n".$html_map;
return Keep($out);
}
// Write dot file if debugging enabled.
//
if ($debug) {
if ($f = fopen("/tmp/pmgraphviz.out", "w")) {
fputs($f, "$dotcmds");
pclose($f);
}
}
// If we didn't return there, then we regen
// the graphic.
if (preg_match("/^http/", $PmGraphVizDotPgm)) {
// Using a public server, no support for maps (yet)
$dotfn = $checkmd5 .".dot";
$fp = fopen($PmGraphVizCache."/".$dotfn, "w");
fputs($fp, "$dotcmds");
fclose($fp);
$doturl = $PmGraphVizWebCache."/".$dotfn.".dot.".$typeext;
$imgurl = $PmGraphVizDotPgm .'/'. $doturl;
$out = "";
return Keep($out);
}
// Produce client side image map
//
if ($pf = popen("$PmGraphVizDotPgm -Tcmapx -o $PmGraphVizCache/$filename-map 2>&1",'wb')) {
fputs($pf, "$dotcmds");
pclose($pf);
}
// Produce image
//
// If convert worked right, we would get antialiasing.
//
$html_map=file_get_contents($PmGraphVizCache."/".$filename."-map");
if ($convert) {
$dotpgmline="$PmGraphVizDotPgm -Tps | $PmGraphVizConvertPgm - $PmGraphVizCache/$filename";
} else {
$dotpgmline="$PmGraphVizDotPgm -T $typeext -o $PmGraphVizCache/$filename 2>&1";
}
if ($pf = popen($dotpgmline,'wb')) {
fputs($pf, "$dotcmds");
pclose($pf);
if (is_readable($PmGraphVizCache."/".$filename)) {
$out.="";
$out.="\n".$html_map;
return Keep($out);
} else {
return "!! pmgraphvis: Error\n";
}
}
// don't want to make it here.
return "!! pmgraphvis: How did I get here?\n";
}
?>