Source of latin.plp

<(common.inc.plp)><:

Html({
	title => 'latin alphabet cheat sheet',
	version => '1.7',
	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 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;
	}
	td.sample {
		width: auto;
	}
	th {
		white-space: nowrap; /* prevent resize by sample */
	}
</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>

<:
my $table = Data('writing-latn');
{
	say '<div>';
	say '<style>';
	while (my ($id, $info) = each %$table) {
		ref $info eq 'HASH' or next;
		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>';
printtr('order');
say '</thead>';
printtr('default');
say "</table></div>";

sub printtr {
	for my $id (@_) {
		my $info = $table->{$id};

		if (ref $info eq 'ARRAY') {
			printtr(@{$info});
			next;
		}

		printf '<tr id="%s">', $id;
		my $th = 'th';
		$th .= sprintf ' title="%s"', $_ for $info->{title} || ();
		say "<$th>", $info->{name} // 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;
		}
	}
}

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