108 lines
2.4 KiB
Perl
108 lines
2.4 KiB
Perl
|
#! /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);
|
||
|
};
|