dieren: external word include with prefixed beknopt picks
authorMischa POSLAWSKY <perl@shiar.org>
Mon, 30 May 2022 15:40:02 +0000 (17:40 +0200)
committerMischa POSLAWSKY <perl@shiar.org>
Fri, 3 Jun 2022 22:53:43 +0000 (00:53 +0200)
dieren.inc.pl [new file with mode: 0644]
dieren.plp

diff --git a/dieren.inc.pl b/dieren.inc.pl
new file mode 100644 (file)
index 0000000..475fa12
--- /dev/null
@@ -0,0 +1,29 @@
+#!/bin/env perl
+use 5.014;
+use warnings;
+use utf8;
+
+[map {[split ' ']} grep {$_} split /\n/, <<'.'];
+ :      origineel:      zee-:   meer_water:     land/aardig:    anders:        #:
+ hond: +hond   +zeehond        ?scheepshond    +prairiehond     vleerhond      #rodehond
+ kat:  +kat    +zeekat +meerkat        ?cat_325         vliegende_kat  #tijgerkat
+#haas:  haas    zeehaas         waterhaas      ?koolhaas       ?ossenhaas      #buidelhaas
+ muis: +muis   +zeemuis         waterspitsmuis  aardmuis       +vleermuis      #computermuis
+ rat:   rat     zeerat  waterrat        woestijnrat     buidelrat      #beverrat
+ egel: +egel   +zee-egel       ?wateregel      ?aardegel?=cactus       +mierenegel     #kegel
+ varken:       +varken +zeevarken=bruinvis      waterzwijn=capibara     aardvarken     +stekelvarken   #feestvarken
+ koe:  +koe    +zeekoe +meerkoetje     ?aardekoe?       koedoe #haiku
+ paard:        +paard  +zeepaardje     +nijlpaard      ?(turn)paard     luipaard       #tijgerpaard
+#hoorn:         eenhoorn        zeehoorn       ?zee-eenhoorn=narwal     bergahorn=esdoorn       neushoorn      #eekhoorn
+#bra:  ?bra(ssière)    zebra   -       -       cobra  #sabra
+#olifant:      +olifant        +zeeolifant     +olifantsvis    ?kamerolifant    -      #olifantsoor
+ beer: +beer   +zeebeer         waterbeertje    ijsbeer        +wasbeer        #neusbeer
+ leeuw:        +leeuw  +zeeleeuw       ?waterleeuw?    ?aardleeuw?=kameleon    +mierenleeuw    #leeuwerik
+ wolf: +wolf   +zeewolf        ?waterwolf?=snoek        aardwolf       +korenwolf      #strandwolf=bruine_hyena
+ haan: +haan   +zeehaan         waterhaan       rotshaan       +sprinkhaan     #wilde_haan?=wildrooster
+#pad:   pad    ?zebrapad       ?waterpad        landpad         schildpad      #paddenstoel
+ draak:         draak   zeedraak        waterdraak=agame       ?aarddraak=戊辰        komododraak=varaan     #drakenkop
+#vlo:   vlo     zeevlo  watervlo        aardvlo         -      #vlok
+#mot:  +mot    +marmot  watermot       +bergamot       ?behemoth       #
+#bij:   bij     -       waterbij        aardbei         moerbei        #hommelbij
+.
index 4187dc852946646a131aeba37c7cf48ef31f6659..deb2ac363933c5e4b780040d3c2997428a79e129 100644 (file)
@@ -9,18 +9,22 @@ my %subpages = (
                intro => $intro,
                altlink => 'Zie ook <a href="/dieren/uitgebreid">verdergezochte verbanden</a>' .
                           ' of het <a href="/dieren/beknopt">beknopte overzicht</a>.',
+               prefix => qr/^(?!#)\+?/, # no # optional +
+               colfilter => 0,
        },
        uitgebreid => {
                title => 'uitgebreid dieren',
                intro => "$intro.. en dergelijke.",
                altlink => 'Zie het <a href="/dieren">populaire overzicht</a> voor minder.',
-               prefix => '#',
+               prefix => qr/^[#+]*/, # optional # or +
                secrets => 1,
        },
        beknopt => {
                title => 'beknopt dieren',
                intro => "een aantal $intro",
                altlink => 'Zie het <a href="/dieren">populaire overzicht</a> voor meer.',
+               prefix => qr/^\+/, # only +
+               colfilter => 1,
        },
 );
 
@@ -78,108 +82,66 @@ say $pageinfo->{altlink};
 </p>
 
 <:
-my @table = map {[split ' ']} grep {$_} split /\n(?!\s{3})/, q(
-        >:        origineel: zee-:        meer_water:    land/aardig: anders:      #:
-        >hond:    hond       zeehond      scheepshond?   prairiehond  vleerhond    #rodehond
-        >kat:     kat        zeekat       meerkat        cat_325?    vliegende_kat #tijgerkat
-       #>haas:    haas       zeehaas      waterhaas      koolhaas?    ossenhaas?   #buidelhaas
-        >muis:    muis       zeemuis      waterspitsmuis aardmuis     vleermuis    #computermuis
-        >rat:     rat        zeerat       waterrat       woestijnrat  buidelrat    #beverrat
-        >egel:    egel       zee-egel     wateregel? aardegel??=cactus mierenegel  #kegel?
-        >varken:  varken     zeevarken=bruinvis
-                               waterzwijn=capibara       aardvarken   stekelvarken #feestvarken?
-        >koe:     koe        zeekoe       meerkoetje     aardekoe??   koedoe       #haiku?
-        >paard:   paard      zeepaardje   nijlpaard      (turn)paard? luipaard     #tijgerpaard
-       #>hoorn:   eenhoorn   zeehoorn     zee-eenhoorn?=narwal
-                                                    bergahorn=esdoorn neushoorn    #eekhoorn
-       #>bra:   bra(ssière)? zebra        -              -            cobra        #sabra
-       #>olifant: olifant    zeeolifant   olifantsvis    kamerolifant? -           #olifantsoor
-        >beer:    beer       zeebeer      waterbeertje   ijsbeer      wasbeer      #neusbeer
-        >leeuw:   leeuw      zeeleeuw     waterleeuw??   aardleeuw??=kameleon
-                                                                      mierenleeuw  #leeuwerik
-        >wolf:    wolf       zeewolf      waterwolf??=snoek  aardwolf korenwolf    #strandwolf=bruine_hyena
-        >haan:    haan       zeehaan      waterhaan      rotshaan     sprinkhaan   #wilde_haan??=wildrooster
-       #>pad:     pad        zebrapad?    waterpad?      landpad      schildpad    #paddenstoel
-        >draak:   draak      zeedraak     waterdraak=agame aarddraak?=戊辰
-                                                          komododraak=varaan       #drakenkop
-       #>vlo:     vlo        zeevlo       watervlo       aardvlo      -            vlok?
-       #>mot:     mot        marmot       watermot       bergamot     behemoth?    #
-       #>bij:     bij        -            waterbij       aardbei      moerbei      hommelbij
-);
+my $table = readdata('dieren');
 if ($Request eq 'standaard') {
-       $table[ 9][4] = 'grasmodderpaard?=草泥马'; # replace turnpaard
-       $table[18][1] = 'draak_'; # irl animal
+       $table->[ 9][4] = '?grasmodderpaard=草泥马'; # replace turnpaard
+       $table->[18][1] = 'draak_'; # irl animal
 }
 
-@table = map {[split ' ']} grep {$_} split /\n/, q(
-       >hond    zeehond    prairiehond
-       >kat     zeekat     meerkat
-       >muis    zeemuis    vleermuis
-       >egel    zee-egel   mierenegel
-       >varken  zeevarken  stekelvarken
-       >koe     zeekoe     meerkoetje
-       >paard   zeepaardje nijlpaard
-       >olifant zeeolifant olifantsvis
-       >beer    zeebeer    wasbeer
-       >leeuw   zeeleeuw   mierenleeuw
-       >wolf    zeewolf    korenwolf
-       >haan    zeehaan    sprinkhaan
-       >mot     marmot     bergamot
-) if $Request eq 'beknopt';
-
 if (exists $get{r}) {
        use List::MoreUtils qw( part );
-       my @trans = (part { state $col; /^#?>/ ? ($col = 0) : ++$col } @table);
-       @table = ();
+       my @trans = (part { state $col; /^#?>/ ? ($col = 0) : ++$col } @{$table});
+       $table = [];
        for (@trans) {
                unshift @$_, '?:' if $_->[0] !~ /:$/;
                $_->[0] =~ s/^#?\K>?/>>/;
                for (@$_) {
-                       push @table, s/^#?\K>/$1/r;
+                       push @$table, s/^#?\K>/$1/r;
                }
        }
 }
 
-say '<table class="gallery">';
-for my $row (@table) {
-for my $name (@{$row}) {
-       if ($name =~ s/^#// and !$pageinfo->{prefix}) {
-               last;
-       }
-       if ($name =~ s/^>//) {
-               # leading dash starts a new row
-               say '</tr>' if $name;
-               print "<tr>";
+for my $prefix ($pageinfo->{prefix}) {
+       for my $col ($pageinfo->{colfilter} // ()) {
+               @{$table} = grep { $_->[$col] =~ $prefix } @{$table};
        }
-       $name =~ s/^-$//;
-       my ($img) = $name =~ /([\w-]+)/;
-       $name =~ y/_/ /;
-       if ($name =~ s/:$//) {
-               # trailing colon indicates header text
-               print "<th>$name</th>";
-               next;
-       }
-       print '<td>';
-       my $alt = $1 if $name =~ s/=(.*)//;
-       my $hidden = $name =~ s/\?$//;
-       $name = "<q>$name</q>" if $name =~ s/\?$//;
-       $name .= " <small>($alt)</small>" if $alt;
+       $_ = [ grep { s/$prefix// } @{$_} ] for @{$table};
+}
 
-       printf '<figure%s>', $hidden && !$pageinfo->{secrets} && ' hidden';
-       if ($img and -e ($img = "data/dieren/$img.jpg")) {
-               printf '<img src="/%s"', $img;
-               printf ' alt="%s"', $alt || $name;
-               print ' />';
-               print "<figcaption>$name</figcaption>";
-       }
-       elsif ($hidden) {
-               printf '<figcaption>%s</figcaption>', "$name?";
-       }
-       else {
-               print $name;
+say '<table class="gallery">';
+for my $row (@{$table}) {
+       print '<tr>';
+       for my $name (@{$row}) {
+               my $hidden = $name =~ s/^\?//;
+               $name =~ s/^-$//;
+               my ($img) = $name =~ /([\w-]+)/;
+               $name =~ y/_/ /;
+               if ($name =~ s/:$//) {
+                       # trailing colon indicates header text
+                       print "<th>$name</th>";
+                       next;
+               }
+               print '<td>';
+               my $alt = $1 if $name =~ s/=(.*)//;
+               $name = "<q>$name</q>" if $name =~ s/\?$//;
+               $name .= " <small>($alt)</small>" if $alt;
+
+               printf '<figure%s>', $hidden && !$pageinfo->{secrets} && ' hidden';
+               if ($img and -e ($img = "data/dieren/$img.jpg")) {
+                       printf '<img src="/%s"', $img;
+                       printf ' alt="%s"', $alt || $name;
+                       print ' />';
+                       print "<figcaption>$name</figcaption>";
+               }
+               elsif ($hidden) {
+                       printf '<figcaption>%s</figcaption>', "$name?";
+               }
+               else {
+                       print $name;
+               }
+               print '</figure>';
+               print '</td>';
        }
-       print '</figure>';
-       print '</td>';
-}
+       say '</tr>';
 }
-say '</tr></table>';
+say '</table>';