dotfiles

My personal dotfiles
git clone git://pcardensab.com/dotfiles
Log | Files | Refs | Submodules | README

biblist-ref (1214B)


      1 #!/usr/bin/env perl
      2 use strict;
      3 use warnings;
      4 use Text::BibTeX;
      5 
      6 my ($src) = @ARGV;
      7 my $bib = $ENV{BIB} or die "BIB is not set\n";
      8 -f $bib or die "No BIB=$bib\n";
      9 
     10 my $bibfile = Text::BibTeX::File->new($bib);
     11 
     12 my %entry;
     13 while (my $e = Text::BibTeX::Entry->new($bibfile)) {
     14     next unless $e->parse_ok;
     15     next unless $e->metatype eq BTE_REGULAR;
     16 
     17     my $key = $e->key;
     18 
     19     $entry{$key} = {
     20         author    => $e->get("author")    // "",
     21         title     => $e->get("title")     // "",
     22         alias     => $e->get("alias")     // "",
     23         year      => $e->get("year")      // "",
     24         localrefs => $e->get("localrefs") // "",
     25     };
     26 }
     27 
     28 die "key not found: $src\n" unless exists $entry{$src};
     29 
     30 my %localrefs = $entry{$src}{localrefs} =~ /\s*([^=]+)=(\S+)\s*/g;
     31 my @sorted = (!grep { $_ !~ /^\d+$/ } keys %localrefs)
     32     ? sort { $a <=> $b } keys %localrefs
     33     : sort { $a cmp $b } keys %localrefs;
     34 
     35 for my $n (@sorted) {
     36     my $dst = $localrefs{$n};
     37 
     38     my $author = $entry{$dst}{author} // "?";
     39     my $year   = $entry{$dst}{year}   // "?";
     40     my $title  = $entry{$dst}{title}  // "?";
     41     my $alias  = $entry{$dst}{alias}  // "?";
     42 
     43     print "$dst | $n | $alias | $title | $author | $year\n";
     44 }