| script/Markdown.pl | |||
|---|---|---|---|
| Criterion | Covered | Total | % |
| statement | 18 | 24 | 75.0 |
| branch | 1 | 8 | 12.5 |
| condition | n/a | ||
| subroutine | 5 | 5 | 100.0 |
| pod | n/a | ||
| total | 24 | 37 | 64.8 |
| line | stmt | bran | cond | sub | pod | time | code |
|---|---|---|---|---|---|---|---|
| 1 | #!/usr/bin/env perl | ||||||
| 2 | 1 | 1 | 1077 | use strict; | |||
| 1 | 2 | ||||||
| 1 | 49 | ||||||
| 3 | 1 | 1 | 7 | use warnings; | |||
| 1 | 3 | ||||||
| 1 | 73 | ||||||
| 4 | 1 | 1 | 879 | use Text::Markdown qw(markdown); | |||
| 1 | 3 | ||||||
| 1 | 111 | ||||||
| 5 | |||||||
| 6 | =head1 NAME | ||||||
| 7 | |||||||
| 8 | Markdown.pl - Convert Markdown syntax to (X)HTML | ||||||
| 9 | |||||||
| 10 | =head1 DESCRIPTION | ||||||
| 11 | |||||||
| 12 | This program is distributed as part of Perl's Text::Markdown module, | ||||||
| 13 | illustrating sample usage. | ||||||
| 14 | |||||||
| 15 | Markdown can be invoked on any file containing Markdown-syntax, and | ||||||
| 16 | will produce the corresponding (X)HTML on STDOUT: | ||||||
| 17 | |||||||
| 18 | $ cat file.txt | ||||||
| 19 | This is a *test*. | ||||||
| 20 | |||||||
| 21 | Absolutely _nothing_ to see here. _Just a **test**_! | ||||||
| 22 | |||||||
| 23 | * test | ||||||
| 24 | * Yup, test. | ||||||
| 25 | $ Markdown.pl file.txt | ||||||
| 26 | This is a test. |
||||||
| 27 | |||||||
| 28 | Absolutely nothing to see here. Just a test! |
||||||
| 29 | |||||||
| 30 | |
||||||
| 31 | |
||||||
| 32 | |
||||||
| 33 | |||||||
| 34 | |||||||
| 35 | If no file is specified, it will expect its input from STDIN: | ||||||
| 36 | |||||||
| 37 | $ echo "A **simple** test" | markdown | ||||||
| 38 | A simple test |
||||||
| 39 | |||||||
| 40 | =head1 OPTIONS | ||||||
| 41 | |||||||
| 42 | =over | ||||||
| 43 | |||||||
| 44 | =item version | ||||||
| 45 | |||||||
| 46 | Shows the full information for this version | ||||||
| 47 | |||||||
| 48 | =item shortversion | ||||||
| 49 | |||||||
| 50 | Shows only the version number | ||||||
| 51 | |||||||
| 52 | =item html4tags | ||||||
| 53 | |||||||
| 54 | Produce HTML 4-style tags instead of XHTML - XHTML requires elements | ||||||
| 55 | that do not wrap a block (i.e. the C tag) to state they will not |
||||||
| 56 | be closed, by closing with C>. HTML 4-style will plainly output | ||||||
| 57 | the tag as it comes: | ||||||
| 58 | |||||||
| 59 | $ echo '---' | markdown | ||||||
| 60 | |
||||||
| 61 | $ echo '---' | markdown --html4tags | ||||||
| 62 | |
||||||
| 63 | |||||||
| 64 | =item help | ||||||
| 65 | |||||||
| 66 | Shows this documentation | ||||||
| 67 | |||||||
| 68 | =back | ||||||
| 69 | |||||||
| 70 | =head1 AUTHOR | ||||||
| 71 | |||||||
| 72 | Copyright 2004 John Gruber | ||||||
| 73 | |||||||
| 74 | Copyright 2008 Tomas Doran | ||||||
| 75 | |||||||
| 76 | The manpage was written by Gunnar Wolf |
||||||
| 77 | in Debian systems, but can be freely used elsewhere. | ||||||
| 78 | |||||||
| 79 | For full licensing information, please refer to | ||||||
| 80 | L |
||||||
| 81 | |||||||
| 82 | =head1 SEE ALSO | ||||||
| 83 | |||||||
| 84 | L |
||||||
| 85 | |||||||
| 86 | =cut | ||||||
| 87 | |||||||
| 88 | #### Check for command-line switches: ################# | ||||||
| 89 | my %cli_opts; | ||||||
| 90 | 1 | 1 | 1439 | use Getopt::Long; | |||
| 1 | 28984 | ||||||
| 1 | 8 | ||||||
| 91 | Getopt::Long::Configure('pass_through'); | ||||||
| 92 | GetOptions(\%cli_opts, | ||||||
| 93 | 'version', | ||||||
| 94 | 'shortversion', | ||||||
| 95 | 'html4tags', | ||||||
| 96 | 'help', | ||||||
| 97 | ); | ||||||
| 98 | if ($cli_opts{'version'}) { # Version info | ||||||
| 99 | print "\nThis is Markdown, version $Text::Markdown::VERSION.\n"; | ||||||
| 100 | print "Copyright 2004 John Gruber\n"; | ||||||
| 101 | print "Copyright 2008 Tomas Doran\n"; | ||||||
| 102 | print "Parts contributed by several other people."; | ||||||
| 103 | print "http://daringfireball.net/projects/markdown/\n\n"; | ||||||
| 104 | exit 0; | ||||||
| 105 | } | ||||||
| 106 | if ($cli_opts{'shortversion'}) { # Just the version number string. | ||||||
| 107 | print $Text::Markdown::VERSION; | ||||||
| 108 | exit 0; | ||||||
| 109 | } | ||||||
| 110 | if ($cli_opts{'help'}) { | ||||||
| 111 | for my $dir (split m/:/, $ENV{PATH}) { | ||||||
| 112 | my $cmd = "$dir/perldoc"; | ||||||
| 113 | exec($cmd, $0) if (-f $cmd and -x $cmd); | ||||||
| 114 | } | ||||||
| 115 | die "perldoc could not be found in your path - Cannot show help, sorry\n"; | ||||||
| 116 | } | ||||||
| 117 | my $m; | ||||||
| 118 | if ($cli_opts{'html4tags'}) { # Use HTML tag style instead of XHTML | ||||||
| 119 | $m = Text::Markdown->new(empty_element_suffix => '>'); | ||||||
| 120 | } | ||||||
| 121 | else { | ||||||
| 122 | $m = Text::Markdown->new; | ||||||
| 123 | } | ||||||
| 124 | |||||||
| 125 | sub main { | ||||||
| 126 | 1 | 1 | 964 | my (@fns) = @_; | |||
| 127 | |||||||
| 128 | 1 | 2 | my $f; | ||||
| 129 | 1 | 50 | 4 | if (scalar @fns) { | |||
| 130 | 0 | 0 | foreach my $fn (@fns) { | ||||
| 131 | 0 | 0 | 0 | die("Cannot find file $fn") unless (-r $fn); | |||
| 132 | |||||||
| 133 | 0 | 0 | my $fh; | ||||
| 134 | 0 | 0 | 0 | open($fh, '<', $fn) or die; | |||
| 135 | 0 | 0 | $f = join('', <$fh>); | ||||
| 136 | 0 | 0 | 0 | close($fh) or die; | |||
| 137 | } | ||||||
| 138 | } | ||||||
| 139 | else { # STDIN | ||||||
| 140 | 1 | 6 | local $/; # Slurp the whole file | ||||
| 141 | 1 | 206 | $f = <>; | ||||
| 142 | } | ||||||
| 143 | |||||||
| 144 | 1 | 7 | return $m->markdown($f); | ||||
| 145 | } | ||||||
| 146 | |||||||
| 147 | print main(@ARGV) unless caller(); |