From 94f14c5bb6d85ae56b8442dd9fae6b724547c9b9 Mon Sep 17 00:00:00 2001 From: June McEnroe Date: Tue, 15 Dec 2020 23:52:37 -0500 Subject: Add bibsort My first perl script! hi doesn't have syntax highlighting for perl, and I don't think I could sanely implement it, but oh well. --- bin/bibsort.pl | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 bin/bibsort.pl (limited to 'bin/bibsort.pl') diff --git a/bin/bibsort.pl b/bin/bibsort.pl new file mode 100644 index 00000000..5f0ad7ba --- /dev/null +++ b/bin/bibsort.pl @@ -0,0 +1,66 @@ +#!/usr/bin/env perl +use strict; +use warnings; + +while (<>) { + print; + last if /^[.]Sh STANDARDS$/; +} + +my ($ref, @refs); +while (<>) { + next if /^[.](Bl|It|$)/; + last if /^[.]El$/; + if (/^[.]Rs$/) { + $ref = {}; + } elsif (/^[.]%(.) (.*)/) { + $ref->{$1} = [] unless $ref->{$1}; + push @{$ref->{$1}}, $2; + } elsif (/^[.]Re$/) { + push @refs, $ref; + } else { + print; + } +} + +sub byLast { + my ($af, $al) = split /\s/, $a, 2; + my ($bf, $bl) = split /\s/, $b, 2; + $al cmp $bl || $af cmp $bf; +} + +foreach $ref (@refs) { + @{$ref->{A}} = sort byLast @{$ref->{A}}; + @{$ref->{Q}} = sort @{$ref->{Q}} if $ref->{Q}; + next unless $ref->{N}; + if ($ref->{N}[0] =~ /RFC/) { + $ref->{R} = $ref->{N}; + delete $ref->{N}; + } +} + +sub byAuthor { + local ($a, $b) = ($a->{A}[0], $b->{A}[0]); + byLast(); +} + +{ + local ($,, $\) = (' ', "\n"); + print '.Bl', '-item'; + foreach $ref (sort byAuthor @refs) { + print '.It'; + print '.Rs'; + foreach my $key (qw(A T B I J R N V U P Q C D O)) { + next unless $ref->{$key}; + foreach (@{$ref->{$key}}) { + print ".%${key}", $_; + } + } + print '.Re'; + } + print '.El'; +} + +while (<>) { + print; +} -- cgit 1.4.1