Add footnotes.pl to repo.
footnotes.pl will convert footnotes in MultiMarkDown format to footnotes for the Wordpress plugin "footnotes" and back. Signed-off-by: Thomas Hochstein <thh@inter.net>
This commit is contained in:
parent
8c3a84c54e
commit
f6e79dd039
107
footnotes/footnotes.pl
Normal file
107
footnotes/footnotes.pl
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
#! /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);
|
||||||
|
};
|
Loading…
Reference in a new issue