common: global Data() to parse perl code includes
[sheet.git] / latin.plp
1 <(common.inc.plp)><:
2
3 Html({
4         title => 'latin alphabet cheat sheet',
5         version => '1.6',
6         description => [
7         ],
8         keywords => [qw'
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
13         '],
14         stylesheet => [qw( light dark red mono )],
15         data => ['writing-latn.inc.pl'],
16 });
17
18 :>
19 <style>
20         td svg {
21                 vertical-align: middle;
22         }
23         svg path:not([fill]) {
24                 stroke: currentColor;
25                 fill: none;
26         }
27         svg circle:not([fill]) {
28                 fill: currentColor;
29         }
30
31         .sample {
32                 text-align: left;
33                 padding: 1px 0.3em;
34         }
35         td.sample {
36                 width: auto;
37         }
38         th {
39                 white-space: nowrap; /* prevent resize by sample */
40         }
41 </style>
42
43 <h1>Latin alphabet</h1>
44
45 <p id=intro>Variant encodings of the common ASCII (latin, roman,
46 or <span title="fuck yeah!">'mercan</span>) letters A–Z.
47 Also see <a href="/writing">related alphabets</a>
48 and <a href="/chars/abc">font comparison</a>.</p>
49
50 <:
51 use List::Util qw( pairs );
52
53 my @table = Data('writing-latn');
54 {
55         say '<div>';
56         say '<style>';
57         for my $row (pairs @table) {
58                 my ($id, $info) = @{$row};
59                 my $style = $info->{style} or next;
60                 ref $style or $style = [$style];
61                 say "\t", !/^@/ && "#$id ", $_ for @{$style};
62         }
63         say "</style>\n";
64
65         my %VOWELCOLS = (map { ($_ => 1) } 0, 4, 8, 14, 20, 24);
66         say '<table class="glyphs">';
67         say '<thead><tr><th># <small>ASCII − 64</small>';
68         print '<td>', $_ for 1 .. 26;
69         say '</thead>';
70
71         for my $row (pairs @table) {
72                 my ($id, $info) = @{$row};
73
74                 printf '<tr id="%s">', $id;
75                 my $th = 'th';
76                 $th .= sprintf ' title="%s"', $_ for $info->{title} || ();
77                 say "<$th>", $info->{name} // ucfirst $id;
78
79                 my $colspan = 1;
80                 my $col = 0;
81                 for (@{ $info->{list} }) {
82                         $col++;
83                         if ($_ eq '>') {
84                                 $colspan++;
85                                 next;
86                         }
87                         my @class;
88                         push @class ,'l0' if $VOWELCOLS{$col - $colspan};
89                         push @class, $_ ? 'ex' : 'u-invalid' if s/^-//;
90
91                         print "\t<td";
92                         if ($col > 26) {
93                                 # special character for sample generation
94                                 print ' hidden';  # sample only
95                         }
96                         else {
97                                 print ' title=', chr($col + ord('A') - $colspan);
98                         }
99                         if ($colspan > 1) {
100                                 print " colspan=$colspan";
101                                 $colspan = 1;
102                         }
103                         printf ' class="%s"', "@class" if @class;
104                         print '>';
105                         say;
106                 }
107         }
108         say "</table></div>";
109 }
110
111 :>
112 <script type="text/javascript" src="/latinsample.js"></script>
113 <script type="text/javascript"><!--
114         prependinput(document.getElementById('intro'));
115 //--></script>
116