Html({
title => 'latin alphabet cheat sheet',
- version => 'v1.0',
+ version => '1.3',
description => [
],
keywords => [qw'
latin roman alphabet script letter unicode font glyph abc
- writing comparison character sample test language
+ 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'],
+ 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;
+ white-space: normal;
+ word-spacing: 5em; /* force line break between words */
+ }
+ #pigpen {
+ stroke-linecap: square;
+ }
+ #nyctographs,
+ #old-roman-cursive {
+ stroke-linecap: round;
+ stroke-linejoin: round;
+ }
+ td {
+ white-space: nowrap;
+ }
+
+ .sample {
+ vertical-align: middle;
+ }
+ #old-roman-cursive .sample span {
+ margin-right: -10px;
+ }
+ #tap-code .sample,
+ #tap-simplified .sample {
+ font-size: 80%;
+ word-spacing: 0;
+ }
+ #tap-code .sample span,
+ #tap-simplified .sample span {
+ margin-right: 1ex;
+ white-space: nowrap;
+ }
+ #morse .sample span {
+ margin-right: 0.5ex;
+ }
+ #pigpen .sample svg {
+ margin-right: 0.1em;
+ }
+ #nyctographs .sample svg {
+ background: rgba(0,0,0, .1);
+ padding: 0.1em;
+ margin-right: 0.2em;
+ }
+
+ svg path:not([fill]) {
+ stroke: currentColor;
+ fill: none;
+ }
+ svg circle:not([fill]) {
+ fill: currentColor;
+ }
+
+ td {
+ vertical-align: top;
+ }
+ td > svg {
+ vertical-align: middle;
+ }
+</style>
+
<h1>Latin alphabet</h1>
-<p>Also see <a href="/writing">other alphabets</a>
-and <a href="/unicode">common chars</a>.</p>
+<p>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>
-<div class="-diinfo">
+<div>
<:
-use Shiar_Sheet::FormatChar;
-my $glyphs = Shiar_Sheet::FormatChar->new;
-unless (exists $get{v}) {
- $glyphs->{unicode}--;
- $glyphs->{digraph}--;
+use List::Util qw( pairs );
+
+my @table = do 'writing-latn.inc.pl';
+if ($! or $@) {
+ Alert("Table data not found", $@ || $!);
+}
+else {
+ say '<table class="glyphs">';
+ for my $row (pairs @table) {
+ my ($title, $cells) = @{$row};
+ printf '<tr id="%s">', (lc $title) =~ s/<[^>]+>//gr =~ s/\s+/-/gr;
+ say '<th>', $title;
+ my $colspan = 1;
+ for (@{$cells}) {
+ if ($_ eq '>') {
+ $colspan++;
+ next;
+ }
+ print "\t<td";
+ if ($colspan > 1) {
+ print " colspan=$colspan";
+ $colspan = 1;
+ }
+ print ' class=', $_ ? 'ex' : 'u-invalid' if s/^-//;
+ print '>';
+ say;
+ }
+ }
+ say "</table>\n";
}
-my @t = (qw{
- .>Latin a b c d e f g h i j k l m n o p q r s t u v w x y z
- .>Braille ⠁ ⠃ ⠉ ⠙ ⠑ ⠋ ⠛ ⠓ ⠊ ⠚ ⠅ ⠇ ⠍ ⠝ ⠕ ⠏ ⠟ ⠗ ⠎ ⠞ ⠥ ⠧ ⠺ ⠭ ⠽ ⠵
- .>Morse ‧‑ ‑‧‧‧ ‑‧‑‧ ‑‧‧ ‧ ‧‧‐‧ ‐‐‧ ‧‧‧‧ ‧‧ ‧‐‐‐ ‐‧‐ ‧‐‧‧ ‐‐
- ‐‧ ‐‐‐ ‧‐‐‧ ‐‐‧‐ ‧‐‧ ‧‧‧ ‐ ‧‧‐ ‧‧‧‐ ‧‐‐ ‐‧‧‐ ‐‧‐‐ ‐‐‧‧
-});
-print $glyphs->table(exists $get{uc} ? [map {s/\s.//; uc} @t] : \@t);
+:></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 += '<span>' + cols[col].innerHTML.trimRight() + '</span>';
+ }
+ }
+ samplecol.innerHTML = output;
+ }
+};
-print "</div>\n";
+var container = document.createElement('P');
+container.appendChild(inputel);
+document.body.appendChild(container);
+</script>