open TUTORIAL, "<$tutorial_file";
# Print the first part of tutorial.h.in up until the point where we
-# find the line with '@@MAP@@'
+# find the line with '@@TUTORIAL_MAP@@'
while (my $line = <TUTORIAL>)
{
- last if($line =~ m/\@\@MAP\@\@/);
+ last if($line =~ m/\@\@TUTORIAL_MAP\@\@/);
print $line;
}
my $number = $step;
$number =~ s/^.*-//;
- printf "Step$number [label=\"$number\", URL=\"\\ref step_$number\", tooltip=\"$tooltip\"";
+ printf " Step$number [label=\"$number\", URL=\"\\ref step_$number\", tooltip=\"$tooltip\"";
print "$style{$kind}";
}
else
my $tag = $name;
$tag =~ s/[^a-zA-Z]/_/g;
- printf "code_gallery_$tag [label=\"\", URL=\"\\ref code_gallery_$tag\", tooltip=\"$tooltip\"";
+ printf " code_gallery_$tag [label=\"\", URL=\"\\ref code_gallery_$tag\", tooltip=\"$tooltip\"";
my $kind = "code-gallery";
print "$style{$kind}";
}
my $source;
foreach $source (split ' ', $buildson) {
$source =~ s/step-/Step/g;
- print "$source -> $destination";
+ print " $source -> $destination";
if ($destination =~ /code_gallery/)
{
- print " [style=\"dashed\"]";
+ print " [style=\"dashed\", arrowhead=\"empty\"]";
}
print "\n";
}
print "}\n";
+# Copy that part of tutorial.h.in up until the point where we
+# find the line with '@@TUTORIAL_LEGEND@@'
+while (my $line = <TUTORIAL>)
+{
+ last if($line =~ m/\@\@TUTORIAL_LEGEND\@\@/);
+ print $line;
+}
+
+# Print a preamble setting common attributes
+print << 'EOT'
+graph StepsDescription
+{
+ overlap=false;
+ edge [fontname="FreeSans",
+ fontsize="10",
+ labelfontname="FreeSans",
+ labelfontsize="10",
+ color="black",
+ style="solid"];
+ node [fontname="FreeSans",
+ fontsize="10",
+ shape="rectangle",
+ height=0.2,
+ width=0.4,
+ color="black",
+ fillcolor="white",
+ style="filled"];
+EOT
+ ;
+
+my %kind_descriptions = (
+ "basic" => 'Basic techniques',
+ "techniques" => 'Advanced techniques',
+ "fluids" => 'Fluid dynamics',
+ "solids" => 'Solid mechanics',
+ "time dependent" => 'Time dependent problems',
+ "unfinished" => 'Unfinished codes',
+ "code-gallery" => 'Code gallery',
+ );
+
+# for each kind, print a box in the same style as used in
+# the connections graph; also print a fake box with a
+# description of what each kind is. then connect these
+my $kind;
+foreach $kind (keys %style)
+{
+ my $escaped_kind = $kind;
+ $escaped_kind =~ s/[^a-zA-Z]/_/g;
+ printf " $escaped_kind [label=\"\" $style{$kind}];\n";
+ printf " fake_$escaped_kind [label=\"$kind_descriptions{$kind}\", shape=plaintext];\n";
+ printf " $escaped_kind -- fake_$escaped_kind [style=dotted, arrowhead=odot, arrowsize=1];\n";
+}
+# now add connections to make sure they appear nicely next to each other
+# in the legend
+print " basic -- techniques -- fluids -- solids -- time_dependent -- unfinished -- code_gallery;\n";
+
+# we need to tell 'dot' that all of these are at the same
+# rank to ensure they appear next to (as opposed to atop)
+# each other
+print " {rank=same; basic, techniques, fluids, solids, time_dependent, unfinished, code_gallery}";
+
+# end the graph
+print "}\n";
+
+
+
# Then print the rest of tutorial.h.in
while (my $line = <TUTORIAL>)
{