scripts/footnotes/footnotes.pl

108 lines
2.4 KiB
Perl
Raw Normal View History

#! /usr/bin/perl -W
#
# footnotes Version 0.1 by Thomas Hochstein
#
# This script will convert footnotes in WP-footnotes notation
# to MultiMarkDown, i.e. replace "((Text for footnote))" with
# "[^1]" and add "[^1]: Text for footnote" at the end of the
# text, incrementing the counter each time, or the other way
# round.
#
# Copyright (c) 2014 Thomas Hochstein <thh@inter.net>
#
# It can be redistributed and/or modified under the same terms under
# which Perl itself is published.
my $VERSION = "0.1";
use strict;
use Getopt::Long qw(GetOptions);
# read commandline option(s)
my ($OptTo,$OptFile);
GetOptions ('t|to=s' => \$OptTo,
'f|file=s' => \$OptFile,
'h|help' => \&ShowPOD,
'V|version' => \&ShowVersion) or exit 1;
# read whole article from STDIN or --file
undef $/;
my $article;
if ($OptFile) {
open(FILE, "< $OptFile") or die "Can't open $OptFile: $!";
$article = <FILE>;
close(FILE);
} else {
$article = <>;
}
$/ = "\n";
# conversion and output
my $output;
if (lc($OptTo) eq 'mmd') {
$output = &ConvertToMMD($article);
} elsif (lc($OptTo) eq 'wp') {
$output = &ConvertToWP($article);
} else {
print "Please set '--to' to 'mmd' or 'wp'!\n";
exit(1);
}
print $output;
exit(0);
################################################################################
sub ConvertToMMD {
my $article = shift;
my $footnotes;
my $counter = 1;
# match and remove all ((...)),
# replacing them with [^n], incrementing n each time
while ( $article =~ s/\(\((.+?)\)\)/"[^$counter]"/seo ) {
$footnotes .= "[^$counter]: " . $1 . "\n";
$counter++;
}
return "$article\n\n$footnotes\n";
}
sub ConvertToWP {
my $article = shift;
my @footnotes;
my $counter = 1;
# read footnotes in [^n] format
while ( $article =~ s/^\[\^$counter\]: (.+)$//m ) {
$footnotes[$counter] = $1;
$counter++;
}
# replace footnote plcaeholders with footnote content
$counter = 0;
foreach my $footnote (@footnotes) {
$article =~ s/\[\^$counter\]/"(($footnote))"/eg;
$counter++;
}
# remove trailing whitespace
$article =~ s/\n+$//g;
return "$article\n";
}
sub ShowVersion {
print "MMD-FootNotes v$VERSION\n";
print "Copyright (c) 2014 Thomas Hochstein <thh\@inter.net>\n";
print "This program is free software; you may redistribute it ".
"and/or modify it under the same terms as Perl itself.\n";
exit(100);
};
sub ShowPOD {
exec('perldoc', $0);
exit(100);
};