#!/usr/bin/perl
# (C) 2003-2007 Willem Jan Hengeveld <itsme@xs4all.nl>
# Web: http://www.xs4all.nl/~itsme/
#      http://wiki.xda-developers.com/
#
# $Id$
#
# todo: implement encode
#
use strict;

# this script decodes urls listed on stdin.

use CGI::Util qw(unescape escape);
use Getopt::Long;

sub usage {
    return <<__EOF__
Usage: urldecode [-e]
__EOF__
}

my $do_encode;
GetOptions(
    "e" => \$do_encode,
) or die usage();

if ($do_encode) {
    encodeurl();
}
else {
    decodeurl();
}

sub encodeurl {
    my $base;
    my @params;
    while (<>) {
        s/\s+$//;
        if (/^\S/) {
            $base= $_;
        }
        elsif (/(\S+?)\s*=\s*(.*)/) {
            my ($key, $value)= ($1, $2);
            push @params, escape($key).'='.escape($value);
        }
        elsif (/^\s*(.*)/) {
            push @params, escape($1);
        }
    }
    printf("%s?%s\n", $base, join("&", @params));
}
sub decodeurl {
    while (<>)
    {
        chomp;
        my ($url, $query)= /(?:(.*?)\?)?(.*)/;

        print $url, "\n" if ($url);

        for my $keyval (split("&", $query))
        {
            if (my ($key, $value) = ($keyval =~ /(.*?)=(.*)/)) {
                print "\t", unescape($key), " = ", unescape($value), "\n";
            }
            else {
                print "\t", unescape($keyval), "\n";
            }
        }
    }
}
