#!/usr/bin/perl -w

use strict;

use XML::LibXML::XPathContext;
use XML::LibXML;

use SVG;

sub wordwrap {
  my ($orig) = @_;
  my $n = 80;
  my $result = "";
  $orig =~ s/\n/ /g;

  #print "wrapping: $orig\n";
  while (1) {
    if ($orig =~ /(.{80})(.*)/s) {
      my $line = $1; my $rest = $2;

      if ($line =~ /(.{0,80})\s(.*)/s)
      {
        $result .= "$1\n";
        $orig = $2 . $rest;
        #print "Appended $1 to result\n\nproceeding with $2**$rest\n\n";
      } else {
        $orig = $rest;
      }
    } else {
       return $result . $orig;
    }
  }
}

my $parser = XML::LibXML->new();
my $classes = $parser->parse_file("../../classes.xml");
my $xc = XML::LibXML::XPathContext->new($classes);

my $nodelist = $xc->find("/classes/class");

my $svg = new SVG;
$svg->comment('generated by eventslist.pl by Arnout Engelen');

my $i = 0;
my $cury = 30;
foreach my $node ($nodelist->get_nodelist) {
  my @attributes = $node->getAttributes;
  #my $eventnodes = $xc->find ("/classes/class[\@name=\"$classname\"]/events/event");
  my $eventnodelist = $node->findnodes ("events/event");
  my @eventnodes = $eventnodelist->get_nodelist;
  if (scalar(@eventnodes) != 0) {
    my $eventgroup = $svg->group(id => "g_event_$i"); $i++;
    $eventgroup->text(
    	id => "t_event_caption_$i",
	x  => 10,
	y  => $cury
    	)->cdata($node->findvalue("\@name")); $i++;
    $cury += 12;
    my $eventtable = $eventgroup->group(id => "g_eventtable_$i"); $i++;
    my $rect = $eventtable->rect(
    	id => "r_eventtable_$i",
	fill => "white",
	stroke => "black",
	width => 310 + 570,
	x  => 10,
	y  => $cury); $i++;
    $cury += 12;
    #print "\n" . $node->findvalue("\@name") . "\n\n";
    my $boxy = $cury;
    $cury += 12;
    foreach my $eventnode (@eventnodes) {
      my $eventname = $eventnode->findvalue("\@name");
      #print "$eventname\n"; # \x{a} and \0
      # print "<tr><td>$eventname";
      $eventtable->text(
    	id => "t_eventname_$i",
	x  => 15,
	y  => $cury)->cdata($eventname); $i++;
      my $description = $eventnode->findvalue('.');
      if (("EVT_" . $eventname) ne $description) {
        #print STDERR "$eventname -- $description\n\n";
        # TODO print "<td>" . $eventnode->findvalue('.') . "\n";
	$description = wordwrap($description);
	foreach my $line (split ("\n", $description))
	{
          $eventtable->text(
  	    id => "t_eventdesc_$i",
	    x  => 310,
	    y  => $cury)->cdata($line); $i++;
          $cury += 12;
	}
      } else {
        $cury += 12;
      }
    }
    $cury += 12;
    $rect->setAttribute('height' => $cury - $boxy); 
    $cury += 12;
  }
}

print "Okay\n";

open(SVGFILE, ">eventslist.svg");
print SVGFILE $svg->xmlify();
close SVGFILE;
