Source of latin.plp

<(common.inc.plp)><:

Html({
	title => 'latin alphabet cheat sheet',
	version => '1.4',
	description => [
	],
	keywords => [qw'
		latin roman alphabet script letter unicode font glyph abc
		code encoding spelling symbol writing comparison character
		secret cursive fraktur blind braille morse deaf asl hand
		barcode bar color semaphore flag
	'],
	stylesheet => [qw( light dark red mono )],
	data => ['writing-latn.inc.pl'],
});

:>
<style>
	td {
		white-space: nowrap;
	}
	th {
		width: auto !important;
	}

	td svg {
		vertical-align: middle;
	}
	svg path:not([fill]) {
		stroke: currentColor;
		fill: none;
	}
	svg circle:not([fill]) {
		fill: currentColor;
	}

	.sample {
		text-align: left;
		padding: 1px 0.3em;
		white-space: normal;
	}
</style>

<h1>Latin alphabet</h1>

<p id=intro>Variant encodings of the common ASCII (latin, roman,
or <span title="fuck yeah!">'mercan</span>) letters A–Z.
Also see <a href="/writing">related alphabets</a>
and <a href="/chars/abc">font comparison</a>.</p>

<div>

<:
use List::Util qw( pairs );

my @table = do 'writing-latn.inc.pl';
if ($! or $@) {
	Alert("Table data not found", $@ || $!);
}
else {
	say '<style>';
	for my $row (pairs @table) {
		my ($id, $info) = @{$row};
		my $style = $info->{style} or next;
		ref $style or $style = [$style];
		say "\t", !/^@/ && "#$id ", $_ for @{$style};
	}
	say "</style>\n";

	my %VOWELCOLS = (map { ($_ => 1) } 0, 4, 8, 14, 20, 24);
	say '<table class="glyphs">';
	say '<thead><tr><th># <small>ASCII − 64</small>';
	print '<td>', $_ for 1 .. 26;
	say '</thead>';

	for my $row (pairs @table) {
		my ($id, $info) = @{$row};

		printf '<tr id="%s">', $id;
		say '<th>', $info->{title} // ucfirst $id;

		my $colspan = 1;
		my $col = 0;
		for (@{ $info->{list} }) {
			$col++;
			if ($_ eq '>') {
				$colspan++;
				next;
			}
			my @class;
			push @class ,'l0' if $VOWELCOLS{$col - $colspan};
			push @class, $_ ? 'ex' : 'u-invalid' if s/^-//;

			print "\t<td";
			if ($col > 26) {
				# special character for sample generation
				print ' hidden';  # sample only
			}
			else {
				print ' title=', chr($col + ord('A') - $colspan);
			}
			if ($colspan > 1) {
				print " colspan=$colspan";
				$colspan = 1;
			}
			printf ' class="%s"', "@class" if @class;
			print '>';
			say;
		}
	}
	say "</table>\n";
}

:></div>

<script type="text/javascript" src="/latinsample.js"></script>
<script type="text/javascript"> prependinput(document.getElementById('intro')) </script>