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'],
15 data => ['writing-latn.inc.pl'],
21 font-family: Suetterlin; /* R. G. Arens */
22 src: url("/suetterlin.ttf");
24 #sütterlin td { font-family: Suetterlin }
29 word-spacing: 5em; /* force line break between words */
32 stroke-linecap: square;
36 stroke-linecap: round;
37 stroke-linejoin: round;
44 vertical-align: middle;
46 #old-roman-cursive .sample span {
50 #tap-simplified .sample {
54 #tap-code .sample span,
55 #tap-simplified .sample span {
65 #nyctographs .sample svg {
66 background: rgba(0,0,0, .1);
71 svg path:not([fill]) {
80 vertical-align: middle;
84 <h1>Latin alphabet</h1>
86 <p>Variant encodings of the common ASCII (latin, roman,
87 or <span title="fuck yeah!">'mercan</span>) letters A–Z.
88 Also see <a href="/writing">related alphabets</a>
89 and <a href="/unicode">common chars</a>.</p>
94 use List::Util qw( pairs );
96 my @table = do 'writing-latn.inc.pl';
98 Alert("Table data not found", $@ || $!);
101 say '<table class="glyphs">';
102 for my $row (pairs @table) {
103 my ($title, $cells) = @{$row};
104 printf '<tr id="%s">', (lc $title) =~ s/<[^>]+>//gr =~ s/\s+/-/gr;
114 print " colspan=$colspan";
117 print ' class=', $_ ? 'ex' : 'u-invalid' if s/^-//;
128 var inputel = document.createElement('INPUT');
129 inputel.oninput = function () {
130 var rows = document.getElementsByClassName('glyphs')[0].rows;
131 for (var row of rows) {
132 cols = [ row.cells[0] ];
133 for (var col = 1; col <= 26; col++) {
134 cols[col] = cols[ col - 1 ].nextSibling;
135 for (var span = 1; span < cols[col].colSpan; span++) {
136 var same = cols[col];
140 var samplecol = row.getElementsByClassName('sample');
141 if (samplecol.length) {
142 samplecol = samplecol[0];
145 samplecol = row.appendChild(document.createElement('TD'));
146 samplecol.className = 'sample';
150 var input = inputel.value.toUpperCase();
151 for (var i = 0; i < input.length; i++) {
152 var col = input.charCodeAt(i) - 64;
153 if (col < 1 || col > 26) {
154 output += ' ';
157 output += '<span>' + cols[col].innerHTML.trimRight() + '</span>';
160 samplecol.innerHTML = output;
164 var container = document.createElement('P');
165 container.appendChild(inputel);
166 document.body.appendChild(container);