File: creationgraph.pl

package info (click to toggle)
0ad 0.0.26-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 130,460 kB
  • sloc: cpp: 261,824; ansic: 198,392; javascript: 19,067; python: 14,557; sh: 7,629; perl: 4,072; xml: 849; makefile: 741; java: 533; ruby: 229; php: 190; pascal: 30; sql: 21; tcl: 4
file content (42 lines) | stat: -rw-r--r-- 1,165 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
use strict;
use warnings;

use lib ".";
use Entity;

my @files = Entity::find_entities("public");

my %files = map +($_ => 1), @files;

open my $g, '>', 'creation.dot' or die $!;
print $g "digraph G {\n";

for my $f (sort @files) {
    next if $f =~ /^template_/;
    print "# $f...\n";
    my $ent = Entity::load_inherited($f, "public");

    if ($ent->{Entity}{Builder}) {
        my $ents = $ent->{Entity}{Builder}{Entities}{' content'};
        $ents =~ s/\{civ\}/$ent->{Entity}{Identity}{Civ}{' content'}/eg;
        for my $b (split /\s+/, $ents) {
            warn "Invalid Builder reference: $f -> $b\n" unless $files{$b};
            print $g qq{"$f" -> "$b" [color=green];\n};
        }
    }

    if ($ent->{Entity}{TrainingQueue}) {
        my $ents = $ent->{Entity}{TrainingQueue}{Entities}{' content'};
        $ents =~ s/\{civ\}/$ent->{Entity}{Identity}{Civ}{' content'}/eg;
        for my $b (split /\s+/, $ents) {
            warn "Invalid TrainingQueue reference: $f -> $b\n" unless $files{$b};
            print $g qq{"$f" -> "$b" [color=blue];\n};
        }
    }
}

print $g "}\n";

close $g;

system("dot -Tpng creation.dot -o creation.png");