Vlad Skvortsov wrote:
Also, how do I demangle the names? It seems that, for example, 'base:GHC.Base.ZC' is a (:) function on strings, but where how am I supposed to figure that out?
#!/usr/bin/perl
# Written by Ashley Yakeley 2003
# All rights to the public

while (<>)
        {
        s/_/ /g;
        s/\w+/decode($&)/eg;
        print;
        }

sub commas
        {
        local($i) = @_;
        if ($i == 0)
                {
                return "";
                }
        elsif ($i == 1)
                {
                return " ";
                }
        else
                {
                return "," x ($i - 1);
                }
        }

sub decode
        {
        local($s) = @_;
        my $a="";
        while ($s =~/([^zZ]*)([zZ].*)/)
                {
                $a.=$1;
                if ($2 =~/([zZ][A-Za-z])(.*)/)
                        {
                                {
                                $a.="(",last if $1 =~/ZL/;
                                $a.=")",last if $1 =~/ZR/;
                                $a.="[",last if $1 =~/ZM/;
                                $a.="]",last if $1 =~/ZN/;
                                $a.=":",last if $1 =~/ZC/;
                                $a.="Z",last if $1 =~/ZZ/;

                                $a.="z",last if $1 =~/zz/;
                                $a.="&",last if $1 =~/za/;
                                $a.="|",last if $1 =~/zb/;
                                $a.="^",last if $1 =~/zc/;
                                $a.='$',last if $1 =~/zd/;
                                $a.="=",last if $1 =~/ze/;
                                $a.=">",last if $1 =~/zg/;
                                $a.="#",last if $1 =~/zh/;
                                $a.=".",last if $1 =~/zi/;
                                $a.="<",last if $1 =~/zl/;
                                $a.="-",last if $1 =~/zm/;
                                $a.="!",last if $1 =~/zn/;
                                $a.="+",last if $1 =~/zp/;
                                $a.="'",last if $1 =~/zq/;
                                $a.="\\",last if $1 =~/zr/;
                                $a.="/",last if $1 =~/zs/;
                                $a.="*",last if $1 =~/zt/;
                                $a.="_",last if $1 =~/zu/;
                                $a.="%",last if $1 =~/zv/;
                                $a.="???";
                                }
                        $s = $2;
                        }
                elsif ($2 =~/Z([0-9]+)T(.*)/)
                        {
                        $a.="(".commas($1).")";
                        $s = $2;
                        }
                elsif ($2 =~/Z([0-9]+)H(.*)/)
                        {
                        $a.="(#".commas($1)."#)";
                        $s = $2;
                        }
                elsif ($2 =~/Z([0-9]+)U(.*)/)
                        {
                        $a.=chr($1);
                        $s = $2;
                        }
                else
                        {
                        $a.="???".$2;
                        $s = "";
                        }
                };
        return $a.$s;
        };
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to