Checksumcolor
To determine the colors, rather than breaking the md5sum into groups of 3 characters, (which leaves two lonely characters at the end), I elected to replicate the first 5 characters onto the end, then for each character, used it and the 5 characters following as a true-color index. I also added an option to output as HTML code for ease of pasting in here.
unit sub MAIN ($mode = 'ANSI');
if $*OUT.t or $mode eq 'HTML' { # if OUT is a terminal or if in HTML $module
say '<div style="background-color:black; font-size:125%; font-family: Monaco, monospace;">'
if $mode eq 'HTML';
while my $line = get() {
my $cs = $line.words[0];
my $css = $cs ~ $cs.substr(0,5);
given $mode {
when 'ANSI' {
print "\e[48;5;232m";
.print for $css.comb.rotor(6 => -5)».map({ ($^a, $^b).join })\
.map( { sprintf "\e[38;2;%d;%d;%dm", |$_».parse-base(16) } ) Z~ $cs.comb;
say "\e[0m {$line.words[1..*]}";
}
when 'HTML' {
print "$_\</span>" for $css.comb.rotor(6 => -5)\
.map( { "<span style=\"color:#{.join};\">" } ) Z~ $cs.comb;
say " <span style=\"color:#ffffff\"> {$line.words[1..*]}</span>";
say '<br>';
}
default { say $line; }
}
}
say '</div>' if $mode eq 'HTML';
} else { # just pass the unaltered line through
.say while $_ = get();
}
Can't really show the ANSI output directly so show the HTML output. Essentially identical.
Output:
md5sum *.p6 | perl6 checksum-color.p6 HTML > checksum-color.html
yields:
f09a3fc8551d8a703d64d8e918ece236 checksum-color (another copy).p6
f09a3fc8551d8a703d64d8e918ece236 checksum-color (copy).p6
f09a3fc8551d8a703d64d8e918ece236 checksum-color.p6
bbd8a92c326c8a35e80d2d71ab8902cd something-completely-different.p6