#!/usr/bin/env perl
die
"Usage: $0 outfile\n"
if
!
@ARGV
;
use
PDL::PP
qw(math.pd Math PDL::Math)
;
PDL::PP::pp_def(
'dummy'
,
Code
=>
''
,
Pars
=>
'a()'
);
my
$g
= Graph->new;
$PDL::PP::deftbl
=
$PDL::PP::deftbl
;
for
my
$r
(@{
$PDL::PP::deftbl
}) {
my
$r_addr
= refaddr
$r
;
my
$r_label
=
ref
(
$r
) =~ s/^PDL::PP:://r;
$g
->set_vertex_attribute(
$r_addr
,
graphviz
=> {
shape
=>
'box'
,
label
=>
$r_label
});
$g
->add_edge(
$_
,
$r_addr
)
for
@{
$r
->{targets}};
for
my
$c
(@{
$r
->{conditions}||[]}) {
my
$maybe
=
$c
=~ s/\?//g;
$g
->add_edge(
$r_addr
,
$c
);
$g
->set_edge_attribute(
$r_addr
,
$c
,
graphviz
=> {
style
=>
'dashed'
},
)
if
$maybe
;
}
}
my
(
$fmt
) =
$ARGV
[0] =~ /\.([^.]+)$/;
$g
->set_graph_attribute(
graphviz
=>{
graph
=>{
rankdir
=>
'LR'
}});
GraphViz2->from_graph(
$g
)->run(
format
=>
$fmt
,
output_file
=>
$ARGV
[0]);
=head1 NAME
doc-pp - Generate graph of pp_def key dependencies
with
graphviz
=head1 SYNOPSIS
doc-pp deps.svg
=head1 DESCRIPTION
Uses L<Graph> and L<GraphViz2> to visualise the dependencies between
keys
in L<PDL::PP/pp_def>.