summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/stex/bin/rng2dot/rng2dot
blob: 588b8827c63ebcccaf74d529e7691ffb467821ac (plain)
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
#!/usr/bin/perl -w

use ModelRNC;

die "No input file\n" unless $ARGV[0];
my $opt = $ARGV[1] || '';

my $rnc = ModelRNC->new();
$rnc->process($ARGV[0]);
print STDERR 'Unable to properly parse ('.$rnc->data.")\n" if $rnc->data;

my %seen = ();
sub make_graph {
    my ($node) = @_;
    my @children = $rnc->tagChildren($node);
    my $pnode = $node;
    $pnode =~ s/^\{[^\}]*\}://; $pnode =~ s/\-|\+|\*|\s/_/g;
    my @pchildren = @children;
    for (my $i = 0 ; $i < @pchildren; $i++) {
	$pchildren[$i] =~ s/^\{[^\}]*\}://; 
	$pchildren[$i] =~ s/\-|\+|\*|\s/_/g; }
    if ($opt eq 'txt') {
	print "$pnode: ".join(', ', @pchildren)."\n\n"; }
    else {
	for (my $i = 0 ; $i < @pchildren; $i++) {
	    print "$pnode -> ".$pchildren[$i].";\n"; }}
    return 0 if $seen{$node};
    $seen{$node} = 1;
    foreach my $child(@children) {
	make_graph($child); }
    1; }

print "digraph RNC {\n" unless $opt eq 'txt';
make_graph('_Document_');
print "}\n" unless $opt eq 'txt';

__END__