#!/usr/bin/env perl use strict; use warnings; use ExtUtils::testlib; use Text::Markdown::Discount 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::Discount->new(empty_element_suffix => '>'); } else { $m = Text::Markdown::Discount->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();