diff options
Diffstat (limited to 'pandoc-cs1')
-rwxr-xr-x | pandoc-cs1 | 24 |
1 files changed, 17 insertions, 7 deletions
@@ -9,11 +9,15 @@ no if $] >= 5.018, warnings => "experimental::smartmatch"; use Pandoc::Filter 0.05; use Pandoc::Elements; +use Text::BibTeX::Entry; use Path::Tiny; use List::Util qw(pairmap); +use DateTime::Format::Flexible; + my $bibfilename = $ENV{'PANDOC_CITEPROC_FILE'} || 'bibliography.bib'; my $bibfile = path($bibfilename); +my $bibdata = new Text::BibTeX::Entry; my (@a, $i); @@ -27,10 +31,21 @@ pandoc_filter sub { my @data = pairmap { $b =~ s/"/\\"/g; "$a=\"$b\"" } map { /^\s*(\w+)\s*=\s*"?(.*?)"?\s*$/ } split( /\|/, $2 ); - push @a, join ",\n", + $bibdata->parse_s (join ",\n", '@'.$1.'{'.$id, @data, - '}'; + '}'); + if ( $bibdata->type =~ /web/i ) { + $bibdata->set_type('online'); + if ( my $urldate = $bibdata->get('accessdate') ) { + my $dt = DateTime::Format::Flexible->parse_datetime($urldate); + $bibdata->set( 'urldate', $dt->format_cldr('yyyy-MM-dd') ); + $bibdata->delete('accessdate'); + }; + }; + $bibfile->spew( '' ) + if ( $i <= 1 ); + $bibfile->append_utf8( $bibdata->print_s ); return Cite( [{ 'citationId' => $id, @@ -61,8 +76,3 @@ pandoc_filter sub { } } }; - -END { - $bibfile->spew_utf8( join "\n\n", @a ) - if (@a); -} |