From: Mischa POSLAWSKY Date: Thu, 26 May 2022 12:15:04 +0000 (+0200) Subject: common: global Data() to parse perl code includes X-Git-Url: http://git.shiar.nl/sheet.git/commitdiff_plain/58725794d72361cc70cb082476a32d08e22d21d0 common: global Data() to parse perl code includes Same error reporting and possible upcoming extension. --- diff --git a/apl.plp b/apl.plp index 929c424..d01d3ed 100644 --- a/apl.plp +++ b/apl.plp @@ -27,9 +27,7 @@ EOT use Shiar_Sheet::FormatChar; my $glyphs = Shiar_Sheet::FormatChar->new; - -my @ops = do 'apl.inc.pl'; -@ops > 1 or Abort("cannot open operator include", 500, $@ // $!); +my @ops = Data('apl'); :>

APL Symbols

diff --git a/browser.plp b/browser.plp index 5811594..6d75d4a 100644 --- a/browser.plp +++ b/browser.plp @@ -20,7 +20,7 @@ Html({ say "

Browser compatibility

\n"; -my $caniuse = do 'data/browser/support.inc.pl' or die $@ || $!; +my $caniuse = Data('data/browser/support'); my %CSTATS = ( 'n' => 'l1', @@ -94,8 +94,8 @@ given ($get{usage} // 'wm') { 'Identifier must be alphanumeric name or 0.', ]); } - $canihas = do "data/browser/usage-$_.inc.pl" or do { - Alert('Browser usage data not found', $@ || $!); + $canihas = eval { Data("data/browser/usage-$_") } or do { + Alert('Browser usage data not found', $@); break; }; $usage = $_; diff --git a/chars.plp b/chars.plp index e43099e..e106eb4 100644 --- a/chars.plp +++ b/chars.plp @@ -22,7 +22,7 @@ EOT use Shiar_Sheet::FormatChar; my $glyphs = Shiar_Sheet::FormatChar->new; -my $groupinfo = do 'data/unicode-cover.inc.pl' or die $@ || $!; +my $groupinfo = Data('data/unicode-cover'); my @ossel = @{ $groupinfo->{osdefault} }; my @fontlist = map { $_->{file} } @@ -30,7 +30,7 @@ my @fontlist = map { $_->{file} } my %font; for my $fontid (@fontlist) { - my ($fontmeta, @fontrange) = do "data/font/$fontid.inc.pl"; + my ($fontmeta, @fontrange) = eval { Data("data/font/$fontid") }; $fontmeta or next; $font{$fontid} = { (map { (-$_ => $fontmeta->{$_}) } keys %{$fontmeta}), diff --git a/charset.plp b/charset.plp index eb23d7e..2eb601f 100644 --- a/charset.plp +++ b/charset.plp @@ -79,8 +79,7 @@ use Shiar_Sheet::FormatChar; my $glyphs = Shiar_Sheet::FormatChar->new; my @request; -my $charsets = do 'charset-encoding.inc.pl' - or Alert('Encoding metadata could not be read', $@ || $!); +my $charsets = Data('charset-encoding'); sub tabinput { # generate character table(s) diff --git a/cli.plp b/cli.plp index d8653e8..96cd427 100644 --- a/cli.plp +++ b/cli.plp @@ -9,8 +9,7 @@ Html({ data => ['data/cli.inc.pl'], }); -my $cmd = do 'data/cli.inc.pl' - or Abort("Error loading program data", 501, $@ // $!); +my $cmd = Data('data/cli'); :>

CLI options

diff --git a/codec.plp b/codec.plp index 1ce4611..3424695 100644 --- a/codec.plp +++ b/codec.plp @@ -20,7 +20,7 @@ Html({ raw => '', }); -my $info = do "codec-$page.inc.pl"; +my $info = Data("codec-$page"); $info and %{$info} > 1 or Abort("Requested codec type $page not available", '404 request not found', $@ // $!); diff --git a/common.inc.plp b/common.inc.plp index 71c5c13..39865bd 100644 --- a/common.inc.plp +++ b/common.inc.plp @@ -99,6 +99,20 @@ sub checkmodified { $header{'Last-Modified'} = time2str($lastmod); } +sub Data { + my ($filename) = @_; + my @data = eval { + do "$filename.inc.pl"; + }; + if ($! or $@ or !@data or !$data[0]) { + die ['Table data not found', $@ || $!]; + } + if (@data == 1 and ref $data[0] eq 'HASH' and not %{$data[0]}) { + die ['Table data missing']; + } + return wantarray ? @data : $data[0]; # list compatibility like do does +} + sub Html { my ($meta) = @_; diff --git a/countries.plp b/countries.plp index e404ae5..efd2f25 100644 --- a/countries.plp +++ b/countries.plp @@ -14,7 +14,7 @@ Html({

ISO-3166-1α2 Country codes

<: -my $cc = do 'data/countries.inc.pl'; +my $cc = Data('data/countries'); { printf ''; diff --git a/digits.plp b/digits.plp index 163ee10..a55b49a 100644 --- a/digits.plp +++ b/digits.plp @@ -37,11 +37,10 @@ unless (exists $get{v}) { $glyphs->{style} = 'univer'; } -my $scriptname = do 'writing-script.inc.pl'; +my $scriptname = eval { Data('writing-script') }; $_ = showlink($_, "/latin") for $scriptname->{latn} || (); -my $table = do "writing-digits.inc.pl"; -Abort("Table data not found", 501, $_) for $@ || $! || (); +my $table = Data("writing-digits"); sub printtable { say '
', $glyphs->tabletag; diff --git a/digraphs.plp b/digraphs.plp index 7106c7f..2f57b36 100644 --- a/digraphs.plp +++ b/digraphs.plp @@ -38,8 +38,7 @@ say '

Unofficial proposals', :> <: -my $di = do 'data/digraphs.inc.pl' - or Abort("Error loading digraphs data", 501, $@ // $!); +my $di = Data('data/digraphs'); if (exists $get{v}) { # show characters for inverted mnemonics (vim alternatives) @@ -59,8 +58,7 @@ my @columns = !exists $get{split} ? \@chars2 : ([@chars2[0, 1, 3, 4, 6]], [@chars2[2, 5, 7]]); if ($mode) { - my $xorg = do 'data/digraphs-xorg.inc.pl' - or Abort("Error loading Xorg data", 501, $@ // $!); + my $xorg = Data('data/digraphs-xorg'); $_ = [ord $_] for values %{$xorg}; $xorg->{$_}->[2] = # class = compatibility $di->{$_} ? $di->{$_}->[0] != $xorg->{$_}->[0] ? 'l1' : # conflict diff --git a/emoji.plp b/emoji.plp index 41e4c12..690f9e3 100644 --- a/emoji.plp +++ b/emoji.plp @@ -21,8 +21,8 @@ Html({ say '

'; for my $system (qw'gmail msn yahoo') { - my @info = do "emoji-$system.inc.pl"; - my $meta = shift @info or die $@; + my @info = Data("emoji-$system"); + my $meta = shift @info; ref $meta eq 'HASH' or Abort("Invalid $system definitions", 404); my $title = $meta->{name} // $system; $title = showlink($title, $_) for $meta->{source} || (); diff --git a/font.plp b/font.plp index 30a4234..cb6cd35 100644 --- a/font.plp +++ b/font.plp @@ -14,13 +14,13 @@ Html({ }); if ($font) { - my ($fontmeta, @cover) = do "data/font/$font.inc.pl"; - $fontmeta or Abort("Unknown font $font", '404 font not found'); + my ($fontmeta, @cover) = eval { Data("data/font/$font") } + or Abort("Unknown font $font", '404 font not found', ref $@ && $@->[1]); my $map = eval { $get{map} or return; - my $groupinfo = do 'data/unicode-cover.inc.pl' or die $@ || $!; + my $groupinfo = Data('data/unicode-cover'); my ($cat, $name) = split m{/}, $get{map}, 2 or die "invalid map\n"; if (!$name) { @@ -181,7 +181,7 @@ Character support of Unicode <: -my $cover = do 'data/unicode-cover.inc.pl' or die $@ || $!; +my $cover = Data('data/unicode-cover'); my @ossel = @{ $cover->{osdefault} }; my @fontlist = map { @{ $cover->{os}->{$_} } } @ossel; diff --git a/latin.plp b/latin.plp index a86f2ca..cac0e92 100644 --- a/latin.plp +++ b/latin.plp @@ -50,11 +50,8 @@ and font comparison.

<: use List::Util qw( pairs ); -my @table = do 'writing-latn.inc.pl'; -if ($! or $@ or !@table) { - die ["Table data not found", $@ || $!]; -} -else { +my @table = Data('writing-latn'); +{ say '
'; say '