
# This script converts old-style pagetree files to new pagetree.xml files.



use HTML::Entities;



$seen_a_frontpage = 0;
$insection = '';

$anon_id_idx = 1;

print "<?xml version=\"1.0\"?>\n\n";
print "<pagetree docroot=\"/\" title=\"Computational Linguistics and Phonetics\">\n";

while(<>) {
    chomp;

    if( /^\s*$/ ) {
	;
    }

    elsif( /</ && !/\}/ ) {
	# front page
	if( !$seen_a_frontpage ) {
	    print "  <frontpage>\n";
	    $seen_a_frontpage = 1;
	}

	@entries = /<([^>]+)>/g;
	print "    <row>\n";
	foreach $entry (@entries) {
	    print "      <entry ref='$entry' />\n";
	}
	print "    </row>\n";
    }

    else {
	if( $seen_a_frontpage ) {
	    print "  </frontpage>\n\n";
	    $seen_a_frontpage = 0;
	}

	$_ = encode_entities($_);

	if( /\[([^\]]+)/ ) {
	    # section start
	    if( $insection ne '' ) {
		print "  </section>\n\n";
	    }

	    $insection = $1;
	    print "  <section title='$insection'>\n";
	}

	elsif( /\s*(\S+)\s*(.+)/ ) {
	    # ordinary entry
	    $url = $1;
	    $title = $2;

	    if( $title =~ /\{([^\}]+)\}\s*(.+)/ ) {
		# isolate responsible-for
		$title = $2;
		$responsible = $1;
	    } else {
		$responsible = '';
	    }

	    # isolate flags
	    @flags = ();
	    if( $url =~ /([^\(]*)\(([^\)]*)/ ) {
		$url = $1;
		@flags = split( /\s*,\s*/, $2 );
	    }

	    $line = '';

	    if( $url =~ m(http://) ) {
		# external link
		$line .=  "entry id=\'id";
		$line .=  $anon_id_idx++;
		$line .=  "' url='$url' title=\"$title\"";
	    } else {
		# internal link
		$line .=  "entry id='$url' title=\"$title\"";
	    }

	    if( $responsible ne '' ) {
		$line .=  " responsible='$responsible'";
	    }
	    
	    foreach $flag (@flags) {
		$line .=  " $flag='true'";
	    }
	    
	    print "    <$line />\n";
	}
    }
}



print "  </section>\n";
print "</pagetree>\n";
