dotfiles

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

biblist-dot (1008B)


      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 print "digraph G {\n";
     13 print "rankdir = RL\n";
     14 
     15 my %entry;
     16 while (my $e = Text::BibTeX::Entry->new($bibfile)) {
     17     next unless $e->parse_ok;
     18     next unless $e->metatype eq BTE_REGULAR;
     19 
     20     my $key = $e->key;
     21 
     22     $entry{$key} = {
     23         author    => $e->get("author")    // "",
     24         title     => $e->get("title")     // "",
     25         year      => $e->get("year")      // "",
     26         localrefs => $e->get("localrefs") // "",
     27     };
     28 }
     29 
     30 die "key not found: $src\n" unless exists $entry{$src};
     31 
     32 my %seen;
     33 my @stack = ($src);
     34 
     35 while (@stack) {
     36     my $u = pop @stack;
     37     next if $seen{$u}++;
     38 
     39     my %localrefs = $entry{$u}{localrefs} =~ /\s*([^=]+)=(\S+)\s*/g;
     40     while (my ($k, $v) = each %localrefs) {
     41         print "  $u -> $v [label=\"$k\"]\n";
     42         push @stack, $v;
     43     }
     44 }
     45 print "}\n";