summaryrefslogtreecommitdiff
path: root/pandoc-filter-iri
diff options
context:
space:
mode:
Diffstat (limited to 'pandoc-filter-iri')
-rwxr-xr-xpandoc-filter-iri41
1 files changed, 41 insertions, 0 deletions
diff --git a/pandoc-filter-iri b/pandoc-filter-iri
new file mode 100755
index 0000000..94be2e4
--- /dev/null
+++ b/pandoc-filter-iri
@@ -0,0 +1,41 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+
+use Pandoc::Filter;
+use Pandoc::Elements;
+
+use URI;
+use URI::Find;
+
+pandoc_filter(
+ \&link_normalize,
+);
+
+sub link_normalize {
+ my $self = shift;
+ return [ Link(
+ $self->content,
+ [ pp_uri($self->target->[0]) => '' ]
+ )]
+ if ( $self->name eq 'Link' );
+ return [ Str pp_string($self->content) ]
+ if ( $self->name eq 'Str' );
+ return;
+}
+
+sub pp_uri {
+ return URI->new(shift)->canonical->as_string;
+}
+
+sub pp_iri {
+ return URI->new(shift)->canonical->as_iri;
+}
+
+sub pp_string {
+ my $string = shift;
+ my $finder = URI::Find->new( \&pp_iri );
+ $finder->find(\$string);
+ return $string;
+}