Html({
title => 'latin alphabet cheat sheet',
- version => '1.3',
+ version => '1.6',
description => [
],
keywords => [qw'
secret cursive fraktur blind braille morse deaf asl hand
barcode bar color semaphore flag
'],
- stylesheet => [qw'light dark red'],
+ stylesheet => [qw( light dark red mono )],
data => ['writing-latn.inc.pl'],
});
:>
<style>
- @font-face {
- font-family: Suetterlin; /* R. G. Arens */
- src: url("/suetterlin.ttf");
- }
- #sütterlin td { font-family: Suetterlin }
- #tap-code td,
- #tap-simplified td {
- line-height: 1ex;
- }
- #pigpen {
- stroke-linecap: square;
- }
- #nyctographs,
- #old-roman-cursive {
- stroke-linecap: round;
- stroke-linejoin: round;
- }
- td {
- white-space: nowrap;
+ td svg {
+ vertical-align: middle;
}
-
svg path:not([fill]) {
stroke: currentColor;
fill: none;
}
+ svg circle:not([fill]) {
+ fill: currentColor;
+ }
- td {
- vertical-align: top;
+ .sample {
+ text-align: left;
+ padding: 1px 0.3em;
}
- td > svg {
- vertical-align: middle;
+ td.sample {
+ width: auto;
+ }
+ th {
+ white-space: nowrap; /* prevent resize by sample */
}
</style>
<h1>Latin alphabet</h1>
-<p>Variant encodings of the common ASCII (latin, roman,
+<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="/unicode">common chars</a>.</p>
-
-<div>
+and <a href="/chars/abc">font comparison</a>.</p>
<:
use List::Util qw( pairs );
-my @table = do 'writing-latn.inc.pl';
-if ($! or $@) {
- Alert("Table data not found", $@ || $!);
-}
-else {
+my @table = Data('writing-latn');
+{
+ say '<div>';
+ 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 ($title, $cells) = @{$row};
- printf '<tr id="%s">', (lc $title) =~ s/<[^>]+>//gr =~ s/\s+/-/gr;
- say '<th>', $title;
+ my ($id, $info) = @{$row};
+
+ printf '<tr id="%s">', $id;
+ my $th = 'th';
+ $th .= sprintf ' title="%s"', $_ for $info->{title} || ();
+ say "<$th>", $info->{name} // ucfirst $id;
+
my $colspan = 1;
- for (@{$cells}) {
+ 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;
}
- print ' class=', $_ ? 'ex' : 'u-invalid' if s/^-//;
+ printf ' class="%s"', "@class" if @class;
print '>';
say;
}
}
- say "</table>\n";
+ say "</table></div>";
}
-:></div>
-
-<script>
-var inputel = document.createElement('INPUT');
-inputel.oninput = function () {
- var rows = document.getElementsByClassName('glyphs')[0].rows;
- for (var row of rows) {
- cols = [ row.cells[0] ];
- for (var col = 1; col <= 26; col++) {
- cols[col] = cols[ col - 1 ].nextSibling;
- for (var span = 1; span < cols[col].colSpan; span++) {
- var same = cols[col];
- cols[++col] = same;
- }
- }
- var samplecol = row.getElementsByClassName('sample');
- if (samplecol.length) {
- samplecol = samplecol[0];
- }
- else {
- samplecol = row.appendChild(document.createElement('TD'));
- samplecol.className = 'sample';
- }
-
- var output = '';
- var input = inputel.value.toUpperCase();
- for (var i = 0; i < input.length; i++) {
- var col = input.charCodeAt(i) - 64;
- if (col < 1 || col > 26) {
- output += ' ';
- }
- else {
- output += cols[col].innerHTML.trimRight();
- }
- }
- samplecol.innerHTML = output;
- }
-};
-
-var container = document.createElement('P');
-container.appendChild(inputel);
-document.body.appendChild(container);
+:>
+<script type="text/javascript" src="/latinsample.js"></script>
+<script type="text/javascript"><!--
+ prependinput(document.getElementById('intro'));
+//--></script>
-</script>