<(common.inc.plp)><: Html({ title => 'emoji cheat sheet', version => '1.2', description => [ "Emoticons overview and Unicode equivalents" . " of MSN, Y!M, and Gmail icons.", ], keywords => [qw' sheet cheat emoticon smiley emoji unicode chat im messenger msn yahoo ym gmail google '], data => ['emoji-gmail.inc.pl'], }); :> <h1>IM emoticons</h1> <: say '<div class="section">'; for my $system (qw'gmail msn yahoo') { my @info = Data("emoji-$system"); my $meta = shift @info; ref $meta eq 'HASH' or Abort("Invalid $system definitions", 404); my $title = $meta->{name} // $system; $title = showlink($title, $_) for $meta->{source} || (); say sprintf '<div class="section"><h2>%s</h2>', $meta->{name} // $system; say '<table><tbody>'; for my $row (@info) { unless (ref $row eq 'ARRAY') { say '</table><table><tbody>'; next; } my ($name, $input, $flags, $char, $desc) = @{$row}; say sprintf('<tr><th class="s-light"><img src="%s" alt="%s"><td><kbd>%s</kbd><td>%s%s', sprintf($meta->{ $flags =~ /\bext\b/ ? 'iconext' : 'icon' } // '%s', $name), EscapeHTML($name), EscapeHTML($input), $desc // $name, $char ? '<td>'.chr($char) : '', ); } say "</table></div>\n"; } say "</div><hr>\n";