#!/usr/bin/env perl
use strict;
use warnings;
use Text::Markdown qw(markdown);
=head1 NAME
Markdown.pl - Convert Markdown syntax to (X)HTML
=head1 DESCRIPTION
This program is distributed as part of Perl's Text::Markdown module,
illustrating sample usage.
Markdown can be invoked on any file containing Markdown-syntax, and
will produce the corresponding (X)HTML on STDOUT:
$ cat file.txt
This is a *test*.
Absolutely _nothing_ to see here. _Just a **test**_!
* test
* Yup, test.
$ Markdown.pl file.txt
This is a test.
Absolutely nothing to see here. Just a test!
If no file is specified, it will expect its input from STDIN:
$ echo "A **simple** test" | markdown
A simple test
=head1 OPTIONS
=over
=item version
Shows the full information for this version
=item shortversion
Shows only the version number
=item html4tags
Produce HTML 4-style tags instead of XHTML - XHTML requires elements
that do not wrap a block (i.e. the C
tag) to state they will not
be closed, by closing with C>. HTML 4-style will plainly output
the tag as it comes:
$ echo '---' | markdown
$ echo '---' | markdown --html4tags
=item help
Shows this documentation
=back
=head1 AUTHOR
Copyright 2004 John Gruber
Copyright 2008 Tomas Doran
The manpage was written by Gunnar Wolf for its use
in Debian systems, but can be freely used elsewhere.
For full licensing information, please refer to
L's full documentation.
=head1 SEE ALSO
L, L
=cut
#### Check for command-line switches: #################
my %cli_opts;
use Getopt::Long;
Getopt::Long::Configure('pass_through');
GetOptions(\%cli_opts,
'version',
'shortversion',
'html4tags',
'help',
);
if ($cli_opts{'version'}) { # Version info
print "\nThis is Markdown, version $Text::Markdown::VERSION.\n";
print "Copyright 2004 John Gruber\n";
print "Copyright 2008 Tomas Doran\n";
print "Parts contributed by several other people.";
print "http://daringfireball.net/projects/markdown/\n\n";
exit 0;
}
if ($cli_opts{'shortversion'}) { # Just the version number string.
print $Text::Markdown::VERSION;
exit 0;
}
if ($cli_opts{'help'}) {
for my $dir (split m/:/, $ENV{PATH}) {
my $cmd = "$dir/perldoc";
exec($cmd, $0) if (-f $cmd and -x $cmd);
}
die "perldoc could not be found in your path - Cannot show help, sorry\n";
}
my $m;
if ($cli_opts{'html4tags'}) { # Use HTML tag style instead of XHTML
$m = Text::Markdown->new(empty_element_suffix => '>');
}
else {
$m = Text::Markdown->new;
}
sub main {
my (@fns) = @_;
my $f;
if (scalar @fns) {
foreach my $fn (@fns) {
die("Cannot find file $fn") unless (-r $fn);
my $fh;
open($fh, '<', $fn) or die;
$f = join('', <$fh>);
close($fh) or die;
}
}
else { # STDIN
local $/; # Slurp the whole file
$f = <>;
}
return $m->markdown($f);
}
print main(@ARGV) unless caller();