#! /usr/bin/perl
use IO::File;
$result = &read_file();
&write_xml($result);
sub write_xml
{
my $values = shift;
my $array;
print <<EOF;
<?xml version="1.0"?>
<mud>
<names>
<toMe red="$values->{ME}[1]"
green="$values->{ME}[2]"
blue="$values->{ME}[3]"/>
EOF
foreach(sort keys %{$values->{NAME}})
{
print <<EOF;
<character name="$_"
red="$values->{NAME}{$_}[0]"
green="$values->{NAME}{$_}[1]"
blue="$values->{NAME}{$_}[2]"/>
EOF
}
print <<EOF;
</names>
<server name="$values->{USER}[0]">
<connect hostname="$values->{HOSTNAME}[0]"
port="$values->{PORT}[0]"/>
<auth username="$values->{USER}[0]"
password="$values->{USER}[1]"/>
</server>
<action>
<color match="pokes you." position="2" red="255" green="0" blue="51"/>
<intensify match="You whisper to " position="0" value="-32"/>
<intensify match="(to" position="0" value="-32"/>
<intensify match="(from" position="0" value="-32"/>
<intensify match="to you]:" position="1" value="24"/>
<intensify match="whispers to you, " position="1" value="-27"/>
</action>
</mud>
EOF
}
sub read_file
{
my $filename = shift;
my $attribute;
my @values;
my $result = {};
my $key;
while(<>)
{
chomp;
s/#.*//;
next if(/^\s*$/);
($attribute, @values) = split(/\s+/);
if(exists($result->{$attribute}))
{
# if this attribute appears multiple times, convert it to a hash
# with the first of @values as the key
if(ref($result->{$attribute}) eq "ARRAY")
{
$key = shift(@{$result->{$attribute}});
@oldvalue = @{$result->{$attribute}};
delete $result->{$attribute};
$result->{$attribute}{$key} = [@oldvalue];
}
$key = shift(@values);
$result->{$attribute}{$key} = [@values];
#push(@{$result->{$attribute}}, @values);
}
else
{
$result->{$attribute} = [@values] ;
}
}
return $result;
}