#!/usr/bin/perl -w

# convert an amps relation file to graphviz format
# see also: Makefile

use strict;
use warnings;

my %arg_seen;
my %op_i;

print "graph g { ";
#print "graph g { node [nodesep=2.0, fontsize=11]; graph [overlap = false];";

while (defined($_ = <STDIN>)) {
	if (/^#/) {
		print "\n";
		next;
	}
	chomp;

	my ($op, @args) = /("(?:\\.|[^"\\])+"|'(?:\\.|[^'\\])+'|(?:\\.|[^ \\])+)/g;

	my $op_i = $op_i{$op}++ || 0;

	my $op_id = "$op.$op_i";

	add_node("$op_id", $op, "box");
	my $i = 0;
	for my $arg (@args) {
		if (!$arg_seen{$arg}++) {
			add_node($arg, $arg, "plaintext");  # circle oval
		}
		add_arc($op_id, $arg, $i);
		++$i;
	}
	print "\n";
}

print "}\n";

sub add_node {
	my ($id, $label, $shape) = @_;
	for ($id, $label) { s/"/\\"/g; }
	print qq{"$id" [label="$label", shape=$shape]; };
}
sub add_arc {
	my ($op, $arg, $index) = @_;
	for ($op, $arg) { s/"/\\"/g; }
	print qq{"$op" -- "$arg" [label="$index"]; };
}
