4 title => 'latin alphabet cheat sheet',
9 latin roman alphabet script letter unicode font glyph abc
10 code encoding spelling symbol writing comparison character
11 secret cursive fraktur blind braille morse deaf asl hand
12 barcode bar color semaphore flag
14 stylesheet => [qw( light dark red mono )],
15 data => ['writing-latn.inc.pl'],
25 width: auto !important;
29 vertical-align: middle;
31 svg path:not([fill]) {
35 svg circle:not([fill]) {
40 vertical-align: middle;
46 <h1>Latin alphabet</h1>
48 <p id=intro>Variant encodings of the common ASCII (latin, roman,
49 or <span title="fuck yeah!">'mercan</span>) letters A–Z.
50 Also see <a href="/writing">related alphabets</a>
51 and <a href="/chars/abc">font comparison</a>.</p>
56 use List::Util qw( pairs );
58 my @table = do 'writing-latn.inc.pl';
60 Alert("Table data not found", $@ || $!);
64 for my $row (pairs @table) {
65 my ($id, $info) = @{$row};
66 my $style = $info->{style} or next;
67 ref $style or $style = [$style];
68 say "\t", !/^@/ && "#$id ", $_ for @{$style};
72 my %VOWELCOLS = (map { ($_ => 1) } 0, 4, 8, 14, 20, 24);
73 say '<table class="glyphs">';
74 say '<thead><tr><th># <small>ASCII − 64</small>';
75 print '<td>', $_ for 1 .. 26;
78 for my $row (pairs @table) {
79 my ($id, $info) = @{$row};
81 printf '<tr id="%s">', $id;
82 say '<th>', $info->{title} // ucfirst $id;
86 for (@{ $info->{list} }) {
93 push @class ,'l0' if $VOWELCOLS{$col - $colspan};
94 push @class, $_ ? 'ex' : 'u-invalid' if s/^-//;
98 # special character for sample generation
99 print ' hidden'; # sample only
102 print ' title=', chr($col + ord('A') - $colspan);
105 print " colspan=$colspan";
108 printf ' class="%s"', "@class" if @class;
118 <script type="text/javascript" src="/latinsample.js"></script>
119 <script type="text/javascript"> prependinput(document.getElementById('intro')) </script>