Source of emoji.plp

<(common.inc.plp)><:

Html({
	title => 'emoji cheat sheet',
	version => '1.0',
	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
	'],
	stylesheet => [qw'light'],
});

:>
<h1>IM emoticons</h1>

<:
print '<div class="section">'."\n";

for my $system (qw'gmail msn yahoo') {
	my @info = do "emoji-$system.inc.pl";
	my $meta = shift @info or die $@;
	ref $meta eq 'HASH' or die "invalid $system definitions";
	my $title = $meta->{name} // $system;
	$title = qq{<a href="$_">$title</a>} for $meta->{source} || ();

	printf '<div class="section"><h2>%s</h2>'."\n\n", $meta->{name} // $system;
	print '<table><tbody>'."\n";
	for (my $i = 0; $i <= $#info; $i++) {
		my $name = $info[$i];
		unless (ref $info[$i+1] eq 'ARRAY') {
			printf '</table><table><tbody>'."\n", $name;
			next;
		}
		my ($input, $flags, $char, $desc) = @{ $info[++$i] };
		printf('<tr><th><img src="%s" alt="%s"><td><kbd>%s</kbd><td>%s%s'."\n",
			sprintf($meta->{ $flags =~ /\bext\b/ ? 'iconext' : 'icon' } // '%s', $name),
			EscapeHTML($name),
			EscapeHTML($input),
			$desc // $name,
			$char ? '<td>'.chr($char) : '',
		);
	}
	print "</table></div>\n\n";
}

print "</div><hr>\n\n";